Example #1
0
    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
Example #2
0
    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
Example #3
0
    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
Example #4
0
    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