#!/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)