claude unstested update for moving from wp to project -> wp to task

This commit is contained in:
buenosairesam
2025-10-03 04:47:13 -03:00
parent 72f9e9d9a7
commit 71752c7d76
10 changed files with 237 additions and 146 deletions

View File

@@ -1,4 +1,5 @@
import datetime
import json
import os
import subprocess
import time
@@ -10,13 +11,92 @@ from config import logger, switches
from zoneinfo import ZoneInfo
desktops = ("Plan", "Think", "Work", "Other", "Away", "Work", "Work", "Work")
work_desktops = {2: "snk", 5: "dlt", 6: "vhs", 7: "own"}
unlabeled = "Away"
config_file = "config.json"
def load_config():
"""Load configuration from JSON file"""
with open(config_file, "r") as f:
return json.load(f)
def reload_config_if_changed():
"""Check if config file changed and reload to state if needed"""
current_config_mtime = state.retrieve("current").get("config_mtime")
config_mtime = os.path.getmtime(config_file)
if current_config_mtime != config_mtime:
cfg = load_config()
work_desktop_tasks = {int(k): v for k, v in cfg["work_desktop_tasks"].items()}
state.sync_desktop_tasks(work_desktop_tasks)
state.save("current", config_mtime=config_mtime)
logger.info(f"Config reloaded: {work_desktop_tasks}")
def now():
return datetime.datetime.now(ZoneInfo("America/Argentina/Buenos_Aires"))
cfg = load_config()
return datetime.datetime.now(ZoneInfo(cfg["timezone"]))
def handle_task_file_changes(current_task):
"""Check if task file changed and update task if needed"""
current_mtime = state.retrieve("current").get("filetime")
file_mtime = task.get_file_mtime(None)
if current_mtime != file_mtime:
task_id = task.read_and_extract(None)
logger.debug(f"task_id:{task_id}")
task.file_to_db(None)
if task_id != current_task:
state.save("current", task=task_id)
current_task = task_id
return current_task
def update_workspace_state():
"""Update current workspace in state"""
current_workspace = active_workspace()
state.save("current", workspace=current_workspace)
return current_workspace
def enforce_desktop_task(current_workspace, work_desktop_tasks, current_task):
"""Enforce assigned task for work desktops"""
if current_workspace in work_desktop_tasks and work_desktop_tasks[current_workspace]:
assigned_task = work_desktop_tasks[current_workspace]
if current_task != assigned_task:
current_task = assigned_task
state.save("current", task=current_task)
task.db_to_file_as_is(None)
return current_task
def track_workspace_switch(current_workspace, current_task, last_switch_time):
"""Update or create switch record"""
last_doc = switches.find_one(sort=[("_id", -1)])
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}}
)
return last_switch_time
else:
switch = {
"workspace": desktop(current_workspace),
"date": now(),
"delta": 0,
"task": current_task,
}
switches.insert_one(switch)
return now()
def active_workspace():
@@ -40,7 +120,6 @@ def desktop(workspace_index):
task.read_and_extract(None)
state.init_work_state(work_desktops)
current_workspace = active_workspace()
@@ -57,65 +136,23 @@ switch = {
switches.insert_one(switch)
while True:
current_mtime = state.retrieve("current").get("filetime")
file_mtime = task.get_file_mtime(None)
# Check if config changed and reload
reload_config_if_changed()
# First handle file changes
if current_mtime != file_mtime:
task_id = task.read_and_extract(None)
logger.debug(f"task_id:{task_id}")
task.file_to_db(None)
if task_id != current_task: # Only update state if different
state.save("current", task=task_id)
current_task = task_id
# Load work_desktop_tasks from state
work_desktop_tasks = state.retrieve_desktop_state()
# Handle task file changes
current_task = handle_task_file_changes(current_task)
# Update current task and workspace
current_task = state.retrieve("current").get("task")
current_workspace = active_workspace()
state.save("current", workspace=current_workspace)
current_workspace = update_workspace_state()
last_doc = switches.find_one(sort=[("_id", -1)])
# Enforce desktop task assignments
current_task = enforce_desktop_task(current_workspace, work_desktop_tasks, current_task)
# work workflow
if current_workspace in work_desktops.keys():
work_states = state.retrieve_work_state()
current_work_task = work_states[work_desktops[current_workspace]]
# Get all task IDs under current workspace path
workspace_tasks = task.get_tasks_tree(
f"work/{work_desktops[current_workspace]}"
)
work_task_ids = {t["task_id"] for t in workspace_tasks if "task_id" in t}
# if current_task in work_task_ids and current_task != current_work_task:
if current_task not in work_task_ids:
# Enforce work task if current task is not in workspace
if current_task != current_work_task:
current_task = current_work_task
state.save("current", task=current_task)
task.db_to_file_as_is(None)
elif current_task != current_work_task:
# Update work state when switching to a different valid task
state.update_work_state(work_desktops[current_workspace], current_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()
# Track workspace switches
last_switch_time = track_workspace_switch(current_workspace, current_task, last_switch_time)
time.sleep(2)