spambayes/spambayes ImapUI.py, 1.44, 1.45 Options.py, 1.121, 1.122

"Tony Meyer" <[email protected]>
Newsgroups gmane.mail.spam.spambayes.cvs
Message-ID <[email protected]>
Update of /cvsroot/spambayes/spambayes/spambayes
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10058/spambayes

Modified Files:
	ImapUI.py Options.py 
Log Message:
Handle multiple imap servers.  Adds [ 1122067 ] Feature Request: Config sb_imapfilter for multiple accounts

Index: ImapUI.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/ImapUI.py,v
retrieving revision 1.44
retrieving revision 1.45
diff -C2 -d -r1.44 -r1.45
*** ImapUI.py	10 Jan 2005 02:36:20 -0000	1.44
--- ImapUI.py	14 Feb 2005 06:10:45 -0000	1.45
***************
*** 111,115 ****
  class IMAPUserInterface(UserInterface.UserInterface):
      """Serves the HTML user interface for the proxies."""
!     def __init__(self, cls, imap, pwd, imap_session_class,
                   lang_manager=None, stats=None):
          global parm_map
--- 111,115 ----
  class IMAPUserInterface(UserInterface.UserInterface):
      """Serves the HTML user interface for the proxies."""
!     def __init__(self, cls, imaps, pwds, imap_session_class,
                   lang_manager=None, stats=None):
          global parm_map
***************
*** 126,132 ****
                                               lang_manager, stats)
          self.classifier = cls
!         self.imap = imap
!         self.imap_pwd = pwd
!         self.imap_logged_in = False
          self.app_for_version = "SpamBayes IMAP Filter"
          self.imap_session_class = imap_session_class
--- 126,131 ----
                                               lang_manager, stats)
          self.classifier = cls
!         self.imaps = imaps
!         self.imap_pwds = pwds
          self.app_for_version = "SpamBayes IMAP Filter"
          self.imap_session_class = imap_session_class
***************
*** 170,175 ****
  
      def onSave(self, how):
!         if self.imap is not None:
!             self.imap.logout()
          UserInterface.UserInterface.onSave(self, how)
  
--- 169,175 ----
  
      def onSave(self, how):
!         for imap in self.imaps:
!             if imap:
!                 imap.logout()
          UserInterface.UserInterface.onSave(self, how)
  
***************
*** 177,203 ****
          self._writePreamble(_("Select Filter Folders"))
          self._login_to_imap()
!         if self.imap_logged_in:
!             available_folders = self.imap.folder_list()
!             content = self.html.configForm.clone()
!             content.configFormContent = ""
!             content.introduction = _("This page allows you to change " \
!                                      "which folders are filtered, and " \
!                                      "where filtered mail ends up.")
!             content.config_submit.value = _("Save Filter Folders")
!             content.optionsPathname = optionsPathname
  
!             for opt in ("unsure_folder", "spam_folder",
!                         "filter_folders"):
!                 folderBox = self._buildFolderBox("imap", opt, available_folders)
!                 content.configFormContent += folderBox
  
!             self.write(content)
!             self._writePostamble()
  
      def _login_to_imap(self):
!         if self.imap_logged_in:
!             return
!         if self.imap is None and len(options["imap", "server"]) > 0:
!             server = options["imap", "server"][0]
              if server.find(':') > -1:
                  server, port = server.split(':', 1)
--- 177,220 ----
          self._writePreamble(_("Select Filter Folders"))
          self._login_to_imap()
!         available_folders = []
!         for imap in self.imaps:
!             if imap and imap.logged_in:
!                 available_folders.extend(imap.folder_list())
  
!         content = self.html.configForm.clone()
!         content.configFormContent = ""
!         content.introduction = _("This page allows you to change " \
!                                  "which folders are filtered, and " \
!                                  "where filtered mail ends up.")
!         content.config_submit.value = _("Save Filter Folders")
!         content.optionsPathname = optionsPathname
  
!         for opt in ("unsure_folder", "spam_folder",
!                     "filter_folders"):
!             folderBox = self._buildFolderBox("imap", opt, available_folders)
!             content.configFormContent += folderBox
! 
!         self.write(content)
!         self._writePostamble()
  
      def _login_to_imap(self):
!         new_imaps = []
!         for i in xrange(len(self.imaps)):
!             imap = self.imaps[i]
!             new_imaps.append(self._login_to_imap_server(imap, i))
!         self.imaps = new_imaps
!             
!     def _login_to_imap_server(self, imap, i):
!         if imap and imap.logged_in:
!             return imap
!         if imap is None or not imap.connected:
!             try:
!                 server = options["imap", "server"][i]
!             except KeyError:
!                 content = self._buildBox(_("Error"), None,
!                                          _("Please check server/port details."))
!                 self.write(content)
!                 self._writePostamble()
!                 return None
              if server.find(':') > -1:
                  server, port = server.split(':', 1)
***************
*** 208,267 ****
                  else:
                      port = 143
!             self.imap = self.imap_session_class(server, port)
!             if not self.imap.connected:
!               # Failed to connect.
!               content = self._buildBox(_("Error"), None,
!                                        _("Please check server/port details."))
!               self.write(content)
!               self._writePostamble()
!               return
!         if self.imap is None:
!             content = self._buildBox(_("Error"), None,
!                                      _("Must specify server details first."))
!             self.write(content)
!             self._writePostamble()
!             return
!         username = options["imap", "username"]
!         if isinstance(username, types.TupleType):
!             username = username[0]
!         if not username:
              content = self._buildBox(_("Error"), None,
                                       _("Must specify username first."))
              self.write(content)
              self._writePostamble()
!             return
!         if not self.imap_pwd:
              self.imap_pwd = options["imap", "password"]
!             if isinstance(self.imap_pwd, types.TupleType):
!                 self.imap_pwd = self.imap_pwd[0]
!         if not self.imap_pwd:
              content = self._buildBox(_("Error"), None,
                                       _("Must specify password first."))
              self.write(content)
              self._writePostamble()
!             return
!         self.imap.login(username, self.imap_pwd)
!         self.imap_logged_in = True
  
      def onTrainingfolders(self):
          self._writePreamble(_("Select Training Folders"))
          self._login_to_imap()
!         if self.imap_logged_in:
!             available_folders = self.imap.folder_list()
!             content = self.html.configForm.clone()
!             content.configFormContent = ""
!             content.introduction = _("This page allows you to change " \
!                                      "which folders contain mail to " \
!                                      "train Spambayes.")
!             content.config_submit.value = _("Save Training Folders")
!             content.optionsPathname = optionsPathname
  
!             for opt in ("ham_train_folders",
!                         "spam_train_folders"):
!                 folderBox = self._buildFolderBox("imap", opt, available_folders)
!                 content.configFormContent += folderBox
  
!             self.write(content)
!             self._writePostamble()
  
      def onChangeopts(self, **parms):
--- 225,285 ----
                  else:
                      port = 143
!             imap = self.imap_session_class(server, port)
!             if not imap.connected:
!                 # Failed to connect.
!                 content = self._buildBox(_("Error"), None,
!                                          _("Please check server/port details."))
!                 self.write(content)
!                 self._writePostamble()
!                 return None
!         usernames = options["imap", "username"]
!         if not usernames:
              content = self._buildBox(_("Error"), None,
                                       _("Must specify username first."))
              self.write(content)
              self._writePostamble()
!             return None
!         if not self.imap_pwds:
              self.imap_pwd = options["imap", "password"]
!         if not self.imap_pwds:
              content = self._buildBox(_("Error"), None,
                                       _("Must specify password first."))
              self.write(content)
              self._writePostamble()
!             return None
!         print usernames[i], self.imap_pwds[i]
!         try:
!             imap.login(usernames[i], self.imap_pwds[i])
!         except KeyError:
!             content = self._buildBox(_("Error"), None,
!                                      _("Please check username/password details."))
!             self.write(content)
!             self._writePostamble()
!             return None
!         return imap
  
      def onTrainingfolders(self):
          self._writePreamble(_("Select Training Folders"))
          self._login_to_imap()
!         available_folders = []
!         for imap in self.imaps:
!             if imap and imap.logged_in:
!                 available_folders.extend(imap.folder_list())
  
!         content = self.html.configForm.clone()
!         content.configFormContent = ""
!         content.introduction = _("This page allows you to change " \
!                                  "which folders contain mail to " \
!                                  "train Spambayes.")
!         content.config_submit.value = _("Save Training Folders")
!         content.optionsPathname = optionsPathname
  
!         for opt in ("ham_train_folders",
!                     "spam_train_folders"):
!             folderBox = self._buildFolderBox("imap", opt, available_folders)
!             content.configFormContent += folderBox
! 
!         self.write(content)
!         self._writePostamble()
  
      def onChangeopts(self, **parms):

Index: Options.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/spambayes/Options.py,v
retrieving revision 1.121
retrieving revision 1.122
diff -C2 -d -r1.121 -r1.122
*** Options.py	4 Jan 2005 03:04:01 -0000	1.121
--- Options.py	14 Feb 2005 06:10:45 -0000	1.122
***************
*** 981,996 ****
    "imap" : (
      ("server", _("Server"), (),
!      _("""This is the name and port of the imap server that stores your mail,
!      and which the imap filter will connect to - for example:
       mail.example.com or imap.example.com:143.  The default IMAP port is
!      143, or 993 if using SSL; if you connect via one of those ports, you
!      can leave this blank. If you use more than one server, then things are
!      a bit more complicated for you at the moment, sorry.  You will need to
!      have multiple instances of the imap filter running, each with a
!      different server (and possibly username and password) value.  You can
!      do this if you have a different configuration file for each instance,
!      but you'll have to do it by hand for the moment.  Please let the
!      mailing list know if you are in this situation so that we can consider
!      coming up with a better solution."""),
       SERVER, DO_NOT_RESTORE),
  
--- 981,990 ----
    "imap" : (
      ("server", _("Server"), (),
!      _("""These are the names and ports of the imap servers that store your
!      mail, and which the imap filter will connect to - for example:
       mail.example.com or imap.example.com:143.  The default IMAP port is
!      143 (or 993 if using SSL); if you connect via one of those ports, you
!      can leave this blank. If you use more than one server, use a comma
!      delimited list of the server:port values."""),
       SERVER, DO_NOT_RESTORE),
  
***************
*** 998,1004 ****
       _("""This is the id that you use to log into your imap server.  If your
       address is [email protected], then your username is probably
!      funkyguy. If you are using multiple imap servers, or multiple accounts
!      on the same server, please see the comments regarding the server
!      value."""),
       IMAP_ASTRING, DO_NOT_RESTORE),
  
--- 992,996 ----
       _("""This is the id that you use to log into your imap server.  If your
       address is [email protected], then your username is probably
!      funkyguy."""),
       IMAP_ASTRING, DO_NOT_RESTORE),
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.