summaryrefslogtreecommitdiff
path: root/service/pixelated
diff options
context:
space:
mode:
Diffstat (limited to 'service/pixelated')
-rw-r--r--service/pixelated/adapter/mail_service.py21
-rw-r--r--service/pixelated/adapter/pixelated_mail.py13
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