soapdish/scripts/system/system-config

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