54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
|
# 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
|