diff --git a/bin/.bin/modem/checkSMS b/bin/.bin/modem/checkSMS new file mode 100755 index 00000000..9e15c18a --- /dev/null +++ b/bin/.bin/modem/checkSMS @@ -0,0 +1,121 @@ +#!/usr/bin/env bash + +# This is largely borrowed from: +# https://git.sr.ht/~mil/sxmo-utils/tree/master/item/scripts/modem/sxmo_modemmonitor.sh + +# This is where sms messages will be stored +SMS_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/SMS/" + +die(){ + echo "$@" > /dev/stderr + rm "$FILE" + exit 1 +} + +usage(){ + echo "checkSMS [options] [message|-]" + echo "Options:" + echo " -h|--help Display this help text" + echo " -m|--modem Specify a modem" + echo " --dry-run Don't actually send the message" +} + + +trimWhitespace(){ + sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' +} + +mkdir -p "$SMS_DIR" + +dryrun="false" +edit="false" + +# Assume we want the first modem +# can be overwritten by the -m option +modem="$(mmcli -L | grep -oE 'Modem\/[0-9]+' | head -n 1 | cut -d'/' -f2)" + + +# Iterate over options breaking -ab into -a -b when needed and --foo=bar into +# --foo bar +optstring=h +unset options +while (($#)); do + case $1 in + # If option is of type -ab + -[!-]?*) + # Loop over each character starting with the second + for ((i=1; i < ${#1}; i++)); do + c=${1:i:1} + + # Add current char to options + options+=("-$c") + + # If option takes a required argument, and it's not the last char make + # the rest of the string its argument + if [[ $optstring = *"$c:"* && ${1:i+1} ]]; then + options+=("${1:i+1}") + break + fi + done + ;; + + # If option is of type --foo=bar + --?*=*) options+=("${1%%=*}" "${1#*=}") ;; + # add --endopts for -- + --) options+=(--endopts) ;; + # Otherwise, nothing special + *) options+=("$1") ;; + esac + shift +done +set -- "${options[@]}" +unset options + + +# Read the options and set stuff +while [[ $1 = -?* ]]; do + case $1 in + -h|--help) usage; exit;; + -m|--modem) modem="$2"; shift ;; + --dry-run) dryrun="true" ;; + --) shift; break ;; + *) die "invalid option: '$1'." ;; + esac + shift +done + +# Get the ids of new texts +ids="$( mmcli -m "$modem" --messaging-list-sms | + grep -Eo '/SMS/[0-9]+ \(received\)' | grep -Eo '[0-9]+' )" + +count="$(echo -n "$ids" | wc -l)" + +[ "$count" -eq 0 ] && return + +echo "$ids" | while read -r id; do + # Get the details of the message + details="$(mmcli -m "$modem" -s "$id" -K)" + number="$(echo "$details" | grep "sms.content.number" | cut -d':' -f2- | + trimWhitespace)" + text="$(echo "$details" | grep "sms.content.text" | cut -d':' -f2- | + trimWhitespace)" + time="$(echo "$details" | grep "sms.properties.timestamp" | cut -d':' -f2- | + trimWhitespace)" + + # Make a directory if necesary + mkdir -p "$SMS_DIR/$number" + + log="$SMS_DIR/$number/sms.log" + + # Store the message in the log file + echo "RECIEVED" + echo "SENDER: $number" >> $log + echo "TIME: $(date -d "$time")" >> $log + echo "----" >> $log + echo -e "$text" >> $log + printf '\00\n' >> $log + + mmcli -m "$modem" --messaging-delete-sms="$id" +done + +notify-send "$count new messages"