]> code.delx.au - offlineimap/commitdiff
New restoreatime patch
authorJohn Goerzen <jgoerzen@complete.org>
Wed, 1 Mar 2006 23:12:29 +0000 (00:12 +0100)
committerJohn Goerzen <jgoerzen@complete.org>
Wed, 1 Mar 2006 23:12:29 +0000 (00:12 +0100)
From: Ben Kibbey <bjk@luxsci.net>

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
offlineimap/repository/Maildir.py

index 74791b9a566ecfe1c4e44892047d2e596152e560..34d7f9d0ba904d3950aac61bd6e7a33e61dd6a32 100644 (file)
@@ -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])
 
index a6c305697aa66ebac3e73665bdc304ccf72fb9ca..d35b0cc50f4d76e9fca6250df1c39b96d1b0028d 100644 (file)
@@ -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'))