offlineimap rev 539

"Automatic Subversion Change Mailer" <[email protected]> Mon, 28 Jul 2003 10:49:53 -0500 (CDT)
Newsgroups gmane.mail.imap.offlineimap.subversion
Message-ID <[email protected]>
You are receiving this message because
all commits get sent to this address.

Author: jgoerzen
Date: 2003-07-28 10:49:43 -0500 (Mon, 28 Jul 2003)
New Revision: 539

Modified:
  offlineimap/branches/twisted/offlineimap/accounts.py
  offlineimap/branches/twisted/offlineimap/folder/Base.py
  offlineimap/branches/twisted/offlineimap/folder/IMAP.py

Log:
Well, it's working, but cachemessagelist seems broken.


Diff:
Modified: offlineimap/branches/twisted/offlineimap/accounts.py
==============================================================================
--- offlineimap/branches/twisted/offlineimap/accounts.py	2003-07-28 15:11:44 UTC (rev 538)
+++ offlineimap/branches/twisted/offlineimap/accounts.py	2003-07-28 15:49:43 UTC (rev 539)
@@ -132,6 +132,7 @@
     
 
     def sync(self):
+        print "This is sync."
         # We don't need an account lock because syncitall() goes through
         # each account once, then waits for all to finish.
         remoterepos = self.remoterepos
@@ -143,9 +144,11 @@
         d.addCallback(self.sync_runfolders)
 
     def sync_getfolders(self, d):
+        print "sync_getfolders"
         return self.remoterepos.getfolders()
 
     def sync_runfolders(self, remotefolders):
+        print "sync_runfolders"
         dl = defer.DeferredList([])
         for remotefolder in remotefolders:
             sf = SyncFolder(self.name, self.remoterepos, remotefolder,
@@ -155,6 +158,7 @@
         dl.addCallback(self.sync_finish)
 
     def sync_finish(self, d):
+        print "sync_finish"
         mbnames.write()
         #localrepos.holdordropconnections()
         #remoterepos.holdordropconnections()
@@ -165,6 +169,8 @@
 class SyncFolder:
     def __init__(self, accountname, remoterepos, remotefolder, localrepos,
                statusrepos):
+        print "SyncFolder instanaiated for", accountname, remoterepos, \
+              remotefolder, localrepos, statusrepos
         self.accountname = accountname
         self.remoterepos = remoterepos
         self.remotefolder = remotefolder
@@ -173,6 +179,7 @@
         self.ui = UIBase.getglobalui()
 
     def start(self):
+        print "SyncFolder start"
         self.ui.registerthread(self.accountname)
         self.localfolder = self.localrepos.\
             getfolder(self.remotefolder.getvisiblename().\
@@ -189,6 +196,7 @@
         return d
 
     def local_cache(self):
+        print "SyncFolder local_cache"
         # Load local folder.
         # Write the mailboxes
         mbnames.add(self.accountname, self.localfolder.getvisiblename())
@@ -199,6 +207,7 @@
         return self.localfolder.cachemessagelist()
 
     def status_load(self, d):
+        print "SyncFolder status_load"
         self.ui.messagelistloaded(self.localrepos, self.localfolder,
                              len(self.localfolder.getmessagelist().keys()))
         # Load status folder.
@@ -208,6 +217,7 @@
                                                   self.statusrepos.getsep()))
     
     def status_cache(self, d):
+        print "Syncfolder status_cache"
         self.statusfolder = d
         
         if self.localfolder.getuidvalidity() == None:
@@ -218,6 +228,7 @@
         return self.statusfolder.cachemessagelist()
 
     def load_validities(self, d):
+        print "SyncFolder load_validities"
         self.validities = {}
 
         dl = defer.DeferredList([])
@@ -234,9 +245,11 @@
         return dl
 
     def _set_validities(self, value, name):
+        print "SyncFolder _set_validities"
         self.validities[name] = value
 
     def check_validities(self, d):
+        print "SyncFolder check_validities"
         # If either the local or the status folder has messages and
         # there is a UID validity problem, warn and abort.  If there
         # are no messages, UW IMAPd loses UIDVALIDITY.  But we don't
@@ -265,12 +278,14 @@
 
 
     def check_local_deleted(self, d):
+        print "SyncFolder check_local_deleted"
         self.ui.messagelistloaded(self.remoterepos, self.remotefolder,
                              len(self.remotefolder.getmessagelist().keys()))
 
 
 
         if not self.statusfolder.isnewfolder():
+            print "Not new folder..."
             # Delete local copies of remote messages.  This way,
             # if a message's flag is modified locally but it has been
             # deleted remotely, we'll delete it locally.  Otherwise, we
@@ -281,14 +296,17 @@
                                                     [self.localfolder,
                                                      self.statusfolder])
             # Now sync up the local folder.
-            d.addCallback(self.localfolder.syncmessagesto,
-                          (statusfolder, [remotefolder, statusfolder]))
+            d.addCallback(lambda x, dest, applyto: \
+                          self.localfolder.syncmessagesto(dest, applyto),
+                          self.statusfolder, [self.remotefolder,
+                                               self.statusfolder])
             #ui.syncingmessages(localrepos, localfolder, remoterepos, remotefolder)
             return d
         
             #localfolder.syncmessagesto(statusfolder, [remotefolder, statusfolder])
             
     def sync_remote_changes(self, d):
+        print "sync_remote_changes"
         # Synchronize remote changes.
         self.ui.syncingmessages(self.remoterepos, self.remotefolder,
                            self.localrepos, self.localfolder)
@@ -297,11 +315,13 @@
                                                  self.statusfolder])
 
     def sync_status(self, d):
+        print "sync_status"
         # Make sure the status folder is up-to-date.
         self.ui.syncingmessages(self.localrepos, self.localfolder,
                            self.statusrepos, self.statusfolder)
         return self.localfolder.syncmessagesto(self.statusfolder)
 
     def finish(self, d):
+        print "finish"
         self.statusfolder.save()
 

Modified: offlineimap/branches/twisted/offlineimap/folder/Base.py
==============================================================================
--- offlineimap/branches/twisted/offlineimap/folder/Base.py	2003-07-28 15:11:44 UTC (rev 538)
+++ offlineimap/branches/twisted/offlineimap/folder/Base.py	2003-07-28 15:49:43 UTC (rev 539)
@@ -20,6 +20,7 @@
 from offlineimap.ui import UIBase
 import os.path, re
 from offlineimap.imaputil import rd
+from twisted.internet import defer
 
 class BaseFolder:
     def __init__(self):
@@ -203,10 +204,10 @@
 
     def deletemessagesflags(self, uidlist, flags):
         """Returns Deferred."""
-        deffereds = []
+        deferreds = []
         for uid in uidlist:
-            deffereds.append(self.deletemessageflags(uid, flags))
-        return defer.DefferedList(deferreds)
+            deferreds.append(self.deletemessageflags(uid, flags))
+        return defer.DeferredList(deferreds)
 
     def deletemessage(self, uid):
         """Returns Deferred."""
@@ -254,30 +255,21 @@
         Look for messages in self with a negative uid.  These are messages in
         Maildirs that were not added by us.  Try to add them to the dests,
         and once that succeeds, get the UID, add it to the others for real,
-        add it to local for real, and delete the fake one."""
+        add it to local for real, and delete the fake one.
 
+        Returns Deferred."""
+        print "syncmessagesto_neguid"
+
+        # FIXME: this used to be thread aware.
+        # Not sure what to do now.
+
         uidlist = [uid for uid in self.getmessagelist().keys() if uid < 0]
-        threads = []
+        deferreds = []
 
-        usethread = None
-        if applyto != None:
-            usethread = applyto[0]
-        
         for uid in uidlist:
-            if usethread and usethread.suggeststhreads():
-                usethread.waitforthread()
-                thread = InstanceLimitedThread(\
-                    usethread.getcopyinstancelimit(),
-                    target = self.syncmessagesto_neguid_msg,
-                    name = "New msg sync from %s" % self.getvisiblename(),
-                    args = (uid, dest, applyto))
-                thread.setDaemon(1)
-                thread.start()
-                threads.append(thread)
-            else:
-                self.syncmessagesto_neguid_msg(uid, dest, applyto, register = 0)
-        for thread in threads:
-            thread.join()
+            d =self.syncmessagesto_neguid_msg(uid, dest, applyto, register = 0)
+            deferreds.append(d)
+        return defer.DeferredList(deferreds)
 
     def copymessageto(self, uid, applyto, register = 1):
         # Sometimes, it could be the case that if a sync takes awhile,
@@ -309,28 +301,19 @@
         """Pass 2 of folder synchronization.
 
         Look for messages present in self but not in dest.  If any, add
-        them to dest."""
-        threads = []
+        them to dest.
+
+        Returns Deferred."""
+        print "syncmessagesto_copy"
+        deferreds = []
         
         for uid in self.getmessagelist().keys():
             if uid < 0:                 # Ignore messages that pass 1 missed.
                 continue
             if not uid in dest.getmessagelist():
-                if self.suggeststhreads():
-                    self.waitforthread()
-                    thread = InstanceLimitedThread(\
-                        self.getcopyinstancelimit(),
-                        target = self.copymessageto,
-                        name = "Copy message %d from %s" % (uid,
-                                                            self.getvisiblename()),
-                        args = (uid, applyto))
-                    thread.setDaemon(1)
-                    thread.start()
-                    threads.append(thread)
-                else:
-                    self.copymessageto(uid, applyto, register = 0)
-        for thread in threads:
-            thread.join()
+                d = self.copymessageto(uid, applyto, register = 0)
+                deferreds.append(d)
+        return defer.DeferredList(deferreds)
 
     def syncmessagesto_delete(self, dest, applyto):
         """Pass 3 of folder synchronization.
@@ -339,6 +322,7 @@
         If any, delete them.
 
         Returns a deferred"""
+        print "syncmessagesto_delete"
         deletelist = []
         for uid in dest.getmessagelist().keys():
             if uid < 0:
@@ -357,8 +341,10 @@
         """Pass 4 of folder synchronization.
 
         Look for any flag matching issues -- set dest message to have the
-        same flags that we have."""
+        same flags that we have.
 
+        Returns a Deferred."""
+        print "syncmessagesto_flags"
         # As an optimization over previous versions, we store up which flags
         # are being used for an add or a delete.  For each flag, we store
         # a list of uids to which it should be added.  Then, we can call
@@ -388,13 +374,19 @@
                     delflaglist[flag] = []
                 delflaglist[flag].append(uid)
 
+        deferreds = []
+
         for object in applyto:
             for flag in addflaglist.keys():
                 UIBase.getglobalui().addingflags(addflaglist[flag], flag, [object])
-                object.addmessagesflags(addflaglist[flag], [flag])
+                d = object.addmessagesflags(addflaglist[flag], [flag])
+                deferreds.append(d)
             for flag in delflaglist.keys():
                 UIBase.getglobalui().deletingflags(delflaglist[flag], flag, [object])
-                object.deletemessagesflags(delflaglist[flag], [flag])
+                d = object.deletemessagesflags(delflaglist[flag], [flag])
+                deferreds.append(d)
+
+        return defer.DeferredList(deferreds)
                 
     def syncmessagesto(self, dest, applyto = None):
         """Syncs messages in this folder to the destination.
@@ -402,18 +394,30 @@
         to include dest!) to which all write actions should be applied.
         It defaults to [dest] if not specified.  It is important that
         the UID generator be listed first in applyto; that is, the other
-        applyto ones should be the ones that "copy" the main action."""
+        applyto ones should be the ones that "copy" the main action.
+
+        Returns Deferred."""
+        print "****************This is syncmessagesto:", self.getname()
+
         if applyto == None:
             applyto = [dest]
-            
-        self.syncmessagesto_neguid(dest, applyto)
-        self.syncmessagesto_copy(dest, applyto)
-        self.syncmessagesto_delete(dest, applyto)
+
+        d = self.syncmessagesto_neguid(dest, applyto)
+        d.addCallback(lambda x, dest, applyto: \
+                      self.syncmessagesto_copy(dest, applyto),
+                      dest, applyto)
+        d.addCallback(lambda x, dest, applyto: \
+                      self.syncmessagesto_delete(dest, applyto),
+                      dest, applyto)
         
         # Now, the message lists should be identical wrt the uids present.
         # (except for potential negative uids that couldn't be placed
         # anywhere)
 
-        self.syncmessagesto_flags(dest, applyto)
+        d.addCallback(lambda x, dest, applyto: \
+                      self.syncmessagesto_flags(dest, applyto),
+                      dest, applyto)
+        return d
+    
         
             

Modified: offlineimap/branches/twisted/offlineimap/folder/IMAP.py
==============================================================================
--- offlineimap/branches/twisted/offlineimap/folder/IMAP.py	2003-07-28 15:11:44 UTC (rev 538)
+++ offlineimap/branches/twisted/offlineimap/folder/IMAP.py	2003-07-28 15:49:43 UTC (rev 539)
@@ -100,6 +100,7 @@
         #    maindefer.callback(None)
         #    return
         # FIXME: not yet as robust as below.
+        print self.getname(), "flags_uids", flags_uids
         flags, uids = flags_uids
         flags = flags[1]
         uids = uids[1]
@@ -108,6 +109,7 @@
             uid = uids[msg]
             self.messagelist[uid] = {'uid': uid, 'flags': flags}
 
+        print self.getname(), "Cached at", self.messagelist
         maindefer.callback(None)
 
     def cachemessagelist_old(self):