|
|
|
#!/usr/bin/env sh
|
|
|
|
trap gracefulexit INT TERM
|
|
|
|
|
|
|
|
# include common definitions
|
|
|
|
# shellcheck source=scripts/core/sxmo_common.sh
|
|
|
|
. "$(dirname "$0")/sxmo_common.sh"
|
|
|
|
|
|
|
|
gracefulexit() {
|
|
|
|
echo "Gracefully exiting $0"
|
|
|
|
kill -9 0
|
|
|
|
}
|
|
|
|
|
|
|
|
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 -f "$NOTIFFILE"
|
|
|
|
else
|
|
|
|
sxmo_hooks.sh notification "$NOTIFFILE" &
|
|
|
|
NOTIFACTION="$(awk NR==1 "$NOTIFFILE")"
|
|
|
|
NOTIFWATCHFILE="$(awk NR==2 "$NOTIFFILE")"
|
|
|
|
NOTIFMSG="$(tail -n+3 "$NOTIFFILE" | cut -c1-70)"
|
|
|
|
|
|
|
|
(
|
|
|
|
dunstify --action="2,open" "$NOTIFMSG" | grep 2 && (
|
|
|
|
setsid -f sh -c "$NOTIFACTION" &
|
|
|
|
rm -f "$NOTIFFILE"
|
|
|
|
)
|
|
|
|
) &
|
|
|
|
|
|
|
|
[ -e "$NOTIFWATCHFILE" ] && (
|
|
|
|
inotifywait "$NOTIFWATCHFILE" && rm -f "$NOTIFFILE"
|
|
|
|
) &
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
recreateexistingnotifs() {
|
|
|
|
for NOTIF in "$NOTIFDIR"/*; do
|
|
|
|
[ -f "$NOTIF" ] || continue
|
|
|
|
handlenewnotiffile "$NOTIF"
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
syncled() {
|
|
|
|
sxmo_setpineled green 0
|
|
|
|
if [ "$(find "$NOTIFDIR"/ -type f | wc -l)" -gt 0 ]; then
|
|
|
|
sleep 0.1
|
|
|
|
sxmo_setpineled green 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
monitorforaddordelnotifs() {
|
|
|
|
while true; do
|
|
|
|
if [ ! -e "$NOTIFDIR" ]; then
|
|
|
|
mkdir -p "$NOTIFDIR" || sleep 10
|
|
|
|
fi
|
|
|
|
inotifywait -e create,attrib,moved_to,delete,delete_self,moved_from "$NOTIFDIR"/ | (
|
|
|
|
INOTIFYOUTPUT="$(cat)"
|
|
|
|
INOTIFYEVENTTYPE="$(echo "$INOTIFYOUTPUT" | cut -d" " -f2)"
|
|
|
|
syncled
|
|
|
|
if echo "$INOTIFYEVENTTYPE" | grep -E "CREATE|MOVED_TO|ATTRIB"; then
|
|
|
|
NOTIFFILE="$NOTIFDIR/$(echo "$INOTIFYOUTPUT" | cut -d" " -f3)"
|
|
|
|
handlenewnotiffile "$NOTIFFILE"
|
|
|
|
fi
|
|
|
|
) & wait
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
|
|
|
pgrep -f "$(command -v sxmo_notificationmonitor.sh)" | grep -Ev "^${$}$" | xargs -r kill
|
|
|
|
rm -f "$NOTIFDIR"/incomingcall
|
|
|
|
recreateexistingnotifs
|
|
|
|
syncled
|
|
|
|
monitorforaddordelnotifs
|