Merge branch 'cooker' into feat/steam-rom-manager

This commit is contained in:
XargonWan 2024-09-08 22:43:23 +09:00
commit 601a23f074
3 changed files with 87 additions and 42 deletions

View file

@ -849,7 +849,7 @@
}
]
},
"picodrive_libetro": {
"picodrive_libretro": {
"name": "PicoDrive",
"description": "SEGA MS/MD/CD/32X Libretro Core",
"system": [
@ -866,7 +866,7 @@
}
]
},
"genesisplusgx_libetro": {
"genesisplusgx_libretro": {
"name": "Genesis Plus GX",
"description": "SEGA MS/GG/MD/CD Libretro Core",
"system": [
@ -883,7 +883,7 @@
}
]
},
"genesisplusgxwide_libetro": {
"genesisplusgxwide_libretro": {
"name": "Genesis Plus GX Wide",
"description": "SEGA MS/GG/MD/CD Libretro Core for Wide Screen",
"system": [
@ -899,7 +899,7 @@
}
]
},
"mupen64plus-next_libetro": {
"mupen64plus-next_libretro": {
"name": "Mupen64Plus-Next",
"description": "Nintendo 64 Libretro Core",
"system": "n64",
@ -911,7 +911,7 @@
}
]
},
"snes9x-current_libetro": {
"snes9x-current_libretro": {
"name": "Snes9x - Current",
"description": "Super Nintendo Libretro Core",
"system": "snes",
@ -924,7 +924,7 @@
}
]
},
"gambatte_libetro": {
"gambatte_libretro": {
"name": "Gambatte",
"description": "Game Boy/Color Libretro Core",
"system": [
@ -939,7 +939,7 @@
}
]
},
"mgba_libetro": {
"mgba_libretro": {
"name": "mGBA",
"description": "Game Boy Advance Libretro Core",
"system": "gba",
@ -997,7 +997,7 @@
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/pcsx2/pcsx2-guide/",
"system": "ps2",
"launch": "pcsx2-qt",
"launch_args": "-batch $game",
"launch-args": "-batch $game",
"properties": [
{
"ask_to_exit": true,
@ -1038,7 +1038,7 @@
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/vita3k/vita3k-guide/",
"system": "psvita",
"launch": "Vita3K",
"launch_args": "-r $game.psvita"
"launch-args": "-r $game.psvita"
},
"rpcs3": {
"name": "RPCS3",
@ -1046,6 +1046,7 @@
"url": "https://retrodeck.readthedocs.io/en/latest/wiki_emulator_guides/rpcs3/rpcs3-guide/",
"system": "ps3",
"launch": "rpcs3",
"launch-override": "cd $(dirname $game) && rpcs3 $game",
"properties": [
{
"ask_to_exit": true

View file

@ -910,22 +910,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" '
@ -943,6 +966,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")
@ -972,19 +1004,29 @@ run_game() {
log d "Command: retroarch -L $core_path \"$game\""
eval "retroarch -L $core_path \"$game\""
else
# Parse emulator launch command and optional arguments from the JSON file
local launch_command=$(jq -r ".emulator.$emulator.launch" "$features")
local launch_args=$(jq -r ".emulator.$emulator.\"launch-args\"" "$features")
# Only add launch_args if they are not null
if [[ "$launch_args" != "null" ]]; then
# Replace $game in launch_args with the actual game path, quoting it to handle spaces
launch_args=${launch_args//\$game/\"$game\"}
log d "Command: \"$launch_command $launch_args\""
eval "$launch_command $launch_args"
# Check if launch-override exists
local launch_override=$(jq -r ".emulator.$emulator.\"launch-override\"" "$features")
if [[ "$launch_override" != "null" ]]; then
# Use launch-override
launch_override=${launch_override//\$game/\"$game\"}
log d "Using launch-override: $launch_override"
eval "$launch_override"
else
log d "Command: \"$launch_command\""
eval "$launch_command \"$game\""
# Use standard launch and launch-args
local launch_command=$(jq -r ".emulator.$emulator.launch" "$features")
local launch_args=$(jq -r ".emulator.$emulator.\"launch-args\"" "$features")
log d "launch args: $launch_args"
# Only add launch_args if they are not null
if [[ "$launch_args" != "null" ]]; then
# Replace $game in launch_args with the actual game path, quoting it to handle spaces
launch_args=${launch_args//\$game/\"$game\"}
log d "Command: \"$launch_command $launch_args\""
eval "$launch_command $launch_args"
else
log d "Command: \"$launch_command\""
eval "$launch_command \"$game\""
fi
fi
fi
}

View file

@ -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 <path> (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 <file> Compresses target file to a compatible format
--compress-all <format> Compresses all supported games into a compatible format. Available formats are \"chd\", \"zip\", \"rvz\" and \"all\".
--reset-component <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 <file> \t Compresses target file to a compatible format
--compress-all <format> \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 <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 <path>] [-e <path>] <path>\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*)