121 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable file
		
	
	
	
	
| #!/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"
 |