summaryrefslogtreecommitdiff
path: root/service/pixelated
diff options
context:
space:
mode:
authorFolker Bernitt <fbernitt@thoughtworks.com>2014-08-28 16:16:19 +0200
committerFolker Bernitt <fbernitt@thoughtworks.com>2014-08-28 17:45:51 +0200
commit8cfe696cd85ac0c5d6d863ebf71ebcf61d4ad540 (patch)
tree8c0c2652bbf8108261e0257827403e28537cea3d /service/pixelated
parentdc3f7d1ae9a56192676ae4efb8286b0968ec9726 (diff)
Added mail filtering by tag.
- simple brute force implementation
Diffstat (limited to 'service/pixelated')
-rw-r--r--service/pixelated/adapter/mail_service.py50
-rw-r--r--service/pixelated/user_agent.py5
2 files changed, 35 insertions, 20 deletions
diff --git a/service/pixelated/adapter/mail_service.py b/service/pixelated/adapter/mail_service.py
index 3d87971e..f5bfd1c8 100644
--- a/service/pixelated/adapter/mail_service.py
+++ b/service/pixelated/adapter/mail_service.py
@@ -25,32 +25,46 @@ from pixelated.adapter.pixelated_mailbox import PixelatedMailbox
from pixelated.adapter.tag import Tag
+def open_leap_session(username, password, server_name):
+ try:
+ certs_home = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "certificates"))
+
+ config = LeapConfig(certs_home=certs_home)
+ provider = LeapProvider(server_name, config)
+ session = LeapSessionFactory(provider).create(LeapCredentials(username, password))
+ return session
+ except:
+ traceback.print_exc(file=sys.stdout)
+ raise
+
+
class MailService:
+ __slots__ = ['leap_session', 'account', 'mailbox_name']
- def __init__(self, username, password, server_name):
- try:
- self.username = username
- self.password = password
- self.server_name = server_name
- self.mailbox_name = 'INBOX'
- self.certs_home = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "certificates"))
- self._open_leap_session()
- except:
- traceback.print_exc(file=sys.stdout)
- raise
-
- def _open_leap_session(self):
- self.leap_config = LeapConfig(certs_home=self.certs_home)
- self.provider = LeapProvider(self.server_name, self.leap_config)
- self.leap_session = LeapSessionFactory(self.provider).create(LeapCredentials(self.username, self.password))
- self.account = self.leap_session.account
+ def __init__(self, leap_session):
+ self.leap_session = leap_session
+ self.account = leap_session.account
+ self.mailbox_name = 'INBOX'
@property
def mailbox(self):
return PixelatedMailbox(self.account.getMailbox(self.mailbox_name))
def mails(self, query):
- return self.mailbox.mails()
+ if not query:
+ return self.mailbox.mails()
+
+ mails = []
+ if query['tags']:
+ tags = [Tag(tag) for tag in query['tags']]
+ for leap_mailbox in self.account.mailboxes:
+ mailbox = PixelatedMailbox(leap_mailbox)
+ if len(mailbox.all_tags().intersection(tags)):
+ # mailbox has at least one mail with tag
+ for mail in mailbox.mails():
+ if len(mail.tags.intersection(tags)) > 0:
+ mails.append(mail)
+ return mails
def update_tags(self, mail_id, new_tags):
mail = self.mail(mail_id)
diff --git a/service/pixelated/user_agent.py b/service/pixelated/user_agent.py
index b9ac05bb..433d4770 100644
--- a/service/pixelated/user_agent.py
+++ b/service/pixelated/user_agent.py
@@ -24,7 +24,7 @@ from flask import Response
import pixelated.reactor_manager as reactor_manager
import pixelated.search_query as search_query
-from pixelated.adapter.mail_service import MailService
+from pixelated.adapter.mail_service import MailService, open_leap_session
from pixelated.adapter.pixelated_mail import PixelatedMail
static_folder = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "web-ui", "app"))
@@ -33,7 +33,8 @@ if not os.path.exists(static_folder):
static_folder = os.path.abspath(os.path.join(os.path.abspath(__file__), "..", "..", "..", "web-ui", "app"))
app = Flask(__name__, static_url_path='', static_folder=static_folder)
app.config.from_pyfile(os.path.join(os.environ['HOME'], '.pixelated'))
-mail_service = MailService(app.config['LEAP_USERNAME'], app.config['LEAP_PASSWORD'], app.config['LEAP_SERVER_NAME'])
+leap_session = open_leap_session(app.config['LEAP_USERNAME'], app.config['LEAP_PASSWORD'], app.config['LEAP_SERVER_NAME'])
+mail_service = MailService(leap_session)
def respond_json(entity):