dotfiles/.config/mail/mail-indicator.sh

52 lines
1.4 KiB
Bash
Executable file

#!/bin/env bash
# mailboxes to monitor
MAILBOXES=("personal" "school")
# named pipe for receiving refresh events
# from mail sync script
PIPE="/tmp/email_refresh_pipe"
COUNT="/tmp/email_count"
# Create pipe if doesn't exist
[[ -p "$PIPE" ]] || mkfifo "$PIPE"
if [ ! -e "$COUNT" ]; then
echo "0" > "$COUNT"
fi
# Get unread counts and format for waybar
get_unread_counts() {
for mailbox in "${MAILBOXES[@]}"; do
count=$(notmuch count --output=messages "tag:unread and path:$mailbox/**")
printf "%s: %s " "$mailbox" "$count"
done
# we print a newline to let waybar know to display
# what we just printed
printf "|\n"
}
# run once for initial output
echo "mail init |"
# begin event loop
while true; do
# cat blocks until data comes through pipe
# redirecting to null b.c. we don't want the
# pipe's contents to be printed to stdout
PAYLOAD=$(cat /tmp/email_refresh_pipe)
if [ "$PAYLOAD" == "add" ]; then
count=$(cat "$COUNT")
((count++))
echo "$count" > "$COUNT"
echo "new: $(cat "$COUNT") |"
# elif [ "$PAYLOAD" == "reset" ]; then
# "0" > "$COUNT"
elif [ "$PAYLOAD" == "show_precise" ]; then
echo "0" > "$COUNT"
get_unread_counts
elif [ "$PAYLOAD" == "show_since" ]; then
echo "new: $(cat "$COUNT") |"
else
get_unread_counts
fi
done