diff --git a/bin/waybar_khal.py b/bin/waybar_khal.py index ce45b77..c5c4b04 100755 --- a/bin/waybar_khal.py +++ b/bin/waybar_khal.py @@ -1,16 +1,14 @@ #!/usr/bin/env python import subprocess -import datetime +from datetime import date, datetime, timedelta import json from html import escape -data = {} - -today = datetime.date.today().strftime("%Y-%m-%d") +today = date.today().strftime("%Y-%m-%d") days = [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", "Today", "Tomorrow" ] -next_week = (datetime.date.today() + datetime.timedelta(days=10)).strftime("%Y-%m-%d") +next_week = (date.today() + timedelta(days=10)).strftime("%Y-%m-%d") title = subprocess.check_output("khal list --format \"{title}\" now "+next_week, shell=True).decode("UTF-8").split("\n") @@ -19,33 +17,48 @@ start = subprocess.check_output("khal list --format \"{start}\" now "+next_week, end = subprocess.check_output("khal list --format \"{end}\" now "+next_week, shell=True).decode("UTF-8").split("\n") -lines = "" +text = "" +alt = "idle" +event = "-" for i in range(len(title)): t = escape(title[i]) s = escape(start[i]) e = escape(end[i]) line = "" + ## header if len(t) and t.split(",")[0] in days: line = f"\n{t}" + ## event else: - ss = s.split(" ") - es = e.split(" ") - if len(es) == 1 or len(ss) == 1: + t_start = s.split(" ") + t_end = e.split(" ") + ## all day + if len(t_start) == 1 or len(t_end) == 1: line = f"{t}" + ## start - end else: - line = f"{ss[1]} - {es[1]}: {t}" + ts_start = datetime.timestamp(datetime.strptime(s, '%Y-%m-%d %H:%M')) + ts_end = datetime.timestamp(datetime.strptime(e, '%Y-%m-%d %H:%M')) + ts_now = datetime.timestamp(datetime.now()) + ## today + if t_start[0] == today: + ## upcoming or ongoing + if ts_now < ts_end: + ## ongoing + if ts_start < ts_now: + if ts_start < ts_now and ts_now < ts_end: + event = f"{t}" + alt = "now" + ## upcoming + elif event == "-": + event = f"{t}" + alt = "today" + line = f"{t_start[1]} - {t_end[1]}: {t}" + text += f"\n{line}" - lines += f"{line}\n" - -if today in lines: - event = lines.split('\n')[2] - if len(event) > 30: - event = f"{event[0:30]}…" - data["text"] = f"{event}" - data["alt"] = "event" -else: - data["text"] = "-" - data["alt"] = "idle" -data["tooltip"] = lines +data = {} +data["text"] = event +data["alt"] = alt +data["tooltip"] = text print(json.dumps(data)) diff --git a/waybar.d/config b/waybar.d/config index 4855bae..433f7c5 100644 --- a/waybar.d/config +++ b/waybar.d/config @@ -47,7 +47,8 @@ "return-type": "json", "interval": 300, "format-icons": { - "event": " ", + "now": " ", + "today": " ", "idle": " " }, "escape": false,