diff --git a/bumblebee_status/modules/contrib/usage.py b/bumblebee_status/modules/contrib/usage.py new file mode 100644 index 0000000..5f21198 --- /dev/null +++ b/bumblebee_status/modules/contrib/usage.py @@ -0,0 +1,53 @@ +# pylint: disable=C0111,R0903 + +""" +Module for ActivityWatch (https://activitywatch.net/) +Displays the amount of time the system was used actively +""" +import sqlite3 +import os + +import core.module +import core.widget + + +class Module(core.module.Module): + def __init__(self, config, theme): + super().__init__(config, theme, core.widget.Widget(self.output)) + self.__uptime = "" + + def output(self, _): + return "{}".format(self.__uptime) + + def update(self): + database_loc = self.parameter('database', '~/.local/share/activitywatch/aw-server/peewee-sqlite.v2.db') + home = os.path.expanduser('~') + + database = sqlite3.connect(database_loc.replace('~', home)) + cursor = database.cursor() + + cursor.execute('SELECT key, id FROM bucketmodel') + + bucket_id = 1 + + for tuple in cursor.fetchall(): + if 'aw-watcher-afk' in tuple[1]: + bucket_id = tuple[0] + + cursor.execute(f'SELECT duration, datastr FROM eventmodel WHERE bucket_id = {bucket_id} ' + + 'AND strftime(\'%Y,%m,%d\', timestamp) = strftime(\'%Y,%m,%d\', \'now\')') + + duration = 0 + + for tuple in cursor.fetchall(): + if '{"status": "not-afk"}' in tuple[1]: + duration += tuple[0] + + hours = '%.0f' % (duration // 3600) + minutes = '%.0f' % ((duration % 3600) // 60) + seconds = '%.0f' % (duration % 60) + + formatting = self.parameter('format', 'HHh, MMmin') + self.__uptime = formatting.replace('HH', hours).replace('MM', minutes).replace('SS', seconds) + +# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4