]> code.delx.au - offlineimap/blobdiff - offlineimap/accounts.py
Merge branch 'master' of http://git.complete.org/offlineimap
[offlineimap] / offlineimap / accounts.py
index afdffbbf6846110a8902cdcffb22e00079ec5894..a4933960d817dbad4c813130af78c9ba874f1952 100644 (file)
@@ -19,6 +19,7 @@ from offlineimap import threadutil, mbnames, CustomConfig
 import offlineimap.repository.Base, offlineimap.repository.LocalStatus
 from offlineimap.ui import UIBase
 from offlineimap.threadutil import InstanceLimitedThread, ExitNotifyThread
+from subprocess import Popen, PIPE
 from threading import Event, Lock
 import os
 from Queue import Queue, Empty
@@ -36,9 +37,9 @@ class SigListener(Queue):
                     # folders haven't yet been added, or this account is once-only; drop signal
                     return
                 elif self.folders:
-                    for folder in self.folders:
+                    for foldernr in range(len(self.folders)):
                         # requeue folder
-                        self.folders[folder] = True
+                        self.folders[foldernr][1] = True
                     self.quick = False
                     return
                 # else folders have already been cleared, put signal...
@@ -48,22 +49,22 @@ class SigListener(Queue):
     def addfolders(self, remotefolders, autorefreshes, quick):
         self.folderlock.acquire()
         try:
-            self.folders = {}
+            self.folders = []
             self.quick = quick
             self.autorefreshes = autorefreshes
             for folder in remotefolders:
                 # new folders are queued
-                self.folders[folder] = True
+                self.folders.append([folder, True])
         finally:
             self.folderlock.release()
     def clearfolders(self):
         self.folderlock.acquire()
         try:
-            for folder in self.folders:
-                if self.folders[folder]:
+            for folder, queued in self.folders:
+                if queued:
                     # some folders still in queue
                     return False
-            self.folders.clear()
+            self.folders[:] = []
             return True
         finally:
             self.folderlock.release()
@@ -73,10 +74,10 @@ class SigListener(Queue):
             dirty = True
             while dirty:
                 dirty = False
-                for folder in self.folders:
-                    if self.folders[folder]:
+                for foldernr, (folder, queued) in enumerate(self.folders):
+                    if queued:
                         # mark folder as no longer queued
-                        self.folders[folder] = False
+                        self.folders[foldernr][1] = False
                         dirty = True
                         quick = self.quick
                         self.folderlock.release()
@@ -108,6 +109,7 @@ class Account(CustomConfig.ConfigHelperMixin):
         self.localeval = config.getlocaleval()
         self.ui = UIBase.getglobalui()
         self.refreshperiod = self.getconffloat('autorefresh', 0.0)
+        self.quickrefreshcount = self.getconfint('quick', 0)
         self.quicknum = 0
         if self.refreshperiod == 0.0:
             self.refreshperiod = None
@@ -143,8 +145,11 @@ class Account(CustomConfig.ConfigHelperMixin):
 
         for item in kaobjs:
             item.startkeepalive()
-        
-        refreshperiod = int(self.refreshperiod * 60)
+
+        sleeptime = int(self.refreshperiod * 60)
+        if (self.quickrefreshcount > 0):
+            sleeptime = int(sleeptime / self.quickrefreshcount)
+
 #         try:
 #             sleepresult = siglistener.get_nowait()
 #             # retrieved signal before sleep started
@@ -152,8 +157,8 @@ class Account(CustomConfig.ConfigHelperMixin):
 #                 # catching signal 1 here means folders were cleared before signal was posted
 #                 pass
 #         except Empty:
-#             sleepresult = self.ui.sleep(refreshperiod, siglistener)
-        sleepresult = self.ui.sleep(refreshperiod, siglistener)
+#             sleepresult = self.ui.sleep(sleeptime, siglistener)
+        sleepresult = self.ui.sleep(sleeptime, siglistener)
         if sleepresult == 1:
             self.quicknum = 0
 
@@ -236,6 +241,7 @@ class AccountSynchronizationMixin:
                 threadutil.threadsreset(folderthreads)
                 if siglistener.clearfolders():
                     break
+            mbnames.sort(self.name, remoterepos.foldersort)
             mbnames.write()
             localrepos.forgetfolders()
             remoterepos.forgetfolders()