summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorBruno Wagner Goncalves <bwagner@thoughtworks.com>2014-09-23 15:35:36 -0300
committerBruno Wagner Goncalves <bwagner@thoughtworks.com>2014-09-23 15:35:36 -0300
commitad94610bfdcd7442ba8107e14b823c9db2e24bf7 (patch)
tree6af3e52035e3b52b5e8852ba619cdadcfbc6c879 /service
parent620a75e272f149ca4408dd46f67240cf0c2de8ec (diff)
Added basic mail saving
Diffstat (limited to 'service')
-rw-r--r--service/pixelated/adapter/mail_service.py2
-rw-r--r--service/pixelated/adapter/pixelated_mail.py27
-rw-r--r--service/pixelated/adapter/pixelated_mailbox.py2
-rw-r--r--service/pixelated/adapter/soledad_querier.py15
-rw-r--r--service/pixelated/user_agent.py3
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())