account.SyncableAccount.syncrunner(): The update process uses two SyncableAccount instance (new and old) for each account found in both config files. To initialize repos, we use syncrunner in order to loop for imap connection and deal with exceptions. When in an update process, syncrunner will call self.get_folderlist(). Exceptions, error messages and loop handling are altered to deal with updating.
I think this method should be left to its original state and the whole repos initialization for the update process should be in a distinct method. folder.IMAP.IMAPFolder.__init__(): Add self.imap_name, which store original imap name returned in utf7 encoding. With the implentation of utf8 decoding option (utf8foldernames), the imap name gets replaced if the option is enabled. The update process needs to know the original imap return (in utf7 encode) in order to match a config file where the utf8foldernames is enabled with a config file where it's disabled. (Note that the new methods self.getimapname returns self.imap_name) repository.Base.Baserepository.__init__(): Remove initialization of self.uiddir and self.mapdir. Call self.getmedata() where initialization is handled and the new property self.metadatadir is added. repository.LocalStatus.LocalStatusRepository.__init__(): Same logic as for Baserepository.__init__(), but specific for localrepos. Remove initialization of self.backend. Signed-off-by: Hubert Pineault <hpinea...@riseup.net> --- offlineimap/folder/IMAP.py | 6 ++++-- offlineimap/repository/Base.py | 13 +++---------- offlineimap/repository/LocalStatus.py | 25 +------------------------ 3 files changed, 8 insertions(+), 36 deletions(-) diff --git a/offlineimap/folder/IMAP.py b/offlineimap/folder/IMAP.py index 3a716e4..ee7ab39 100644 --- a/offlineimap/folder/IMAP.py +++ b/offlineimap/folder/IMAP.py @@ -49,9 +49,11 @@ class IMAPFolder(BaseFolder): # querying the IMAP server, while False is used when creating # a folder object from a locally available utf_8 name) # In any case the given name is first dequoted. - name = imaputil.dequote(name) + self.imap_name = imaputil.dequote(name) # For update-conf mode if decode and repository.account.utf_8_support: - name = imaputil.IMAP_utf8(name) + name = imaputil.IMAP_utf8(self.imap_name) + else: + name = self.imap_name self.sep = imapserver.delim super(IMAPFolder, self).__init__(name, repository) if repository.getdecodefoldernames(): diff --git a/offlineimap/repository/Base.py b/offlineimap/repository/Base.py index 60f926c..0a58612 100644 --- a/offlineimap/repository/Base.py +++ b/offlineimap/repository/Base.py @@ -34,16 +34,9 @@ class BaseRepository(CustomConfig.ConfigHelperMixin): self.localeval = account.getlocaleval() self._accountname = self.account.getname() self._readonly = self.getconfboolean('readonly', False) - self.uiddir = os.path.join(self.config.getmetadatadir(), 'Repository-' + self.name) - if not os.path.exists(self.uiddir): - os.mkdir(self.uiddir, 0o700) - self.mapdir = os.path.join(self.uiddir, 'UIDMapping') - if not os.path.exists(self.mapdir): - os.mkdir(self.mapdir, 0o700) - # FIXME: self.uiddir variable name is lying about itself. - self.uiddir = os.path.join(self.uiddir, 'FolderValidity') - if not os.path.exists(self.uiddir): - os.mkdir(self.uiddir, 0o700) + + self.mapdir = self.uiddir = self.metadatadir = None + self.getmetadata() self.nametrans = lambda foldername: foldername self.folderfilter = lambda foldername: 1 diff --git a/offlineimap/repository/LocalStatus.py b/offlineimap/repository/LocalStatus.py index 4ad2315..605093a 100644 --- a/offlineimap/repository/LocalStatus.py +++ b/offlineimap/repository/LocalStatus.py @@ -26,30 +26,7 @@ from offlineimap.error import OfflineImapError class LocalStatusRepository(BaseRepository): def __init__(self, reposname, account): BaseRepository.__init__(self, reposname, account) - - # class and root for all backends. - self.backends = {} - self.backends['sqlite'] = { - 'class': LocalStatusSQLiteFolder, - 'root': os.path.join(account.getaccountmeta(), 'LocalStatus-sqlite') - } - self.backends['plain'] = { - 'class': LocalStatusFolder, - 'root': os.path.join(account.getaccountmeta(), 'LocalStatus') - } - - if self.account.getconf('status_backend', None) is not None: - raise OfflineImapError( - "the 'status_backend' configuration option is not supported" - " anymore; please, remove this configuration option.", - OfflineImapError.ERROR.REPO - ) - # Set class and root for sqlite. - self.setup_backend('sqlite') - - if not os.path.exists(self.root): - os.mkdir(self.root, 0o700) - + self.getmetadata() # self._folders is a dict of name:LocalStatusFolders(). self._folders = {} -- 2.11.0 _______________________________________________ OfflineIMAP-project mailing list: OfflineIMAP-project@alioth-lists.debian.net https://alioth-lists.debian.net/cgi-bin/mailman/listinfo/offlineimap-project OfflineIMAP homepages: - https://github.com/OfflineIMAP - http://offlineimap.org