]> code.delx.au - offlineimap/commitdiff
Commit ever 100 updateflags requests sqlite_localstatus
authorStewart Smith <stewart@willster.(none)>
Mon, 31 Mar 2008 01:26:27 +0000 (12:26 +1100)
committerStewart Smith <stewart@willster.(none)>
Mon, 31 Mar 2008 01:26:27 +0000 (12:26 +1100)
Improves syncing large status changes by about a factor of 100

100 is arbitrary. Seems like an acceptable number to have to redo
if crash

offlineimap/folder/LocalStatus.py

index 90ad3c8c1a043cf43f0ebce780459ba869b9cc86..86738b0a081a3c1d4306a6b0e080540721012825 100644 (file)
@@ -41,6 +41,7 @@ class LocalStatusFolder(BaseFolder):
         self.savelock = threading.Lock()
         self.doautosave = 1
         self.accountname = accountname
+        self.count = 0 # used for batching operations before commit
         BaseFolder.__init__(self)
        self.dbfilename = self.filename + '.sqlite'
 
@@ -184,7 +185,10 @@ class LocalStatusFolder(BaseFolder):
         flags.sort()
         flags = ''.join(flags)
         self.cursor.execute('UPDATE status SET flags=? WHERE id=?',(flags,uid))
-        self.autosave()
+        self.count = self.count + 1
+        if self.count == 100:
+            self.autosave()
+            self.count = 0
 
     def deletemessage(self, uid):
         if not self.uidexists(uid):