From 9bee28cb1382c1680ac4b1552200f1c1ae4b6881 Mon Sep 17 00:00:00 2001 From: John Goerzen Date: Thu, 5 Jul 2007 05:04:14 +0100 Subject: [PATCH] Implement connect --- offlineimap/imapserver.py | 5 +++++ offlineimap/repository/Base.py | 11 ++++++++++- offlineimap/repository/IMAP.py | 4 ++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/offlineimap/imapserver.py b/offlineimap/imapserver.py index fb6e7b9..b96a404 100644 --- a/offlineimap/imapserver.py +++ b/offlineimap/imapserver.py @@ -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 diff --git a/offlineimap/repository/Base.py b/offlineimap/repository/Base.py index 94bce09..5c976c7 100644 --- a/offlineimap/repository/Base.py +++ b/offlineimap/repository/Base.py @@ -1,5 +1,5 @@ # Base repository support -# Copyright (C) 2002, 2003, 2006 John Goerzen +# Copyright (C) 2002-2007 John Goerzen # # # 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 diff --git a/offlineimap/repository/IMAP.py b/offlineimap/repository/IMAP.py index 944ca8f..6bde06e 100644 --- a/offlineimap/repository/IMAP.py +++ b/offlineimap/repository/IMAP.py @@ -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