@@ -409,9 +409,9 @@ def removemessages(self, list):
409409
410410 # Refile one or more messages -- may raise os.error.
411411 # 'tofolder' is an open folder object
412- def refilemessages (self , list , tofolder ):
412+ def refilemessages (self , list , tofolder , keepsequences = 0 ):
413413 errors = []
414- refiled = []
414+ refiled = {}
415415 for n in list :
416416 ton = tofolder .getlast () + 1
417417 path = self .getmessagefilename (n )
@@ -431,15 +431,38 @@ def refilemessages(self, list, tofolder):
431431 pass
432432 continue
433433 tofolder .setlast (ton )
434- refiled . append ( n )
434+ refiled [ n ] = ton
435435 if refiled :
436- self .removefromallsequences (refiled )
436+ if keepsequences :
437+ tofolder ._copysequences (self , refiled .items ())
438+ self .removefromallsequences (refiled .keys ())
437439 if errors :
438440 if len (errors ) == 1 :
439441 raise os .error , errors [0 ]
440442 else :
441443 raise os .error , ('multiple errors:' , errors )
442444
445+ # Helper for refilemessages() to copy sequences
446+ def _copysequences (self , fromfolder , refileditems ):
447+ fromsequences = fromfolder .getsequences ()
448+ tosequences = self .getsequences ()
449+ changed = 0
450+ for name , seq in fromsequences .items ():
451+ try :
452+ toseq = tosequences [name ]
453+ new = 0
454+ except :
455+ toseq = []
456+ new = 1
457+ for fromn , ton in refileditems :
458+ if fromn in seq :
459+ toseq .append (ton )
460+ changed = 1
461+ if new and toseq :
462+ tosequences [name ] = toseq
463+ if changed :
464+ self .putsequences (tosequences )
465+
443466 # Move one message over a specific destination message,
444467 # which may or may not already exist.
445468 def movemessage (self , n , tofolder , ton ):
0 commit comments