Received: from mout02.posteo.de (mout02.posteo.de [185.67.36.142]) by mail-b.sr.ht (Postfix) with ESMTPS id 608B2FF13D for <~mil/sxmo-devel@lists.sr.ht>; Fri, 31 Jul 2020 23:34:18 +0000 (UTC) Received: from submission (posteo.de [89.146.220.130]) by mout02.posteo.de (Postfix) with ESMTPS id CDE452400FB for <~mil/sxmo-devel@lists.sr.ht>; Sat, 1 Aug 2020 01:34:15 +0200 (CEST) Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4BJNsL6RMKz6tmM; Sat, 1 Aug 2020 01:34:14 +0200 (CEST) From: iressa To: ~mil/sxmo-devel@lists.sr.ht Cc: iressa Subject: [PATCH 1/1] Notification patch v4 Date: Fri, 31 Jul 2020 19:34:12 -0400 Message-Id: <20200731233412.29685-2-ian@eonndev.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20200731233412.29685-1-ian@eonndev.com> References: <20200731233412.29685-1-ian@eonndev.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable --- configs/appcfg/dunst.conf | 2 + scripts/core/sxmo_appmenu.sh | 13 ++++++- scripts/core/sxmo_notificationmonitor.sh | 48 ++++++++++++++++++++++++ scripts/core/sxmo_notifications.sh | 16 ++++++++ scripts/core/sxmo_notificationwrite.sh | 15 ++++++++ scripts/core/sxmo_xinit.sh | 1 + scripts/modem/sxmo_modemmonitor.sh | 25 +++++------- 7 files changed, 103 insertions(+), 17 deletions(-) create mode 100755 scripts/core/sxmo_notificationmonitor.sh create mode 100755 scripts/core/sxmo_notifications.sh create mode 100755 scripts/core/sxmo_notificationwrite.sh diff --git a/configs/appcfg/dunst.conf b/configs/appcfg/dunst.conf index a7f9323..b2bddee 100644 --- a/configs/appcfg/dunst.conf +++ b/configs/appcfg/dunst.conf @@ -32,6 +32,8 @@ title =3D Dunst class =3D Dunst startup_notification =3D false + mouse_left_click =3D do_action + [shortcuts] close_all =3D ctrl+shift+space =20 diff --git a/scripts/core/sxmo_appmenu.sh b/scripts/core/sxmo_appmenu.sh index 639e912..d4a3b5f 100755 --- a/scripts/core/sxmo_appmenu.sh +++ b/scripts/core/sxmo_appmenu.sh @@ -1,6 +1,7 @@ #!/usr/bin/env sh trap gracefulexit INT TERM WIN=3D$(xdotool getwindowfocus) +NOTIFDIR=3D"$XDG_CONFIG_HOME"/sxmo/notifications =20 gracefulexit() { echo "Gracefully exiting $0" @@ -337,8 +338,16 @@ getprogchoices() { # E.g. sets CHOICES var programchoicesinit "$@" =20 + # Decorate menu at top w/ notifications if they exist + NOTIFICATIONS=3D"$(find "$NOTIFDIR"/* -type f | grep -vc "sxmo_incoming= call" || echo 0)" + echo "$NOTIFICATIONS" | grep -v 0 && + CHOICES=3D" + Notifications ($(echo "$NOTIFICATIONS" | cut -d " " -f1)) ^ 0 ^ sxmo_= notifications.sh + $CHOICES + " + # Decorate menu at top w/ incoming call entry if present - INCOMINGCALL=3D"$(cat /tmp/sxmo_incomingcall || echo NOCALL)" + INCOMINGCALL=3D"$(cat "$NOTIFDIR"/sxmo_incomingcall || echo NOCALL)" if echo "$INCOMINGCALL" | grep -v NOCALL; then CALLID=3D"$(echo "$INCOMINGCALL" | cut -d: -f1)" CALLNUM=3D"$(echo "$INCOMINGCALL" | cut -d: -f2)" @@ -401,4 +410,4 @@ pgrep -f "$(command -v sxmo_appmenu.sh)" | grep -Ev "= ^${$}$" | xargs kill -TERM DMENUIDX=3D0 PICKED=3D"" ARGS=3D"$*" -mainloop \ No newline at end of file +mainloop diff --git a/scripts/core/sxmo_notificationmonitor.sh b/scripts/core/sxmo= _notificationmonitor.sh new file mode 100755 index 0000000..175a87d --- /dev/null +++ b/scripts/core/sxmo_notificationmonitor.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env sh + +# This script should be run to initialize the notification watchers. + +NOTIFDIR=3D"$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_notifica= tionwrite format + grep -c . "$1" | grep 3 && + { + inotifywait "$(tail -1 "$1")" && rm -f "$1" & + + DUNST_RETURN=3D"$(dunstify --action=3D"2,open" "$(head -1 "$1" | cut = -c1-70)")"; + # shellcheck disable=3DSC2091 + 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=3D"$(inotifywait -e create,moved_to,delete,delete_self,moved_= from "$NOTIFDIR"/)" + case "$(echo "$DIREVENT" | cut -d" " -f2)" in + "CREATE"|"MOVED_TO") + NOTIFFILE=3D"$NOTIFDIR/$(echo "$DIREVENT" | cut -d" " -f3)" + handlecreation "$NOTIFFILE" + ;; + =09 + "DELETE"|"DELETE_SELF"|"MOVED_FROM") + find "$NOTIFDIR"/ -type f -mindepth 1 | read -r || sxmo_setpineled g= reen 0 + ;; + esac + } +done diff --git a/scripts/core/sxmo_notifications.sh b/scripts/core/sxmo_notif= ications.sh new file mode 100755 index 0000000..7ce9eb3 --- /dev/null +++ b/scripts/core/sxmo_notifications.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env sh + +NOTIFDIR=3D"$XDG_CONFIG_HOME"/sxmo/notifications + +FILES=3D"$(find "$NOTIFDIR"/ -type f -not -name 'sxmo_incomingcall')" +for FILE in $FILES; do + CHOICES=3D"$(printf %b "$FILE\t$(echo "$FILE" | cut -d: -f4-6) $(head -= 1 "$FILE")\n$CHOICES")" +done +PICKED=3D"$(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=3D"$(echo "$PICKED" | cut -d" " -f1 | cut -d: -f4-6)" +FILE=3D"$(printf %b "$CHOICES" | grep "$PICKED" | cut -f1 | grep "$TIMES= TAMP")" + +# shellcheck disable=3DSC2091 +$(head -2 "$FILE" | tail -1) diff --git a/scripts/core/sxmo_notificationwrite.sh b/scripts/core/sxmo_n= otificationwrite.sh new file mode 100755 index 0000000..f301f9f --- /dev/null +++ b/scripts/core/sxmo_notificationwrite.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env sh + +# This script takes 3 arguments, (1) a fuzzy description of the notifica= tion, (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=3D"$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 +=09 +OUTFILE=3D$NOTIFDIR/$(date "+%Y:%m:%d:%H:%M:%S:%N") +printf %b "$1\n$2\n$3\n" > "$OUTFILE" diff --git a/scripts/core/sxmo_xinit.sh b/scripts/core/sxmo_xinit.sh index ce6f99a..8e9e504 100755 --- a/scripts/core/sxmo_xinit.sh +++ b/scripts/core/sxmo_xinit.sh @@ -44,6 +44,7 @@ daemons() { =20 daemonsneedingdbus() { dunst -conf /usr/share/sxmo/appcfg/dunst.conf & + sxmo_notificationmonitor.sh & sxmo_lisgdstart.sh & } =20 diff --git a/scripts/modem/sxmo_modemmonitor.sh b/scripts/modem/sxmo_mode= mmonitor.sh index 6283df3..0ca91c0 100755 --- a/scripts/modem/sxmo_modemmonitor.sh +++ b/scripts/modem/sxmo_modemmonitor.sh @@ -1,6 +1,7 @@ #!/usr/bin/env sh TIMEOUT=3D3 LOGDIR=3D"$XDG_CONFIG_HOME"/sxmo/modem +NOTIFDIR=3D"$XDG_CONFIG_HOME"/sxmo/notifications trap "gracefulexit" INT TERM =20 err() { @@ -10,7 +11,6 @@ err() { =20 gracefulexit() { echo "gracefully exiting $0!" - sxmo_setpineled green 0 kill -9 0 } =20 @@ -28,14 +28,14 @@ checkforincomingcalls() { )" =20 if echo "$VOICECALLID" | grep -v .; then - rm -f /tmp/sxmo_incomingcall + rm -f "$NOTIFDIR/sxmo_incomingcall" return fi =20 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 =20 # Delete all previous calls which have been terminated calls @@ -61,7 +61,7 @@ checkforincomingcalls() { TIME=3D"$(date --iso-8601=3Dseconds)" mkdir -p "$LOGDIR" printf %b "$TIME\tcall_ring\t$INCOMINGNUMBER\n" >> "$LOGDIR/modemlog.ts= v" - echo "$VOICECALLID:$INCOMINGNUMBER" > /tmp/sxmo_incomingcall + printf %b "$VOICECALLID:$INCOMINGNUMBER\n" > "$NOTIFDIR/sxmo_incomingca= ll" echo "Number: $INCOMINGNUMBER (VOICECALLID: $VOICECALLID)" } =20 @@ -74,16 +74,8 @@ checkfornewtexts() { echo "$TEXTIDS" | grep -v . && return =20 # Loop each textid received and read out the data into appropriate logf= ile - { - sxmo_setpineled green 1 - sxmo_vibratepine 200; - sleep 0.1; - sxmo_vibratepine 200; - sleep 0.1; - sxmo_vibratepine 200; - } & - - for TEXTID in $(printf %b "$TEXTIDS") ; do + for TEXTID in $TEXTIDS; do + TEXTDATA=3D"$(mmcli -m "$(modem_n)" -s "$TEXTID" -K)" TEXT=3D"$(echo "$TEXTDATA" | grep sms.content.text | sed -E 's/^sms\.c= ontent\.text\s+:\s+//')" NUM=3D"$( @@ -97,12 +89,15 @@ checkfornewtexts() { printf %b "Received from $NUM at $TIME:\n$TEXT\n\n" >> "$LOGDIR/$NUM/s= ms.txt" printf %b "$TIME\trecv_txt\t$NUM\t${#TEXT} chars\n" >> "$LOGDIR/modeml= og.tsv" mmcli -m "$(modem_n)" --messaging-delete-sms=3D"$TEXTID" + + CONTACT=3D"$(sxmo_contacts.sh | grep "$NUM" || echo "$NUM")" + echo "$CONTACT" | grep -c . | grep 1 || CONTACT=3D"$NUM" + ( sxmo_notificationwrite.sh "Message from $CONTACT: $TEXT" "st -e tail= -n9999 -f $LOGDIR/$NUM/sms.txt" "$LOGDIR/$NUM/sms.txt" & ) & done } =20 mainloop() { while true; do - sxmo_setpineled green 0 checkforincomingcalls checkfornewtexts sleep $TIMEOUT & wait --=20 2.28.0