]> code.delx.au - offlineimap/commitdiff
Checkpointing work on mailbox deletion
authorJohn Goerzen <jgoerzen@complete.org>
Tue, 20 May 2008 06:38:15 +0000 (01:38 -0500)
committerJohn Goerzen <jgoerzen@complete.org>
Tue, 20 May 2008 06:38:15 +0000 (01:38 -0500)
offlineimap/accounts.py
offlineimap/syncmaster.py

index 8e96347944f58c37fcada83fd98fb18dca16e23a..fe536a7e54f01c2ac93aa9b24fd57089651caf1e 100644 (file)
@@ -95,6 +95,16 @@ class Account(CustomConfig.ConfigHelperMixin):
             return sleepresult
             
 class AccountSynchronizationMixin:
             return sleepresult
             
 class AccountSynchronizationMixin:
+    def __init__(self, config, name, folderhash, folderhashlock):
+        Account.__init__(self, config, name)
+        self.folderhash = folderhash
+        self.folderhashlock = folderhashlock
+        self.folderhashlock.acquire()
+        try:
+            self.folderhash[name] = {}
+        finally:
+            self.folderhashlock.release()
+
     def syncrunner(self):
         self.ui.registerthread(self.name)
         self.ui.acct(self.name)
     def syncrunner(self):
         self.ui.registerthread(self.name)
         self.ui.acct(self.name)
@@ -109,6 +119,18 @@ class AccountSynchronizationMixin:
 
         # Connect to the local cache.
         self.statusrepos = offlineimap.repository.LocalStatus.LocalStatusRepository(self.getconf('localrepository'), self)
 
         # Connect to the local cache.
         self.statusrepos = offlineimap.repository.LocalStatus.LocalStatusRepository(self.getconf('localrepository'), self)
+
+        # FIXME: need new UI here?
+        self.ui.syncfolders(self.remoterepos, self.localrepos)
+        srcfolders = self.remoterepos.getfolders()
+        destfolders = self.localrepos.getfolders()
+
+        self.folderhashlock.acquire()
+        try:
+            self.folderhash[name] = {'src': srcfolders, 'dest': destfolders}
+            self.folderhash['___sem'].release()
+        finally:
+            self.folderhashlock.release()
             
         if not self.refreshperiod:
             self.sync()
             
         if not self.refreshperiod:
             self.sync()
index 64f2380b3fc86466300317e0debb9a6ef47cd0bf..22e126fa5a856ce2e2cd9fe4f6f889ee3eff6ef7 100644 (file)
@@ -26,8 +26,8 @@ import re, os, os.path, offlineimap, sys
 from ConfigParser import ConfigParser
 from threading import *
 
 from ConfigParser import ConfigParser
 from threading import *
 
-def syncaccount(threads, config, accountname):
-    account = SyncableAccount(config, accountname)
+def syncaccount(threads, config, accountname, folderhash, folderhashlock):
+    account = SyncableAccount(config, accountname, folderhash, folderhashlock)
     thread = InstanceLimitedThread(instancename = 'ACCOUNTLIMIT',
                                    target = account.syncrunner,
                                    name = "Account sync %s" % accountname)
     thread = InstanceLimitedThread(instancename = 'ACCOUNTLIMIT',
                                    target = account.syncrunner,
                                    name = "Account sync %s" % accountname)
@@ -36,11 +36,26 @@ def syncaccount(threads, config, accountname):
     threads.add(thread)
     
 def syncitall(accounts, config):
     threads.add(thread)
     
 def syncitall(accounts, config):
+    folderhash = {'___sem': Semaphore(0)}
+    folderhashlock = Lock()
     currentThread().setExitMessage('SYNC_WITH_TIMER_TERMINATE')
     ui = UIBase.getglobalui()
     threads = threadutil.threadlist()
     mbnames.init(config, accounts)
     currentThread().setExitMessage('SYNC_WITH_TIMER_TERMINATE')
     ui = UIBase.getglobalui()
     threads = threadutil.threadlist()
     mbnames.init(config, accounts)
+
+    accountcout = 0
+    for accountname in accounts:
+        syncaccount(threads, config, accountname, folderhash, folderhashlock)
+        accountcount += 1
+
+    # Gather up folder info
+    for i in range(0, accountcount):
+        folderhash['___sem'].acquire()
+
+    # Now we can tally.
+    srcnames = 
     for accountname in accounts:
     for accountname in accounts:
-        syncaccount(threads, config, accountname)
+        
+        
     # Wait for the threads to finish.
     threads.reset()
     # Wait for the threads to finish.
     threads.reset()