Source code for i3pystatus.mail.thunderbird
# This plugin listens for dbus signals emitted by the
# thunderbird-dbus-sender extension for TB:
# https://github.com/janoliver/thunderbird-dbus-sender
# The plugin must be active and thunderbird running for the module to work
# properly.
from functools import partial
import dbus
from dbus.mainloop.glib import DBusGMainLoop
from gi.repository import GObject
from i3pystatus.mail import Backend
[docs]class Thunderbird(Backend):
"""
This class listens for dbus signals emitted by
the dbus-sender extension for thunderbird.
Requires python-dbus
"""
_unread = set()
def init(self):
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
bus = dbus.SessionBus()
bus.add_signal_receiver(self.new_msg,
dbus_interface="org.mozilla.thunderbird.DBus",
signal_name="NewMessageSignal")
bus.add_signal_receiver(self.changed_msg,
dbus_interface="org.mozilla.thunderbird.DBus",
signal_name="ChangedMessageSignal")
loop = GObject.MainLoop()
dbus.mainloop.glib.threads_init()
self.context = loop.get_context()
self.run = partial(self.context.iteration, False)
def new_msg(self, id, author, subject):
if id not in self._unread:
self._unread.add(id)
def changed_msg(self, id, event):
if event == "read" and id in self._unread:
self._unread.remove(id)
@property
def unread(self):
self.run()
return len(self._unread)
Backend = Thunderbird