From 12385f639a3fadfc1958186efd2120c62cdd55d7 Mon Sep 17 00:00:00 2001 From: Bruno21 Date: Mon, 6 Feb 2023 10:13:56 +0100 Subject: [PATCH] Alarms -new functions: * move_alarm() and * spec() for modify alarms * modify_alarms() * enable_alarms() -rebuild the list_alarms() -update remove_alarms() --- soco-cli-gui.sh | 323 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 314 insertions(+), 9 deletions(-) diff --git a/soco-cli-gui.sh b/soco-cli-gui.sh index 7016795..b2ddadb 100755 --- a/soco-cli-gui.sh +++ b/soco-cli-gui.sh @@ -1552,7 +1552,7 @@ soco_alarms() { echo -e " 3) ${bgd}R${reset}emove alarms " " | " echo -e " 4) ${bgd}M${reset}odify alarms " " | " echo -e " 5) ${bgd}E${reset}nable/disable alarms " " | " - echo -e " 6) " " | " + echo -e " 6) Mo${bgd}v${reset}e alarm " " | " echo -e " 7) " " | " echo -e " 8) " " | " echo -e " 9) " " | " @@ -1568,6 +1568,7 @@ soco_alarms() { 3|r|R) remove_alarms;; 4|m|M) modify_alarms;; 5|e|E) enable_alarms;; + 6|v|V) move_alarms;; 10|h|H) exec "$0";; *) echo -e "\n${red}Oops!!! Please Select Correct Choice${reset}"; echo -e "Press ${bold}ENTER${reset} To Continue..." ; read ;; @@ -1578,11 +1579,311 @@ soco_alarms() { # Alarms alarms() { echo -e "\n${bold} Alarms... ${reset}" - a=$(sonos $loc $device alarms) - echo -e "\n $a \n" + + list_alarms + echo "$court_ala" + echo read -p "< Press Enter>" } +list_alarms() { + long_ala=$(sonos $loc $device alarms) + court_ala=$(echo "$long_ala" | cut -d "|" -f 1,2,3,4,5,6,7,8,9) + + #long_ala=$(cat long_alarm.txt) + +} + +remove_alarms() { + echo -e "\n${bold} Remove alarms... ${reset}" + + list_alarms + echo "$court_ala" + echo + + while : + do + read -p "Enter the alarm to remove or [q] to quit: " trk + if [[ "$trk" == "q" || "$trk" == "Q" ]]; then + break + else + ala_id=$(echo "$court_ala" | sed '1,3d' | awk -F "|" '{print $2}') + if [[ $ala_id =~ "$trk" ]]; then + sonos $loc $device remove_alarm $trk + [ $? != 0 ] && echo -e "${red}Error !${reset}" + break + else + echo "Wrong !" + fi + fi + done + + read -p "< Press Enter>" +} + + +move_alarms() { + echo -e "\n${bold} Move alarm to speaker... ${reset}" + + list_alarms + echo "$court_ala" + echo + + #y=($((awk '{print $1}' | grep -v $device) <<< $dev)) + #echo ${y[@]} + + while : + do + read -p "Enter the alarm to move or [q] to quit: " trk + if [[ "$trk" == "q" || "$trk" == "Q" ]]; then + break + else + ala_id=$(echo "$court_ala" | sed '1,3d' | awk -F "|" '{print $2}') + if [[ $ala_id =~ "$trk" ]]; then + + actual_speaker=$(echo "$long_ala" | awk -F "|" -v var="$trk" '($2 == var) {print $3}' | xargs | sed 's/ , /,/g') + other_speakers=$(echo "$dev" | grep -v $actual_speaker | cut -d ' ' -f1) + + read -p "Move Alarm ID <$trk> to Speaker <$other_speakers> (enter target name): " target + if [[ $other_speakers =~ "$target" ]]; then + sonos $loc $target move_alarm $trk + [ $? != 0 ] && echo -e "${red}Error !${reset}" + break + else echo "Wrong target name !" + fi + else + echo "Wrong !" + fi + fi + done + + read -p "< Press Enter>" +} + +spec() { + + echo "--" + echo "$1" + echo "$2" + echo "$3" + echo "$4" + echo "$5" + echo "$6" + echo "$7" + echo "$8" + echo "--" + + while : + do + read -e -p "Input start time (HH:MM): " -i $1 start_time + REGEX="^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$" + #[[ $start_time == "_" ]] && break + #[[ $start_time =~ $REGEX ]] && break + [[ $start_time == "_" ]] || [[ $start_time =~ $REGEX ]] && break + done + + while : + do + read -e -p "Input duration (HH:MM): " -i $2 duration + REGEX="^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$" + #[[ $duration == "_" ]] && break + #[[ $duration =~ $REGEX ]] && break + [[ $duration == "_" ]] || [[ $duration =~ $REGEX ]] && break + done + + ddd="" + while : + do + read -e -p "Input recurrence (DAILY, ONCE, WEEKDAYS, WEEKENDS, ON_DDDDDD): " -i $3 recurrence + REGEX="DAILY|ONCE|ONCE|WEEKDAYS|WEEKENDS" + [[ $recurrence == "_" ]] && break + if [[ $recurrence =~ $REGEX ]]; then + MATCH0="${BASH_REMATCH[0]}" + break + else + REGEX2="ON_([0-6]{1,6})$" + if [[ $recurrence =~ $REGEX2 ]]; then + MATCH0="${BASH_REMATCH[0]}" + if (! grep -qE '([0-6])\1{1}' <<< "$MATCH0"); then + dddddd=$(echo "$MATCH0" | awk -F"_" '{print $2}') + [[ $dddddd =~ 0 ]] && ddd+="Sunday " + [[ $dddddd =~ 1 ]] && ddd+="Monday " + [[ $dddddd =~ 2 ]] && ddd+="Tuesday " + [[ $dddddd =~ 3 ]] && ddd+="Wednesday " + [[ $dddddd =~ 4 ]] && ddd+="Thursday " + [[ $dddddd =~ 5 ]] && ddd+="Friday " + [[ $dddddd =~ 6 ]] && ddd+="Saturday " + + read -p "Recurrence: $ddd OK ? (y/n)" rep_alarm + REGEX3="Y|y|O|o" + [[ $rep_alarm =~ $REGEX3 ]] && break + ddd="" + + else echo "Repeated character !" + fi + fi + fi + done + + while : + do + read -e -p "Enable (ON/OFF or YES/NO): " -i $4 enabled + REGEX="ON|OFF|YES|NO" + [[ $enabled =~ $REGEX ]] || [[ $enabled == "_" ]] && break + done + + echo $5 + + while : + do + read -e -p "Play (CHIME or URI): " -i "$5" to_play + REGEX="CHIME|^(http|https)://" + #if [[ $to_play =~ $REGEX ]]; then + if [[ $to_play =~ $REGEX ]] || [[ $to_play == "_" ]]; then + #MATCH0="${BASH_REMATCH[0]}" + #echo $MATCH0 + #[ $MATCH0 != "CHIME" ] && + break + fi + done + + while : + do + read -e -p "Play mode (NORMAL, SHUFFLE_NOREPEAT, SHUFFLE, REPEAT_ALL, REPEAT_ONE, SHUFFLE_REPEAT_ONE): " -i $6 play_mode + REGEX="NORMAL|SHUFFLE_NOREPEAT|SHUFFLE|REPEAT_ALL|REPEAT_ONE|SHUFFLE_REPEAT_ONE" + [[ $play_mode =~ $REGEX ]] || [[ $play_mode == "_" ]] && break + done + + while : + do + read -e -p "Volume (0 - 100): " -i $7 volume + [ $volume == "_" ] && break + if [ $volume -ge 0 ] && [ $volume -le 100 ]; then + break + else echo "Enter a number betwenn 0 and 100 !" + fi + done + + while : + do + read -e -p "Grouped speakers (ON/OFF , YES/NO): " -i $8 grouped + REGEX="ON|OFF|YES|NO" + [[ $grouped =~ $REGEX ]] && break + done + + #alarm_spec="$start_time,$duration,$recurrence,$enabled,$to_play,$play_mode,$volume,$grouped" + + #start_time="_" + #duration="_" + alarm_spec="$start_time,$duration,$recurrence,$enabled,$to_play,$play_mode,$volume,$grouped" + +} + +modify_alarms() { + echo -e "\n${bold} Modify alarms... ${reset}" + + list_alarms + echo "$court_ala" + echo + + while : + do + read -p "Enter the alarm to modify or [q] to quit: " trk + if [[ "$trk" == "q" || "$trk" == "Q" ]]; then + break + else + ala=$(echo "$court_ala" | sed '1,3d') + ala_id=$(echo "$court_ala" | sed '1,3d' | awk -F "|" '{print $2}') + if [[ $ala_id =~ "$trk" ]]; then + + to_modify=$(echo "$long_ala" | awk -F "|" -v var="$trk" '($2 == var) {print $3","$4","$5","$6","$7","$8","$9","$10","$11}' | xargs | sed 's/ , /,/g') + echo "$to_modify" + + # Avant modif + # Chambre,06:00,00:30,WEEKDAYS,No,France Inter 95.9 (Émissions-débats France),SHUFFLE,25,No + + IFS=, read -a ids <<< "${to_modify}" + + speaker="${ids[0]}" + start_time="${ids[1]}" + duration="${ids[2]}" + recurrence="${ids[3]}" + enabled="${ids[4]^^}" + to_play="\"${ids[5]}\"" + play_mode="${ids[6]}" + volume="${ids[7]}" + grouped="${ids[8]^^}" + +: <<'END_COMMENT2' + echo "$speaker" + echo "$start_time" + echo "$duration" + echo "$recurrence" + echo "$enabled" + echo "$to_play" # + + #get_uri + + echo "$play_mode" + echo "$volume" + echo "$grouped" + echo +END_COMMENT2 + spec $start_time $duration $recurrence $enabled "$to_play" $play_mode $volume $grouped + + + # 07:00,01:30,WEEKDAYS,ON,"http://stream.live.vc.bbcmedia.co.uk/bbc_radio_fourfm",NORMAL,50,OFF + + echo $alarm_spec + # 06:00,00:30,WEEKDAYS,NO,CHIME,SHUFFLE,25,ON + + # https://jazzradio.ice.infomaniak.ch/frequencejazz-high.mp3 + + sonos $loc $device modify_alarm $trk $alarm_spec + [ $? != 0 ] && echo -e "${red}Error !${reset}" + + break + else + echo "Wrong !" + fi + fi + done + + read -p "< Press Enter>" +} + +enable_alarms() { + echo -e "\n${bold} Enable alarms... ${reset}" + + list_alarms + echo "$court_ala" + echo + + while : + do + read -p "Enter the alarm to enable/disable or [q] to quit: " trk + if [[ "$trk" == "q" || "$trk" == "Q" ]]; then + break + else + ala=$(echo "$court_ala" | sed '1,3d') + ala_id=$(echo "$court_ala" | sed '1,3d' | awk -F "|" '{print $2}') + if [[ $ala_id =~ "$trk" ]]; then + enabled=$(echo "$ala" | awk -F "|" -v var="$trk" '($2 == var) {print $7}' | xargs) + case $enabled in + Yes) sonos $loc $device disable_alarm $trk;; + No) sonos $loc $device enable_alarm $trk;; + esac + [ $? != 0 ] && echo -e "${red}Error !${reset}" + break + else + echo "Wrong !" + fi + fi + done + + read -p "< Press Enter>" +} + create_alarms() { # start time (HH:MM) @@ -1600,6 +1901,10 @@ create_alarms() { echo -e "\n${bold} Create Sonos alarms... ${reset}" echo -e "\n" + list_alarms + echo "$court_ala" + echo + while : do read -p "Input start time (HH:MM): " start_time @@ -1618,7 +1923,7 @@ create_alarms() { while : do read -p "Input recurrence (DAILY, ONCE, WEEKDAYS, WEEKENDS, ON_DDDDDD): " recurrence - REGEX="DAILY|ONCE|ONCE|WEEKENDS" + REGEX="DAILY|ONCE|ONCE|WEEKDAYS|WEEKENDS" if [[ $recurrence =~ $REGEX ]]; then MATCH0="${BASH_REMATCH[0]}" break @@ -1659,9 +1964,9 @@ create_alarms() { read -p "Play (CHIME or URI): " to_play REGEX="CHIME|^(http|https)://" if [[ $to_play =~ $REGEX ]]; then - #MATCH0="${BASH_REMATCH[0]}" - #echo $MATCH0 - #[ $MATCH0 != "CHIME" ] && + MATCH0="${BASH_REMATCH[0]}" + echo $MATCH0 + [ $MATCH0 != "CHIME" ] && to_play="\"$to_play\"" break fi done @@ -1689,11 +1994,11 @@ create_alarms() { done alarm_spec="$start_time,$duration,$recurrence,$enabled,$to_play,$play_mode,$volume,$grouped" - echo "$alarm_spec" + echo -e "\nalarm_spec: $alarm_spec" #sonos $loc $device create_alarm "$alarm_spec" a=$(sonos $loc $device create_alarm "$alarm_spec") - echo -e "\n $a \n" + echo -e "\n $a \n" # vide read -p "< Press Enter>" }