133 lines
3.4 KiB
Bash
Executable File

#!/bin/bash
ALERT_IF_IN_NEXT_MINUTES=10
ALERT_POPUP_BEFORE_SECONDS=10
NERD_FONT_FREE="󱁕 "
NERD_FONT_MEETING="󰤙"
get_attendees() {
attendees=$(
icalBuddy \
--includeEventProps "attendees" \
--propertyOrder "datetime,title" \
--noCalendarNames \
--dateFormat "%A" \
--includeOnlyEventsFromNowOn \
--limitItems 1 \
--excludeAllDayEvents \
--separateByDate \
--excludeEndDates \
--bullet "" \
--excludeCals "training,omerxx@gmail.com" \
eventsToday
)
}
parse_attendees() {
attendees_array=()
for line in $attendees; do
attendees_array+=("$line")
done
number_of_attendees=$((${#attendees_array[@]} - 3))
}
get_next_meeting() {
next_meeting=$(icalBuddy \
--includeEventProps "title,datetime" \
--propertyOrder "datetime,title" \
--noCalendarNames \
--dateFormat "%A" \
--includeOnlyEventsFromNowOn \
--limitItems 1 \
--excludeAllDayEvents \
--separateByDate \
--bullet "" \
--excludeCals "training,omerxx@gmail.com" \
eventsToday)
}
get_next_next_meeting() {
end_timestamp=$(date +"%Y-%m-%d ${end_time}:01 %z")
tonight=$(date +"%Y-%m-%d 23:59:00 %z")
next_next_meeting=$(
icalBuddy \
--includeEventProps "title,datetime" \
--propertyOrder "datetime,title" \
--noCalendarNames \
--dateFormat "%A" \
--limitItems 1 \
--excludeAllDayEvents \
--separateByDate \
--bullet "" \
--excludeCals "training,omerxx@gmail.com" \
eventsFrom:"${end_timestamp}" to:"${tonight}"
)
}
parse_result() {
array=()
for line in $1; do
array+=("$line")
done
time="${array[2]}"
end_time="${array[4]}"
title="${array[*]:5:30}"
}
calculate_times() {
epoc_meeting=$(date -j -f "%T" "$time:00" +%s)
epoc_now=$(date +%s)
epoc_diff=$((epoc_meeting - epoc_now))
minutes_till_meeting=$((epoc_diff / 60))
}
display_popup() {
tmux display-popup \
-S "fg=#eba0ac" \
-w50% \
-h50% \
-d '#{pane_current_path}' \
-T meeting \
icalBuddy \
--propertyOrder "datetime,title" \
--noCalendarNames \
--formatOutput \
--includeEventProps "title,datetime,notes,url,attendees" \
--includeOnlyEventsFromNowOn \
--limitItems 1 \
--excludeAllDayEvents \
--excludeCals "training" \
eventsToday
}
print_tmux_status() {
if [[ $minutes_till_meeting -lt $ALERT_IF_IN_NEXT_MINUTES &&
$minutes_till_meeting -gt -60 ]]; then
echo "$NERD_FONT_MEETING \
$time $title ($minutes_till_meeting minutes)"
else
echo "$NERD_FONT_FREE"
fi
if [[ $epoc_diff -gt $ALERT_POPUP_BEFORE_SECONDS && epoc_diff -lt $ALERT_POPUP_BEFORE_SECONDS+10 ]]; then
display_popup
fi
}
main() {
get_attendees
parse_attendees
get_next_meeting
parse_result "$next_meeting"
calculate_times
if [[ "$next_meeting" != "" && $number_of_attendees -lt 2 ]]; then
get_next_next_meeting
parse_result "$next_next_meeting"
calculate_times
fi
print_tmux_status
# echo "$minutes_till_meeting | $number_of_attendees"
}
main