test: try taskwarrior hooks to track slots
This commit is contained in:
29
dots/.local/share/task/hooks/on-add.limit.py
Executable file
29
dots/.local/share/task/hooks/on-add.limit.py
Executable file
@@ -0,0 +1,29 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
|
||||||
|
SLOTS_FILE = "/home/h/.local/share/task/add_slots"
|
||||||
|
|
||||||
|
def get_slots():
|
||||||
|
try:
|
||||||
|
with open(SLOTS_FILE, "r") as f:
|
||||||
|
return int(f.read().strip())
|
||||||
|
except:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
slots = get_slots()
|
||||||
|
|
||||||
|
if slots <= 0:
|
||||||
|
print(f"Cannot add task: No slots available (0/{slots}).")
|
||||||
|
print("Delete or complete a task first to earn an add slot.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
with open(SLOTS_FILE, "w") as f:
|
||||||
|
f.write(str(slots - 1))
|
||||||
|
|
||||||
|
print(f"Task added. Slots remaining: {slots - 1}")
|
||||||
|
|
||||||
|
for line in sys.stdin:
|
||||||
|
task = json.loads(line)
|
||||||
|
print(json.dumps(task))
|
||||||
|
sys.exit(0)
|
||||||
34
dots/.local/share/task/hooks/on-modify.limit.py
Executable file
34
dots/.local/share/task/hooks/on-modify.limit.py
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
import sys
|
||||||
|
import json
|
||||||
|
|
||||||
|
SLOTS_FILE = "/home/h/.local/share/task/add_slots"
|
||||||
|
|
||||||
|
def get_slots():
|
||||||
|
try:
|
||||||
|
with open(SLOTS_FILE, "r") as f:
|
||||||
|
return int(f.read().strip())
|
||||||
|
except:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
data = sys.stdin.read().strip().split("\n")
|
||||||
|
if len(data) < 2:
|
||||||
|
for line in data:
|
||||||
|
if line:
|
||||||
|
print(line)
|
||||||
|
sys.exit(0)
|
||||||
|
|
||||||
|
old_task = json.loads(data[0])
|
||||||
|
new_task = json.loads(data[1])
|
||||||
|
|
||||||
|
was_pending = old_task.get("status") == "pending"
|
||||||
|
is_not_pending = new_task.get("status") in ("completed", "deleted")
|
||||||
|
|
||||||
|
if was_pending and is_not_pending:
|
||||||
|
slots = get_slots() + 1
|
||||||
|
with open(SLOTS_FILE, "w") as f:
|
||||||
|
f.write(str(slots))
|
||||||
|
print(f"Slot earned! Total slots: {slots}")
|
||||||
|
|
||||||
|
print(json.dumps(new_task))
|
||||||
|
sys.exit(0)
|
||||||
@@ -39,6 +39,14 @@ in
|
|||||||
".local/share/task/hooks/on-exit.sync.py" = {
|
".local/share/task/hooks/on-exit.sync.py" = {
|
||||||
source = dotsPath + "/.local/share/task/hooks/on-exit.sync.py";
|
source = dotsPath + "/.local/share/task/hooks/on-exit.sync.py";
|
||||||
};
|
};
|
||||||
|
".local/share/task/hooks/on-add.limit.py" = {
|
||||||
|
source = dotsPath + "/.local/share/task/hooks/on-add.limit.py";
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
|
".local/share/task/hooks/on-modify.limit.py" = {
|
||||||
|
source = dotsPath + "/.local/share/task/hooks/on-modify.limit.py";
|
||||||
|
executable = true;
|
||||||
|
};
|
||||||
".local/share/task/scripts/sync-and-notify.sh" = {
|
".local/share/task/scripts/sync-and-notify.sh" = {
|
||||||
source = dotsPath + "/.local/share/task/scripts/sync-and-notify.sh";
|
source = dotsPath + "/.local/share/task/scripts/sync-and-notify.sh";
|
||||||
executable = true;
|
executable = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user