diff options
author | Bruno Wagner Goncalves <bwagner@thoughtworks.com> | 2014-09-23 15:35:36 -0300 |
---|---|---|
committer | Bruno Wagner Goncalves <bwagner@thoughtworks.com> | 2014-09-23 15:35:36 -0300 |
commit | ad94610bfdcd7442ba8107e14b823c9db2e24bf7 (patch) | |
tree | 6af3e52035e3b52b5e8852ba619cdadcfbc6c879 | |
parent | 620a75e272f149ca4408dd46f67240cf0c2de8ec (diff) |
Added basic mail saving
-rw-r--r-- | service/pixelated/adapter/mail_service.py | 2 | ||||
-rw-r--r-- | service/pixelated/adapter/pixelated_mail.py | 27 | ||||
-rw-r--r-- | service/pixelated/adapter/pixelated_mailbox.py | 2 | ||||
-rw-r--r-- | service/pixelated/adapter/soledad_querier.py | 15 | ||||
-rw-r--r-- | service/pixelated/user_agent.py | 3 |
5 files changed, 33 insertions, 16 deletions
diff --git a/service/pixelated/adapter/mail_service.py b/service/pixelated/adapter/mail_service.py index 55407c8d..1fe9514e 100644 --- a/service/pixelated/adapter/mail_service.py +++ b/service/pixelated/adapter/mail_service.py @@ -26,7 +26,7 @@ class MailService: def __init__(self, mailboxes, mail_sender, tag_service=TagService.get_instance()): self.tag_service = tag_service self.mailboxes = mailboxes - self.querier = SoledadQuerier(self.mailboxes.account._soledad) + self.querier = SoledadQuerier.get_instance() self.mail_sender = mail_sender self.tag_service.load_index(self.mails(MailService.ALL_MAILS_QUERY)) diff --git a/service/pixelated/adapter/pixelated_mail.py b/service/pixelated/adapter/pixelated_mail.py index 3ff392b0..60f8ea50 100644 --- a/service/pixelated/adapter/pixelated_mail.py +++ b/service/pixelated/adapter/pixelated_mail.py @@ -8,7 +8,7 @@ # # Pixelated is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# MERCHANTABILITY or FITNESS FOR A PCULAR PURPOSE. See the # GNU Affero General Public License for more details. # # You should have received a copy of the GNU Affero General Public License @@ -28,6 +28,7 @@ class PixelatedMail: def __init__(self, tag_service=TagService.get_instance()): self.tag_service = tag_service self.mailbox_name = None + self.querier = SoledadQuerier.get_instance() @staticmethod def from_soledad(fdoc, hdoc, bdoc): @@ -73,6 +74,9 @@ class PixelatedMail: def is_recent(self): return Status('recent') in self.status + def save(self): + return self.querier.save_mail(self) + def set_from(self, _from): self.headers['from'] = [_from] @@ -99,12 +103,12 @@ class PixelatedMail: self.update_tags(set([])) def update_tags(self, tags): - # old_tags = self.tags - # self.tags = tags - # removed = old_tags.difference(tags) - # added = tags.difference(old_tags) - # self._persist_mail_tags(tags) - # self.tag_service.notify_tags_updated(added, removed, self.ident) + old_tags = self.tags + self.tags = tags + removed = old_tags.difference(tags) + added = tags.difference(old_tags) + self._persist_mail_tags(tags) + self.tag_service.notify_tags_updated(added, removed, self.ident) return self.tags def mark_as_read(self): @@ -120,10 +124,8 @@ class PixelatedMail: pass def _persist_mail_tags(self, current_tags): - # hdoc = self.leap_mail.hdoc - # hdoc.content['headers']['X-Tags'] = json.dumps(list(current_tags)) - # self.leap_mail._soledad.put_doc(hdoc) - pass + self.hdoc.content['headers']['X-Tags'] = json.dumps(list(current_tags)) + self.save() def has_tag(self, tag): return tag in self.tags @@ -186,3 +188,6 @@ def from_dict(mail_dict): mail.tags = set(mail_dict.get('tags', [])) mail.status = set(mail_dict.get('status', [])) return mail + + +from pixelated.adapter.soledad_querier import SoledadQuerier diff --git a/service/pixelated/adapter/pixelated_mailbox.py b/service/pixelated/adapter/pixelated_mailbox.py index dec7cdca..5602d062 100644 --- a/service/pixelated/adapter/pixelated_mailbox.py +++ b/service/pixelated/adapter/pixelated_mailbox.py @@ -28,7 +28,7 @@ class PixelatedMailbox: self.tag_service = tag_service self.leap_mailbox = leap_mailbox self.mailbox_tag = self.leap_mailbox.mbox.lower() - self.querier = SoledadQuerier(self.leap_mailbox._soledad) + self.querier = SoledadQuerier.get_instance() @property def messages(self): diff --git a/service/pixelated/adapter/soledad_querier.py b/service/pixelated/adapter/soledad_querier.py index 952c0606..bdfc28fe 100644 --- a/service/pixelated/adapter/soledad_querier.py +++ b/service/pixelated/adapter/soledad_querier.py @@ -1,10 +1,14 @@ from pixelated.adapter.pixelated_mail import PixelatedMail - class SoledadQuerier: - def __init__(self, soledad): - self.soledad = soledad + instance = None + + @classmethod + def get_instance(cls): + if not cls.instance: + cls.instance = SoledadQuerier() + return cls.instance def all_mails(self): fdocs_chash = [(fdoc, fdoc.content['chash']) for fdoc in self.soledad.get_from_index('by-type', 'flags')] @@ -19,3 +23,8 @@ class SoledadQuerier: fdocs_hdocs_phash = [(f[0], f[1], f[1].content.get('body')) for f in fdocs_hdocs] fdocs_hdocs_bdocs = [(f[0], f[1], self.soledad.get_from_index('by-type-and-payloadhash', 'cnt', f[2])[0]) for f in fdocs_hdocs_phash] return [PixelatedMail.from_soledad(*raw_mail) for raw_mail in fdocs_hdocs_bdocs] + + def save_mail(self, mail): + self.soledad.put_doc(mail.fdoc) + self.soledad.put_doc(mail.hdoc) + self.soledad.put_doc(mail.bdoc) diff --git a/service/pixelated/user_agent.py b/service/pixelated/user_agent.py index 7adff10b..ae2abb39 100644 --- a/service/pixelated/user_agent.py +++ b/service/pixelated/user_agent.py @@ -33,6 +33,7 @@ from pixelated.bitmask_libraries.provider import LeapProvider from pixelated.bitmask_libraries.auth import LeapAuthenticator, LeapCredentials from pixelated.adapter.mail_service import MailService from pixelated.adapter.pixelated_mail import PixelatedMail +from pixelated.adapter.soledad_querier import SoledadQuerier static_folder = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "web-ui", "app")) @@ -166,6 +167,8 @@ def register_new_user(username): def start_user_agent(debug_enabled): leap_session = LeapSession.open(app.config['LEAP_USERNAME'], app.config['LEAP_PASSWORD'], app.config['LEAP_SERVER_NAME']) + querier = SoledadQuerier.get_instance() + querier.soledad = leap_session.account._soledad PixelatedMail.from_email_address = leap_session.account_email() pixelated_mailboxes = PixelatedMailBoxes(leap_session.account) pixelated_mail_sender = PixelatedMailSender(leap_session.account_email()) |