[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