From d31fabf8cff5dae02e3fc759a4203bd374dddc99 Mon Sep 17 00:00:00 2001 From: schneefux Date: Sun, 30 Mar 2014 16:03:44 -0400 Subject: Initial commit --- client/notifier.py | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 client/notifier.py (limited to 'client/notifier.py') diff --git a/client/notifier.py b/client/notifier.py new file mode 100644 index 0000000..341ae04 --- /dev/null +++ b/client/notifier.py @@ -0,0 +1,68 @@ +import Queue +from modules import Gmail +from apscheduler.scheduler import Scheduler +import logging +logging.basicConfig() + + +class Notifier(object): + + class NotificationClient(object): + + def __init__(self, gather, timestamp): + self.gather = gather + self.timestamp = timestamp + + def run(self): + self.timestamp = self.gather(self.timestamp) + + def __init__(self, profile): + self.q = Queue.Queue() + self.profile = profile + self.notifiers = [ + self.NotificationClient(self.handleEmailNotifications, None), + ] + + sched = Scheduler() + sched.start() + sched.add_interval_job(self.gather, seconds=30) + + def gather(self): + [client.run() for client in self.notifiers] + + def handleEmailNotifications(self, lastDate): + """Places new Gmail notifications in the Notifier's queue.""" + emails = Gmail.fetchUnreadEmails(self.profile, since=lastDate) + if emails: + lastDate = Gmail.getMostRecentDate(emails) + + def styleEmail(e): + return "New email from %s." % Gmail.getSender(e) + + for e in emails: + self.q.put(styleEmail(e)) + + return lastDate + + def getNotification(self): + """Returns a notification. Note that this function is consuming.""" + try: + notif = self.q.get(block=False) + return notif + except Queue.Empty: + return None + + def getAllNotifications(self): + """ + Return a list of notifications in chronological order. + Note that this function is consuming, so consecutive calls + will yield different results. + """ + notifs = [] + + notif = self.getNotification() + while notif: + notifs.append(notif) + notif = self.getNotification() + + return notifs -- cgit v1.3.1