Files
deskmeter/dmapp/dmcore/main.py
2025-05-13 04:23:40 -03:00

92 lines
2.0 KiB
Python

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():
pass
# 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)