diff --git a/modules/contrib/watson.py b/modules/contrib/watson.py new file mode 100644 index 0000000..a359bf4 --- /dev/null +++ b/modules/contrib/watson.py @@ -0,0 +1,57 @@ +# pylint: disable=C0111,R0903 + +"""Displays the status of watson (time-tracking tool) + +Requires the following executable: + * watson +""" + +import bumblebee.input +import bumblebee.output +import bumblebee.engine +import bumblebee.util +import bumblebee.popup_v2 + +import logging +import re +import functools + +class Module(bumblebee.engine.Module): + def __init__(self, engine, config): + super(Module, self).__init__(engine, config, + bumblebee.output.Widget(full_text=self.text)) + self._tracking = False + self._project = "" + engine.input.register_callback(self, button=bumblebee.input.LEFT_MOUSE, + cmd=self.toggle) + + def toggle(self, widget): + self._project = "hit" + if self._tracking: + bumblebee.util.execute("watson stop") + else: + bumblebee.util.execute("watson restart") + self._tracking = not self._tracking + + def text(self, widget): + if self._tracking: + return self._project + else: + return "Paused" + + def update(self, widgets): + output = bumblebee.util.execute("watson status") + if re.match('No project started', output): + self._tracking = False + return + + self._tracking = True + m = re.search(r'Project (.+) started', output) + self._project = m.group(1) + + # + def state(self, widget): + return "on" if self._tracking else "off" + # return [widget.get("status", None), widget.get("period", None)] + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4