RetroDECK/retrodeck.sh

169 lines
7.2 KiB
Bash
Raw Normal View History

2022-03-27 13:30:22 +00:00
#!/bin/bash
source /app/libexec/global.sh
2022-11-18 20:10:17 +00:00
source /app/libexec/post_update.sh
# Arguments section
for i in "$@"; do
case $i in
-h*|--help*)
2022-09-06 12:46:59 +00:00
echo "RetroDECK v""$version"
echo "
Usage:
flatpak run [FLATPAK-RUN-OPTION] net.retrodeck-retrodeck [ARGUMENTS]
Arguments:
-h, --help Print this help
-v, --version Print RetroDECK version
--info-msg Print paths and config informations
2023-03-08 15:33:38 +00:00
--configurator Starts the RetroDECK Configurator
2023-03-29 19:51:27 +00:00
--compress-one <file> Compresses target file to a compatible format
--compress-all <format> Compresses all supported games into compatible format. Available formats are \"chd\", \"zip\", \"rvz\" and \"all\".
--reset-emulator <emulator> Reset one or more emulator configs to the default values
--reset-retrodeck Starts the initial RetroDECK installer (backup your data first!)
For flatpak run specific options please run: flatpak run -h
https://retrodeck.net
"
exit
;;
--version*|-v*)
2022-08-04 19:40:04 +00:00
echo "RetroDECK v$version"
exit
;;
--info-msg*)
echo "RetroDECK v$version"
echo "RetroDECK config file is in: $rd_conf"
echo "Contents:"
cat $rd_conf
exit
;;
2023-03-29 19:51:27 +00:00
--compress-one*)
cli_compress_single_game "$2"
2023-03-06 20:18:22 +00:00
exit
;;
2023-03-29 19:51:27 +00:00
--compress-all*)
cli_compress_all_games "$2"
;;
2023-03-08 15:33:38 +00:00
--configurator*)
sh /app/tools/configurator.sh
2023-03-06 20:18:22 +00:00
exit
;;
--reset-emulator*)
echo "You are about to reset one or more RetroDECK emulators."
2023-04-11 13:11:12 +00:00
echo "Available options are: retroarch cemu citra dolphin duckstation melonds pcsx2 ppsspp primehack rpcs3 xemu yuzu all-emulators"
read -p "Please enter the emulator you would like to reset: " emulator
2023-04-11 13:11:12 +00:00
if [[ "$emulator" =~ ^(retroarch|cemu|citra|dolphin|duckstation|melonds|pcsx2|ppsspp|primehack|rpcs3|xemu|yuzu|all-emulators)$ ]]; then
read -p "You are about to reset $emulator to default settings. Enter 'y' to continue, 'n' to stop: " response
if [[ $response == [yY] ]]; then
prepare_emulator "reset" "$emulator" "cli"
read -p "The process has been completed, press Enter key to start RetroDECK."
shift # Continue launch after previous command is finished
else
read -p "The process has been cancelled, press Enter key to exit."
exit
fi
else
echo "$emulator is not a valid selection, exiting..."
exit
fi
;;
--reset-retrodeck*)
echo "You are about to reset RetroDECK completely!"
read -p "Enter 'y' to continue, 'n' to stop: " response
if [[ $response == [yY] ]]; then
rm -f "$lockfile"
rm -f "$rd_conf"
read -p "The process has been completed, press Enter key to start the initial RetroDECK setup process."
shift # Continue launch after previous command is finished
else
read -p "The process has been cancelled, press Enter key to exit."
exit
fi
;;
-*|--*)
echo "Unknown option $i"
exit 1
;;
*)
2023-03-20 13:23:04 +00:00
validate_input "$i"
if [[ ! $input_validated == "true" ]]; then
echo "Please specify a valid option. Use -h for more information."
fi
;;
esac
done
# UPDATE TRIGGERED
2022-09-06 12:46:59 +00:00
# if lockfile exists
if [ -f "$lockfile" ]
then
2022-09-06 12:46:59 +00:00
# ...but the version doesn't match with the config file
2022-10-13 12:21:30 +00:00
if [ "$hard_version" != "$version" ];
2022-09-06 12:46:59 +00:00
then
echo "Config file's version is $version but the actual version is $hard_version"
2023-04-03 15:07:42 +00:00
if grep -qF "cooker" <<< $hard_version; then # If newly-installed version is a "cooker" build
cooker_base_version=$(echo $hard_version | cut -d'-' -f2)
update_ignore=$(curl --silent "https://api.github.com/repos/XargonWan/RetroDECK-cooker/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
set_setting_value $rd_conf "update_ignore" "$update_ignore" retrodeck "options" # Store the latest online version to ignore for future checks, as internal version and online tag version may not match up.
2023-04-03 15:07:42 +00:00
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" \
--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?\n\nPerforming the normal post-update process multiple times may lead to unexpected results.")
2023-04-03 15:07:42 +00:00
rc=$? # Capture return code, as "Yes" button has no text value
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.
echo "Skipping upgrade process for cooker build, updating stored version in retrodeck.cfg"
set_setting_value $rd_conf "version" "$hard_version" retrodeck # Set version of currently running RetroDECK to updated retrodeck.cfg
elif [[ $choice == "Fresh Install" ]]; then # Remove all RetroDECK data and start a fresh install
echo "Removing RetroDECK data and starting fresh"
rm -rf /var
rm -rf "$HOME/retrodeck"
source /app/libexec/global.sh
2023-04-03 15:07:42 +00:00
finit
fi
else
echo "Performing normal upgrade process for version" $cooker_base_version
version=$cooker_base_version # Temporarily assign cooker base version to $version so update script can read it properly.
post_update
fi
else # If newly-installed version is a normal build.
2023-04-19 21:08:00 +00:00
if grep -qF "cooker" <<< $version; then # If previously installed version was a cooker build
2023-04-18 15:26:35 +00:00
set_setting_value $rd_conf "update_repo" "RetroDECK" retrodeck "options"
set_setting_value $rd_conf "update_check" "false" retrodeck "options"
set_setting_value $rd_conf "update_ignore" "" retrodeck "options"
2023-04-18 15:26:35 +00:00
fi
2023-04-03 15:07:42 +00:00
post_update # Executing post update script
2023-04-14 12:49:21 +00:00
fi
2022-09-06 12:46:59 +00:00
fi
# Else, LOCKFILE IS NOT EXISTING (WAS REMOVED)
# if the lock file doesn't exist at all means that it's a fresh install or a triggered reset
2022-10-13 12:21:30 +00:00
else
echo "Lockfile not found"
2023-04-14 13:10:52 +00:00
if [[ $(check_network_connectivity) == "true" ]]; then
finit # Executing First/Force init
else
configurator_generic_dialog "You do not appear to be connected to a network with internet access.\n\nThe initial RetroDECK setup requires some files from the internet to function properly.\n\nPlease retry this process once a network connection is available."
exit 1
fi
2022-04-02 09:21:05 +00:00
fi
2023-03-30 14:04:11 +00:00
if [[ $multi_user_mode == "true" ]]; then
multi_user_determine_current_user
fi
# Check if running in Desktop mode and warn if true, unless desktop_mode_warning=false in retrodeck.cfg
desktop_mode_warning
# Check if there is a new version of RetroDECK available, if update_check=true in retrodeck.cfg and there is network connectivity available.
2023-04-14 13:10:52 +00:00
if [[ $(check_network_connectivity) == "true" ]] && [[ $update_check == "true" ]]; then
check_for_version_update
fi
# Normal Startup
2023-04-14 12:49:21 +00:00
start_retrodeck