From 7c385309dfe9fcfbbad012d46f44e0b19aee82b1 Mon Sep 17 00:00:00 2001 From: Victor Shyba Date: Tue, 25 Aug 2015 18:36:51 -0300 Subject: [refactor] remove mailbox references Extracted listener logic and removed remaining mailboxes references Issues -- #439 -- #440 --- .../adapter/listeners/mailbox_indexer_listener.py | 8 +++++++ service/pixelated/adapter/services/mail_service.py | 7 +++--- service/pixelated/config/services.py | 28 +++++++--------------- service/pixelated/resources/mails_resource.py | 10 +++++--- 4 files changed, 27 insertions(+), 26 deletions(-) (limited to 'service/pixelated') diff --git a/service/pixelated/adapter/listeners/mailbox_indexer_listener.py b/service/pixelated/adapter/listeners/mailbox_indexer_listener.py index ce056a3c..8e7eca1a 100644 --- a/service/pixelated/adapter/listeners/mailbox_indexer_listener.py +++ b/service/pixelated/adapter/listeners/mailbox_indexer_listener.py @@ -52,3 +52,11 @@ class MailboxIndexerListener(object): def __repr__(self): return 'MailboxListener: ' + self.mailbox_name + + +@defer.inlineCallbacks +def listen_all_mailboxes(account, search_engine, mail_store): + MailboxIndexerListener.SEARCH_ENGINE = search_engine + mailboxes = yield account.account.list_all_mailbox_names() + for mailbox_name in mailboxes: + yield MailboxIndexerListener.listen(account, mailbox_name, mail_store) diff --git a/service/pixelated/adapter/services/mail_service.py b/service/pixelated/adapter/services/mail_service.py index 4623a5eb..d47bdd87 100644 --- a/service/pixelated/adapter/services/mail_service.py +++ b/service/pixelated/adapter/services/mail_service.py @@ -21,8 +21,7 @@ from pixelated.adapter.services.tag_service import extract_reserved_tags class MailService(object): - def __init__(self, mailboxes, mail_sender, mail_store, soledad_querier, search_engine): - self.mailboxes = mailboxes + def __init__(self, mail_sender, mail_store, soledad_querier, search_engine): self.mail_store = mail_store self.querier = soledad_querier self.search_engine = search_engine @@ -122,9 +121,9 @@ class MailService(object): else: yield self.mail_store.move_mail_to_mailbox(mail_id, 'TRASH') + @defer.inlineCallbacks def recover_mail(self, mail_id): - recovered_mail = self.mailboxes.move_to_inbox(mail_id) - self.search_engine.index_mail(recovered_mail) + yield self.mail_store.move_mail_to_mailbox(mail_id, 'INBOX') @defer.inlineCallbacks def delete_permanent(self, mail_id): diff --git a/service/pixelated/config/services.py b/service/pixelated/config/services.py index 2decaab1..4637a6f9 100644 --- a/service/pixelated/config/services.py +++ b/service/pixelated/config/services.py @@ -2,11 +2,10 @@ from pixelated.adapter.mailstore.searchable_mailstore import SearchableMailStore from pixelated.adapter.services.mail_service import MailService from pixelated.adapter.model.mail import InputMail from pixelated.adapter.services.mail_sender import MailSender -from pixelated.adapter.services.mailboxes import Mailboxes from pixelated.adapter.soledad.soledad_querier import SoledadQuerier from pixelated.adapter.search import SearchEngine from pixelated.adapter.services.draft_service import DraftService -from pixelated.adapter.listeners.mailbox_indexer_listener import MailboxIndexerListener +from pixelated.adapter.listeners.mailbox_indexer_listener import listen_all_mailboxes from twisted.internet import defer @@ -26,18 +25,12 @@ class Services(object): self.wrap_mail_store_with_indexing_mail_store(leap_session) - pixelated_mailboxes = Mailboxes( - leap_session.account, - leap_session.mail_store, - soledad_querier, - self.search_engine) - yield pixelated_mailboxes.index_mailboxes() + yield listen_all_mailboxes(leap_session.account, self.search_engine, leap_session.mail_store) - self.mail_service = yield self.setup_mail_service( + self.mail_service = self.setup_mail_service( leap_session, soledad_querier, - self.search_engine, - pixelated_mailboxes) + self.search_engine) self.keymanager = leap_session.nicknym self.draft_service = self.setup_draft_service(leap_session.mail_store) @@ -60,22 +53,19 @@ class Services(object): key = yield soledad_querier.get_index_masterkey() print 'The key len is: %s' % len(key) search_engine = SearchEngine(key, agent_home=leap_home) - MailboxIndexerListener.SEARCH_ENGINE = search_engine self.search_engine = search_engine - @defer.inlineCallbacks - def setup_mail_service(self, leap_session, soledad_querier, search_engine, pixelated_mailboxes): - if False: # FIXME - yield pixelated_mailboxes.add_welcome_mail_for_fresh_user() + def setup_mail_service(self, leap_session, soledad_querier, search_engine): + # if False: FIXME + # yield pixelated_mailboxes.add_welcome_mail_for_fresh_user() pixelated_mail_sender = MailSender( leap_session.account_email(), leap_session.smtp) - defer.returnValue(MailService( - pixelated_mailboxes, + return MailService( pixelated_mail_sender, leap_session.mail_store, soledad_querier, - search_engine)) + search_engine) def setup_draft_service(self, mail_store): return DraftService(mail_store) diff --git a/service/pixelated/resources/mails_resource.py b/service/pixelated/resources/mails_resource.py index e18fe2c3..ce05ff3a 100644 --- a/service/pixelated/resources/mails_resource.py +++ b/service/pixelated/resources/mails_resource.py @@ -2,7 +2,7 @@ import json from pixelated.adapter.services.mail_sender import SMTPDownException from pixelated.adapter.model.mail import InputMail from twisted.web.server import NOT_DONE_YET -from pixelated.resources import respond_json, respond_json_deferred +from pixelated.resources import respond_json_deferred from twisted.web.resource import Resource from twisted.web import server from twisted.internet import defer @@ -85,9 +85,13 @@ class MailsRecoverResource(Resource): def render_POST(self, request): idents = json.loads(request.content.read())['idents'] + deferreds = [] for ident in idents: - self._mail_service.recover_mail(ident) - return respond_json(None, request) + deferreds.append(self._mail_service.recover_mail(ident)) + d = defer.gatherResults(deferreds, consumeErrors=True) + d.addCallback(lambda _: respond_json_deferred(None, request)) + d.addErrback(lambda _: respond_json_deferred(None, request, status_code=500)) + return NOT_DONE_YET class MailsResource(Resource): -- cgit v1.2.3