[Spambayes-checkins] spambayes/Outlook2000 addin.py,1.47,1.48 filter.py,1.15,1.16 msgstore.py,1.38,1.39

Mark Hammond mhammond at users.sourceforge.net
Mon Feb 3 22:17:34 EST 2003


Update of /cvsroot/spambayes/spambayes/Outlook2000
In directory sc8-pr-cvs1:/tmp/cvs-serv19811

Modified Files:
	addin.py filter.py msgstore.py 
Log Message:
Fix [ 642740 ] "Recover from Spam" wrong folder
We now remember the folder from where we filtered a message from, so
"Recover from Spam" restores it to the correct, original folder.


Index: addin.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/addin.py,v
retrieving revision 1.47
retrieving revision 1.48
diff -C2 -d -r1.47 -r1.48
*** addin.py	27 Jan 2003 22:30:24 -0000	1.47
--- addin.py	4 Feb 2003 06:17:32 -0000	1.48
***************
*** 339,343 ****
          if not msgstore_messages:
              return
-         # Recover to where they were moved from
          # Get the inbox as the default place to restore to
          # (incase we dont know (early code) or folder removed etc
--- 339,342 ----
***************
*** 347,353 ****
          import train
          for msgstore_message in msgstore_messages:
              # Must train before moving, else we lose the message!
              subject = msgstore_message.GetSubject()
!             print "Recovering and ham training message '%s' - " % (subject,),
              if train.train_message(msgstore_message, False, self.manager, rescore = True):
                  print "trained as ham"
--- 346,357 ----
          import train
          for msgstore_message in msgstore_messages:
+             # Recover where they were moved from
+             restore_folder = msgstore_message.GetRememberedFolder()
+             if restore_folder is None:
+                 restore_folder = inbox_folder
+ 
              # Must train before moving, else we lose the message!
              subject = msgstore_message.GetSubject()
!             print "Recovering to folder '%s' and ham training message '%s' - " % (restore_folder.name, subject),
              if train.train_message(msgstore_message, False, self.manager, rescore = True):
                  print "trained as ham"
***************
*** 356,360 ****
              # Now move it.
              # XXX - still don't write the source, so no point looking :(
!             msgstore_message.MoveTo(inbox_folder)
              # Note the move will possibly also trigger a re-train
              # but we are smart enough to know we have already done it.
--- 360,364 ----
              # Now move it.
              # XXX - still don't write the source, so no point looking :(
!             msgstore_message.MoveTo(restore_folder)
              # Note the move will possibly also trigger a re-train
              # but we are smart enough to know we have already done it.

Index: filter.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/filter.py,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** filter.py	4 Feb 2003 04:00:08 -0000	1.15
--- filter.py	4 Feb 2003 06:17:32 -0000	1.16
***************
*** 26,30 ****
--- 26,33 ----
  
      try:
+         # Save the score
          msg.SetField(mgr.config.field_score_name, prob)
+         # and the ID of the folder we were in when scored.
+         msg.RememberMessageCurrentFolder()
          msg.Save()
  

Index: msgstore.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/msgstore.py,v
retrieving revision 1.38
retrieving revision 1.39
diff -C2 -d -r1.38 -r1.39
*** msgstore.py	23 Jan 2003 12:17:35 -0000	1.38
--- msgstore.py	4 Feb 2003 06:17:32 -0000	1.39
***************
*** 694,697 ****
--- 694,744 ----
      def CopyTo(self, folder):
          self._DoCopyMove(folder, False)
+     def GetFolder(self):
+         # return a folder object with the parent, or None
+         folder = self.msgstore._OpenEntry(self.id)
+         prop_ids = PR_PARENT_ENTRYID,
+         hr, data = folder.GetProps(prop_ids,0)
+         # Put parent ids together
+         parent_eid = data[0][1]
+         parent_id = self.id[0], parent_eid
+         parent = self.msgstore._OpenEntry(parent_id)
+         # Finally get the display name.
+         hr, data = folder.GetProps((PR_DISPLAY_NAME_A,), 0)
+         name = data[0][1]
+         count = parent.GetContentsTable(0).GetRowCount(0)
+         return MAPIMsgStoreFolder(self.msgstore, parent_id, name, count)
+ 
+     def RememberMessageCurrentFolder(self):
+         self._EnsureObject()
+         folder = self.GetFolder()
+         props = ( (mapi.PS_PUBLIC_STRINGS, "SpamBayesOriginalFolderStoreID"),
+                   (mapi.PS_PUBLIC_STRINGS, "SpamBayesOriginalFolderID")
+                   )
+         resolve_ids = self.mapi_object.GetIDsFromNames(props, mapi.MAPI_CREATE)
+         prop_ids = PROP_TAG( PT_BINARY, PROP_ID(resolve_ids[0])), \
+                    PROP_TAG( PT_BINARY, PROP_ID(resolve_ids[1]))
+ 
+         prop_tuples = (prop_ids[0],folder.id[0]), (prop_ids[1],folder.id[1])
+         self.mapi_object.SetProps(prop_tuples)
+         self.dirty = True
+ 
+     def GetRememberedFolder(self):
+         props = ( (mapi.PS_PUBLIC_STRINGS, "SpamBayesOriginalFolderStoreID"),
+                   (mapi.PS_PUBLIC_STRINGS, "SpamBayesOriginalFolderID")
+                   )
+         try:
+             self._EnsureObject()
+             resolve_ids = self.mapi_object.GetIDsFromNames(props, mapi.MAPI_CREATE)
+             prop_ids = PROP_TAG( PT_BINARY, PROP_ID(resolve_ids[0])), \
+                        PROP_TAG( PT_BINARY, PROP_ID(resolve_ids[1]))
+             hr, data = self.mapi_object.GetProps(prop_ids,0)
+             if hr != 0:
+                 return None
+             (store_tag, store_id), (eid_tag, eid) = data
+             folder_id = mapi.HexFromBin(store_id), mapi.HexFromBin(eid)
+             return self.msgstore.GetFolder(folder_id)
+         except:
+             print "Error locating origin of message", self
+             return None
  
  def test():





More information about the Spambayes-checkins mailing list