133 lines
3.4 KiB
Bash
Executable File
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
|