summaryrefslogtreecommitdiff
path: root/service/pixelated/adapter/mail_service.py
diff options
context:
space:
mode:
authorDuda Dornelles <ddornell@thoughtworks.com>2014-08-29 16:29:22 -0300
committerDuda Dornelles <ddornell@thoughtworks.com>2014-08-29 18:10:48 -0300
commitb727ab8090790db2854dac191faee702f085ac20 (patch)
tree6fc0fc8be8410def37d1931ea17a490f5bca96f1 /service/pixelated/adapter/mail_service.py
parentc11bef55ee74edddaa054456338ebd3bbf72ee2f (diff)
Refactoring into mailboxes and mailsender - less colaborators for mail service
Diffstat (limited to 'service/pixelated/adapter/mail_service.py')
-rw-r--r--service/pixelated/adapter/mail_service.py73
1 files changed, 12 insertions, 61 deletions
diff --git a/service/pixelated/adapter/mail_service.py b/service/pixelated/adapter/mail_service.py
index 48495d51..6949d6cb 100644
--- a/service/pixelated/adapter/mail_service.py
+++ b/service/pixelated/adapter/mail_service.py
@@ -13,79 +13,33 @@
#
# You should have received a copy of the GNU Affero General Public License
# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
-import traceback
-import sys
-import os
-import smtplib
-from pixelated.bitmask_libraries.smtp import LeapSmtp
+
from twisted.internet import defer
-from pixelated.bitmask_libraries.config import LeapConfig
-from pixelated.bitmask_libraries.provider import LeapProvider
-from pixelated.bitmask_libraries.session import LeapSessionFactory
-from pixelated.bitmask_libraries.auth import LeapCredentials
from pixelated.adapter.pixelated_mailbox import PixelatedMailbox
from pixelated.adapter.tag import Tag
-def open_leap_session(username, password, server_name):
- try:
- certs_home = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "certificates"))
-
- config = LeapConfig(certs_home=certs_home)
- provider = LeapProvider(server_name, config)
- session = LeapSessionFactory(provider).create(LeapCredentials(username, password))
- return session
- except:
- traceback.print_exc(file=sys.stdout)
- raise
-
-
class MailService:
__slots__ = ['leap_session', 'account', 'mailbox_name']
- def __init__(self, leap_session):
- self.leap_session = leap_session
- self.account = leap_session.account
- self.user_email = leap_session.account_email()
- self.mailbox_name = 'INBOX'
-
- def start(self):
- try:
- self.smtp_server = self._create_smtp_server()
- self.smtp_client = self._create_smtp_client(self.smtp_server.smtp_info())
- except:
- traceback.print_exc(file=sys.stdout)
- raise
-
- def _create_smtp_server(self):
- server = LeapSmtp(self.leap_session.provider, self.leap_session.nicknym.keymanager, self.leap_session.srp_session)
- server.start()
- return server
-
- def _create_smtp_client(self, smtp_info):
- smtp_servername, smtp_port = smtp_info
- client = smtplib.SMTP(smtp_servername, smtp_port)
- return client
+ def __init__(self, mailboxes, mail_sender):
+ self.mailboxes = mailboxes
+ self.mail_sender = mail_sender
@property
def mailbox(self):
- return PixelatedMailbox(self.account.getMailbox(self.mailbox_name))
+ return self.mailboxes.inbox()
def mails(self, query):
+ _mails = None
+
if not query:
return self.mailbox.mails()
- mails = []
if query['tags']:
- tags = [Tag(tag) for tag in query['tags']]
- for leap_mailbox_name in self.account.mailboxes:
- mailbox = PixelatedMailbox(self.account.getMailbox(leap_mailbox_name))
- if len(mailbox.all_tags().intersection(tags)):
- # mailbox has at least one mail with tag
- for mail in mailbox.mails():
- if len(mail.tags.intersection(tags)) > 0:
- mails.append(mail)
- return mails
+ _mails = self.mailboxes.mails_by_tag(query['tags'])
+
+ return sorted(_mails or [], key=lambda mail: mail.date, reverse=True)
def update_tags(self, mail_id, new_tags):
mail = self.mail(mail_id)
@@ -113,17 +67,14 @@ class MailService:
def _set_mail_flags(self, mail_id, flags, operation):
observer = defer.Deferred()
- leap_mailbox = self.account.getMailbox(self.mailbox_name)
+ 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)
def send(self, mail):
- _from = self.user_email
- _to = mail.get_to()
-
- self.smtp_client.sendmail(_from, _to, mail.to_smtp_format(_from=_from))
+ self.mail_sender.sendmail(mail)
def all_tags(self):
return self.mailbox.all_tags()