X-Git-Url: https://code.delx.au/offlineimap/blobdiff_plain/39a18fef6078388dac7a1db386cdfd2900f5263c..bd1d1010e77fb10f243fea8be1bbaf2e0d2c8b65:/offlineimap/repository/Maildir.py diff --git a/offlineimap/repository/Maildir.py b/offlineimap/repository/Maildir.py index fc92bc4..717ffcb 100644 --- a/offlineimap/repository/Maildir.py +++ b/offlineimap/repository/Maildir.py @@ -21,6 +21,7 @@ from offlineimap import folder, imaputil from offlineimap.ui import UIBase from mailbox import Maildir import os +from stat import * class MaildirRepository(BaseRepository): def __init__(self, reposname, account): @@ -32,6 +33,28 @@ class MaildirRepository(BaseRepository): self.folders = None self.ui = UIBase.getglobalui() self.debug("MaildirRepository initialized, sep is " + repr(self.getsep())) + self.folder_atimes = [] + + # Create the top-level folder if it doesn't exist + if not os.path.isdir(self.root): + os.mkdir(self.root, 0700) + + def _append_folder_atimes(self, foldername): + p = os.path.join(self.root, foldername) + new = os.path.join(p, 'new') + cur = os.path.join(p, 'cur') + f = p, os.stat(new)[ST_ATIME], os.stat(cur)[ST_ATIME] + self.folder_atimes.append(f) + + def restore_folder_atimes(self): + if not self.folder_atimes: + return + + for f in self.folder_atimes: + t = f[1], os.stat(os.path.join(f[0], 'new'))[ST_MTIME] + os.utime(os.path.join(f[0], 'new'), t) + t = f[2], os.stat(os.path.join(f[0], 'cur'))[ST_MTIME] + os.utime(os.path.join(f[0], 'cur'), t) def getlocalroot(self): return os.path.expanduser(self.getconf('localfolders')) @@ -64,7 +87,7 @@ class MaildirRepository(BaseRepository): # makedirs will fail because the higher-up dir already exists. # So, check to see if this is indeed the case. - if (self.getsep() == '/' or self.getconfboolean('existsok', 0)) \ + if (self.getsep() == '/' or self.getconfboolean('existsok', 0) or foldername == '.') \ and os.path.isdir(foldername): self.debug("makefolder: %s already is a directory" % foldername) # Already exists. Sanity-check that it's not a Maildir. @@ -86,6 +109,8 @@ class MaildirRepository(BaseRepository): self.ui.warn("NOT YET IMPLEMENTED: DELETE FOLDER %s" % foldername) def getfolder(self, foldername): + if self.config.has_option('Repository ' + self.name, 'restoreatime') and self.config.getboolean('Repository ' + self.name, 'restoreatime'): + self._append_folder_atimes(foldername) return folder.Maildir.MaildirFolder(self.root, foldername, self.getsep(), self, self.accountname) @@ -130,6 +155,8 @@ class MaildirRepository(BaseRepository): self.debug(" foldername = %s" % foldername) + if self.config.has_option('Repository ' + self.name, 'restoreatime') and self.config.getboolean('Repository ' + self.name, 'restoreatime'): + self._append_folder_atimes(foldername) retval.append(folder.Maildir.MaildirFolder(self.root, foldername, self.getsep(), self, self.accountname)) if self.getsep() == '/' and dirname != '.':