Checkpointing work on mailbox deletion
This commit is contained in:
parent
fa766b61bc
commit
f58ebe390d
@ -95,6 +95,16 @@ class Account(CustomConfig.ConfigHelperMixin):
|
|||||||
return sleepresult
|
return sleepresult
|
||||||
|
|
||||||
class AccountSynchronizationMixin:
|
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):
|
def syncrunner(self):
|
||||||
self.ui.registerthread(self.name)
|
self.ui.registerthread(self.name)
|
||||||
self.ui.acct(self.name)
|
self.ui.acct(self.name)
|
||||||
@ -110,6 +120,18 @@ class AccountSynchronizationMixin:
|
|||||||
# Connect to the local cache.
|
# Connect to the local cache.
|
||||||
self.statusrepos = offlineimap.repository.LocalStatus.LocalStatusRepository(self.getconf('localrepository'), self)
|
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:
|
if not self.refreshperiod:
|
||||||
self.sync()
|
self.sync()
|
||||||
self.ui.acctdone(self.name)
|
self.ui.acctdone(self.name)
|
||||||
|
@ -26,8 +26,8 @@ import re, os, os.path, offlineimap, sys
|
|||||||
from ConfigParser import ConfigParser
|
from ConfigParser import ConfigParser
|
||||||
from threading import *
|
from threading import *
|
||||||
|
|
||||||
def syncaccount(threads, config, accountname):
|
def syncaccount(threads, config, accountname, folderhash, folderhashlock):
|
||||||
account = SyncableAccount(config, accountname)
|
account = SyncableAccount(config, accountname, folderhash, folderhashlock)
|
||||||
thread = InstanceLimitedThread(instancename = 'ACCOUNTLIMIT',
|
thread = InstanceLimitedThread(instancename = 'ACCOUNTLIMIT',
|
||||||
target = account.syncrunner,
|
target = account.syncrunner,
|
||||||
name = "Account sync %s" % accountname)
|
name = "Account sync %s" % accountname)
|
||||||
@ -36,11 +36,26 @@ def syncaccount(threads, config, accountname):
|
|||||||
threads.add(thread)
|
threads.add(thread)
|
||||||
|
|
||||||
def syncitall(accounts, config):
|
def syncitall(accounts, config):
|
||||||
|
folderhash = {'___sem': Semaphore(0)}
|
||||||
|
folderhashlock = Lock()
|
||||||
currentThread().setExitMessage('SYNC_WITH_TIMER_TERMINATE')
|
currentThread().setExitMessage('SYNC_WITH_TIMER_TERMINATE')
|
||||||
ui = UIBase.getglobalui()
|
ui = UIBase.getglobalui()
|
||||||
threads = threadutil.threadlist()
|
threads = threadutil.threadlist()
|
||||||
mbnames.init(config, accounts)
|
mbnames.init(config, accounts)
|
||||||
|
|
||||||
|
accountcout = 0
|
||||||
for accountname in accounts:
|
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.
|
# Wait for the threads to finish.
|
||||||
threads.reset()
|
threads.reset()
|
||||||
|
Loading…
Reference in New Issue
Block a user