]> code.delx.au - offlineimap/blobdiff - offlineimap/folder/LocalStatus.py
Ignore empty LocalStatus files
[offlineimap] / offlineimap / folder / LocalStatus.py
index 1de7bdd55aed1c4603986d8a4868c824a8eb6362..8ba5bb88c3f8cea9c92a9b7901eef4614a5e26da 100644 (file)
@@ -1,5 +1,5 @@
 # Local status cache virtual folder
-# Copyright (C) 2002 - 2003 John Goerzen
+# Copyright (C) 2002 - 2008 John Goerzen
 # <jgoerzen@complete.org>
 #
 #    This program is free software; you can redistribute it and/or modify
@@ -67,6 +67,11 @@ class LocalStatusFolder(BaseFolder):
         file = open(self.filename, "rt")
         self.messagelist = {}
         line = file.readline().strip()
+        if not line and not line.read()
+            # The status file is empty - should not have happened,
+            # but somehow did.
+            file.close()
+            return
         assert(line == magicline)
         for line in file.xreadlines():
             line = line.strip()
@@ -90,15 +95,25 @@ class LocalStatusFolder(BaseFolder):
                 flags.sort()
                 flags = ''.join(flags)
                 file.write("%s:%s\n" % (msg['uid'], flags))
+            file.flush()
+            os.fsync(file.fileno())
             file.close()
             os.rename(self.filename + ".tmp", self.filename)
+
+            try:
+                fd = os.open(os.path.dirname(self.filename), os.O_RDONLY)
+                os.fsync(fd)
+                os.close(fd)
+            except:
+                pass
+
         finally:
             self.savelock.release()
 
     def getmessagelist(self):
         return self.messagelist
 
-    def savemessage(self, uid, content, flags):
+    def savemessage(self, uid, content, flags, rtime):
         if uid < 0:
             # We cannot assign a uid.
             return uid
@@ -107,13 +122,16 @@ class LocalStatusFolder(BaseFolder):
             self.savemessageflags(uid, flags)
             return uid
 
-        self.messagelist[uid] = {'uid': uid, 'flags': flags}
+        self.messagelist[uid] = {'uid': uid, 'flags': flags, 'time': rtime}
         self.autosave()
         return uid
 
     def getmessageflags(self, uid):
         return self.messagelist[uid]['flags']
 
+    def getmessagetime(self, uid):
+        return self.messagelist[uid]['time']
+
     def savemessageflags(self, uid, flags):
         self.messagelist[uid]['flags'] = flags
         self.autosave()