From 302feef6314e05dfa375de2c443496424930c3c3 Mon Sep 17 00:00:00 2001 From: XargonWan Date: Sun, 8 Sep 2024 22:43:06 +0900 Subject: [PATCH] RUN_GAME: emulator and system can now be passed as optional arguments --- functions/other_functions.sh | 52 +++++++++++++++++++++++++++++------- retrodeck.sh | 24 +++++++++-------- 2 files changed, 55 insertions(+), 21 deletions(-) diff --git a/functions/other_functions.sh b/functions/other_functions.sh index 3360a412..53ebf2d4 100644 --- a/functions/other_functions.sh +++ b/functions/other_functions.sh @@ -893,22 +893,45 @@ start_retrodeck() { } run_game() { - # Arguments: $1 -> game path, $2 -> optional system - local game="$1" - local system="$2" + + # Initialize variables + emulator="" + system="" + + # Parse options + while getopts ":e:s:" opt; do + case ${opt} in + e ) + emulator=$OPTARG + ;; + s ) + system=$OPTARG + ;; + \? ) + echo "Usage: $0 --run [-e emulator] [-s system] game" + exit 1 + ;; + esac + done + shift $((OPTIND -1)) + + # Check for game argument + if [[ -z "$1" ]]; then + echo "Error: Game file is required." + echo "Usage: $0 --run [-e emulator] [-s system] game" + exit 1 + fi + + game=$1 # If no system is provided, extract it from the game path if [[ -z "$system" ]]; then system=$(echo "$game" | grep -oP '(?<=roms/)[^/]+') fi - log d "Run game: running $(basename "$game") for $system system" - - # Special case for retroarch - if [[ "$system" == "retroarch" ]]; then - log d "TODO: implement retroarch" - return - fi + log d "Emulator: $emulator" + log d "System: $system" + log d "Game: $game" # Query the features JSON for emulators that support the system local emulators=$(jq -r --arg system "$system" ' @@ -926,6 +949,15 @@ run_game() { (.value.system[]? == $system) ) | .key' "$features") + # if the emulator is given and it's a retroarch core just execute it + if [[ "$emulator" == *"_libretro" ]]; then + local core_path="/var/config/retroarch/cores/$emulator.so" + log d "Running RetroArch core: $core_path" + log d "Command: retroarch -L $core_path \"$game\"" + eval "retroarch -L $core_path \"$game\"" + return 1 + fi + # If the system is handled by RetroArch cores, add them to the list of emulators if [[ -n "$retroarch_cores" ]]; then emulators=$(echo -e "$emulators\n$retroarch_cores") diff --git a/retrodeck.sh b/retrodeck.sh index 47cacbe3..e76f8df0 100644 --- a/retrodeck.sh +++ b/retrodeck.sh @@ -18,20 +18,21 @@ for i in "$@"; do case $i in -h*|--help*) echo "RetroDECK v""$version" - echo " + echo -e " Usage: flatpak run [FLATPAK-RUN-OPTION] net.retrodeck-retrodeck [ARGUMENTS] Arguments: - -h, --help Print this help - -v, --version Print RetroDECK version - --run (system) Run a game from cli, if no system is defined it will deducted from the path. For example --run ~/retrodeck/roms/system/game.ext will be run with the system "system". - --info-msg Print paths and config informations - --configurator Starts the RetroDECK Configurator - --compress-one Compresses target file to a compatible format - --compress-all Compresses all supported games into a compatible format. Available formats are \"chd\", \"zip\", \"rvz\" and \"all\". - --reset-component Reset one or more component or emulator configs to the default values - --reset-retrodeck Starts the initial RetroDECK installer (backup your data first!) + -h, --help \t Print this help + -v, --version \t Print RetroDECK version + --info-msg \t Print paths and config informations + --configurator \t Starts the RetroDECK Configurator + --compress-one \t Compresses target file to a compatible format + --compress-all \t Compresses all supported games into a compatible format.\n\t\t\t\t\t\t Available formats are \"chd\", \"zip\", \"rvz\" and \"all\". + --reset-component \t Reset one or more component or emulator configs to the default values + --reset-retrodeck \t Starts the initial RetroDECK installer (backup your data first!) + + --run [-s ] [-e ] \t Run a game from cli, if no system is defined it will deducted from the path.\n\t\t\t\t\t\t For example --run ~/retrodeck/roms/system/game.ext will be run with the system "system".\n\t\t\t\t\t\t Optionally -e (emulator) and -s (system) can be passed as arguments. For flatpak run specific options please run: flatpak run -h @@ -44,7 +45,8 @@ https://retrodeck.net exit ;; --run*) - run_game "$2" "$3" + shift # Remove --run + run_game "$@" exit ;; --info-msg*)