diff --git a/modules/contrib/caffeine.py b/modules/contrib/caffeine.py index e286209..e995998 100644 --- a/modules/contrib/caffeine.py +++ b/modules/contrib/caffeine.py @@ -11,65 +11,68 @@ Requires the following executables: import logging import os +import shutil import psutil -import bumblebee.input -import bumblebee.output -import bumblebee.engine -class Module(bumblebee.engine.Module): - def __init__(self, engine, config): - super(Module, self).__init__(engine, config, - bumblebee.output.Widget(full_text='') - ) - self._active = False - self._xid = None +import core.module +import core.widget +import core.input +import core.decorators - engine.input.register_callback(self, button=bumblebee.input.LEFT_MOUSE, - cmd=self._toggle - ) +import util.cli - def _check_requirements(self): +class Module(core.module.Module): + @core.decorators.every(minutes=10) + def __init__(self, config): + super().__init__(config, core.widget.Widget('')) + + self.__active = False + self.__xid = None + + core.input.register(self, button=core.input.LEFT_MOUSE, cmd=self.__toggle) + + def __check_requirements(self): requirements = ['xdotool', 'xprop', 'xdg-screensaver'] missing = [] for tool in requirements: - if not bumblebee.util.which(tool): + if not shutil.which(tool): missing.append(tool) return missing - def _get_i3bar_xid(self): - xid = bumblebee.util.execute('xdotool search --class \'i3bar\'').partition('\n')[0].strip() + def __get_i3bar_xid(self): + xid = util.cli.execute('xdotool search --class \'i3bar\'').partition('\n')[0].strip() if xid.isdigit(): return xid - logging.warning('Module caffeine: xdotool couldn't get X window ID of \'i3bar\'.') + logging.warning('Module caffeine: xdotool couldn\'t get X window ID of \'i3bar\'.') return None - def _notify(self): - if not bumblebee.util.which('notify-send'): + def __notify(self): + if not shutil.which('notify-send'): return - if self._active: - bumblebee.util.execute('notify-send \'Consuming caffeine\'') + if self.__active: + util.cli.execute('notify-send \'Consuming caffeine\'') else: - bumblebee.util.execute('notify-send \'Out of coffee\'') + util.cli.execute('notify-send \'Out of coffee\'') def _suspend_screensaver(self): - self._xid = self._get_i3bar_xid() - if self._xid is None: + self.__xid = self.__get_i3bar_xid() + if self.__xid is None: return False pid = os.fork() if pid == 0: os.setsid() - bumblebee.util.execute('xdg-screensaver suspend {}'.format(self._xid)) + util.cli.execute('xdg-screensaver suspend {}'.format(self.__xid)) os._exit(0) else: os.waitpid(pid, 0) return True - def _resume_screensaver(self): + def __resume_screensaver(self): success = True - xprop_path = bumblebee.util.which('xprop') - pids = [ p.pid for p in psutil.process_iter() if p.cmdline() == [xprop_path, '-id', str(self._xid), '-spy'] ] + xprop_path = shutil.which('xprop') + pids = [ p.pid for p in psutil.process_iter() if p.cmdline() == [xprop_path, '-id', str(self.__xid), '-spy'] ] for pid in pids: try: os.kill(pid, 9) @@ -78,25 +81,25 @@ class Module(bumblebee.engine.Module): return success def state(self, _): - if self._active: + if self.__active: return 'activated' return 'deactivated' - def _toggle(self, _): - missing = self._check_requirements() + def __toggle(self, _): + missing = self.__check_requirements() if missing: logging.warning('Could not run caffeine - missing %s!', ', '.join(missing)) return - self._active = not self._active - if self._active: + self.__active = not self.__active + if self.__active: success = self._suspend_screensaver() else: - success = self._resume_screensaver() + success = self.__resume_screensaver() if success: - self._notify() + self.__notify() else: - self._active = not self._active + self.__active = not self.__active # vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4