forked from buttstuf/soapdish
357 lines
9.3 KiB
Bash
Executable File
357 lines
9.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# SYSTEM: CONFIG Options
|
|
# Edit System Configuration (.json) file
|
|
|
|
# COPY HAS VALIDATION BUGS
|
|
# RENAME IS NOT YET DONE
|
|
|
|
|
|
# Includes and Declarations (global variables, formatting, and functions)
|
|
source "${APPLICATION_ROOT}/scripts/system/system-functions"
|
|
source "${APPLICATION_ROOT}/scripts/system/system-declarations"
|
|
|
|
|
|
#
|
|
#
|
|
# FUNCTION: Refresh Config File Reference Array
|
|
# Creates two new arrays in parallel of availalble configurations
|
|
# Array 1 - $CONFIG_PROFILES_ARRAY : list of profile names
|
|
# Array 2 - $CONFIG_PROFILES_PATHS_ARRAY : list of profile paths
|
|
#
|
|
#
|
|
function refresh_config_file_reference_array () {
|
|
|
|
|
|
# Empty Arrays
|
|
unset CONFIG_PROFILES_ARRAY
|
|
unset CONFIG_PROFILES_PATHS_ARRAY
|
|
|
|
|
|
# If Config Directory is empty
|
|
if [ -z "$(ls -A $CONFIG_DIRECTORY)" ]; then
|
|
|
|
echo - "Config directory is currently empty. Please create a new config file using option 'n'."
|
|
|
|
|
|
# Else if Config Directory is not empty
|
|
else
|
|
|
|
|
|
# Instantiate counter, then read directory (declared in file 'system-declarations')
|
|
for CONFIG_DIRECTORY_ITEM in "$CONFIG_DIRECTORY"/*; do
|
|
|
|
# If file is of type json, proceed
|
|
if [[ $CONFIG_DIRECTORY_ITEM == *.json ]]; then
|
|
|
|
# if file is of pitfall condition, rename with timestamp
|
|
CONFIG_NAME=$(echo "${CONFIG_DIRECTORY_ITEM}" | sed "s|$CONFIG_DIRECTORY/||")
|
|
if [[ $CONFIG_NAME == "config-.json" ]] || [[ $CONFIG_NAME == "config.json" ]]; then
|
|
|
|
# Create hex value of 6 length, and rename violating files
|
|
RANDOM_HEX_VALUE=$( generate_random_hex_value 6 )
|
|
CONFIG_NAME_RENAMED="config-${RANDOM_HEX_VALUE}.json"
|
|
mv "$CONFIG_DIRECTORY/$CONFIG_NAME" "$CONFIG_DIRECTORY/$CONFIG_NAME_RENAMED"
|
|
|
|
# Declare chaneges for main name and directory variable (then alert)
|
|
CONFIG_DIRECTORY_ITEM="$CONFIG_DIRECTORY/$CONFIG_NAME_RENAMED"
|
|
warning_message "[Alert] Unnamed config \"$CONFIG_NAME\" renamed \"$CONFIG_NAME_RENAMED\" "
|
|
CONFIG_NAME="$CONFIG_NAME_RENAMED"
|
|
|
|
fi
|
|
|
|
|
|
# Full File Path, and sed a Display Name (ennumerated)
|
|
CONFIG_NAME_TRUNCATED=$(echo "${CONFIG_NAME}" | sed "s|config-||" | sed "s/.json//")
|
|
|
|
# Apply to master arrays
|
|
CONFIG_PROFILES_ARRAY+=("$CONFIG_NAME_TRUNCATED")
|
|
CONFIG_PROFILES_PATHS_ARRAY+=("$CONFIG_DIRECTORY_ITEM")
|
|
|
|
|
|
fi
|
|
|
|
|
|
done
|
|
|
|
# # Debug:
|
|
# echo "CONFIG PROFILES ARRAY: ${CONFIG_PROFILES_ARRAY[*]}"
|
|
# echo "CONFIG PROFILES PATHS ARRAY: ${CONFIG_PROFILES_PATHS_ARRAY[*]}"
|
|
|
|
fi
|
|
|
|
|
|
}
|
|
|
|
|
|
#
|
|
#
|
|
# FUNCTION: List existing config files
|
|
# Echos a list of available profile names (called in render_config_menu)
|
|
#
|
|
#
|
|
function list_existing_config_files {
|
|
|
|
# Get active file name
|
|
CURRENTLY_ACTIVE_CONFIG_FILE=$(<"$CONFIG_FILE_IDENTIFIER_PATH")
|
|
|
|
# List menu section heading
|
|
echo -e " ${COLOR_WHITE}${FONT_BOLD}CONFIG PROFILES & META:${FONT_DEFAULT}${COLOR_DEFAULT}";
|
|
|
|
|
|
if (( ${#CONFIG_PROFILES_ARRAY[@]} )); then
|
|
|
|
# If config array does exist
|
|
PROFILE_COUNTER=0
|
|
for i in ${CONFIG_PROFILES_ARRAY[*]}
|
|
|
|
|
|
do :
|
|
|
|
# Check if active profile name is current 'for' item
|
|
if [[ $i == "$CURRENTLY_ACTIVE_CONFIG_FILE" ]]; then
|
|
|
|
# Render profile name
|
|
echo -e " ${COLOR_CYAN}${FONT_BOLD}${SYMBOL_RAQUO}${COLOR_DEFAULT}${FONT_DEFAULT} $i ${COLOR_CYAN}(using)${COLOR_DEFAULT}"
|
|
|
|
# Render profile metadata
|
|
JSON_FIELD_NAME_META_ARTIST='main_metadata_artist'
|
|
MAIN_METADATA_ARTIST=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$JSON_FIELD_NAME_META_ARTIST//p" ${CONFIG_PROFILES_PATHS_ARRAY[$PROFILE_COUNTER]}))
|
|
# MAIN_METADATA_ARTIST="${MAIN_METADATA_ARTIST// /\+}"
|
|
echo -e " Artist: \"$MAIN_METADATA_ARTIST\"";
|
|
JSON_FIELD_NAME_META_TITLE='main_metadata_title'
|
|
MAIN_METADATA_TITLE=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$JSON_FIELD_NAME_META_TITLE//p" ${CONFIG_PROFILES_PATHS_ARRAY[$PROFILE_COUNTER]}))
|
|
# MAIN_METADATA_TITLE="${MAIN_METADATA_TITLE// /\+}"
|
|
echo -e " Title: \"$MAIN_METADATA_TITLE\"";
|
|
|
|
# Empty metadata display variables
|
|
MAIN_METADATA_ARTIST=""
|
|
MAIN_METADATA_TITLE=""
|
|
|
|
|
|
else
|
|
|
|
# Render profile name
|
|
echo -e " $i"
|
|
|
|
# Render profile metadata
|
|
JSON_FIELD_NAME_META_ARTIST='main_metadata_artist'
|
|
MAIN_METADATA_ARTIST=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$JSON_FIELD_NAME_META_ARTIST//p" ${CONFIG_PROFILES_PATHS_ARRAY[$PROFILE_COUNTER]}))
|
|
# MAIN_METADATA_ARTIST="${MAIN_METADATA_ARTIST// /\+}"
|
|
echo -e " Artist: \"$MAIN_METADATA_ARTIST\"";
|
|
JSON_FIELD_NAME_META_TITLE='main_metadata_title'
|
|
MAIN_METADATA_TITLE=$(sed -e s/'[ \t]*\"\"\:\"'// -e s/'".*'// <<< $(sed -n "s/$JSON_FIELD_NAME_META_TITLE//p" ${CONFIG_PROFILES_PATHS_ARRAY[$PROFILE_COUNTER]}))
|
|
# MAIN_METADATA_TITLE="${MAIN_METADATA_TITLE// /\+}"
|
|
echo -e " Title: \"$MAIN_METADATA_TITLE\"";
|
|
|
|
# Empty metadata display variables
|
|
MAIN_METADATA_ARTIST=""
|
|
MAIN_METADATA_TITLE=""
|
|
|
|
|
|
fi
|
|
|
|
# Increment Counter
|
|
PROFILE_COUNTER=$((PROFILE_COUNTER+1))
|
|
|
|
done
|
|
|
|
|
|
else
|
|
|
|
echo -e " ${COLOR_RED}${FONT_BOLD}[Empty! - run \"n\" to create a profile!]${FONT_DEFAULT}${COLOR_DEFAULT}"
|
|
|
|
|
|
fi
|
|
|
|
# Empty variables
|
|
PROFILE_COUNTER=0
|
|
|
|
|
|
}
|
|
|
|
|
|
#
|
|
#
|
|
# FUNCTION: Verify Configuration Filename Characters
|
|
# Verifies inbound string against specified $REGEX, returning true or false match
|
|
# Returns a true or false confirmation
|
|
#
|
|
#
|
|
function verify_configuration_filename_characters()
|
|
{
|
|
|
|
REGEX="^[a-zA-Z0-9\ \_-]+$"
|
|
if [[ "$*" =~ ${REGEX} ]]
|
|
then
|
|
TEMP="true"
|
|
else
|
|
TEMP="false"
|
|
fi
|
|
echo $TEMP
|
|
|
|
}
|
|
|
|
|
|
#
|
|
#
|
|
# FUNCTION: Convert Spaces to Underscores
|
|
# Converts inbound string's spaces to underscores, returns converted string
|
|
#
|
|
#
|
|
function convert_spaces_to_underscores() {
|
|
TEMP=${*// /_}
|
|
echo "$TEMP"
|
|
}
|
|
|
|
|
|
#
|
|
#
|
|
# FUNCTION: Render Config Menu
|
|
# Renders main configuration menu (option "J" from main menu)
|
|
#
|
|
#
|
|
function render_config_menu {
|
|
|
|
list_existing_config_files
|
|
echo -e ""
|
|
|
|
# Mini HR
|
|
printf " "
|
|
render_mini_horizontal_rule
|
|
echo -e ""
|
|
|
|
# Render
|
|
echo -e " ${COLOR_WHITE}${FONT_BOLD}CONFIG OPTIONS:${FONT_DEFAULT}${COLOR_DEFAULT}";
|
|
echo -e " ${COLOR_CYAN}${FONT_BOLD}e${FONT_DEFAULT}${COLOR_DEFAULT} : edit";
|
|
echo -e " ${COLOR_CYAN}${FONT_BOLD}n${FONT_DEFAULT}${COLOR_DEFAULT} : new";
|
|
echo -e " ${COLOR_CYAN}${FONT_BOLD}d${FONT_DEFAULT}${COLOR_DEFAULT} : delete";
|
|
echo -e " ${COLOR_CYAN}${FONT_BOLD}c${FONT_DEFAULT}${COLOR_DEFAULT} : copy";
|
|
echo -e " ${COLOR_CYAN}${FONT_BOLD}r${FONT_DEFAULT}${COLOR_DEFAULT} : rename";
|
|
echo -e " ${COLOR_CYAN}${FONT_BOLD}x${FONT_DEFAULT}${COLOR_DEFAULT} : empty deleted trash";
|
|
echo -e ""
|
|
echo -e " ${COLOR_WHITE}${FONT_BOLD}CONFIG ACTIVATION:${FONT_DEFAULT}${COLOR_DEFAULT}";
|
|
echo -e " ${COLOR_CYAN}${FONT_BOLD}u${FONT_DEFAULT}${COLOR_DEFAULT} : use";
|
|
echo -e ""
|
|
echo -e ""
|
|
echo -e ""
|
|
|
|
}
|
|
|
|
|
|
#
|
|
#
|
|
# FUNCTION: Process Config Menu Selection
|
|
# Processes main input from config menu
|
|
#
|
|
#
|
|
function process_config_menu_selection() {
|
|
|
|
# Case Switch
|
|
case $1 in
|
|
|
|
e) # Edit JSON Streaming Profile:
|
|
source "${APPLICATION_ROOT}/scripts/system/system-config_edit" ;;
|
|
n) # New JSON Streaming Profile:
|
|
source "${APPLICATION_ROOT}/scripts/system/system-config_new" ;;
|
|
d) # Delete JSON Streaming Profile:
|
|
source "${APPLICATION_ROOT}/scripts/system/system-config_delete" ;;
|
|
c) # Copy Profile
|
|
source "${APPLICATION_ROOT}/scripts/system/system-config_copy" ;;
|
|
r) # Rename Profile
|
|
source "${APPLICATION_ROOT}/scripts/system/system-config_rename" ;;
|
|
u) # Use Profile
|
|
source "${APPLICATION_ROOT}/scripts/system/system-config_use" ;;
|
|
x) # Empty Trash
|
|
source "${APPLICATION_ROOT}/scripts/system/system-config_empty_trash" ;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
|
|
#
|
|
#
|
|
# FUNCTION: Main Program Function
|
|
# Master program run routine (and run execution)
|
|
#
|
|
#
|
|
function execute_config_routine {
|
|
|
|
|
|
# Refresh Array of Available Configs and render menu
|
|
printf "${COLOR_GREEN}[J] Config Options menu:${COLOR_DEFAULT}\n";
|
|
echo -e ""
|
|
echo -e ""
|
|
|
|
# Declare, localize, and refresh arrays
|
|
unset CONFIG_PROFILES_ARRAY
|
|
declare -a CONFIG_PROFILES_ARRAY=() >/dev/null
|
|
local $CONFIG_PROFILES_ARRAY >/dev/null
|
|
unset CONFIG_PROFILES_PATHS_ARRAY
|
|
declare -a CONFIG_PROFILES_PATHS_ARRAY=() >/dev/null
|
|
local $CONFIG_PROFILES_PATHS_ARRAY >/dev/null
|
|
|
|
|
|
# Refresh config file list and render menu
|
|
refresh_config_file_reference_array
|
|
render_config_menu
|
|
|
|
|
|
# Read Command Input
|
|
while :
|
|
do
|
|
|
|
|
|
# Declare, localize, and refresh arrays
|
|
unset CONFIG_PROFILES_ARRAY
|
|
declare -a CONFIG_PROFILES_ARRAY=() >/dev/null
|
|
local $CONFIG_PROFILES_ARRAY >/dev/null
|
|
unset CONFIG_PROFILES_PATHS_ARRAY
|
|
declare -a CONFIG_PROFILES_PATHS_ARRAY=() >/dev/null
|
|
local $CONFIG_PROFILES_PATHS_ARRAY >/dev/null
|
|
|
|
|
|
# Refresh config file list
|
|
refresh_config_file_reference_array
|
|
|
|
|
|
# Refresh config list array and read input
|
|
MENU_NAME=`echo -e "${COLOR_CYAN}[Config Menu]${COLOR_DEFAULT}"`
|
|
read -p "$MENU_NAME Choice? (RETURN main menu, or \"J\" config options menu): " CONFIG_MENU_INPUT;
|
|
|
|
|
|
# If "J" entered
|
|
if [[ $CONFIG_MENU_INPUT == "J" ]]; then
|
|
|
|
# Refresh Array of Available Configs and render menu
|
|
printf "${COLOR_GREEN}[J] Config options menu.${COLOR_DEFAULT}\n"
|
|
echo ""
|
|
echo ""
|
|
refresh_config_file_reference_array
|
|
render_config_menu
|
|
|
|
|
|
# If no key entered
|
|
elif [[ -z $CONFIG_MENU_INPUT ]]; then
|
|
|
|
printf "${COLOR_GREEN}[RETURN] Main menu.${COLOR_DEFAULT}\n"
|
|
echo ""
|
|
refresh_config_file_reference_array
|
|
break
|
|
|
|
|
|
# Evaluate Character entered
|
|
else
|
|
|
|
refresh_config_file_reference_array
|
|
process_config_menu_selection $CONFIG_MENU_INPUT
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
}
|
|
execute_config_routine
|
|
|