Implement connect

This commit is contained in:
John Goerzen 2007-07-05 05:04:14 +01:00
parent 8200864f25
commit 9bee28cb13
3 changed files with 19 additions and 1 deletions

View 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

View 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

View 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