135 lines
3.4 KiB
Bash
Executable File
135 lines
3.4 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# Default config file
|
|
conf_path="/etc/forked-daapd.conf"
|
|
|
|
usage() {
|
|
echo
|
|
echo "Interactive script pair Remote with forked-daapd"
|
|
echo
|
|
echo "Usage: ${0##*/} -h | [ <config-file> ]"
|
|
echo
|
|
echo "Parameters:"
|
|
echo " -h Show this help"
|
|
echo " <config-file> Config file (default: $conf_path)"
|
|
echo
|
|
echo "NOTE: forked-daapd needs to be running..."
|
|
exit 0
|
|
}
|
|
|
|
case $1 in
|
|
-h|--help) usage;;
|
|
-*)
|
|
echo "Unrecognized option $1 (try -h for usage)"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
[ -n "$1" ] && conf_path=$1
|
|
|
|
if [ ! -f "$conf_path" ]; then
|
|
echo "Couldn't find config file '$conf_path' (try -h for usage)"
|
|
exit 1
|
|
fi
|
|
|
|
logfile=`awk '$1=="logfile"{print $3}' $conf_path`
|
|
logfile="${logfile%\"}"
|
|
logfile="${logfile#\"}"
|
|
[ -z "$logfile" ] && logfile="/var/log/forked-daapd.log"
|
|
if [ ! -r "$logfile" ]; then
|
|
echo "Error: Couldn't read logfile '$logfile'"
|
|
echo "Verify 'logfile' setting in config file '$conf_path'"
|
|
exit 1
|
|
fi
|
|
|
|
library_path=`awk '$1=="directories"{print}' $conf_path`
|
|
library_path="${library_path#*\"}"
|
|
library_path="${library_path%%\"*}"
|
|
if [ -z "$library_path" ]; then
|
|
echo "Couldn't find 'directories' setting in config file '$conf_path'"
|
|
exit 1
|
|
fi
|
|
if [ ! -d "$library_path" ]; then
|
|
echo "Error: Couldn't find library '$library_path'"
|
|
echo "Verify 'directories' setting in config file '$conf_path'"
|
|
exit 1
|
|
fi
|
|
|
|
rf="$library_path/pair.remote"
|
|
[ -f "$rf" ] && rm -f "$rf"
|
|
[ -f "$rf" ] && echo "Unable to remove existing pairing file '$rf'" && exit 1
|
|
|
|
echo "This script will help you pair Remote with forked-daapd"
|
|
echo "Please verify that these paths are correct:"
|
|
echo " Log file: '$logfile'"
|
|
echo " Library: '$library_path'"
|
|
read -p "Confirm? [Y/n] " yn
|
|
case "$yn" in
|
|
[N]*|[n]*) exit;;
|
|
esac
|
|
|
|
echo "Please start the pairing process in Remote by selecting Add library"
|
|
read -p "Press ENTER when ready..." yn
|
|
printf %s "Looking in $logfile for Remote announcement..."
|
|
|
|
n=5
|
|
while [ $n -gt 0 ]; do
|
|
n=`expr $n - 1`
|
|
remote=`tail -50 "$logfile" | grep "Discovered remote" | tail -1 | grep -o "'.*' ("`
|
|
remote="${remote%\'\ \(}"
|
|
remote="${remote#\'}"
|
|
[ -n "$remote" ] && break
|
|
sleep 2
|
|
done
|
|
|
|
if [ -z "$remote" ]; then
|
|
echo "not found!"
|
|
exit 1
|
|
fi
|
|
echo "found"
|
|
|
|
read -p "Ready to pair Remote '$remote', please enter PIN: " pin
|
|
if [ -z "$pin" ]; then
|
|
echo "Error: Invalid PIN"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Writing pair.remote to $library_path..."
|
|
printf "$remote\n$pin" > "$rf"
|
|
if [ ! -f "$rf" ]; then
|
|
echo "Unable to create '$rf' - check directory permissions"
|
|
exit 1
|
|
fi
|
|
|
|
# leave enough time for deferred file processing on BSD
|
|
n=20
|
|
echo "Waiting for pairing to complete (up to $n secs)..."
|
|
while [ $n -gt 0 ]; do
|
|
n=`expr $n - 1`
|
|
result=`tail -1000 "$logfile" | sed -n "/.*remote:/ s,.*remote: ,,p" | awk '/^Discovered remote/{ f="" } /^Read Remote pairing data/ { f=$0; } END { print f }'`
|
|
[ -n "$result" ] && break
|
|
sleep 1
|
|
done
|
|
if [ -z "$result" ]; then
|
|
echo "forked-daap doesn't appear to be finding $rf..."
|
|
echo "Check $logfile, removing pair.remote"
|
|
rm "$rf"
|
|
exit 1
|
|
fi
|
|
echo "Pairing file pair.remote read, removing it"
|
|
rm "$rf"
|
|
|
|
n=5
|
|
while [ $n -gt 0 ]; do
|
|
n=`expr $n - 1`
|
|
result=`tail -1000 "$logfile" | sed -n "/.*remote:/ s,.*remote: ,,p" | awk '/^Discovered remote/{ f="" } /^Pairing succeeded/ { f=$0; } END { print f }'`
|
|
if [ -n "$result" ]; then
|
|
echo "All done"
|
|
exit
|
|
fi
|
|
sleep 1
|
|
done
|
|
echo "Pairing appears to have failed... check $rf for details"
|
|
exit 1
|
|
|