]> code.delx.au - offlineimap/blobdiff - offlineimap/syncmaster.py
Implementation of IMAP IDLE
[offlineimap] / offlineimap / syncmaster.py
index 64f2380b3fc86466300317e0debb9a6ef47cd0bf..0f4e503dae9744b27897c9e4ac0782ce2e955110 100644 (file)
 #    along with this program; if not, write to the Free Software
 #    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
 
-import imaplib
-from offlineimap import imapserver, repository, folder, mbnames, threadutil, version
+from offlineimap import imaplib2, imapserver, repository, folder, mbnames, threadutil, version
 from offlineimap.threadutil import InstanceLimitedThread, ExitNotifyThread
 import offlineimap.accounts
-from offlineimap.accounts import SyncableAccount
+from offlineimap.accounts import SyncableAccount, SigListener
 from offlineimap.ui import UIBase
 import re, os, os.path, offlineimap, sys
 from ConfigParser import ConfigParser
 from threading import *
 
-def syncaccount(threads, config, accountname):
+def syncaccount(threads, config, accountname, siglisteners):
     account = SyncableAccount(config, accountname)
+    siglistener = SigListener()
     thread = InstanceLimitedThread(instancename = 'ACCOUNTLIMIT',
                                    target = account.syncrunner,
-                                   name = "Account sync %s" % accountname)
+                                   name = "Account sync %s" % accountname,
+                                   kwargs = {'siglistener': siglistener} )
+    # the Sync Runner thread is the only one that will mutate siglisteners
+    siglisteners.append(siglistener)
     thread.setDaemon(1)
     thread.start()
     threads.add(thread)
     
-def syncitall(accounts, config):
+def syncitall(accounts, config, siglisteners):
     currentThread().setExitMessage('SYNC_WITH_TIMER_TERMINATE')
     ui = UIBase.getglobalui()
     threads = threadutil.threadlist()
     mbnames.init(config, accounts)
     for accountname in accounts:
-        syncaccount(threads, config, accountname)
+        syncaccount(threads, config, accountname, siglisteners)
     # Wait for the threads to finish.
     threads.reset()