1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/bin/sh
CALENDAR=
PIN_FILE="${TMPDIR}meetingbar_pin"
if [ "$BUTTON" = "right" ]; then
# Toggle popup off if already open
DRAWING=$(sketchybar --query meetingbar | jq -r '.popup.drawing')
if [ "$DRAWING" = "on" ]; then
sketchybar --set meetingbar popup.drawing=off
exit 0
fi
if ! JSON=$("$CONFIG_DIR/meetingbar.swift" "$CALENDAR"); then
sketchybar --remove '/meetingbar\.popup\./' 2>/dev/null
sketchybar --add item meetingbar.popup.0 popup.meetingbar \
--set meetingbar.popup.0 \
icon.drawing=off \
label="Calendar unavailable — check sketchybar's log" \
--set meetingbar popup.drawing=on
exit 1
fi
PINNED_ID=""
if [ -f "$PIN_FILE" ]; then
PINNED_ID=$(cat "$PIN_FILE")
fi
# Remove old popup items
sketchybar --remove '/meetingbar\.popup\./' 2>/dev/null
EVENT_COUNT=$(echo "$JSON" | jq '.events | length')
if [ "$EVENT_COUNT" -eq 0 ]; then
sketchybar --add item meetingbar.popup.0 popup.meetingbar \
--set meetingbar.popup.0 \
icon.drawing=off \
label="No more meetings today"
else
INDEX=0
while IFS= read -r EVENT; do
TIME=$(echo "$EVENT" | jq -r '.time')
TITLE=$(echo "$EVENT" | jq -r '.title')
EVENT_ID=$(echo "$EVENT" | jq -r '.id')
CURRENT=$(echo "$EVENT" | jq -r '.current')
ITEM_NAME="meetingbar.popup.$INDEX"
LABEL="$TIME $TITLE"
ICON=""
if [ "$EVENT_ID" = "$PINNED_ID" ]; then
ICON="📌 "
elif [ "$CURRENT" = "true" ]; then
ICON="▶ "
fi
# Toggle pin: unpin if already pinned, pin otherwise.
CLICK="PIN=\${TMPDIR}meetingbar_pin; if [ -f \"\$PIN\" ] && [ \"\$(cat \"\$PIN\")\" = '${EVENT_ID}' ]; then rm \"\$PIN\"; else printf '%s' '${EVENT_ID}' > \"\$PIN\"; fi; sketchybar --set meetingbar popup.drawing=off; sketchybar --update"
sketchybar --add item "$ITEM_NAME" popup.meetingbar \
--set "$ITEM_NAME" \
icon="$ICON" \
icon.padding_left=6 \
label="$LABEL" \
label.padding_right=6 \
click_script="$CLICK"
INDEX=$((INDEX + 1))
done <<< "$(echo "$JSON" | jq -c '.events[]')"
fi
sketchybar --set meetingbar popup.drawing=on
else
# Left click: open the displayed event's meeting URL.
JSON=$("$CONFIG_DIR/meetingbar.swift" "$CALENDAR") || exit 1
URL=$(echo "$JSON" | jq -r '.primary.url // empty')
if [ -n "$URL" ]; then
open "$URL"
fi
fi