]> code.delx.au - offlineimap/commitdiff
Implement connect
authorJohn Goerzen <jgoerzen@complete.org>
Thu, 5 Jul 2007 04:04:14 +0000 (05:04 +0100)
committerJohn Goerzen <jgoerzen@complete.org>
Thu, 5 Jul 2007 04:04:14 +0000 (05:04 +0100)
offlineimap/imapserver.py
offlineimap/repository/Base.py
offlineimap/repository/IMAP.py

index fb6e7b95b749b2a105407464340923cc15734975..b96a4043cf6b9c523686accb3bd714d083e9de2b 100644 (file)
@@ -67,6 +67,7 @@ class IMAPServer:
         self.username = username
         self.password = password
         self.passworderror = None
+        self.goodpassword = None
         self.hostname = hostname
         self.tunnel = tunnel
         self.port = port
@@ -87,6 +88,9 @@ class IMAPServer:
         self.reference = reference
 
     def getpassword(self):
+        if self.goodpassword != None:
+            return self.goodpassword
+
         if self.password != None and self.passworderror == None:
             return self.password
 
@@ -193,6 +197,7 @@ class IMAPServer:
                         self.plainauth(imapobj)
                     # Would bail by here if there was a failure.
                     success = 1
+                    self.goodpassword = self.password
                 except imapobj.error, val:
                     self.passworderror = str(val)
                     self.password = None
index 94bce09d7fb21d7eaaf4c2794c5b8892c284456e..5c976c79bee799e42164eab5d97576fea16a5018 100644 (file)
@@ -1,5 +1,5 @@
 # Base repository support
-# Copyright (C) 2002, 2003, 2006 John Goerzen
+# Copyright (C) 2002-2007 John Goerzen
 # <jgoerzen@complete.org>
 #
 #    This program is free software; you can redistribute it and/or modify
@@ -63,6 +63,15 @@ class BaseRepository(CustomConfig.ConfigHelperMixin):
 
        return self.restore_folder_atimes()
 
+    def connect(self):
+        """Establish a connection to the remote, if necessary.  This exists
+        so that IMAP connections can all be established up front, gathering
+        passwords as needed.  It was added in order to support the
+        error recovery -- we need to connect first outside of the error
+        trap in order to validate the password, and that's the point of
+        this function."""
+        pass
+
     def holdordropconnections(self):
         pass
 
index 944ca8f69dd64b9f8a7f8a9002ab12b570e81868..6bde06e9a70e24e3f3789f48b05956b132cc3c8c 100644 (file)
@@ -156,6 +156,10 @@ class IMAPRepository(BaseRepository):
     def getfoldertype(self):
         return folder.IMAP.IMAPFolder
 
+    def connect(self):
+        imapobj = self.imapserver.acquireconnection()
+        self.imapserver.releaseconnection(imapobj)
+
     def getfolders(self):
         if self.folders != None:
             return self.folders