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.
 
 
 
 
 
 

128 lines
2.6 KiB

#!/usr/bin/env bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
source "$DIR/common"
usage(){
echo "checkCall [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"
}
# Stolen from sxmo
lookupnumberfromcallid() {
local id=$1
mmcli -m "$modem" --voice-list-calls -o "$id" -K |
grep call.properties.number |
cut -d ':' -f 2 |
tr -d ' '
}
lookupcontact(){
echo "$1" |
# Remove the +44 and replace with 0
sed 's/^\+44/0/'
# This will eventually work with abook but for now just return the number
}
answer-call(){
mmcli -m "$modem" -o "$1" --accept
}
reject-call(){
notify-send "Reject"
}
prompt-incoming(){
export DISPLAY=:0.0
local answer=""
local reject=""
local choice=''
# Used for testing
local number="${1:-01234 567890}"
local prompt="$(echo -en "Incoming Call\n$number")"
while [ -z "$choice" ]; do
choice="$(echo -e "$answer\n$reject" | rofi -dmenu -i \
-theme themes/incoming-call.rasi -a 0 -u 1 \
-p "$prompt" \
-me-select-entry '' -me-accept-entry MousePrimary)"
case "$choice" in
"$answer") echo "answer" ;;
"$reject") echo "reject" ;;
esac
done
}
mkdir -p "$CALL_DIR"
dryrun="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)"
# 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
checkIncoming(){
local id="$( mmcli -m "$modem" --voice-list-calls |
grep -Eo '[0-9]+ incoming \(ringing-in\)' | grep -Eo '[0-9]+' )"
local count="$(echo "$id" | deleteEmptyLines | wc -l)"
[ "$count" -eq 0 ] && return
local number="$(lookupnumberfromcallid "$id")"
local contact="$(lookupcontact "$number")"
local action="$(prompt-incoming "$contact")"
case action in
accept) answer-call "$id" ;;
reject) reject-call "$id" ;;
esac
}
checkFinished(){
local ids="$( mmcli -m "$modem" --voice-list-calls |
grep -Eo '[0-9]+ incoming \(terminated\)' | grep -Eo '[0-9]+' )"
local count="$(echo "$ids" | deleteEmptyLines | wc -l)"
[ "$count" -eq 0 ] && return
echo "$ids" | while read -r id; do
# Delete from the modem
local number="$(lookupnumberfromcallid "$id")"
local contact="$(lookupcontact "$number")"
echo "Missed call from $contact" >> "$CALL_DIR/missed-calls"
mmcli -m "$modem" --voice-delete-call "$id"
done
}
checkIncoming &
checkFinished &