def _viewSelectionToMailboxSelector(store, viewSelection): """ Convert a 'view selection' object, sent from the client, into a MailboxSelector object which will be used to view the mailbox. @param store: an L{axiom.store.Store} that contains some messages. @param viewSelection: a dictionary with 4 keys: 'view', 'tag', 'person', 'account'. This dictionary represents the selections that users have made in the 4-section 'complexity 3' filtering UI. Each key may have a string value, or None. If the value is None, the user has selected 'All' for that key in the UI; if the value is a string, the user has selected that string. @return: a L{MailboxSelector} object. """ view, tag, personWebID, account = map( viewSelection.__getitem__, [u"view", u"tag", u"person", u"account"]) sq = MailboxSelector(store) sq.setLimit(None) if view in TOUCH_ONCE_VIEWS: sq.setOldestFirst() else: sq.setNewestFirst() if view == u'all': view = CLEAN_STATUS sq.refineByStatus(view) # 'view' is really a status! and the names # even line up! if tag is not None: sq.refineByTag(tag) if account is not None: sq.refineBySource(account) if personWebID is not None: person = ixmantissa.IWebTranslator(store).fromWebID(personWebID) sq.refineByPerson(person) return sq
def _viewSelectionToMailboxSelector(store, viewSelection): """ Convert a 'view selection' object, sent from the client, into a MailboxSelector object which will be used to view the mailbox. @param store: an L{axiom.store.Store} that contains some messages. @param viewSelection: a dictionary with 4 keys: 'view', 'tag', 'person', 'account'. This dictionary represents the selections that users have made in the 4-section 'complexity 3' filtering UI. Each key may have a string value, or None. If the value is None, the user has selected 'All' for that key in the UI; if the value is a string, the user has selected that string. @return: a L{MailboxSelector} object. """ view, tag, personWebID, account = map(viewSelection.__getitem__, [u"view", u"tag", u"person", u"account"]) sq = MailboxSelector(store) sq.setLimit(None) if view in TOUCH_ONCE_VIEWS: sq.setOldestFirst() else: sq.setNewestFirst() if view == u"all": view = CLEAN_STATUS sq.refineByStatus(view) # 'view' is really a status! and the names # even line up! if tag is not None: sq.refineByTag(tag) if account is not None: sq.refineBySource(account) if personWebID is not None: person = ixmantissa.IWebTranslator(store).fromWebID(personWebID) sq.refineByPerson(person) return sq