diff options
Diffstat (limited to 'scripts/netcfg-menu')
-rwxr-xr-x | scripts/netcfg-menu | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/scripts/netcfg-menu b/scripts/netcfg-menu new file mode 100755 index 0000000..ff57005 --- /dev/null +++ b/scripts/netcfg-menu @@ -0,0 +1,69 @@ +#! /bin/bash + +. /usr/lib/network/network + +if [[ ! -x /usr/bin/dialog ]]; then + echo "Please install 'dialog' to use netcfg-menu" + exit 1 +fi + +check_make_state_dir + +# JP: we'll use $STATE_DIR/menu to record what profile is being connected in this way +rm -f "$STATE_DIR/menu" + +# Scan all profiles +i=0 +# JP: change for prof to while read prof to avoid assumption that profile names are always single tokens (no spaces etc.) +while read prof; do + # if there is a profile called "main", Use as default + [[ "$prof" = "main" ]] && DEFAULT="main" + profiles[$i]="$prof" + let i++ + profiles[$i]=$(. "$PROFILE_DIR/$prof"; echo "$DESCRIPTION") + let i++ +done < <(list_profiles | sort) # JP: re-use list_profiles instead of duplicating it; avoid subshell we'd get by piping it to the while read... + +if [[ ${#profiles} -eq 0 ]]; then + exit_err "No profiles were found in $PROFILE_DIR" +fi + +[[ -n "$NETWORKS_MENU_DEFAULT" ]] && DEFAULT="$NETWORKS_MENU_DEFAULT" +# if no default yet, use the first entry +[[ -z "$DEFAULT" ]] && DEFAULT="${profiles[0]}" +ANSWER=$(mktemp --tmpdir menu.XXXXXXXX) || exit 1 + +# Set timeout +if [[ -z "$1" ]]; then + TIMEOUT="0" +else + TIMEOUT="$1" +fi + +# Display Dialog +dialog --timeout "$TIMEOUT" --default-item "$DEFAULT" \ + --menu "Select the network profile you wish to use" \ + 13 50 6 "${profiles[@]}" 2> "$ANSWER" + +ret=$? + +case $ret in + 1) ;; # Cancel - do nothing + 255) # timeout - use default + profile_up "$DEFAULT" # JP: use profile_up and catch $? + ret=$? + if [[ $ret -eq 0 ]]; then echo "$DEFAULT" > "$STATE_DIR/menu"; fi + ;; + 0) # User selection + profile_up "$(cat "$ANSWER")" + ret=$? + if [[ $ret -eq 0 ]]; then mv "$ANSWER" "$STATE_DIR/menu"; fi + ;; + *) # Shouldnt happen + exit_err "Abnormal ret code from dialog: $ret" + ;; +esac +rm -f "$ANSWER" # JP: add -f +exit $ret # JP: exit with caught $? + +# vim: ft=sh ts=4 et sw=4: |