parent
30558c7b2d
commit
0b22abd4b4
1 changed files with 121 additions and 0 deletions
@ -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" |
Loading…
Reference in new issue