Summary of changes: 1. Always use the sxmo_notificationwrite.sh script to write notifications rather then sometimes using echo to the DIR 2. Reorder args for notiffile spec to be action as 1st line, watchfile 2nd, and rest as msg; this way msg can be multiple lines without propogating bugs 3. Write calls as a standard notification via sxmo_notificationwrite.sh 4. Use datestamps from notification files instead of filename, this way (3) works without extra logic 5. Various style fixes
65 lines
1.6 KiB
Bash
Executable file
65 lines
1.6 KiB
Bash
Executable file
#!/usr/bin/env sh
|
|
NOTIFDIR="$XDG_CONFIG_HOME"/sxmo/notifications
|
|
|
|
notificationhook() {
|
|
if [ -x "$XDG_CONFIG_HOME"/sxmo/hooks/notification ]; then
|
|
"$XDG_CONFIG_HOME"/sxmo/hooks/notification
|
|
else
|
|
sxmo_vibratepine 200;
|
|
sleep 0.1;
|
|
sxmo_vibratepine 200;
|
|
sleep 0.1;
|
|
fi
|
|
}
|
|
|
|
handlenewnotiffile(){
|
|
NOTIFFILE="$1"
|
|
|
|
if [ "$(wc -l "$NOTIFFILE" | cut -d' ' -f1)" -lt 3 ]; then
|
|
echo "Invalid notification file $NOTIFFILE found (<3 lines -- see notif spec in sxmo_notifwrite.sh), deleting!" >&2
|
|
rm "$NOTIFFILE"
|
|
else
|
|
sxmo_setpineled green 1;
|
|
notificationhook &
|
|
NOTIFACTION="$(awk NR==1 "$NOTIFFILE")"
|
|
NOTIFWATCHFILE="$(awk NR==2 "$NOTIFFILE")"
|
|
NOTIFMSG="$(tail -n+3 "$NOTIFFILE" | cut -c1-70)"
|
|
|
|
if dunstify --action="2,open" "$NOTIFMSG" | grep 2; then
|
|
eval "$NOTIFACTION"
|
|
else
|
|
inotifywait "$NOTIFWATCHFILE" && rm -f "$NOTIFFILE" &
|
|
fi
|
|
fi
|
|
}
|
|
|
|
recreateexistingnotifs() {
|
|
for NOTIF in "$NOTIFDIR"/*; do
|
|
[ -f "$NOTIF" ] || continue
|
|
handlenewnotiffile "$NOTIF"
|
|
done
|
|
}
|
|
|
|
monitorforaddordelnotifs() {
|
|
while true; do
|
|
INOTIFYOUTPUT="$(
|
|
inotifywait -e create,moved_to,delete,delete_self,moved_from "$NOTIFDIR"/
|
|
)"
|
|
INOTIFYEVENTTYPE="$(echo "$INOTIFYOUTPUT" | cut -d" " -f2)"
|
|
|
|
case "$INOTIFYEVENTTYPE" in
|
|
"CREATE"|"MOVED_TO")
|
|
NOTIFFILE="$NOTIFDIR/$(echo "$INOTIFYOUTPUT" | cut -d" " -f3)"
|
|
handlenewnotiffile "$NOTIFFILE"
|
|
;;
|
|
"DELETE"|"DELETE_SELF"|"MOVED_FROM")
|
|
# E.g. if no more notifications unset LED
|
|
find "$NOTIFDIR"/ -type f -mindepth 1 | read -r || sxmo_setpineled green 0
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
sxmo_setpineled green 0
|
|
recreateexistingnotifs
|
|
monitorforaddordelnotifs
|