]> granicus.if.org Git - python/commitdiff
Added option to refilemessages() to keep sequences
authorGuido van Rossum <guido@python.org>
Sun, 21 Jul 1996 02:18:22 +0000 (02:18 +0000)
committerGuido van Rossum <guido@python.org>
Sun, 21 Jul 1996 02:18:22 +0000 (02:18 +0000)
Lib/mhlib.py

index 79eee26ddb24d48681c6d1e20e7b50e71ed59f88..f8599b795b4523d496021f47334519ef148bf2ad 100644 (file)
@@ -409,9 +409,9 @@ class Folder:
 
        # Refile one or more messages -- may raise os.error.
        # 'tofolder' is an open folder object
-       def refilemessages(self, list, tofolder):
+       def refilemessages(self, list, tofolder, keepsequences=0):
                errors = []
-               refiled = []
+               refiled = {}
                for n in list:
                        ton = tofolder.getlast() + 1
                        path = self.getmessagefilename(n)
@@ -431,15 +431,38 @@ class Folder:
                                                pass
                                        continue
                        tofolder.setlast(ton)
-                       refiled.append(n)
+                       refiled[n] = ton
                if refiled:
-                       self.removefromallsequences(refiled)
+                       if keepsequences:
+                               tofolder._copysequences(self, refiled.items())
+                       self.removefromallsequences(refiled.keys())
                if errors:
                        if len(errors) == 1:
                                raise os.error, errors[0]
                        else:
                                raise os.error, ('multiple errors:', errors)
 
+       # Helper for refilemessages() to copy sequences
+       def _copysequences(self, fromfolder, refileditems):
+               fromsequences = fromfolder.getsequences()
+               tosequences = self.getsequences()
+               changed = 0
+               for name, seq in fromsequences.items():
+                       try:
+                               toseq = tosequences[name]
+                               new = 0
+                       except:
+                               toseq = []
+                               new = 1
+                       for fromn, ton in refileditems:
+                               if fromn in seq:
+                                       toseq.append(ton)
+                                       changed = 1
+                       if new and toseq:
+                               tosequences[name] = toseq
+               if changed:
+                       self.putsequences(tosequences)
+
        # Move one message over a specific destination message,
        # which may or may not already exist.
        def movemessage(self, n, tofolder, ton):