import datetime import os import subprocess import time from pprint import pprint import state import task from config import logger, switches from zoneinfo import ZoneInfo desktops = ("Plan", "Think", "Work", "Other", "Away", "Work", "Work") work_desktops = {2: "default", 5: "dlt", 6: "vhs"} unlabeled = "Away" def now(): return datetime.datetime.now(ZoneInfo("America/Argentina/Buenos_Aires")) def active_workspace(): workspaces = ( subprocess.check_output(["wmctrl", "-d"]) .decode("utf-8") .strip("\n") .split("\n") ) for workspace in workspaces: if workspace[3] == "*": return int(workspace[0]) def desktop(workspace_index): try: return desktops[workspace_index] except IndexError: return unlabeled task.read_and_extract(None) state.init_work_state(work_desktops) current_workspace = active_workspace() current_task = state.retrieve("current").get("task") last_switch_time = now() switch = { "workspace": desktop(current_workspace), "date": now(), "delta": 0, "task": current_task, } switches.insert_one(switch) while True: current_task = state.retrieve("current").get("task") current_workspace = active_workspace() state.save("current", workspace=current_workspace) last_doc = switches.find_one(sort=[("_id", -1)]) # work workflow if current_workspace in work_desktops.keys(): work_states = state.retrieve_work_state() current_work_task = work_states[work_desktops[current_workspace]] logger.debug(f"current_work_task: {current_work_task}") if current_task != current_work_task: state.save("current", task=current_work_task) task.db_to_file_as_is(None) current_task = current_work_task # regular flow if ( last_doc["workspace"] == desktop(current_workspace) and last_doc["task"] == current_task ): delta = round((now() - last_switch_time).total_seconds()) switches.update_one( {"_id": last_doc["_id"]}, {"$set": {"delta": delta, "task": current_task}} ) else: current_workspace = active_workspace() switch = { "workspace": desktop(current_workspace), "date": now(), "delta": 0, "task": current_task, } switches.insert_one(switch) last_switch_time = now() time.sleep(2)