# OfflineIMAP synchronization master code
-# Copyright (C) 2002 John Goerzen
+# Copyright (C) 2002-2007 John Goerzen
# <jgoerzen@complete.org>
#
# This program is free software; you can redistribute it and/or modify
# 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
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()