diff options
Diffstat (limited to 'service/pixelated/adapter')
-rw-r--r-- | service/pixelated/adapter/mail_service.py | 21 | ||||
-rw-r--r-- | service/pixelated/adapter/pixelated_mail.py | 13 |
2 files changed, 9 insertions, 25 deletions
diff --git a/service/pixelated/adapter/mail_service.py b/service/pixelated/adapter/mail_service.py index 162fa9c5..bc87d37b 100644 --- a/service/pixelated/adapter/mail_service.py +++ b/service/pixelated/adapter/mail_service.py @@ -14,8 +14,6 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see <http://www.gnu.org/licenses/>. -from twisted.internet import defer -from pixelated.adapter.pixelated_mailbox import PixelatedMailbox from pixelated.adapter.tag import Tag @@ -45,31 +43,12 @@ class MailService: mail = self.mail(mail_id) tags = set(Tag(str_tag) for str_tag in new_tags) current_tags, removed_tags = mail.update_tags(tags) - self._update_mail_flags(current_tags, removed_tags, mail_id) self._update_mailbox_tags(tags) return current_tags def _update_mailbox_tags(self, tags): self.mailbox.update_tags(tags) - def _update_mail_flags(self, current_tags, removed_tags, mail_id): - new_flags = ['tag_' + tag.name for tag in current_tags if tag.name not in PixelatedMailbox.SPECIAL_TAGS] - self._append_mail_flags(mail_id, new_flags) - - removed_flags = ['tag_' + tag.name for tag in removed_tags if tag.name not in PixelatedMailbox.SPECIAL_TAGS] - self._remove_mail_flags(mail_id, removed_flags) - - def _append_mail_flags(self, mail_id, flags): - self._set_mail_flags(mail_id, flags, 1) - - def _remove_mail_flags(self, mail_id, flags): - self._set_mail_flags(mail_id, flags, -1) - - def _set_mail_flags(self, mail_id, flags, operation): - observer = defer.Deferred() - leap_mailbox = self.mailboxes.leap_inbox_mailbox() - self.mailbox.messages.set_flags(leap_mailbox, [mail_id], tuple(flags), operation, observer) - def mail(self, mail_id): return self.mailbox.mail(mail_id) diff --git a/service/pixelated/adapter/pixelated_mail.py b/service/pixelated/adapter/pixelated_mail.py index 7d34ac4f..6d460626 100644 --- a/service/pixelated/adapter/pixelated_mail.py +++ b/service/pixelated/adapter/pixelated_mail.py @@ -62,13 +62,18 @@ class PixelatedMail: return temporary_headers def _extract_tags(self): - return Tag.from_flags(self.leap_mail.getFlags()) + return set(Tag(tag_name) for tag_name in self.headers.get('x-tags', [])) def update_tags(self, tags): - old_tags = self.tags self.tags = tags - removed_tags = old_tags.difference(self.tags) - return self.tags, removed_tags + self._persist_mail_tags(tags) + return self.tags + + def _persist_mail_tags(self, current_tags): + tags_headers = [tag.name for tag in current_tags] + hdoc = self.leap_mail.hdoc + hdoc.content['headers']['X-Tags'] = tags_headers + self.leap_mail._soledad.put_doc(hdoc) def has_tag(self, tag): return Tag(tag) in self.tags |