summaryrefslogtreecommitdiff
path: root/service/pixelated/adapter
diff options
context:
space:
mode:
authorFolker Bernitt <fbernitt@thoughtworks.com>2015-07-14 18:52:19 +0200
committerFolker Bernitt <fbernitt@thoughtworks.com>2015-08-11 17:00:22 +0200
commit60966944c2417588811372b1c9037a4df9bd48f3 (patch)
tree008490d7f1599c1ffeb911e5f41d33e0dcc9a589 /service/pixelated/adapter
parent740547431f547dce775f0d2a737fd23f6df5f994 (diff)
Working on pixelated-user-agent.
- Startup works till all mails are queried
Diffstat (limited to 'service/pixelated/adapter')
-rw-r--r--service/pixelated/adapter/listeners/mailbox_indexer_listener.py7
-rw-r--r--service/pixelated/adapter/services/mailboxes.py29
2 files changed, 27 insertions, 9 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)