Checkpointing work on mailbox deletion

This commit is contained in:
John Goerzen 2008-05-20 01:38:15 -05:00
parent fa766b61bc
commit f58ebe390d
2 changed files with 40 additions and 3 deletions

View File

@ -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)

View File

@ -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()