Checkpointing work on mailbox deletion
This commit is contained in:
parent
fa766b61bc
commit
f58ebe390d
@ -95,6 +95,16 @@ class Account(CustomConfig.ConfigHelperMixin):
|
||||
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)
|
||||
@ -109,6 +119,18 @@ class AccountSynchronizationMixin:
|
||||
|
||||
# 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()
|
||||
|
@ -26,8 +26,8 @@ import re, os, os.path, offlineimap, sys
|
||||
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)
|
||||
@ -36,11 +36,26 @@ def syncaccount(threads, config, 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)
|
||||
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:
|
||||
|
||||
|
||||
# Wait for the threads to finish.
|
||||
threads.reset()
|
||||
|
Loading…
Reference in New Issue
Block a user