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)
# 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()
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)
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)
+
+ 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:
- syncaccount(threads, config, accountname)
+
+
# Wait for the threads to finish.
threads.reset()