[Spambayes-checkins] spambayes/Outlook2000/dialogs FolderSelector.py,1.5,1.6

Mark Hammond mhammond@users.sourceforge.net
Fri Nov 1 05:48:02 2002


Update of /cvsroot/spambayes/spambayes/Outlook2000/dialogs
In directory usw-pr-cvs1:/tmp/cvs-serv548/dialogs

Modified Files:
	FolderSelector.py 
Log Message:
All items are now identified by a (store_id, entry_id) tuple.  This was
done in such a way that old config files should be fully supported - no
need to reconfigure.

Not much should look different, except mutiple stores should be *fully*
supported - you should be able to train and filter across stores to your
hearts content.


Index: FolderSelector.py
===================================================================
RCS file: /cvsroot/spambayes/spambayes/Outlook2000/dialogs/FolderSelector.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** FolderSelector.py	31 Oct 2002 21:57:00 -0000	1.5
--- FolderSelector.py	1 Nov 2002 05:47:59 -0000	1.6
***************
*** 53,63 ****
  from win32com.mapi.mapitags import *
  
  def _BuildFoldersMAPI(msgstore, folder):
      # Get the hierarchy table for it.
      table = folder.GetHierarchyTable(0)
      children = []
!     rows = mapi.HrQueryAllRows(table, (PR_ENTRYID,PR_DISPLAY_NAME_A), None, None, 0)
!     for (eid_tag, eid),(name_tag, name) in rows:
!         spec = FolderSpec(mapi.HexFromBin(eid), name)
          child_folder = msgstore.OpenEntry(eid, None, mapi.MAPI_DEFERRED_ERRORS)
          spec.children = _BuildFoldersMAPI(msgstore, child_folder)
--- 53,66 ----
  from win32com.mapi.mapitags import *
  
+ default_store_id = None
+ 
  def _BuildFoldersMAPI(msgstore, folder):
      # Get the hierarchy table for it.
      table = folder.GetHierarchyTable(0)
      children = []
!     rows = mapi.HrQueryAllRows(table, (PR_ENTRYID, PR_STORE_ENTRYID, PR_DISPLAY_NAME_A), None, None, 0)
!     for (eid_tag, eid),(storeeid_tag, store_eid), (name_tag, name) in rows:
!         folder_id = mapi.HexFromBin(store_eid), mapi.HexFromBin(eid)
!         spec = FolderSpec(folder_id, name)
          child_folder = msgstore.OpenEntry(eid, None, mapi.MAPI_DEFERRED_ERRORS)
          spec.children = _BuildFoldersMAPI(msgstore, child_folder)
***************
*** 66,79 ****
  
  def BuildFolderTreeMAPI(session):
      root = FolderSpec(None, "root")
      tab = session.GetMsgStoresTable(0)
!     rows = mapi.HrQueryAllRows(tab, (PR_ENTRYID, PR_DISPLAY_NAME_A), None, None, 0)
      for row in rows:
!         (eid_tag, eid), (name_tag, name) = row
          msgstore = session.OpenMsgStore(0, eid, None, mapi.MDB_NO_MAIL | mapi.MAPI_DEFERRED_ERRORS)
          hr, data = msgstore.GetProps( ( PR_IPM_SUBTREE_ENTRYID,), 0)
          subtree_eid = data[0][1]
          folder = msgstore.OpenEntry(subtree_eid, None, mapi.MAPI_DEFERRED_ERRORS)
!         spec = FolderSpec(mapi.HexFromBin(subtree_eid), name)
          spec.children = _BuildFoldersMAPI(msgstore, folder)
          root.children.append(spec)
--- 69,89 ----
  
  def BuildFolderTreeMAPI(session):
+     global default_store_id
      root = FolderSpec(None, "root")
      tab = session.GetMsgStoresTable(0)
!     prop_tags = PR_ENTRYID, PR_DEFAULT_STORE, PR_DISPLAY_NAME_A
!     rows = mapi.HrQueryAllRows(tab, prop_tags, None, None, 0)
      for row in rows:
!         (eid_tag, eid), (is_def_tag, is_def), (name_tag, name) = row
!         hex_eid = mapi.HexFromBin(eid)
!         if is_def:
!             default_store_id = hex_eid
! 
          msgstore = session.OpenMsgStore(0, eid, None, mapi.MDB_NO_MAIL | mapi.MAPI_DEFERRED_ERRORS)
          hr, data = msgstore.GetProps( ( PR_IPM_SUBTREE_ENTRYID,), 0)
          subtree_eid = data[0][1]
          folder = msgstore.OpenEntry(subtree_eid, None, mapi.MAPI_DEFERRED_ERRORS)
!         folder_id = hex_eid, mapi.HexFromBin(subtree_eid)
!         spec = FolderSpec(folder_id, name)
          spec.children = _BuildFoldersMAPI(msgstore, folder)
          root.children.append(spec)
***************
*** 126,129 ****
--- 136,153 ----
          self.checkbox_text = checkbox_text or "Include &subfolders"
  
+     def CompareIDs(self, id1, id2):
+         if type(id1) != type(()):
+             id1 = default_store_id, id1
+         if type(id2) != type(()):
+             id2 = default_store_id, id2
+         return self.mapi.CompareEntryIDs(mapi.BinFromHex(id1[0]), mapi.BinFromHex(id2[0])) and \
+                self.mapi.CompareEntryIDs(mapi.BinFromHex(id1[1]), mapi.BinFromHex(id2[1]))
+ 
+     def InIDs(self, id, ids):
+         for id_check in ids:
+             if self.CompareIDs(id_check, id):
+                 return True
+         return False
+ 
      def _MakeItemParam(self, item):
          item_id = self.next_item_id
***************
*** 144,148 ****
                  mask = state = 0
              else:
!                 if self.selected_ids and child.folder_id in self.selected_ids:
                      state = INDEXTOSTATEIMAGEMASK(IIL_CHECKED)
                      num_children_selected += 1
--- 168,172 ----
                  mask = state = 0
              else:
!                 if self.selected_ids and self.InIDs(child.folder_id, self.selected_ids):
                      state = INDEXTOSTATEIMAGEMASK(IIL_CHECKED)
                      num_children_selected += 1
***************
*** 152,156 ****
              item_id = self._MakeItemParam(child)
              hitem = self.list.InsertItem(hParent, 0, (None, state, mask, text, bitmapCol, bitmapSel, cItems, item_id))
!             if self.single_select and self.selected_ids and child.folder_id in self.selected_ids:
                  self.list.SelectItem(hitem)
  
--- 176,180 ----
              item_id = self._MakeItemParam(child)
              hitem = self.list.InsertItem(hParent, 0, (None, state, mask, text, bitmapCol, bitmapSel, cItems, item_id))
!             if self.single_select and self.selected_ids and self.InIDs(child.folder_id, self.selected_ids):
                  self.list.SelectItem(hitem)