Add universal function wrapper

Upgrade cooker update flow
Upgrade update_rd_conf, no more patch file since they are all bash vars
This commit is contained in:
icenine451 2023-04-20 10:51:17 -04:00
parent 67e7271614
commit 6619191a15
6 changed files with 58 additions and 27 deletions

View file

@ -99,7 +99,7 @@ move() {
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Move in Progress" \ --title "RetroDECK Configurator Utility - Move in Progress" \
--text="Moving directory $1 to new location of $2, please wait." --text="Moving directory $(basename "$1") to new location of $2, please wait."
else else
zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
@ -779,14 +779,11 @@ update_rd_conf() {
# This function will import a default retrodeck.cfg file and update it with any current settings. This will allow us to expand the file over time while retaining current user settings. # This function will import a default retrodeck.cfg file and update it with any current settings. This will allow us to expand the file over time while retaining current user settings.
# USAGE: update_rd_conf # USAGE: update_rd_conf
conf_read # Read current settings into memory
mv -f $rd_conf $rd_conf_backup # Backup config file before update mv -f $rd_conf $rd_conf_backup # Backup config file before update
cp $rd_defaults $rd_conf # Copy defaults file into place
generate_single_patch $rd_defaults $rd_conf_backup $rd_update_patch retrodeck conf_write # Write old values into new default file
sed -i '/change^^version/d' $rd_update_patch # Remove version line from temporary patch file, so old value isn't kept conf_read # Read all settings into memory
deploy_single_patch $rd_defaults $rd_update_patch $rd_conf
set_setting_value $rd_conf "version" "$hard_version" retrodeck # Set version of currently running RetroDECK to updated retrodeck.cfg
rm -f $rd_update_patch # Cleanup temporary patch file
conf_read
} }
resolve_preset_conflicts() { resolve_preset_conflicts() {
@ -1172,15 +1169,17 @@ update_splashscreens() {
} }
deploy_helper_files() { deploy_helper_files() {
# This script will distribute helper documentation files throughout the filesystem according to the $helper_files_list
# USAGE: deploy_helper_files
while IFS='^' read -r file dest while IFS='^' read -r file dest
do do
if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then
eval current_dest="$dest" eval current_dest="$dest"
cp -f "$helper_files_folder/$file" "$current_dest/$file" cp -f "$helper_files_folder/$file" "$current_dest/$file"
fi fi
done < "$helper_files_list" done < "$helper_files_list"
} }
prepare_emulator() { prepare_emulator() {
@ -1966,7 +1965,7 @@ finit() {
mkdir -p "/var/config/emulationstation/.emulationstation/gamelists/doom" mkdir -p "/var/config/emulationstation/.emulationstation/gamelists/doom"
cp "/app/retrodeck/rd_prepacks/doom/gamelist.xml" "/var/config/emulationstation/.emulationstation/gamelists/doom/gamelist.xml" cp "/app/retrodeck/rd_prepacks/doom/gamelist.xml" "/var/config/emulationstation/.emulationstation/gamelists/doom/gamelist.xml"
mkdir -p "$media_folder/doom" mkdir -p "$media_folder/doom"
unzip -q "/app/retrodeck/rd_prepacks/doom/doom.zip" -d "$media_folder/doom/" unzip -oq "/app/retrodeck/rd_prepacks/doom/doom.zip" -d "$media_folder/doom/"
tools_init tools_init
prepare_emulator "reset" "all" prepare_emulator "reset" "all"

View file

@ -116,6 +116,11 @@ then
set_setting_value $rd_conf "version" "$version" retrodeck # Set current version for new installs set_setting_value $rd_conf "version" "$version" retrodeck # Set current version for new installs
set_setting_value $rd_conf "sdcard" "$default_sd" retrodeck "paths" # Set SD card location if default path has changed set_setting_value $rd_conf "sdcard" "$default_sd" retrodeck "paths" # Set SD card location if default path has changed
if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build
set_setting_value $rd_conf "update_repo" "RetroDECK-cooker" retrodeck "options"
set_setting_value $rd_conf "update_check" "true" retrodeck "options"
fi
echo "Setting config file permissions" echo "Setting config file permissions"
chmod +rw $rd_conf chmod +rw $rd_conf
echo "RetroDECK config file initialized. Contents:" echo "RetroDECK config file initialized. Contents:"
@ -127,6 +132,12 @@ then
else else
echo "Found RetroDECK config file in $rd_conf" echo "Found RetroDECK config file in $rd_conf"
echo "Loading it" echo "Loading it"
if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build
set_setting_value $rd_conf "update_repo" "RetroDECK-cooker" retrodeck "options"
set_setting_value $rd_conf "update_check" "true" retrodeck "options"
fi
conf_read conf_read
# Verify rdhome is where it is supposed to be. # Verify rdhome is where it is supposed to be.

View file

@ -1220,6 +1220,8 @@ modules:
- cp tools/configurator.sh /app/tools/configurator.sh - cp tools/configurator.sh /app/tools/configurator.sh
- chmod +x /app/tools/configurator.sh - chmod +x /app/tools/configurator.sh
- cp es-configs/tools-gamelist.xml /app/retrodeck/tools-gamelist.xml - cp es-configs/tools-gamelist.xml /app/retrodeck/tools-gamelist.xml
- cp tools/retrodeck_function_wrapper.sh /app/tools/retrodeck_function_wrapper.sh
- chmod +x /app/tools/retrodeck_function_wrapper.sh
# Function libraries # Function libraries
- mkdir -p /app/libexec - mkdir -p /app/libexec

View file

@ -86,15 +86,11 @@ post_update() {
dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists" dir_prep "$rdhome/gamelists" "/var/config/emulationstation/.emulationstation/gamelists"
sed -i '/version=.*/G' $rd_conf
sed -i '3i [paths]' $rd_conf
sed -i '/^power_user_warning=.*/i [options]' $rd_conf
cp /app/retrodeck/extras/doom1.wad "$roms_folder/doom/doom1.wad" # No -f in case the user already has it cp /app/retrodeck/extras/doom1.wad "$roms_folder/doom/doom1.wad" # No -f in case the user already has it
mkdir -p "/var/config/emulationstation/.emulationstation/gamelists/doom" mkdir -p "/var/config/emulationstation/.emulationstation/gamelists/doom"
cp "/app/retrodeck/rd_prepacks/doom/gamelist.xml" "/var/config/emulationstation/.emulationstation/gamelists/doom/gamelist.xml" cp -f "/app/retrodeck/rd_prepacks/doom/gamelist.xml" "/var/config/emulationstation/.emulationstation/gamelists/doom/gamelist.xml"
mkdir -p "$media_folder/doom" mkdir -p "$media_folder/doom"
unzip -q "/app/retrodeck/rd_prepacks/doom/doom.zip" -d "$media_folder/doom/" unzip -oq "/app/retrodeck/rd_prepacks/doom/doom.zip" -d "$media_folder/doom/"
fi fi
# The following commands are run every time. # The following commands are run every time.

View file

@ -104,15 +104,12 @@ then
if [ "$hard_version" != "$version" ]; if [ "$hard_version" != "$version" ];
then then
echo "Config file's version is $version but the actual version is $hard_version" echo "Config file's version is $version but the actual version is $hard_version"
if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build
set_setting_value $rd_conf "update_repo" "RetroDECK-cooker" retrodeck "options" cooker_base_version=$(echo $hard_version | cut -d'-' -f2)
set_setting_value $rd_conf "update_check" "true" retrodeck "options"
cooker_base_version=$(echo $hard_version | cut -d'-' -f2 | sed 's/\([0-9]\.[0-9][a-z]\).*/\1/')
choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Upgrade" --extra-button="Don't Upgrade" --extra-button="Fresh Install" \ choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Upgrade" --extra-button="Don't Upgrade" --extra-button="Fresh Install" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Cooker Upgrade" \ --title "RetroDECK Cooker Upgrade" \
--text="You appear to be upgrading to a \"cooker\" build of RetroDECK.\n\nWould you like to perform the standard post-update process, skip the post-update process or remove ALL existing RetroDECK data to start from a fresh install?") --text="You appear to be upgrading to a \"cooker\" build of RetroDECK.\n\nWould you like to perform the standard post-update process, skip the post-update process or remove ALL existing RetroDECK data to start from a fresh install?\n\nPerforming the normal post-update process multiple times may lead to unexpected results.")
rc=$? # Capture return code, as "Yes" button has no text value rc=$? # Capture return code, as "Yes" button has no text value
if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked if [[ $rc == "1" ]]; then # If any button other than "Yes" was clicked
if [[ $choice == "Don't Upgrade" ]]; then # If user wants to bypass the post_update.sh process this time. if [[ $choice == "Don't Upgrade" ]]; then # If user wants to bypass the post_update.sh process this time.
@ -122,6 +119,7 @@ then
echo "Removing RetroDECK data and starting fresh" echo "Removing RetroDECK data and starting fresh"
rm -rf /var rm -rf /var
rm -rf "$HOME/retrodeck" rm -rf "$HOME/retrodeck"
source /app/libexec/global.sh
finit finit
fi fi
else else

View file

@ -0,0 +1,25 @@
#!/bin/bash
# This wrapper will run a single RetroDECK function with any number of arguments
# USAGE: /bin/bash retrodeck_function_wrapper.sh <function_name> <arg1> <arg2> ...
source /app/libexec/global.sh
# Check if a function was specified
if [[ $# -lt 1 ]]; then
echo "Usage: $0 function_name [args...]"
exit 1
fi
# Get the function name and remove it from the list of arguments
function_name="$1"
shift
# Check if the function exists
if ! declare -f "$function_name" >/dev/null 2>&1; then
echo "Function '$function_name' not found"
exit 1
fi
# Call the function with any remaining arguments
"$function_name" "$@"