def do_unsubscribefolder(self, folder): if folder_name not in self.lsub(): print "not subscribed. maybe 'reload' and/or 'lsub'?" return im_resp(self.im.unsubscribe(folder)) self._lsub_cache = None
def do_subscribefolder(self, folder_name): if folder_name in self.lsub(): print "already subscribed. maybe 'reload' and/or 'lsub'?" return im_resp(self.im.subscribe(folder_name)) if self.im.select(folder_name,readonly=True)[0] != 'OK': print "I subscribed, but I can't select it. You might want to unsubscribe"
def do_newfolder(self, folder_name): if not self.valid_folder.match(folder_name): print ("I'm not very adventurous, I'll only let you create folders named \"%s\"" % validfolder_expr) return im_resp(self.im.create(folder_name)) im_resp(self.im.subscribe(folder_name)) self._lsub_cache = None
def _lsub(self): if self._lsub_cache is not None: return self._lsub_cache # im.lsub() returns a relatively raw response like # ['(\Nochildren \Seen \Bacon) "/" "INBOX"', # '() "/" "lists/reddit-dev_googlegroups_com"', # '() "/" "lists/commits.couchdb.apache.org"' ] folders_descr = im_resp(im.lsub()) folders = [] for x in folders_descr: folders_descr = [ split_quoted(x) for x in folders_descr ] # we're going to force the use of / as a separator, even if # the server disagrees folders = [ '/'.join(x[2].split(x[1])) for x in folders_descr ] self._lsub_cache = folders return self._lsub_cache def _copymove(self, new_folder, delete): if new_folder not in self._lsub(): print "I can't find \"%s\" on the remote side" % newfolder return next_msg_num = self._find_next_msg_num() im_resp.copy(self.messages[self.current_message_index][0], new_folder) if delete: self._set_flag('\\Deleted') self._reload() self._try_select_msg_num(next_msg_num) if self.messages: self.do_messages(None) self.do_show(None)
def _set_flag(self, flag): im_resp(im.select(self.imap_folder, readonly = False)) im_resp(im.store(self.messages[self.current_message_index][0], "+FLAGS", flag)) # go back to readonly mode im_resp(im.select(self.imap_folder, readonly = True))