Пример #1
0
 def remove_tag(self, session, tag_id,
                msg_info=None, msg_idxs=None, conversation=False):
     CachedSearchResultSet.DropCaches()
     pls = GlobalPostingList(session, '%s:tag' % tag_id)
     if msg_info and msg_idxs is None:
         msg_idxs = set([int(msg_info[self.MSG_MID], 36)])
     else:
         msg_idxs = set(msg_idxs)
     if not msg_idxs:
         return
     session.ui.mark(_('Untagging conversations (%s)') % (tag_id, ))
     for msg_idx in list(msg_idxs):
         if conversation:
             for reply in self.get_conversation(msg_idx=msg_idx):
                 if reply[self.MSG_MID]:
                     msg_idxs.add(int(reply[self.MSG_MID], 36))
     session.ui.mark(_('Untagging %d messages (%s)') % (len(msg_idxs),
                                                     tag_id))
     eids = []
     for msg_idx in msg_idxs:
         if msg_idx >= 0 and msg_idx < len(self.INDEX):
             msg_info = self.get_msg_at_idx_pos(msg_idx)
             tags = set([r for r in msg_info[self.MSG_TAGS].split(',')
                                 if r])
             if tag_id in tags:
                 tags.remove(tag_id)
                 msg_info[self.MSG_TAGS] = ','.join(list(tags))
                 self.INDEX[msg_idx] = self.m2l(msg_info)
                 self.MODIFIED.add(msg_idx)
             eids.append(msg_info[self.MSG_MID])
     pls.remove(eids)
     pls.save()
Пример #2
0
 def remove_tag(self,
                session,
                tag_id,
                msg_info=None,
                msg_idxs=None,
                conversation=False):
     pls = GlobalPostingList(session, '%s:tag' % tag_id)
     if msg_info and msg_idxs is None:
         msg_idxs = set([int(msg_info[self.MSG_MID], 36)])
     else:
         msg_idxs = set(msg_idxs)
     if not msg_idxs:
         return
     session.ui.mark('Untagging conversations (%s)' % (tag_id, ))
     for msg_idx in list(msg_idxs):
         if conversation:
             for reply in self.get_conversation(msg_idx=msg_idx):
                 if reply[self.MSG_MID]:
                     msg_idxs.add(int(reply[self.MSG_MID], 36))
     session.ui.mark('Untagging %d messages (%s)' % (len(msg_idxs), tag_id))
     eids = []
     for msg_idx in msg_idxs:
         if msg_idx >= 0 and msg_idx < len(self.INDEX):
             msg_info = self.get_msg_at_idx_pos(msg_idx)
             tags = set(
                 [r for r in msg_info[self.MSG_TAGS].split(',') if r])
             if tag_id in tags:
                 tags.remove(tag_id)
                 msg_info[self.MSG_TAGS] = ','.join(list(tags))
                 self.INDEX[msg_idx] = self.m2l(msg_info)
                 self.MODIFIED.add(msg_idx)
             eids.append(msg_info[self.MSG_MID])
     pls.remove(eids)
     pls.save()
Пример #3
0
 def add_tag(self, session, tag_id,
                         msg_info=None, msg_idxs=None, conversation=False):
     pls = GlobalPostingList(session, '%s:tag' % tag_id)
     if msg_info and msg_idxs is None:
         msg_idxs = set([int(msg_info[self.MSG_MID], 36)])
     else:
         msg_idxs = set(msg_idxs)
     session.ui.mark(_('Tagging %d messages (%s)') % (len(msg_idxs), tag_id))
     for msg_idx in list(msg_idxs):
         if conversation:
             for reply in self.get_conversation(msg_idx=msg_idx):
                 if reply[self.MSG_MID]:
                     msg_idxs.add(int(reply[self.MSG_MID], 36))
     for msg_idx in msg_idxs:
         if msg_idx >= 0 and msg_idx < len(self.INDEX):
             msg_info = self.get_msg_at_idx_pos(msg_idx)
             tags = set([r for r in msg_info[self.MSG_TAGS].split(',')
                                 if r])
             tags.add(tag_id)
             msg_info[self.MSG_TAGS] = ','.join(list(tags))
             self.INDEX[msg_idx] = self.m2l(msg_info)
             self.MODIFIED.add(msg_idx)
             pls.append(msg_info[self.MSG_MID])
     pls.save()