From b9e23b18a7638bc89b3545771c18b12028de6ec1 Mon Sep 17 00:00:00 2001 From: Matthieu Coudron Date: Tue, 6 Jan 2015 00:37:16 +0100 Subject: [PATCH] Add the possibility to display per backend unread mail along with the total number of unread mails (default). The displayed backend can be set via callbacks (on mousewheel events by default) --- i3pystatus/mail/__init__.py | 26 ++++++++++++++++++++------ i3pystatus/mail/notmuchmail.py | 6 ++++-- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/i3pystatus/mail/__init__.py b/i3pystatus/mail/__init__.py index a5f088c..d924dac 100644 --- a/i3pystatus/mail/__init__.py +++ b/i3pystatus/mail/__init__.py @@ -6,9 +6,10 @@ class Backend(SettingsBase): """Handles the details of checking for mail""" unread = 0 + settings = ("account", ) # required = ("account", ) - # account = "Default account" + account = "Default account" """Number of unread mails @@ -38,13 +39,14 @@ class Mail(IntervalModule): color = "#ffffff" color_unread = "#ff0000" format = "{unread} new email" - format_plural = "{unread} new emails" + format_plural = "{account} : {current_unread}/{unread} new emails" hide_if_null = True email_client = None on_leftclick = "open_client" + on_upscroll = ["scroll_backend", 1] + on_downscroll = ["scroll_backend", -1] - current_unread = 0 current_backend = 0 def init(self): @@ -55,8 +57,14 @@ class Mail(IntervalModule): """ Returns the sum of unread messages across all registered backends """ - - unread = sum(map(lambda backend: backend.unread, self.backends)) + unread = 0 + current_unread = 0 + for id, backend in enumerate(self.backends): + temp = backend.unread + unread = unread + backend.unread + if id == self.current_backend: + current_unread = temp + # unread = sum(map(lambda backend: backend.unread, self.backends)) if not unread: color = self.color @@ -72,12 +80,18 @@ class Mail(IntervalModule): if unread > 1: format = self.format_plural + account_name = getattr(self.backends[self.current_backend], "account", "No name") + + # TODO pass account name as well, as setting or via the dict self.output = { - "full_text": format.format(unread=unread), + "full_text": format.format(unread=unread, current_unread=current_unread, account=account_name), "urgent": urgent, "color": color, } + def scroll_backend(self, step): + self.current_backend = (self.current_backend + step) % len(self.backends) + def open_client(self): if self.email_client: retcode, _, stderr = run_through_shell(self.email_client) diff --git a/i3pystatus/mail/notmuchmail.py b/i3pystatus/mail/notmuchmail.py index 750650f..55cfdd6 100644 --- a/i3pystatus/mail/notmuchmail.py +++ b/i3pystatus/mail/notmuchmail.py @@ -18,14 +18,16 @@ class Notmuch(Backend): settings = ( ("db_path", "Path to the directory of your notmuch database"), + ("query", "Same query notmuch would accept, by default 'tag:unread and tag:inbox'"), + ("account", "Account name"), ) - required = tuple( ("account", "Name available to formatter"), ) + # required = tuple( ("account", "Name available to formatter"), ) db_path = None query = "tag:unread and tag:inbox" - account = "Default account" + account = "Default" def init(self): if not self.db_path: