commit 80db5488018df736b5d0a69fda18dfa2282d9b04
parent b3c6b0bbf38c305701c9f1e3c27667eb169ccf71
Author: Anders Damsgaard <anders@adamsgaard.dk>
Date: Wed, 2 Jan 2019 15:13:23 +0100
Add script to show notifications for calcurse appointments
Diffstat:
2 files changed, 70 insertions(+), 0 deletions(-)
diff --git a/links/.config/i3/config b/links/.config/i3/config
@@ -249,4 +249,5 @@ exec --no-startup-id unclutter
exec --no-startup-id dunst
exec --no-startup-id compton
exec --no-startup-id calcurse --daemon
+exec --no-startup-id ~/bin/calcurse_reminders.py 15
#exec --no-startup-id xcompmgr
diff --git a/links/bin/calcurse_reminders.py b/links/bin/calcurse_reminders.py
@@ -0,0 +1,68 @@
+#!/usr/bin/env python3
+import subprocess
+import time
+import sys
+
+warn = int(sys.argv[1])
+
+def get(command):
+ return subprocess.check_output(command).decode("utf-8")
+
+def convert(t):
+ # convert set time into a calculate- able time
+ return [int(n) for n in t.split(":")]
+
+def calc_diff(t_curr, t_event):
+ # calculate time span
+ diff_hr = (t_event[0] - t_curr[0])*60
+ diff_m = t_event[1] - t_curr[1]
+ return diff_hr + diff_m
+
+def cleanup(done, newlist):
+ # clean up "done" -lists
+ for item in done:
+ if not item in newlist:
+ done.remove(item)
+ return done
+
+def show_time(event, s = ""):
+ # show scheduled event
+ hrs = str(event[0][0]); mnts = str(event[0][1])
+ mnts = "0"+mnts if len(mnts) != 2 else mnts
+ subprocess.call(["notify-send", s, "At "+hrs+":"+mnts+" - "+event[1]])
+
+startups = []; times = []
+
+while True:
+ currtime = convert(time.strftime("%H:%M"))
+ events = [l.strip() for l in get(["calcurse", "-a"]).splitlines()][1:]
+ # arrange event data:
+ groups = []; sub = []
+ for l in events:
+ if l.startswith("* "):
+ groups.append([l.replace("* ", "")])
+ elif l.startswith("- "):
+ sub.append(convert(l.split("->")[0].replace("-", "").strip()))
+ else:
+ groups.append(sub+[l])
+ sub = []
+ # run notifications
+ for item in groups:
+ # on startup:
+ if not item in startups:
+ # all- day events
+ if len(item) == 1:
+ subprocess.call(["notify-send", "Today - "+item[0]])
+ # time- specific events
+ elif len(item) == 2:
+ show_time(item, "Appointment")
+ startups.append(item)
+ # as a reminder:
+ if all([len(item) == 2, not item in times]):
+ span = calc_diff(currtime, item[0])
+ if span <= warn:
+ show_time(item, "[Reminder]")
+ times.append(item)
+ # clean up events
+ startups = cleanup(startups, groups); times = cleanup(times, groups)
+ time.sleep(30)+
\ No newline at end of file