From 60966944c2417588811372b1c9037a4df9bd48f3 Mon Sep 17 00:00:00 2001 From: Folker Bernitt Date: Tue, 14 Jul 2015 18:52:19 +0200 Subject: Working on pixelated-user-agent. - Startup works till all mails are queried --- .../adapter/listeners/mailbox_indexer_listener.py | 7 ++++-- service/pixelated/adapter/services/mailboxes.py | 29 ++++++++++++++++------ service/pixelated/application.py | 1 + service/pixelated/bitmask_libraries/session.py | 3 +-- service/pixelated/config/services.py | 19 ++++++++++---- 5 files changed, 43 insertions(+), 16 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 d8e0f81e..0178ee54 100644 --- a/service/pixelated/adapter/listeners/mailbox_indexer_listener.py +++ b/service/pixelated/adapter/listeners/mailbox_indexer_listener.py @@ -14,6 +14,7 @@ # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . +from twisted.internet import defer class MailboxIndexerListener(object): """ Listens for new mails, keeping the index updated """ @@ -21,10 +22,12 @@ class MailboxIndexerListener(object): SEARCH_ENGINE = None @classmethod + @defer.inlineCallbacks def listen(cls, account, mailbox_name, soledad_querier): listener = MailboxIndexerListener(mailbox_name, soledad_querier) - if listener not in account.getMailbox(mailbox_name).listeners: - account.getMailbox(mailbox_name).addListener(listener) + if listener not in (yield account.getMailbox(mailbox_name)).listeners: + mbx = yield account.getMailbox(mailbox_name) + mbx.addListener(listener) def __init__(self, mailbox_name, soledad_querier): self.mailbox_name = mailbox_name diff --git a/service/pixelated/adapter/services/mailboxes.py b/service/pixelated/adapter/services/mailboxes.py index c2b61ca8..1069fc1c 100644 --- a/service/pixelated/adapter/services/mailboxes.py +++ b/service/pixelated/adapter/services/mailboxes.py @@ -13,6 +13,7 @@ # # You should have received a copy of the GNU Affero General Public License # along with Pixelated. If not, see . +from twisted.internet import defer from pixelated.adapter.services.mailbox import Mailbox from pixelated.adapter.listeners.mailbox_indexer_listener import MailboxIndexerListener from pixelated.adapter.model.mail import welcome_mail @@ -24,15 +25,27 @@ class Mailboxes(object): self.account = account self.querier = soledad_querier self.search_engine = search_engine - for mailbox_name in account.mailboxes: - MailboxIndexerListener.listen(self.account, mailbox_name, soledad_querier) + # for mailbox_name in account.mailboxes: + # MailboxIndexerListener.listen(self.account, mailbox_name, soledad_querier) + @defer.inlineCallbacks + def index_mailboxes(self): + mailboxes = yield self.account.account.list_all_mailbox_names() + yield self._index_mailboxes(mailboxes) + + @defer.inlineCallbacks + def _index_mailboxes(self, mailboxes): + for mailbox_name in mailboxes: + yield MailboxIndexerListener.listen(self.account, mailbox_name, self.querier) + + @defer.inlineCallbacks def _create_or_get(self, mailbox_name): mailbox_name = mailbox_name.upper() - if mailbox_name not in self.account.mailboxes: - self.account.addMailbox(mailbox_name) - MailboxIndexerListener.listen(self.account, mailbox_name, self.querier) - return Mailbox.create(mailbox_name, self.querier, self.search_engine) + # if mailbox_name not in self.account.mailboxes: + if mailbox_name not in (yield self.account.account.list_all_mailbox_names()): + yield self.account.addMailbox(mailbox_name) + yield MailboxIndexerListener.listen(self.account, mailbox_name, self.querier) + defer.returnValue(Mailbox.create(mailbox_name, self.querier, self.search_engine)) @property def inbox(self): @@ -68,7 +81,9 @@ class Mailboxes(object): def mail(self, mail_id): return self.querier.mail(mail_id) + @defer.inlineCallbacks def add_welcome_mail_for_fresh_user(self): - if self.inbox.fresh: + inbox = yield self._create_or_get('INBOX') + if inbox.fresh: mail = welcome_mail() self.inbox.add(mail) diff --git a/service/pixelated/application.py b/service/pixelated/application.py index 6d83c6f7..68bb70b2 100644 --- a/service/pixelated/application.py +++ b/service/pixelated/application.py @@ -35,6 +35,7 @@ def start_user_agent(loading_app, host, port, sslkey, sslcert, leap_home, leap_s yield loading_app.stopListening() services = Services(leap_home, leap_session) + yield services.setup(leap_home, leap_session) resource = RootResource() diff --git a/service/pixelated/bitmask_libraries/session.py b/service/pixelated/bitmask_libraries/session.py index a18d88d5..974e1cef 100644 --- a/service/pixelated/bitmask_libraries/session.py +++ b/service/pixelated/bitmask_libraries/session.py @@ -111,8 +111,7 @@ class LeapSessionFactory(object): soledad = SoledadSessionFactory.create(self._provider, auth.token, auth.uuid, password) - # nicknym = self._create_nicknym(account_email, auth.token, auth.uuid, soledad) - nicknym = None + nicknym = self._create_nicknym(account_email, auth.token, auth.uuid, soledad) account = self._create_account(account_email, soledad) # incoming_mail_fetcher = self._create_incoming_mail_fetcher(nicknym, soledad, auth, auth.username) incoming_mail_fetcher = None diff --git a/service/pixelated/config/services.py b/service/pixelated/config/services.py index d5489479..62b2f8ef 100644 --- a/service/pixelated/config/services.py +++ b/service/pixelated/config/services.py @@ -12,10 +12,14 @@ from twisted.internet import defer class Services(object): def __init__(self, leap_home, leap_session): + pass + + @defer.inlineCallbacks + def setup(self, leap_home, leap_session): soledad_querier = SoledadQuerier(soledad=leap_session.soledad_session.soledad) - self.setup_search_engine( + yield self.setup_search_engine( leap_home, soledad_querier) @@ -23,8 +27,9 @@ class Services(object): leap_session.account, soledad_querier, self.search_engine) + yield pixelated_mailboxes.index_mailboxes() - self.mail_service = self.setup_mail_service( + self.mail_service = yield self.setup_mail_service( leap_session, soledad_querier, self.search_engine, @@ -35,6 +40,8 @@ class Services(object): self.post_setup(soledad_querier, leap_session) + + def post_setup(self, soledad_querier, leap_session): self.search_engine.index_mails( mails=self.mail_service.all_mails(), @@ -52,16 +59,18 @@ class Services(object): 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): - pixelated_mailboxes.add_welcome_mail_for_fresh_user() + if False: # FIXME + yield pixelated_mailboxes.add_welcome_mail_for_fresh_user() pixelated_mail_sender = MailSender( leap_session.account_email(), leap_session.smtp) - return MailService( + defer.returnValue(MailService( pixelated_mailboxes, pixelated_mail_sender, soledad_querier, - search_engine) + search_engine)) def setup_draft_service(self, pixelated_mailboxes): return DraftService(pixelated_mailboxes) -- cgit v1.2.3