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.
class SyncableAccount(Account, AccountSynchronizationMixin):
pass
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
def syncfolder(accountname, remoterepos, remotefolder, localrepos,
statusrepos):
global mailboxes
localfolder = localrepos.\
getfolder(remotefolder.getvisiblename().\
replace(remoterepos.getsep(), localrepos.getsep()))
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
# Write the mailboxes
mbnames.add(accountname, localfolder.getvisiblename())
# Load local folder
if not localfolder.isuidvalidityok():
ui.validityproblem(localfolder, localfolder.getsaveduidvalidity(),
localfolder.getuidvalidity())
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())
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()
return
else:
localfolder.saveuidvalidity()
ui.syncingmessages(localrepos, localfolder, statusrepos, statusfolder)
localfolder.syncmessagesto(statusfolder)
statusfolder.save()
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])
self.ui = UIBase.getglobalui()
self.debug("MaildirRepository initialized, sep is " + repr(self.getsep()))
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'))
def getlocalroot(self):
return os.path.expanduser(self.getconf('localfolders'))