summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/pixelated/adapter/listeners/mailbox_indexer_listener.py7
-rw-r--r--service/pixelated/adapter/services/mailboxes.py29
-rw-r--r--service/pixelated/application.py1
-rw-r--r--service/pixelated/bitmask_libraries/session.py3
-rw-r--r--service/pixelated/config/services.py19
5 files changed, 43 insertions, 16 deletions
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 <http://www.gnu.org/licenses/>.
+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 <http://www.gnu.org/licenses/>.
+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)