#!/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 "$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"