From 405275f541ffb3bd4af427f7307d91fd59d91807 Mon Sep 17 00:00:00 2001 From: John Goerzen Date: Thu, 2 Mar 2006 00:12:29 +0100 Subject: [PATCH] New restoreatime patch From: Ben Kibbey Attached is a patch to restore the atime of Maildir folders after syncing. It can be enabled via the 'restoreatime' boolean in the configuration file. I needed this because offlineimap is run after a fetchmail and my mail checker breaks. --- offlineimap/accounts.py | 24 ++++++++++++++++++++++++ offlineimap/repository/Maildir.py | 3 +++ 2 files changed, 27 insertions(+) diff --git a/offlineimap/accounts.py b/offlineimap/accounts.py index 74791b9..34d7f9d 100644 --- a/offlineimap/accounts.py +++ b/offlineimap/accounts.py @@ -154,6 +154,12 @@ class AccountSynchronizationMixin: class SyncableAccount(Account, AccountSynchronizationMixin): pass +from stat import * + +def reset_time(folder, atime, mtime): + t = atime, mtime + os.utime(folder, t) + def syncfolder(accountname, remoterepos, remotefolder, localrepos, statusrepos): global mailboxes @@ -163,6 +169,9 @@ def syncfolder(accountname, remoterepos, remotefolder, localrepos, localfolder = localrepos.\ getfolder(remotefolder.getvisiblename().\ replace(remoterepos.getsep(), localrepos.getsep())) + if localrepos.getrestoreatime(): + cur_atime = os.stat(localfolder.getfullname() + "/cur")[ST_ATIME] + new_atime = os.stat(localfolder.getfullname() + "/new")[ST_ATIME] # Write the mailboxes mbnames.add(accountname, localfolder.getvisiblename()) # Load local folder @@ -191,10 +200,20 @@ def syncfolder(accountname, remoterepos, remotefolder, localrepos, if not localfolder.isuidvalidityok(): ui.validityproblem(localfolder, localfolder.getsaveduidvalidity(), localfolder.getuidvalidity()) + if localrepos.getrestoreatime(): + reset_time(localfolder.getfullname() + "/new", new_atime, \ + os.stat(localfolder.getfullname() + "/new")[ST_MTIME]) + reset_time(localfolder.getfullname() + "/cur", new_atime, \ + os.stat(localfolder.getfullname() + "/cur")[ST_MTIME]) return if not remotefolder.isuidvalidityok(): ui.validityproblem(remotefolder, remotefolder.getsaveduidvalidity(), remotefolder.getuidvalidity()) + if localrepos.getrestoreatime(): + reset_time(localfolder.getfullname() + "/new", new_atime, \ + os.stat(localfolder.getfullname() + "/new")[ST_MTIME]) + reset_time(localfolder.getfullname() + "/cur", new_atime, \ + os.stat(localfolder.getfullname() + "/cur")[ST_MTIME]) return else: localfolder.saveuidvalidity() @@ -230,4 +249,9 @@ def syncfolder(accountname, remoterepos, remotefolder, localrepos, ui.syncingmessages(localrepos, localfolder, statusrepos, statusfolder) localfolder.syncmessagesto(statusfolder) statusfolder.save() + if localrepos.getrestoreatime(): + reset_time(localfolder.getfullname() + "/new", new_atime, \ + os.stat(localfolder.getfullname() + "/new")[ST_MTIME]) + reset_time(localfolder.getfullname() + "/cur", new_atime, \ + os.stat(localfolder.getfullname() + "/cur")[ST_MTIME]) diff --git a/offlineimap/repository/Maildir.py b/offlineimap/repository/Maildir.py index a6c3056..d35b0cc 100644 --- a/offlineimap/repository/Maildir.py +++ b/offlineimap/repository/Maildir.py @@ -33,6 +33,9 @@ class MaildirRepository(BaseRepository): self.ui = UIBase.getglobalui() self.debug("MaildirRepository initialized, sep is " + repr(self.getsep())) + def getrestoreatime(self): + return self.getconfboolean('restoreatime', 0) + def getlocalroot(self): return os.path.expanduser(self.getconf('localfolders'))