def imap_status(self, tag, argparser): original_name = argparser.parse() items = argparser.parse() name = utils.normpath(original_name) mailmanager = self._account.get_mailmanager() if not mailmanager.folder_exists(name): return 'NO command failed; folder does not exist' results = [] for item in items: results.append(item) if item == 'MESSAGES': results.append(str(mailmanager.get_count(name))) elif item == 'RECENT': results.append('0') elif item == 'UIDVALIDITY': results.append(str(UID_VALIDITY)) elif item == 'UNSEEN': results.append(str(mailmanager.get_count_unread(name))) elif item == 'UIDNEXT': results.append(str(mailmanager.next_uid_peek(name))) else: return 'BAD STATUS failed; item %s invalid' % (item) self._sock.sendline('* STATUS "%s" (%s)' % (utils.imap_escape(original_name), ' '.join(results))) return 'OK STATUS completed'
def imap_list(self, tag, argparser): ref = argparser.parse() name = argparser.parse() # TODO: worth supporting \Marked and \Umarked attributes? if len(name) == 0: self._sock.sendline('* LIST (\Noselect) "\\\\" "%s"' % (utils.imap_escape(ref))) return 'OK LIST completed' fullname = '\\'.join([ref, name]) if ref else name matcher = utils.mailbox_matcher(utils.normpath(fullname)) all_folders = self._account.get_mailmanager().get_folders() matched_folders = filter(lambda x: matcher.match(x), all_folders) for folder in matched_folders: fullname = '\\'.join([ref, folder]) if ref else folder name = utils.imap_escape(utils.normpath(fullname)) self._sock.sendline('* LIST () "\\\\" "%s"' % (name)) return 'OK LIST completed'
def imap_lsub(self, tag, argparser): ref = argparser.parse() name = argparser.parse() fullname = '\\'.join([ref, name]) if ref else name matcher = utils.mailbox_matcher(utils.normpath(fullname)) matched_folders = filter(lambda x: matcher.match(x), self._subscriptions) for folder in matched_folders: fullname = '\\'.join([ref, folder]) if ref else folder path = utils.normpath(fullname) flags = [] escapedpath = utils.imap_escape(path) self._sock.sendline('* LSUB (%s) "\\\\" "%s"' % (' '.join(flags), escapedpath)) return 'OK LSUB completed'