summaryrefslogtreecommitdiff
path: root/service/pixelated/adapter/services/mail_service.py
diff options
context:
space:
mode:
authorDuda Dornelles <ddornell@thoughtworks.com>2014-12-22 09:35:01 -0200
committerDuda Dornelles <ddornell@thoughtworks.com>2014-12-22 09:38:08 -0200
commit66839f191708a0725c8d9841d5266ad13af8ee81 (patch)
tree337fb19e99625cc3243f998a2351cea123c037a2 /service/pixelated/adapter/services/mail_service.py
parenta0cbaf84fd86fc91cba892a7a19b0ade7c017a3c (diff)
refactoring package structure
Diffstat (limited to 'service/pixelated/adapter/services/mail_service.py')
-rw-r--r--service/pixelated/adapter/services/mail_service.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/service/pixelated/adapter/services/mail_service.py b/service/pixelated/adapter/services/mail_service.py
new file mode 100644
index 00000000..722b9a29
--- /dev/null
+++ b/service/pixelated/adapter/services/mail_service.py
@@ -0,0 +1,89 @@
+#
+# Copyright (c) 2014 ThoughtWorks, Inc.
+#
+# Pixelated is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Pixelated is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+
+
+class MailService:
+ __slots__ = ['leap_session', 'account', 'mailbox_name']
+
+ def __init__(self, mailboxes, mail_sender, tag_service, soledad_querier):
+ self.tag_service = tag_service
+ self.mailboxes = mailboxes
+ self.querier = soledad_querier
+ self.mail_sender = mail_sender
+
+ def all_mails(self):
+ return self.querier.all_mails()
+
+ def mails(self, ids):
+ return self.querier.mails(ids)
+
+ def update_tags(self, mail_id, new_tags):
+ reserved_words = self.tag_service.extract_reserved(new_tags)
+ if len(reserved_words):
+ raise ValueError('None of the following words can be used as tags: ' + ' '.join(reserved_words))
+ mail = self.mail(mail_id)
+ mail.update_tags(set(new_tags))
+ return mail
+
+ def mail(self, mail_id):
+ return self.mailboxes.mail(mail_id)
+
+ def send(self, last_draft_ident, mail):
+ self.mail_sender.sendmail(mail)
+ if last_draft_ident:
+ self.mailboxes.drafts().remove(last_draft_ident)
+ return self.mailboxes.sent().add(mail)
+
+ def thread(self, thread_id):
+ raise NotImplementedError()
+
+ def mark_as_read(self, mail_id):
+ return self.mail(mail_id).mark_as_read()
+
+ def mark_as_unread(self, mail_id):
+ return self.mail(mail_id).mark_as_unread()
+
+ def tags_for_thread(self, thread):
+ raise NotImplementedError()
+
+ def add_tag_to_thread(self, thread_id, tag):
+ raise NotImplementedError()
+
+ def remove_tag_from_thread(self, thread_id, tag):
+ raise NotImplementedError()
+
+ def delete_mail(self, mail_id):
+ return self.mailboxes.move_to_trash(mail_id)
+
+ def delete_permanent(self, mail_id):
+ mail = self.mail(mail_id)
+ self.querier.remove_mail(mail)
+
+ def save_draft(self, draft):
+ raise NotImplementedError()
+
+ def draft_reply_for(self, mail_id):
+ raise NotImplementedError()
+
+ def all_contacts(self, query):
+ raise NotImplementedError()
+
+ def drafts(self):
+ raise NotImplementedError()
+
+ def reply_all_template(self, mail_id):
+ mail = self.mail(mail_id)
+ return mail.to_reply_template()