diff options
Diffstat (limited to 'service/pixelated/config/services.py')
-rw-r--r-- | service/pixelated/config/services.py | 78 |
1 files changed, 44 insertions, 34 deletions
diff --git a/service/pixelated/config/services.py b/service/pixelated/config/services.py index f1c7a540..41a357dc 100644 --- a/service/pixelated/config/services.py +++ b/service/pixelated/config/services.py @@ -1,65 +1,75 @@ +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 +from pixelated.adapter.search.index_storage_key import SearchIndexStorageKey +from pixelated.adapter.services.feedback_service import FeedbackService class Services(object): def __init__(self, leap_home, leap_session): + pass - soledad_querier = SoledadQuerier(soledad=leap_session.soledad_session.soledad) + @defer.inlineCallbacks + def setup(self, leap_home, leap_session): + InputMail.FROM_EMAIL_ADDRESS = leap_session.account_email() - self.search_engine = self.setup_search_engine( + search_index_storage_key = self.setup_search_index_storage_key(leap_session.soledad_session.soledad) + yield self.setup_search_engine( leap_home, - soledad_querier) + search_index_storage_key) - pixelated_mailboxes = Mailboxes( - leap_session.account, - soledad_querier, - self.search_engine) + self.wrap_mail_store_with_indexing_mail_store(leap_session) + + yield listen_all_mailboxes(leap_session.account, self.search_engine, leap_session.mail_store) self.mail_service = self.setup_mail_service( leap_session, - soledad_querier, - self.search_engine, - pixelated_mailboxes) + self.search_engine) - self.keymanager = self.setup_keymanager(leap_session) - self.draft_service = self.setup_draft_service(pixelated_mailboxes) + self.keymanager = leap_session.nicknym + self.draft_service = self.setup_draft_service(leap_session.mail_store) + self.feedback_service = self.setup_feedback_service(leap_session) - self.post_setup(soledad_querier, leap_session) + yield self.index_all_mails() - def post_setup(self, soledad_querier, leap_session): - self.search_engine.index_mails( - mails=self.mail_service.all_mails(), - callback=soledad_querier.mark_all_as_not_recent) - soledad_querier.remove_duplicates() - InputMail.FROM_EMAIL_ADDRESS = leap_session.account_email() + def wrap_mail_store_with_indexing_mail_store(self, leap_session): + leap_session.mail_store = SearchableMailStore(leap_session.mail_store, self.search_engine) - def setup_keymanager(self, leap_session): - return leap_session.nicknym.keymanager + @defer.inlineCallbacks + def index_all_mails(self): + all_mails = yield self.mail_service.all_mails() + self.search_engine.index_mails(all_mails) - def setup_search_engine(self, leap_home, soledad_querier): - key = soledad_querier.get_index_masterkey() + @defer.inlineCallbacks + def setup_search_engine(self, leap_home, search_index_storage_key): + key_unicode = yield search_index_storage_key.get_or_create_key() + key = str(key_unicode) + print 'The key len is: %s' % len(key) search_engine = SearchEngine(key, agent_home=leap_home) - MailboxIndexerListener.SEARCH_ENGINE = search_engine - return search_engine + self.search_engine = search_engine - def setup_mail_service(self, leap_session, soledad_querier, search_engine, pixelated_mailboxes): - pixelated_mailboxes.add_welcome_mail_for_fresh_user() + def setup_mail_service(self, leap_session, 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) return MailService( - pixelated_mailboxes, pixelated_mail_sender, - soledad_querier, + leap_session.mail_store, search_engine) - def setup_draft_service(self, pixelated_mailboxes): - return DraftService(pixelated_mailboxes) + def setup_draft_service(self, mail_store): + return DraftService(mail_store) + + def setup_search_index_storage_key(self, soledad): + return SearchIndexStorageKey(soledad) + + def setup_feedback_service(self, leap_session): + return FeedbackService(leap_session) |