about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSingustromo <singustromo@disroot.org>2023-11-04 22:39:03 +0100
committerSingustromo <singustromo@disroot.org>2023-11-04 22:39:03 +0100
commit119b6a73cef32512fb0f716367f052e2b3c26475 (patch)
tree438b16418ca2398c64135a63862c4d91a7303bb4
parent421db1ee8fdcbae09f74ff0c3ffd272698019748 (diff)
downloadradio-sh-119b6a73cef32512fb0f716367f052e2b3c26475.tar.gz
radio-sh-119b6a73cef32512fb0f716367f052e2b3c26475.zip
Moved MAIN code into function main()
-rwxr-xr-xradio282
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