Notification patch v4
This commit is contained in:
parent
dcf5ddd77c
commit
e6635ba7ef
7 changed files with 102 additions and 16 deletions
|
@ -32,6 +32,8 @@
|
|||
title = Dunst
|
||||
class = Dunst
|
||||
startup_notification = false
|
||||
mouse_left_click = do_action
|
||||
|
||||
[shortcuts]
|
||||
close_all = ctrl+shift+space
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/env sh
|
||||
trap gracefulexit INT TERM
|
||||
WIN=$(xdotool getwindowfocus)
|
||||
NOTIFDIR="$XDG_CONFIG_HOME"/sxmo/notifications
|
||||
|
||||
gracefulexit() {
|
||||
echo "Gracefully exiting $0"
|
||||
|
@ -339,8 +340,16 @@ getprogchoices() {
|
|||
# E.g. sets CHOICES var
|
||||
programchoicesinit "$@"
|
||||
|
||||
# Decorate menu at top w/ notifications if they exist
|
||||
NOTIFICATIONS="$(find "$NOTIFDIR"/* -type f | grep -vc "sxmo_incomingcall" || echo 0)"
|
||||
echo "$NOTIFICATIONS" | grep -v 0 &&
|
||||
CHOICES="
|
||||
Notifications ($(echo "$NOTIFICATIONS" | cut -d " " -f1)) ^ 0 ^ sxmo_notifications.sh
|
||||
$CHOICES
|
||||
"
|
||||
|
||||
# Decorate menu at top w/ incoming call entry if present
|
||||
INCOMINGCALL="$(cat /tmp/sxmo_incomingcall || echo NOCALL)"
|
||||
INCOMINGCALL="$(cat "$NOTIFDIR"/sxmo_incomingcall || echo NOCALL)"
|
||||
if echo "$INCOMINGCALL" | grep -v NOCALL; then
|
||||
CALLID="$(echo "$INCOMINGCALL" | cut -d: -f1)"
|
||||
CALLNUM="$(echo "$INCOMINGCALL" | cut -d: -f2)"
|
||||
|
@ -403,4 +412,4 @@ pgrep -f "$(command -v sxmo_appmenu.sh)" | grep -Ev "^${$}$" | xargs kill -TERM
|
|||
DMENUIDX=0
|
||||
PICKED=""
|
||||
ARGS="$*"
|
||||
mainloop
|
||||
mainloop
|
||||
|
|
48
scripts/core/sxmo_notificationmonitor.sh
Executable file
48
scripts/core/sxmo_notificationmonitor.sh
Executable file
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# This script should be run to initialize the notification watchers.
|
||||
|
||||
NOTIFDIR="$XDG_CONFIG_HOME"/sxmo/notifications
|
||||
|
||||
handlecreation(){
|
||||
sxmo_setpineled green 1;
|
||||
echo "$1" | grep "sxmo_incomingcall" ||
|
||||
{
|
||||
sxmo_vibratepine 200;
|
||||
sleep 0.1;
|
||||
sxmo_vibratepine 200;
|
||||
sleep 0.1;
|
||||
} &
|
||||
|
||||
# Dunstify / start notification watcher if it matches the sxmo_notificationwrite format
|
||||
grep -c . "$1" | grep 3 &&
|
||||
{
|
||||
inotifywait "$(tail -1 "$1")" && rm -f "$1" &
|
||||
|
||||
DUNST_RETURN="$(dunstify --action="2,open" "$(head -1 "$1" | cut -c1-70)")";
|
||||
# shellcheck disable=SC2091
|
||||
echo "$DUNST_RETURN" | grep -v 2 || { $(head -2 "$1" | tail -1)& }
|
||||
}
|
||||
}
|
||||
|
||||
sxmo_setpineled green 0
|
||||
for NOTIF in "$NOTIFDIR"/*; do
|
||||
[ -f "$NOTIF" ] || continue
|
||||
handlecreation "$NOTIF"
|
||||
done
|
||||
|
||||
while true; do
|
||||
{
|
||||
DIREVENT="$(inotifywait -e create,moved_to,delete,delete_self,moved_from "$NOTIFDIR"/)"
|
||||
case "$(echo "$DIREVENT" | cut -d" " -f2)" in
|
||||
"CREATE"|"MOVED_TO")
|
||||
NOTIFFILE="$NOTIFDIR/$(echo "$DIREVENT" | cut -d" " -f3)"
|
||||
handlecreation "$NOTIFFILE"
|
||||
;;
|
||||
|
||||
"DELETE"|"DELETE_SELF"|"MOVED_FROM")
|
||||
find "$NOTIFDIR"/ -type f -mindepth 1 | read -r || sxmo_setpineled green 0
|
||||
;;
|
||||
esac
|
||||
}
|
||||
done
|
16
scripts/core/sxmo_notifications.sh
Executable file
16
scripts/core/sxmo_notifications.sh
Executable file
|
@ -0,0 +1,16 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
NOTIFDIR="$XDG_CONFIG_HOME"/sxmo/notifications
|
||||
|
||||
FILES="$(find "$NOTIFDIR"/ -type f -not -name 'sxmo_incomingcall')"
|
||||
for FILE in $FILES; do
|
||||
CHOICES="$(printf %b "$FILE\t$(echo "$FILE" | cut -d: -f4-6) $(head -1 "$FILE")\n$CHOICES")"
|
||||
done
|
||||
PICKED="$(printf %b "$CHOICES\nClose Menu" | cut -f2 | dmenu -c -i -fn "Terminus-18" -p "Notifs" -l 10)"
|
||||
|
||||
echo "$PICKED" | grep "Close Menu" && exit 0
|
||||
TIMESTAMP="$(echo "$PICKED" | cut -d" " -f1 | cut -d: -f4-6)"
|
||||
FILE="$(printf %b "$CHOICES" | grep "$PICKED" | cut -f1 | grep "$TIMESTAMP")"
|
||||
|
||||
# shellcheck disable=SC2091
|
||||
$(head -2 "$FILE" | tail -1)
|
15
scripts/core/sxmo_notificationwrite.sh
Executable file
15
scripts/core/sxmo_notificationwrite.sh
Executable file
|
@ -0,0 +1,15 @@
|
|||
#!/usr/bin/env sh
|
||||
|
||||
# This script takes 3 arguments, (1) a fuzzy description of the notification, (2) the action that the notification invokes upon selecting, and (3) the file to watch for deactivation.
|
||||
# A notification file has 3 different fields, (1) a fuzzy description, (2) the selection action, and (3) the watch file.
|
||||
|
||||
NOTIFDIR="$XDG_CONFIG_HOME"/sxmo/notifications
|
||||
|
||||
mkdir -p "$NOTIFDIR"
|
||||
echo "$3" | grep -v . && { echo "Not enough args."; exit 2; }
|
||||
|
||||
# Don't send a notification if we're already looking at it!
|
||||
lsof | grep "$3" && exit 0
|
||||
|
||||
OUTFILE=$NOTIFDIR/$(date "+%Y:%m:%d:%H:%M:%S:%N")
|
||||
printf %b "$1\n$2\n$3\n" > "$OUTFILE"
|
|
@ -43,6 +43,7 @@ daemons() {
|
|||
|
||||
daemonsneedingdbus() {
|
||||
dunst -conf /usr/share/sxmo/appcfg/dunst.conf &
|
||||
sxmo_notificationmonitor.sh &
|
||||
sxmo_lisgdstart.sh &
|
||||
}
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#!/usr/bin/env sh
|
||||
TIMEOUT=3
|
||||
LOGDIR="$XDG_CONFIG_HOME"/sxmo/modem
|
||||
NOTIFDIR="$XDG_CONFIG_HOME"/sxmo/notifications
|
||||
trap "gracefulexit" INT TERM
|
||||
|
||||
err() {
|
||||
|
@ -10,7 +11,6 @@ err() {
|
|||
|
||||
gracefulexit() {
|
||||
echo "gracefully exiting $0!"
|
||||
sxmo_setpineled green 0
|
||||
kill -9 0
|
||||
}
|
||||
|
||||
|
@ -28,14 +28,14 @@ checkforincomingcalls() {
|
|||
)"
|
||||
|
||||
if echo "$VOICECALLID" | grep -v .; then
|
||||
rm -f /tmp/sxmo_incomingcall
|
||||
rm -f "$NOTIFDIR/sxmo_incomingcall"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -x "$XDG_CONFIG_HOME/sxmo/hooks/ring" ]; then
|
||||
"$XDG_CONFIG_HOME/sxmo/hooks/ring"
|
||||
else
|
||||
sxmo_vibratepine 2000 & sxmo_setpineled green 1
|
||||
sxmo_vibratepine 2000 &
|
||||
fi
|
||||
|
||||
# Delete all previous calls which have been terminated calls
|
||||
|
@ -61,7 +61,7 @@ checkforincomingcalls() {
|
|||
TIME="$(date --iso-8601=seconds)"
|
||||
mkdir -p "$LOGDIR"
|
||||
printf %b "$TIME\tcall_ring\t$INCOMINGNUMBER\n" >> "$LOGDIR/modemlog.tsv"
|
||||
echo "$VOICECALLID:$INCOMINGNUMBER" > /tmp/sxmo_incomingcall
|
||||
printf %b "$VOICECALLID:$INCOMINGNUMBER\n" > "$NOTIFDIR/sxmo_incomingcall"
|
||||
echo "Number: $INCOMINGNUMBER (VOICECALLID: $VOICECALLID)"
|
||||
}
|
||||
|
||||
|
@ -74,16 +74,8 @@ checkfornewtexts() {
|
|||
echo "$TEXTIDS" | grep -v . && return
|
||||
|
||||
# Loop each textid received and read out the data into appropriate logfile
|
||||
{
|
||||
sxmo_setpineled green 1
|
||||
sxmo_vibratepine 200;
|
||||
sleep 0.1;
|
||||
sxmo_vibratepine 200;
|
||||
sleep 0.1;
|
||||
sxmo_vibratepine 200;
|
||||
} &
|
||||
for TEXTID in $TEXTIDS; do
|
||||
|
||||
for TEXTID in $(printf %b "$TEXTIDS") ; do
|
||||
TEXTDATA="$(mmcli -m "$(modem_n)" -s "$TEXTID" -K)"
|
||||
TEXT="$(echo "$TEXTDATA" | grep sms.content.text | sed -E 's/^sms\.content\.text\s+:\s+//')"
|
||||
NUM="$(
|
||||
|
@ -97,12 +89,15 @@ checkfornewtexts() {
|
|||
printf %b "Received from $NUM at $TIME:\n$TEXT\n\n" >> "$LOGDIR/$NUM/sms.txt"
|
||||
printf %b "$TIME\trecv_txt\t$NUM\t${#TEXT} chars\n" >> "$LOGDIR/modemlog.tsv"
|
||||
mmcli -m "$(modem_n)" --messaging-delete-sms="$TEXTID"
|
||||
|
||||
CONTACT="$(sxmo_contacts.sh | grep "$NUM" || echo "$NUM")"
|
||||
echo "$CONTACT" | grep -c . | grep 1 || CONTACT="$NUM"
|
||||
( sxmo_notificationwrite.sh "Message from $CONTACT: $TEXT" "st -e tail -n9999 -f $LOGDIR/$NUM/sms.txt" "$LOGDIR/$NUM/sms.txt" & ) &
|
||||
done
|
||||
}
|
||||
|
||||
mainloop() {
|
||||
while true; do
|
||||
sxmo_setpineled green 0
|
||||
checkforincomingcalls
|
||||
checkfornewtexts
|
||||
sleep $TIMEOUT & wait
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue