You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
122 lines
2.7 KiB
122 lines
2.7 KiB
4 years ago
|
#!/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"
|