def filter_keywords(self, session, msg_mid, msg, keywords, is_new=True): keywordmap = {} msg_idx_list = [msg_mid] for kw in keywords: keywordmap[unicode(kw)] = msg_idx_list import mailpile.plugins.tags ftypes = set(mailpile.plugins.tags.FILTER_TYPES) if not is_new: ftypes -= set(['incoming']) for (fid, terms, tags, comment, ftype ) in session.config.get_filters(types=ftypes): if (terms == '*' or len(self.search(None, terms.split(), keywords=keywordmap)) > 0): for t in tags.split(): for fmt in ('%s:in', '%s:tag'): kw = unicode(fmt % t[1:]) if kw in keywordmap: del keywordmap[kw] if t[0] != '-': keywordmap[unicode('%s:in' % t[1:])] = msg_idx_list return set(keywordmap.keys())
def apply_filters(self, session, filter_on, msg_mids=None, msg_idxs=None): if msg_idxs is None: msg_idxs = [int(mid, 36) for mid in msg_mids] if not msg_idxs: return for fid, trms, tags, c, t in session.config.get_filters(filter_on=filter_on): for t in tags.split(): tag_id = t[1:].split(":")[0] if t[0] == "-": self.remove_tag(session, tag_id, msg_idxs=set(msg_idxs)) else: self.add_tag(session, tag_id, msg_idxs=set(msg_idxs))