diff options
author | Singustromo <singustromo@disroot.org> | 2023-11-04 22:39:03 +0100 |
---|---|---|
committer | Singustromo <singustromo@disroot.org> | 2023-11-04 22:39:03 +0100 |
commit | 119b6a73cef32512fb0f716367f052e2b3c26475 (patch) | |
tree | 438b16418ca2398c64135a63862c4d91a7303bb4 | |
parent | 421db1ee8fdcbae09f74ff0c3ffd272698019748 (diff) | |
download | radio-sh-119b6a73cef32512fb0f716367f052e2b3c26475.tar.gz radio-sh-119b6a73cef32512fb0f716367f052e2b3c26475.zip |
Moved MAIN code into function main()
-rwxr-xr-x | radio | 282 |
1 files changed, 143 insertions, 139 deletions
diff --git a/radio b/radio index ac09629..3ba3a4b 100755 --- a/radio +++ b/radio @@ -1000,147 +1000,151 @@ IO:user_input() { ### MAIN ### ####################################### -case "$1" in - ('-h'|'--help') Sys:usage ;; - ("--version") printf "%s\n" "$_version"; exit ;; - ("_option-default") # INTERNAL: print default value of an option - [ -n "${_option[$2]}" ] || exit - printf "%s" "${_option[$2]}" && exit ;; -esac - -Sys:depcheck - -if (( _load_options )) && Config:read; then - Config:load_options -else - Config:create -fi - -Sys:depcheck fw:"$_config_file_location" - -# These can be set after config was loaded -_option[streamer_args]="--input-ipc-server='${_option[streamer_socket]}' \ - --audio-client-name=${_option[clientname]}" -_streamer_cmd="mpv ${_option[streamer_args]} 2>&-" -_socketcmd="socat - ${_option[streamer_socket]} 2>&-" -_streamer_pid="$(Streamer:get_pid)" # Needed for check - -declare -A valid_args=( \ - [get]="station title timepos timeleft volume" - [set]="volume" - [toggle]="pause mute" - [config]="set ls station" - [config_station]="ls add rm") -case $1:$2:$3:$4:$5 in - (get:station:::) Streamer:get_station ;; - (get:title:*::) Streamer:get_title "$3" ;; - (get:vol:::) ;& - (get:volume:::) Streamer:get_volume ;; - (get:timepos:::) Streamer:get_time "time-pos" ;; - (get:timeleft:::) Streamer:get_time "time-remaining" ;; - (set:vol:::) ;& - (set:volume:*::) Streamer:set_volume "$3" ;; - (toggle:pause:::) Streamer:toggle pause;; - (toggle:mute:::) Streamer:toggle mute ;; - (stop::::) Streamer stop ;; - (seek:*:::) - if Streamer:seek "$2"; then - Sys:msg "$(Streamer:get_time "time-pos") / $(Streamer:get_time "time-remaining")" - else - Sys:msg err "Please enter a positive or negative number or [H]H:MM:SS, [M]M:SS" - fi ;; - (cfg:ls::: | config:ls::: | cfg:list:::) ;& - (config:list:::) Config:print_options ;; - (config:station:ls:: | cfg:station:list:: | cfg:station:ls::) ;& - (config:station:list::) Config:print_stations ;; - (cfg:station:add:*:*) ;& - (config:station:add:*:*) - if Config:add_station "$4" "$5"; then - Config:save && Sys:msg i "Added Station '$4'" - else - Sys:msg err "A Station named '$4' already exists." - fi ;; - (cfg:station:rm:*:) ;& - (config:station:rm:*:) - if IO:user_input "Really remove '$4'?" choice; then - if Config:rm_station "$4"; then - Config:save \ - && Sys:msg info "Removed Station '$4'" +main() { + case "$1" in + ('-h'|'--help') Sys:usage ;; + ("--version") printf "%s\n" "$_version"; exit ;; + ("_option-default") # INTERNAL: print default value of an option + printf "%s" "${_option[$2]}"; exit ;; + esac + + Sys:depcheck + + if (( _load_options )) && Config:read; then + Config:load_options + else + Config:create + fi + + Sys:depcheck fw:"$_config_file_location" + + # These can be set after config was loaded + _option[streamer_args]="--input-ipc-server='${_option[streamer_socket]}' \ + --audio-client-name=${_option[clientname]}" + _streamer_cmd="mpv ${_option[streamer_args]} 2>&-" + _socketcmd="socat - ${_option[streamer_socket]} 2>&-" + _streamer_pid="$(Streamer:get_pid)" # Needed for check + + declare -A valid_args=( \ + [get]="station title timepos timeleft volume" + [set]="volume" + [toggle]="pause mute" + [config]="set ls station" + [config_station]="ls add rm") + case $1:$2:$3:$4:$5 in + (get:station:::) Streamer:get_station ;; + (get:title:*::) Streamer:get_title "$3" ;; + (get:vol:::) ;& + (get:volume:::) Streamer:get_volume ;; + (get:timepos:::) Streamer:get_time "time-pos" ;; + (get:timeleft:::) Streamer:get_time "time-remaining" ;; + (set:vol:::) ;& + (set:volume:*::) Streamer:set_volume "$3" ;; + (toggle:pause:::) Streamer:toggle pause;; + (toggle:mute:::) Streamer:toggle mute ;; + (stop::::) Streamer stop ;; + (seek:*:::) + if Streamer:seek "$2"; then + Sys:msg "$(Streamer:get_time "time-pos") / $(Streamer:get_time "time-remaining")" else - Sys:msg err "Station does not exist" - fi - fi ;; - (cfg:set:*:*:) ;& - (config:set:*:*:) - Config:set "$3" "$4" - case "$?" in - 0 ) Config:save && Sys:msg info "Configuration changed successfully." ;; - 1 ) if [ "$3" == 'menu_cmd' ]; then - Sys:msg err "Valid values for menu_cmd are: ${_supported_menus[*]}" + Sys:msg err "Please enter a positive or negative number or [H]H:MM:SS, [M]M:SS" + fi ;; + (cfg:ls::: | config:ls::: | cfg:list:::) ;& + (config:list:::) Config:print_options ;; + (config:station:ls:: | cfg:station:list:: | cfg:station:ls::) ;& + (config:station:list::) Config:print_stations ;; + (cfg:station:add:*:*) ;& + (config:station:add:*:*) + if Config:add_station "$4" "$5"; then + Config:save && Sys:msg i "Added Station '$4'" + else + Sys:msg err "A Station named '$4' already exists." + fi ;; + (cfg:station:rm:*:) ;& + (config:station:rm:*:) + if IO:user_input "Really remove '$4'?" choice; then + if Config:rm_station "$4"; then + Config:save \ + && Sys:msg info "Removed Station '$4'" else - Sys:msg err "Invalid option name." - fi ;; - 2 ) Sys:msg info "Changed to the default value of '$3'." ;; - 3 ) Sys:msg err "The value for '$3' should be an integer." ;; - esac ;; - (status::::) - if [ -n "$_streamer_pid" ]; then - Sys:msg info "Stream active. (PID: $_streamer_pid)" - else - Sys:msg err "Stream inactive." - fi ;; - (:*) ;; # no parameters (first param is nil) - (*) - case "$1" in # resolve aliases for output - ("cfg") global_params="${*/cfg/config}" ;;& - ("ls") global_params="${*/ls/list}" ;;& - ("vol") global_params="${*/vol/volume}" ;;& - (*) [ -n "$global_params" ] \ - && { set -- $global_params; unset global_params; } - esac - - if [ -n "${valid_args[${1}_$2]}" ]; then - Sys:msg err "Accepted arguments for '$2': ${valid_args[${1}_$2]// /, }" - elif [ -n "${valid_args[$1]}" ]; then - Sys:msg err "Accepted arguments for '$1': ${valid_args[$1]// /, }" - else - Sys:usage "$1" short - fi ;; -esac -_prev_code=$?; [ "$#" -gt 0 ] && exit "$_prev_code" # nothing additional to do - -Sys:depcheck "${_option[menu_cmd]}" - -if ! Config:load_stations; then - Menu:open "No stations configured. Please add at least one. \ - \nConsult $_scriptname --help for more information" - false; exit -fi - -[ -n "$_streamer_pid" ] && Menu:insert_controls -Menu:insert "${_config_stations[@]}" - -choice="$(Menu:open)" || exit - -station="${choice%"${_option[internal_delimiter]}"*}" -cmd="${choice#*"${_option[internal_delimiter]}"}" -Sys:log "Choice: '$station' cmd: '$cmd' ($choice)" - -case "$cmd" in - (pause|unpause) Streamer:toggle pause ;; - (stop) Streamer stop ;; - (volume) Streamer:set_volume interactive ;; - (seek) Streamer:seek interactive ;; - (""|" "|'spacer') exit ;; # do nothing. - (*) - if [ -n "$_streamer_pid" ]; then - current_volume="$(Streamer:get_property "volume")" - streamer_action="restart" - fi + Sys:msg err "Station does not exist" + fi + fi ;; + (cfg:set:*:*:) ;& + (config:set:*:*:) + Config:set "$3" "$4" + case "$?" in + 0 ) Config:save && Sys:msg info "Configuration changed successfully." ;; + 1 ) if [ "$3" == 'menu_cmd' ]; then + Sys:msg err "Valid values for menu_cmd are: ${_supported_menus[*]}" + else + Sys:msg err "Invalid option name." + fi ;; + 2 ) Sys:msg info "Changed to the default value of '$3'." ;; + 3 ) Sys:msg err "The value for '$3' should be an integer." ;; + esac ;; + (status::::) + if [ -n "$_streamer_pid" ]; then + Sys:msg info "Stream active. (PID: $_streamer_pid)" + else + Sys:msg err "Stream inactive." + fi ;; + (:*) ;; # no parameters (first param is nil) + (*) + case "$1" in # resolve aliases for output + ("cfg") global_params="${*/cfg/config}" ;;& + ("ls") global_params="${*/ls/list}" ;;& + ("vol") global_params="${*/vol/volume}" ;;& + (*) [ -n "$global_params" ] \ + && { set -- $global_params; unset global_params; } + esac + + if [ -n "${valid_args[${1}_$2]}" ]; then + Sys:msg err "Accepted arguments for '$2': ${valid_args[${1}_$2]// /, }" + elif [ -n "${valid_args[$1]}" ]; then + Sys:msg err "Accepted arguments for '$1': ${valid_args[$1]// /, }" + else + Sys:usage "$1" short + fi ;; + esac + local _prev_code=$?; [ "$#" -gt 0 ] && exit "$_prev_code" # nothing additional to do + + Sys:depcheck "${_option[menu_cmd]}" + + if ! Config:load_stations; then + Menu:open "No stations configured. Please add at least one. \ + \nConsult $_scriptname --help for more information" + false; exit + fi + + [ -n "$_streamer_pid" ] && Menu:insert_controls + Menu:insert "${_config_stations[@]}" + + choice="$(Menu:open)" || exit + + station="${choice%"${_option[internal_delimiter]}"*}" + cmd="${choice#*"${_option[internal_delimiter]}"}" + Sys:log "Choice: '$station' cmd: '$cmd' ($choice)" + + case "$cmd" in + (pause|unpause) Streamer:toggle pause ;; + (stop) Streamer stop ;; + (volume) Streamer:set_volume interactive ;; + (seek) Streamer:seek interactive ;; + (""|" "|'spacer') exit ;; # do nothing. + (*) + if [ -n "$_streamer_pid" ]; then + current_volume="$(Streamer:get_property "volume")" + streamer_action="restart" + fi + + { Streamer "${streamer_action:-start}" "$cmd" "${current_volume:-}" \ + && Config:update_station "$station" listen_count; } & + ;; + esac +} - { Streamer "${streamer_action:-start}" "$cmd" "${current_volume:-}" \ - && Config:update_station "$station" listen_count; } & - ;; -esac +# Only execute, if not sourced +(( ${#BASH_SOURCE[@]} == 1 )) && main "$@" # vim: tabstop=4 shiftwidth=4 expandtab |