X-Git-Url: https://code.delx.au/offlineimap/blobdiff_plain/71c8b2e7c489b6277dd862e9174784ca237ebead..f58ebe390d281e6fe526e70451e2377b77f68183:/offlineimap/syncmaster.py diff --git a/offlineimap/syncmaster.py b/offlineimap/syncmaster.py index d10c5c3..22e126f 100644 --- a/offlineimap/syncmaster.py +++ b/offlineimap/syncmaster.py @@ -1,5 +1,5 @@ # OfflineIMAP synchronization master code -# Copyright (C) 2002 John Goerzen +# Copyright (C) 2002-2007 John Goerzen # # # This program is free software; you can redistribute it and/or modify @@ -16,7 +16,8 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -from offlineimap import imaplib, imapserver, repository, folder, mbnames, threadutil, version +import imaplib +from offlineimap import imapserver, repository, folder, mbnames, threadutil, version from offlineimap.threadutil import InstanceLimitedThread, ExitNotifyThread import offlineimap.accounts from offlineimap.accounts import SyncableAccount @@ -25,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) @@ -35,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, 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()