]> code.delx.au - offlineimap/commitdiff
/offlineimap/head: changeset 294
authorjgoerzen <jgoerzen>
Fri, 3 Jan 2003 07:01:41 +0000 (08:01 +0100)
committerjgoerzen <jgoerzen>
Fri, 3 Jan 2003 07:01:41 +0000 (08:01 +0100)
Updated with various fixes

offlineimap/head/offlineimap/folder/LocalStatus.py
offlineimap/head/offlineimap/ui/Tk.py

index 4f479f9af1ac80b30f878e1d6471f2bf70501d22..c7760fe0161ff0600761bf843e426ec3b6e4fa61 100644 (file)
@@ -17,7 +17,7 @@
 #    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
 from Base import BaseFolder
-import os
+import os, threading
 
 magicline = "OFFLINEIMAP LocalStatus CACHE DATA - DO NOT MODIFY - FORMAT 1"
 
@@ -29,6 +29,8 @@ class LocalStatusFolder(BaseFolder):
         self.filename = os.path.join(root, name)
         self.messagelist = None
         self.repository = repository
+        self.savelock = threading.Lock()
+        self.doautosave = 1
 
     def storesmessages(self):
         return 0
@@ -68,16 +70,24 @@ class LocalStatusFolder(BaseFolder):
             self.messagelist[uid] = {'uid': uid, 'flags': flags}
         file.close()
 
+    def autosave(self):
+        if self.doautosave:
+            self.save()
+
     def save(self):
-        file = open(self.filename + ".tmp", "wt")
-        file.write(magicline + "\n")
-        for msg in self.messagelist.values():
-            flags = msg['flags']
-            flags.sort()
-            flags = ''.join(flags)
-            file.write("%s:%s\n" % (msg['uid'], flags))
-        file.close()
-        os.rename(self.filename + ".tmp", self.filename)
+        self.savelock.acquire()
+        try:
+            file = open(self.filename + ".tmp", "wt")
+            file.write(magicline + "\n")
+            for msg in self.messagelist.values():
+                flags = msg['flags']
+                flags.sort()
+                flags = ''.join(flags)
+                file.write("%s:%s\n" % (msg['uid'], flags))
+            file.close()
+            os.rename(self.filename + ".tmp", self.filename)
+        finally:
+            self.savelock.release()
 
     def getmessagelist(self):
         return self.messagelist
@@ -92,6 +102,7 @@ class LocalStatusFolder(BaseFolder):
             return uid
 
         self.messagelist[uid] = {'uid': uid, 'flags': flags}
+        self.autosave()
         return uid
 
     def getmessageflags(self, uid):
@@ -99,9 +110,10 @@ class LocalStatusFolder(BaseFolder):
 
     def savemessageflags(self, uid, flags):
         self.messagelist[uid]['flags'] = flags
+        self.autosave()
 
     def deletemessage(self, uid):
         if not uid in self.messagelist:
             return
         del(self.messagelist[uid])
-
+        self.autosave()
index e798f1730efd40c0c981073fd7f2382a1fc3b7e3..68133a30b987c84fcd8b65926a1fe4f128d6be27 100644 (file)
@@ -165,6 +165,7 @@ class VerboseUI(UIBase):
 
         self.created.wait()
         del self.created
+        time.sleep(1)
 
         if doidlevac:
             t = threadutil.ExitNotifyThread(target = self.idlevacuum,