08-02-2023

remove_alarms(): remove a series of <Alarm_ID>
create_alarms(): remork the function and add some fzf to options
This commit is contained in:
2023-02-08 17:43:43 +01:00
parent c5d7d3f16d
commit 33c8eb68f0

View File

@@ -41,8 +41,14 @@ default_snooze=10 # 10 minutes
# Default Sonos device # Default Sonos device
default="Salon" default="Salon"
fzf_bin=0
device="" device=""
if (! type fzf > /dev/null 2>&1); then fzf_bin=0
else fzf_bin=1
fi
devices() { devices() {
discover=$(sonos-discover -p 2>/dev/null) discover=$(sonos-discover -p 2>/dev/null)
if [ -z "$discover" ]; then if [ -z "$discover" ]; then
@@ -1591,8 +1597,8 @@ alarms() {
} }
list_alarms() { list_alarms() {
long_ala=$(sonos $loc $device alarms) #long_ala=$(sonos $loc $device alarms)
#long_ala=$(cat long_alarm.txt) long_ala=$(cat long_alarm.txt)
court_ala=$(echo "$long_ala" | cut -d "|" -f 1,2,3,4,5,6,7,8,9) court_ala=$(echo "$long_ala" | cut -d "|" -f 1,2,3,4,5,6,7,8,9)
} }
@@ -1603,6 +1609,7 @@ remove_alarms() {
echo "$court_ala" echo "$court_ala"
echo echo
j="" j=""
k=""
while : while :
do do
@@ -1611,47 +1618,46 @@ remove_alarms() {
break break
else else
ala_id=$(echo "$court_ala" | sed '1,3d' | awk -F "|" '{print $2}') ala_id=$(echo "$court_ala" | sed '1,3d' | awk -F "|" '{print $2}')
# suite d'<alarm id>
h=$(echo "$trk" | sed 's/,/ /g') h=$(echo "$trk" | sed 's/,/ /g')
for i in ${h} for i in ${h}
do do
echo "$i"
[[ $ala_id =~ "$i" ]] && j+="$i," [[ $ala_id =~ "$i" ]] && j+="$i,"
[[ ! $ala_id =~ "$i" ]] && k+="$i,"
done done
j=$(echo "$j" | sed 's/,$//') j=$(echo "$j" | sed 's/,$//')
echo "j:--$j--" k=$(echo "$k" | sed 's/,$//')
echo ${#j}
echo "trk:--$trk--"
echo ${#trk}
if [[ $ala_id =~ "$trk" ]] || [[ $trk == "all" ]] || [ -n $j ]; then if [[ $ala_id =~ "$trk" ]] || [[ $trk == "all" ]] || [ -n "$j" ]; then # j non vide
#if [[ $ala_id =~ "$trk" ]] || [[ $trk == "all" ]]; then
echo "---" if [ -n "$j" ]; then
echo "les 3 conditions:"
echo $trk
echo $j
echo "---"
#[[ $trk == "all" ]]; then
if [ -n $j ]; then
trk=$j trk=$j
echo "j non vide" elif [ -n "$j" ] && [[ $trk == "all" ]]; then
echo $trk
elif [ -n $j ] && [[ $trk == "all" ]]; then
trk="all" trk="all"
echo "j non vide ET trk=all"
fi fi
echo "remove_alarm $trk" echo "Remove alarm with <Alarm ID> $trk"
#sonos $loc $device remove_alarm $trk [ -n "$k" ] && echo "No <Alarm ID> $k !"
sonos $loc $device remove_alarm $trk
[ $? != 0 ] && echo -e "${red}Error !${reset}" [ $? != 0 ] && echo -e "${red}Error !${reset}"
break break
elif [ -z $j ]; then
echo "Wrong <Alarm ID> serie !"
else else
echo "Wrong <Alarm ID> !" echo "Wrong <Alarm ID> !"
fi fi
fi fi
done done
read -p "< Press Enter>" # 1 4 19 23 25 43 44 45
# Enter 45 -> remove_alarm 45 OK
# Enter 46 -> Wrong <Alarm ID> ! OK
# Enter 44,45 -> remove_alarm 44,45 OK
# Enter q > quit OK
# Enter aa -> Wrong <Alarm ID> ! OK
# Enter all -> remove_alarm all OK
# Enter 45,46 -> remove_alarm 45 OK
sleep 1
#read -p "< Press Enter>"
} }
snooze_alarms() { snooze_alarms() {
@@ -1682,10 +1688,10 @@ snooze_alarms() {
done done
if [ -n "$snooze" ]; then if [ -n "$snooze" ]; then
sonos $loc $device snooze_alarm $snooze sonos $loc $device snooze_alarm $snooze
[ $? != 0 ] && echo -e "${red}Error !${reset}" [ $? != 0 ] && echo -e "${red}Error !${reset}"
fi fi
} }
@@ -1729,7 +1735,7 @@ move_alarms() {
# read -p "< Press Enter>" # read -p "< Press Enter>"
} }
spec() { al_spec() {
echo "--" echo "--"
echo "$1" echo "$1"
@@ -1745,34 +1751,34 @@ spec() {
while : while :
do do
read -e -p "Input start time (HH:MM): " -i $1 start_time 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]$" REGEX1="^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"
#[[ $start_time == "_" ]] && break #[[ $start_time == "_" ]] && break
#[[ $start_time =~ $REGEX ]] && break #[[ $start_time =~ $REGEX ]] && break
[[ $start_time == "_" ]] || [[ $start_time =~ $REGEX ]] && break [[ $start_time == "_" ]] || [[ $start_time =~ $REGEX1 ]] && break
done done
while : while :
do do
read -e -p "Input duration (HH:MM): " -i $2 duration read -e -p "Input duration (HH:MM): " -i $2 duration
REGEX="^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$" REGEX2="^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"
#[[ $duration == "_" ]] && break #[[ $duration == "_" ]] && break
#[[ $duration =~ $REGEX ]] && break #[[ $duration =~ $REGEX ]] && break
[[ $duration == "_" ]] || [[ $duration =~ $REGEX ]] && break [[ $duration == "_" ]] || [[ $duration =~ $REGEX2 ]] && break
done done
ddd="" ddd=""
while : while :
do do
read -e -p "Input recurrence (DAILY, ONCE, WEEKDAYS, WEEKENDS, ON_DDDDDD): " -i $3 recurrence read -e -p "Input recurrence (DAILY, ONCE, WEEKDAYS, WEEKENDS, ON_DDDDDD): " -i $3 recurrence
REGEX="DAILY|ONCE|ONCE|WEEKDAYS|WEEKENDS" REGEX3="DAILY|ONCE|ONCE|WEEKDAYS|WEEKENDS"
[[ $recurrence == "_" ]] && break [[ $recurrence == "_" ]] && break
if [[ $recurrence =~ $REGEX ]]; then if [[ $recurrence =~ $REGEX3 ]]; then
MATCH0="${BASH_REMATCH[0]}" MATCH3="${BASH_REMATCH[0]}"
break break
else else
REGEX2="ON_([0-6]{1,6})$" REGEX32="ON_([0-6]{1,6})$"
if [[ $recurrence =~ $REGEX2 ]]; then if [[ $recurrence =~ $REGEX32 ]]; then
MATCH0="${BASH_REMATCH[0]}" MATCH32="${BASH_REMATCH[0]}"
if (! grep -qE '([0-6])\1{1}' <<< "$MATCH0"); then if (! grep -qE '([0-6])\1{1}' <<< "$MATCH0"); then
dddddd=$(echo "$MATCH0" | awk -F"_" '{print $2}') dddddd=$(echo "$MATCH0" | awk -F"_" '{print $2}')
[[ $dddddd =~ 0 ]] && ddd+="Sunday " [[ $dddddd =~ 0 ]] && ddd+="Sunday "
@@ -1784,8 +1790,8 @@ spec() {
[[ $dddddd =~ 6 ]] && ddd+="Saturday " [[ $dddddd =~ 6 ]] && ddd+="Saturday "
read -p "Recurrence: $ddd OK ? (y/n)" rep_alarm read -p "Recurrence: $ddd OK ? (y/n)" rep_alarm
REGEX3="Y|y|O|o" REGEX33="Y|y|O|o"
[[ $rep_alarm =~ $REGEX3 ]] && break [[ $rep_alarm =~ $REGEX33 ]] && break
ddd="" ddd=""
else echo "Repeated character !" else echo "Repeated character !"
@@ -1797,21 +1803,21 @@ spec() {
while : while :
do do
read -e -p "Enable (ON/OFF or YES/NO): " -i $4 enabled read -e -p "Enable (ON/OFF or YES/NO): " -i $4 enabled
REGEX="ON|OFF|YES|NO" REGEX4="ON|OFF|YES|NO"
[[ $enabled =~ $REGEX ]] || [[ $enabled == "_" ]] && break [[ $enabled =~ $REGEX4 ]] || [[ $enabled == "_" ]] && break
done done
echo $5 uri=$(echo $5 | sed 's/\"//g')
while : while :
do do
read -e -p "Play (CHIME or URI): " -i "$5" to_play read -e -p "Play (CHIME or URI): " -i "$uri" to_play
REGEX="CHIME|^(http|https)://" REGEX5="CHIME|^(http|https)://"
#if [[ $to_play =~ $REGEX ]]; then #if [[ $to_play =~ $REGEX ]]; then
if [[ $to_play =~ $REGEX ]] || [[ $to_play == "_" ]]; then if [[ $to_play =~ $REGEX5 ]] || [[ $to_play == "_" ]]; then
#MATCH0="${BASH_REMATCH[0]}" MATCH5="${BASH_REMATCH[0]}"
#echo $MATCH0 echo $MATCH5
#[ $MATCH0 != "CHIME" ] && [ $MATCH5 != "CHIME" ] && to_play="\"$to_play\""
break break
fi fi
done done
@@ -1819,8 +1825,8 @@ spec() {
while : while :
do do
read -e -p "Play mode (NORMAL, SHUFFLE_NOREPEAT, SHUFFLE, REPEAT_ALL, REPEAT_ONE, SHUFFLE_REPEAT_ONE): " -i $6 play_mode 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" REGEX6="NORMAL|SHUFFLE_NOREPEAT|SHUFFLE|REPEAT_ALL|REPEAT_ONE|SHUFFLE_REPEAT_ONE"
[[ $play_mode =~ $REGEX ]] || [[ $play_mode == "_" ]] && break [[ $play_mode =~ $REGEX6 ]] || [[ $play_mode == "_" ]] && break
done done
while : while :
@@ -1836,16 +1842,11 @@ spec() {
while : while :
do do
read -e -p "Grouped speakers (ON/OFF , YES/NO): " -i $8 grouped read -e -p "Grouped speakers (ON/OFF , YES/NO): " -i $8 grouped
REGEX="ON|OFF|YES|NO" REGEX8="ON|OFF|YES|NO"
[[ $grouped =~ $REGEX ]] && break [[ $grouped =~ $REGEX8 ]] || [[ $grouped == "_" ]] && break
done 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" alarm_spec="$start_time,$duration,$recurrence,$enabled,$to_play,$play_mode,$volume,$grouped"
} }
modify_alarms() { modify_alarms() {
@@ -1866,7 +1867,8 @@ modify_alarms() {
if [[ $ala_id =~ "$trk" ]]; then 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') 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"
echo "to_modify: $to_modify"
# Avant modif # Avant modif
# Chambre,06:00,00:30,WEEKDAYS,No,France Inter 95.9 (Émissions-débats France),SHUFFLE,25,No # Chambre,06:00,00:30,WEEKDAYS,No,France Inter 95.9 (Émissions-débats France),SHUFFLE,25,No
@@ -1883,7 +1885,9 @@ modify_alarms() {
volume="${ids[7]}" volume="${ids[7]}"
grouped="${ids[8]^^}" grouped="${ids[8]^^}"
spec $start_time $duration $recurrence $enabled "$to_play" $play_mode $volume $grouped echo ${ids[@]}
al_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 # 07:00,01:30,WEEKDAYS,ON,"http://stream.live.vc.bbcmedia.co.uk/bbc_radio_fourfm",NORMAL,50,OFF
@@ -1935,7 +1939,7 @@ enable_alarms() {
fi fi
done done
read -p "< Press Enter>" sleep 1
} }
create_alarms() { create_alarms() {
@@ -1959,34 +1963,84 @@ create_alarms() {
echo "$court_ala" echo "$court_ala"
echo echo
declare -A radio_uri
radio_uri=(['France Info']="http://icecast.radiofrance.fr/franceinfo-midfi.mp3"
['France Inter']="http://icecast.radiofrance.fr/franceinter-midfi.mp3"
['RTL']="https://streamer-02.rtl.fr/rtl-1-44-128"
['Classic FM']="https://classicfm.ice.infomaniak.ch/classic-fm.mp3"
['FIP Jazz']="https://icecast.radiofrance.fr/fipjazz-midfi.mp3"
['FIP Metal']="https://icecast.radiofrance.fr/fipmetal-midfi.mp3"
['FIP Reggae']="https://icecast.radiofrance.fr/fipreggae-midfi.mp3"
['FIP Rock']="https://icecast.radiofrance.fr/fiprock-midfi.mp3"
['France Bleue Bourgone']="https://icecast.radiofrance.fr/fbbourgogne-midfi.mp3"
['France Culture']="https://icecast.radiofrance.fr/franceculture-midfi.mp3"
['France Musique']="https://icecast.radiofrance.fr/francemusique-midfi.mp3"
['Frequence Jazz']="https://jazzradio.ice.infomaniak.ch/frequencejazz-high.mp3"
['Jazz Blues']="https://jazzblues.ice.infomaniak.ch/jazzblues-high.mp3"
['Le Mouv']="https://icecast.radiofrance.fr/mouv-midfi.mp3"
['RFM']="https://stream.rfm.fr/rfm.mp3"
['Soma FM']="http://ice2.somafm.com/indiepop-128-aac"
['Radio Classique']="http://radioclassique.ice.infomaniak.ch/radioclassique-high.mp3"
['Party Viber Radio']="http://www.partyviberadio.com:8020/listen.pls"
['*CHIME*']="CHIME")
fzf_recurrence=("DAILY" "ONCE" "WEEKDAYS" "WEEKENDS" "ON_DDDDDD")
fzf_play_mode=("NORMAL" "SHUFFLE_NOREPEAT" "SHUFFLE" "REPEAT_ALL" "REPEAT_ONE" "SHUFFLE_REPEAT_ONE")
fzf_yes_no=("ON" "OFF" "YES" "NO")
fzf_args=(
--height=8
--info=hidden
--with-nth=2..
--layout=reverse
--bind=change:clear-query
--border
)
# --prompt='Play'
# --header="${header:1}"
echo
shopt -s nocasematch
while : while :
do do
read -p "Input start time (HH:MM): " start_time read -p "Input start time (HH:MM): " start_time
REGEX="^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$" REGEX1="^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"
[[ $start_time =~ $REGEX ]] && break [[ $start_time =~ $REGEX1 ]] && break
done done
while : while :
do do
read -p "Input duration (HH:MM): " duration read -p "Input duration (HH:MM): " duration
REGEX="^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$" REGEX2="^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$"
[[ $duration =~ $REGEX ]] && break [[ $duration =~ $REGEX2 ]] && break
done done
if [ $fzf_bin -eq 1 ]; then
header=" Input recurrence"
prompt="Input recurrence"
choice=$(printf "Play %s\n" "${fzf_recurrence[@]}" | fzf "${fzf_args[@]}" --prompt "$prompt")
recurrence_fzf=${choice:5}
fi
ddd="" ddd=""
while : while :
do do
read -p "Input recurrence (DAILY, ONCE, WEEKDAYS, WEEKENDS, ON_DDDDDD): " recurrence read -e -p "Input recurrence (DAILY, ONCE, WEEKDAYS, WEEKENDS, ON_DDDDDD): " -i "$recurrence_fzf" recurrence
REGEX="DAILY|ONCE|ONCE|WEEKDAYS|WEEKENDS" REGEX3="DAILY|ONCE|ONCE|WEEKDAYS|WEEKENDS"
if [[ $recurrence =~ $REGEX ]]; then if [[ $recurrence =~ $REGEX3 ]]; then
MATCH0="${BASH_REMATCH[0]}" MATCH3="${BASH_REMATCH[0]}"
break break
else else
REGEX2="ON_([0-6]{1,6})$" REGEX2="ON_([0-6]{1,6})$"
if [[ $recurrence =~ $REGEX2 ]]; then if [[ $recurrence =~ $REGEX2 ]]; then
MATCH0="${BASH_REMATCH[0]}" MATCH2="${BASH_REMATCH[0]}"
if (! grep -qE '([0-6])\1{1}' <<< "$MATCH0"); then if (! grep -qE '([0-6])\1{1}' <<< "$MATCH0"); then
dddddd=$(echo "$MATCH0" | awk -F"_" '{print $2}') dddddd=$(echo "$MATCH2" | awk -F"_" '{print $2}')
[[ $dddddd =~ 0 ]] && ddd+="Sunday " [[ $dddddd =~ 0 ]] && ddd+="Sunday "
[[ $dddddd =~ 1 ]] && ddd+="Monday " [[ $dddddd =~ 1 ]] && ddd+="Monday "
[[ $dddddd =~ 2 ]] && ddd+="Tuesday " [[ $dddddd =~ 2 ]] && ddd+="Tuesday "
@@ -2002,34 +2056,60 @@ create_alarms() {
else echo "Repeated character !" else echo "Repeated character !"
fi fi
else
echo "Wrong recurrence format !"
fi fi
fi fi
done done
if [ $fzf_bin -eq 1 ]; then
header=" Enable / disable alarm"
prompt="Enable / disable alarm"
choice=$(printf "Play %s\n" "${fzf_yes_no[@]}" | fzf "${fzf_args[@]}" --prompt "$prompt")
enable_fzf=${choice:5}
fi
while : while :
do do
read -p "Enable (ON/OFF or YES/NO): " enabled read -e -p "Enable (ON/OFF or YES/NO): " -i "$enable_fzf" enabled
REGEX="ON|OFF|YES|NO" REGEX4="ON|OFF|YES|NO"
[[ $enabled =~ $REGEX ]] && break [[ $enabled =~ $REGEX4 ]] && break
done done
if [ $fzf_bin -eq 1 ]; then
header=" Choose a radio or *CHIME* for an alarm"
prompt="Choose a radio or *CHIME* for an alarm"
choice=$(printf "Play %s\n" "${!radio_uri[@]}" | fzf "${fzf_args[@]}" --prompt "$prompt")
to_play_fzf=${radio_uri[${choice:5}]}
fi
while : while :
do do
read -p "Play (CHIME or URI): " to_play read -e -p "Play (CHIME or URI): " -i "$to_play_fzf" to_play
REGEX="CHIME|^(http|https)://" #REGEX5="CHIME|^(http|https)://"
if [[ $to_play =~ $REGEX ]]; then REGEX5="CHIME|^(https?|ftp|file)://[-[:alnum:]\+&@#/%?=~_|!:,.;]+"
MATCH0="${BASH_REMATCH[0]}" if [[ $to_play =~ $REGEX5 ]]; then
echo $MATCH0 MATCH5="${BASH_REMATCH[0]}"
[ $MATCH0 != "CHIME" ] && to_play="\"$to_play\"" [ $MATCH5 != "CHIME" ] && to_play="\"$to_play\""
break break
fi fi
done done
if [ $fzf_bin -eq 1 ]; then
header=" Choose play mode"
prompt="Choose play mode"
choice=$(printf "Play %s\n" "${fzf_play_mode[@]}" | fzf "${fzf_args[@]}" --prompt "$prompt")
pm_fzf=${choice:5}
fi
while : while :
do do
read -p "Play mode (NORMAL, SHUFFLE_NOREPEAT, SHUFFLE, REPEAT_ALL, REPEAT_ONE, SHUFFLE_REPEAT_ONE): " play_mode read -e -p "Play mode (NORMAL, SHUFFLE_NOREPEAT, SHUFFLE, REPEAT_ALL, REPEAT_ONE, SHUFFLE_REPEAT_ONE): " -i "$pm_fzf" play_mode
REGEX="NORMAL|SHUFFLE_NOREPEAT|SHUFFLE|REPEAT_ALL|REPEAT_ONE|SHUFFLE_REPEAT_ONE" REGEX6="NORMAL|SHUFFLE_NOREPEAT|SHUFFLE|REPEAT_ALL|REPEAT_ONE|SHUFFLE_REPEAT_ONE"
[[ $play_mode =~ $REGEX ]] && break [[ $play_mode =~ $REGEX6 ]] && break
done done
while : while :
@@ -2040,14 +2120,24 @@ create_alarms() {
fi fi
done done
if [ $fzf_bin -eq 1 ]; then
header=" Grouped speakers"
prompt="Grouped speakers"
choice=$(printf "Play %s\n" "${fzf_yes_no[@]}" | fzf "${fzf_args[@]}" --prompt "$prompt")
gs_fzf=${choice:5}
fi
while : while :
do do
read -p "Grouped speakers (ON/OFF , YES/NO): " grouped read -e -p "Grouped speakers (ON/OFF , YES/NO): " -i "$gs_fzf" grouped
REGEX="ON|OFF|YES|NO" REGEX8="ON|OFF|YES|NO"
[[ $grouped =~ $REGEX ]] && break [[ $grouped =~ $REGEX8 ]] && break
done done
alarm_spec="$start_time,$duration,$recurrence,$enabled,$to_play,$play_mode,$volume,$grouped" shopt -u nocasematch
alarm_spec="$start_time,$duration,${recurrence^^},${enabled^^},$to_play,${play_mode^^},$volume,${grouped^^}"
echo -e "\nalarm_spec: $alarm_spec" echo -e "\nalarm_spec: $alarm_spec"
#sonos $loc $device create_alarm "$alarm_spec" #sonos $loc $device create_alarm "$alarm_spec"