def move_messages(self, uids, from_folder, to_folder_name): """ Move messages to a specific folder. Creates the target folder if it doesn't exist. Returns whether or not a folder named `to_folder_name` was created. """ created_target_folder = False # Get or create folder `to_folder_name` target_folder = self.get_folder(to_folder_name) if target_folder is None: self.client.create_folder(to_folder_name) created_target_folder = True # Clear cache so get_folder fetches the new created folder self._folders_reverse = None self._folders = None target_folder = self.get_folder(to_folder_name) logger.debug('Created target folder: %s', target_folder.get_name(full=True)) is_selected, select_info = self.select_folder(from_folder.get_search_name(), readonly=False) # pylint: disable=W0612 if is_selected: self.client.copy(uids, target_folder.get_search_name()) # Delete remote messages uids = ','.join([str(val) for val in uids]) self.client.add_flags(uids, DELETED) self.client.close_folder() return created_target_folder
def get_messages(self, uids, modifiers, folder, readonly=True): # pylint: disable=R0913 """ Retrieve `modifiers` data for messages identified by `uids` in `folder`. Returns the data as a list. """ if not isinstance(uids, list): uids = [uids] if 'INTERNALDATE' not in modifiers: modifiers.append('INTERNALDATE') messages = [] name = folder.get_search_name() is_selected, select_info = self.select_folder(name, readonly=readonly) # pylint: disable=W0612 if is_selected: logger.debug('Fetching %d messages from %s', len(uids), folder.get_name(full=True)) response = self.client.fetch(uids, modifiers) if len(response.items()) > 0: for uid, data in response.items(): message = Message(data, uid=uid, folder=folder) messages.append(message) self.client.close_folder() return messages
def delete_messages(self, folder, uids): """ Delete messages from the currently selected folder. Returns the flags set for each modified message. """ response = None is_selected, select_info = self.select_folder( # pylint: disable=W0612 folder.get_search_name(), readonly=False ) if is_selected: logger.debug('Deleting %d messages from %s', len(uids), folder.get_name(full=True)) response = self.client.add_flags(uids, DELETED) self.client.close_folder() return response
def toggle_seen(self, folder, uids, seen=True): """ Toggle the flag `SEEN` for `uids` in `folder`. """ response = None is_selected, select_info = self.select_folder( # pylint: disable=W0612 folder.get_search_name(), readonly=False ) if is_selected: logger.debug('Marking %d messages from %s with seen=%s', len(uids), folder.get_name(full=True), seen) if seen: response = self.client.add_flags(uids, [SEEN]) else: response = self.client.remove_flags(uids, [SEEN]) self.client.close_folder() return response