diff --git a/old/removed-workflows/cooker-selfhosted.yml b/.github/workflows/cooker-selfhosted.yml similarity index 54% rename from old/removed-workflows/cooker-selfhosted.yml rename to .github/workflows/cooker-selfhosted.yml index 43d086c9..cf831cf8 100644 --- a/old/removed-workflows/cooker-selfhosted.yml +++ b/.github/workflows/cooker-selfhosted.yml @@ -1,32 +1,31 @@ name: "Build cooker" on: - # push: - # branches: - # - cooker* - # - feat* - # paths: - # - '.github/workflows/**' - # - 'automation_tools/**' - # - 'emu-configs/**' - # - 'es-configs/**' - # - 'functions/**' - # - 'rd-submodules/**' - # - '*.sh' - # - 'net.retrodeck.retrodeck.yml' - # - 'net.retrodeck.retrodeck.appdata.xml' - # pull_request: - # branches: - # - cooker* + push: + branches: + - cooker* + - feat* + paths: + - '.github/workflows/**' + - 'automation_tools/**' + - 'emu-configs/**' + - 'es-configs/**' + - 'functions/**' + - 'rd-submodules/**' + - '*.sh' + - 'net.retrodeck.retrodeck.yml' + - 'net.retrodeck.retrodeck.appdata.xml' + pull_request: + branches: + - cooker* # Italy (CET): 11:00 PM # Japan (JST): 7:00 AM - schedule: - - cron: '0 22 * * *' + # schedule: + # - cron: '0 22 * * *' workflow_dispatch: - jobs: Building_RetroDECK: @@ -49,6 +48,33 @@ jobs: - name: Generate cooker build ID run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/cooker_build_id.sh" + - name: Get branch name + id: branch_name + run: echo "BRANCH_NAME=$(echo $GITHUB_REF | sed 's|refs/heads/||')" >> $GITHUB_ENV + + # if it's a feature branch it will not marked as "latest" cooker version + - name: "Set makeLatest (cooker only)" + run: | + if [[ "$BRANCH_NAME" == 'feat/'* || "$BRANCH_NAME" == 'refs/'* ]]; then + echo "MAKE_LATEST=false" >> $GITHUB_ENV + else + echo "MAKE_LATEST=true" >> $GITHUB_ENV + fi + + # if the branch is coming from a PR the tag should be manually built + - name: "Generate version tag" + run: | + if [[ "$BRANCH_NAME" == 'refs/'* ]]; then + pr_number=$(echo ${{env.BRANCH_NAME}} | awk -F'/' '{print $3}') + source_branch=$(curl -s "https://api.github.com/repos/XargonWan/RetroDECK/pulls/$pr_number" | jq -r '.head.ref') + source_branch=${source_branch//\//-} + echo "[DEBUG] source branch is: $source_branch" + echo "TAG=PR-$pr_number-$source_branch-${{ env.buildid }}" >> $GITHUB_ENV + else + echo "TAG=${{env.BRANCH_NAME}}-${{ env.buildid }}" >> $GITHUB_ENV + fi + echo "Version TAG: ${{ env.TAG }}" + # backing up manifest in case download fails and hashes must be recalculated - name: Manifest backup run: "cp ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak" @@ -109,23 +135,10 @@ jobs: id: commits continue-on-error: true - - name: Get branch name - id: branch_name - run: echo "BRANCH_NAME=$(echo $GITHUB_REF | sed 's|refs/heads/||')" >> $GITHUB_ENV - - # if it's a feature branch it will not marked as "latest" cooker version - - name: "Set makeLatest (cooker only)" - run: | - if [[ "$BRANCH_NAME" == 'feat/'* ]]; then - echo "MAKE_LATEST=false" >> $GITHUB_ENV - else - echo "MAKE_LATEST=true" >> $GITHUB_ENV - fi - - name: Publish the flatpak in a new cooker release uses: ncipollo/release-action@v1 with: - tag: "${{env.BRANCH_NAME}}-${{ env.buildid }}" + tag: "${{env.TAG}}" body: | # Release Notes (Cooker) This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}. @@ -134,12 +147,12 @@ jobs: ## Commits since last release ${{ steps.commits.outputs.commits }} - For the full release note for this build please refer to the channel [#BETA-TESTING](https://discord.gg/qQcrFvaA2C) on our Discord server. + For the full release note for this build please refer to the channel [#BETA-TESTING](https://discord.gg/WDc5C9YWMx) on our Discord server. Cooker channel is provided for the community to test fixes and explore new functionality. Please DO NOT open issues or ask support on this build. - artifacts: "RetroDECK-cooker.flatpak,RetroDECK-Artifact.tar.gz" + artifacts: "RetroDECK-cooker.flatpak,RetroDECK-cooker.flatpak.sha,RetroDECK-Artifact.tar.gz" allowUpdates: true makeLatest: ${{env.MAKE_LATEST}} # if it's a feat branch is not considered the latest build token: ${{ secrets.TRIGGER_BUILD_TOKEN }} @@ -154,3 +167,57 @@ jobs: path: RetroDECK-cooker.flatpak continue-on-error: true + # - name: Upload RetroDECK-cooker.flatpak to Gitea Release + # run: | + # # Set variables for Gitea host, organization, repository, access token, and release details + # GITEA_HOST="repo.retrodeck.net" + # UPLOAD_HOST="upload.retrodeck.net" + # ORGANIZATION="RetroDECK" + # REPO="RetroDECK-cooker" + # GITEA_TOKEN="${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }}" + # RELEASE_NAME="RetroDECK ${{env.TAG}}" + # TAG="${{env.TAG}}" + # RELEASE_BODY="# Release Notes (Cooker) + # This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}. + # On branch [${{env.BRANCH_NAME}}](https://repo.retrodeck.net/RetroDECK/RetroDECK/src/branch/${{env.BRANCH_NAME}}). + + # ## Commits since last release + # ${{ steps.commits.outputs.commits }} + + # For the full release note for this build please refer to the channel [#BETA-TESTING](https://discord.gg/WDc5C9YWMx) on our Discord server. + + # Cooker channel is provided for the community to test fixes and explore new functionality. + # Please DO NOT open issues or ask support on this build." + + # # Create a release using curl and capture the release ID + # release_response=$(curl -X POST \ + # -H "Authorization: token ${GITEA_TOKEN}" \ + # -H "Content-Type: application/json" \ + # -d "{\"tag_name\":\"$TAG\",\"name\":\"$RELEASE_NAME\",\"body\":\"$RELEASE_BODY\"}" \ + # "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases") + + # # Extract the release ID from the response + # release_id=$(echo $release_response | jq -r '.id') + + # # Upload artifacts + # curl -X POST \ + # -H "Authorization: token ${GITEA_TOKEN}" \ + # -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \ + # -H "Content-Type: multipart/form-data" \ + # -F "attachment=@RetroDECK-cooker.flatpak" \ + # "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak" + + # # Upload artifacts sha + # curl -X POST \ + # -H "Authorization: token ${GITEA_TOKEN}" \ + # -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \ + # -H "Content-Type: multipart/form-data" \ + # -F "attachment=@RetroDECK-cooker.flatpak.sha" \ + # "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak.sha" + + # curl -X POST \ + # -H "Authorization: token ${GITEA_TOKEN}" \ + # -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \ + # -H "Content-Type: multipart/form-data" \ + # -F "attachment=@RetroDECK-Artifact.tar.gz" \ + # "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-Artifact.tar.gz" diff --git a/.github/workflows/main-selfhosted.yml b/.github/workflows/main-selfhosted.yml index bd335618..f71c4446 100644 --- a/.github/workflows/main-selfhosted.yml +++ b/.github/workflows/main-selfhosted.yml @@ -108,7 +108,7 @@ jobs: tag: ${{ env.REL_VER }} name: "RetroDECK v${{ env.REL_VER }}" bodyFile: "body.md" - artifacts: "RetroDECK.flatpak,RetroDECK-Artifact.tar.gz" + artifacts: "RetroDECK.flatpak,RetroDECK.flatpak.sha,RetroDECK-Artifact.tar.gz" allowUpdates: true makeLatest: true token: ${{ secrets.TRIGGER_BUILD_TOKEN }} @@ -123,27 +123,56 @@ jobs: path: RetroDECK.flatpak continue-on-error: true - - name: Publish the flatpak in a new release on Gitea - uses: ncipollo/release-action@v1 - env: - REL_VER: ${{ env.REL_VER }} - with: - tag: ${{ env.REL_VER }} - name: "RetroDECK v${{ env.REL_VER }}" - bodyFile: "body.md" - artifacts: "RetroDECK.flatpak,RetroDECK-Artifact.tar.gz" - allowUpdates: true - makeLatest: true - token: ${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }} - repo: "https://repo.retrodeck.net/RetroDECK/RetroDECK" - continue-on-error: true + - name: Publish release on Gitea + run: | + # Set variables for Gitea host, organization, repository, access token, and release details + GITEA_HOST="repo.retrodeck.net" + UPLOAD_HOST="upload.retrodeck.net" + ORGANIZATION="RetroDECK" + REPO="RetroDECK" + GITEA_TOKEN="${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }}" + RELEASE_NAME="RetroDECK v${{ env.REL_VER }}" + TAG="${{ env.REL_VER }}" - - name: Upload RetroDECK.flatpak to Gitea Release + payload=$(jq -cn \ + --arg tag_name "$TAG" \ + --arg name "$RELEASE_NAME" \ + --arg body "$(cat body.md)" \ + '{$tag_name, $name, $body}' + ) + + # Create a release using curl and capture the release ID + release_response=$(curl -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "$payload" \ + "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases" + ) + + # Extract the release ID from the response + release_id=$(echo $release_response | jq -r '.id') + + # Upload artifacts + curl -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \ + -H "Content-Type: multipart/form-data" \ + -F "attachment=@RetroDECK.flatpak" \ + "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak" + + curl -X POST \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \ + -H "Content-Type: multipart/form-data" \ + -F "attachment=@RetroDECK-Artifact.tar.gz" \ + "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-Artifact.tar.gz" + + - name: Upload RetroDECK.flatpak.sha to Gitea Release run: | curl -X POST \ -H "Authorization: token ${GITEA_TOKEN}" \ - -F "file=@RetroDECK.flatpak" \ - "https://repo.retrodeck.net/RetroDECK/RetroDECK/releases/${{ env.REL_VER }}/assets?name=RetroDECK.flatpak" + -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \ + -F "file=@RetroDECK.flatpak.sha" \ + "https://$UPLOAD_HOST/RetroDECK/RetroDECK/releases/${{ env.REL_VER }}/assets?name=RetroDECK.flatpak.sha" env: GITEA_TOKEN: ${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }} - diff --git a/automation_tools/flatpak_build_bundle.sh b/automation_tools/flatpak_build_bundle.sh index 3568ebb7..8e79186f 100755 --- a/automation_tools/flatpak_build_bundle.sh +++ b/automation_tools/flatpak_build_bundle.sh @@ -4,6 +4,8 @@ if [ "${GITHUB_REF##*/}" = "main" ]; then flatpak build-bundle "${GITHUB_WORKSPACE}/.local" "$GITHUB_WORKSPACE/RetroDECK.flatpak" net.retrodeck.retrodeck + sha256sum RetroDECK.flatpak > RetroDECK.flatpak.sha else flatpak build-bundle "${GITHUB_WORKSPACE}/.local" "$GITHUB_WORKSPACE/RetroDECK-cooker.flatpak" net.retrodeck.retrodeck + sha256sum RetroDECK-cooker.flatpak > RetroDECK-cooker.flatpak.sha fi \ No newline at end of file diff --git a/automation_tools/pre_build_automation.sh b/automation_tools/pre_build_automation.sh index 895f2074..476ae315 100755 --- a/automation_tools/pre_build_automation.sh +++ b/automation_tools/pre_build_automation.sh @@ -8,6 +8,8 @@ # Needs the URL of the file, in this line format: hash^PLACEHOLDERTEXT^url # latestcommit: Finds the most recent commit of a git repo and updated the placeholder in the manifest. # Needs the URL of the repo and the branch to find the latest commit from, in this line format: latestcommit^PLACEHOLDERTEXT^url^branch +# latestghtag: Finds the most recent tag on a GitHub repo, for repos that don't have normal releases, but also shouldn't use the latest commit +# Needs the URL of the repo, in this line format: latestghtag^PLACEHOLDERTEXT^url # latestghrelease: Finds the download URL and SHA256 hash of the latest release from a git repo. # Needs the API URL of the repo, in this line format: latestappimage^PLACEHOLDERTEXT^https://api.github.com/repos///releases/latest^ # As this command updates two different placeholders (one for the URL, one for the file hash) in the manifest, @@ -82,10 +84,20 @@ do /bin/sed -i 's^'"$placeholder"'^'"$commit"'^' $rd_manifest ;; + "latestghtag" ) + echo + echo "Placeholder text: $placeholder" + echo "Repo to get the latest tag from: $url" + echo + tag=$(git ls-remote "$url" | tail -n 1 | cut -f2 | sed 's|refs/tags/||') + echo "Tag found: $tag" + /bin/sed -i 's^'"$placeholder"'^'"$tag"'^' $rd_manifest + ;; + "latestghrelease" ) echo echo "Placeholder text: $placeholder" - echo "Repo to look for AppImage releases: $url" + echo "Repo to look for latest releases: $url" echo ghreleaseurl=$(curl -s "$url" | grep browser_download_url | grep "$branch\""$ | cut -d : -f 2,3 | tr -d \" | sed -n 1p | tr -d ' ') echo "GitHub release URL found: $ghreleaseurl" diff --git a/emu-configs/cemu/controllerProfiles/SteamInput-P1-Gyro.xml b/emu-configs/cemu/controllerProfiles/SteamInput-P1-Gyro.xml index 83531018..ed34dc53 100644 --- a/emu-configs/cemu/controllerProfiles/SteamInput-P1-Gyro.xml +++ b/emu-configs/cemu/controllerProfiles/SteamInput-P1-Gyro.xml @@ -42,100 +42,104 @@ - 24 - - - - 23 - - - - 22 - - - - 21 - - - - 20 - - - - 19 - - - - 18 - - - - 17 - - - - 16 - - - - 15 - - - - 14 - + 12 + 13 - 12 - + 14 + - 11 - + 15 + - 10 - + 16 + - 9 - + 17 + - 8 - + 18 + - 7 - + 19 + - 6 - + 20 + - 5 - + 21 + - 4 - + 22 + - 3 - + 23 + + + + 25 + + + + 1 + 2 - 1 - + 3 + + + + 4 + + + + 5 + + + + 6 + + + + 7 + + + + 8 + + + + 9 + + + + 10 + + + + 11 + + + + 24 + diff --git a/emu-configs/cemu/controllerProfiles/SteamInput-P1.xml b/emu-configs/cemu/controllerProfiles/SteamInput-P1.xml index e62e1b06..b2f05d47 100644 --- a/emu-configs/cemu/controllerProfiles/SteamInput-P1.xml +++ b/emu-configs/cemu/controllerProfiles/SteamInput-P1.xml @@ -21,92 +21,56 @@ - 24 - - - - 23 - - - - 22 - - - - 21 - - - - 20 - - - - 19 - - - - 18 - - - - 17 - - - - 16 - - - - 15 - + 1 + 14 - - 1 - - 2 - 3 - + 15 + - 4 - + 16 + - 5 - + 17 + - 6 - + 18 + - 7 - + 19 + - 8 - + 20 + - 9 - + 21 + - 10 - + 22 + - 11 - + 23 + + + + 25 + 12 @@ -116,6 +80,46 @@ 13 + + 11 + + + + 24 + + + + 10 + + + + 9 + + + + 8 + + + + 7 + + + + 6 + + + + 5 + + + + 4 + + + + 3 + + diff --git a/emu-configs/cemu/controllerProfiles/controller0.xml b/emu-configs/cemu/controllerProfiles/controller0.xml index e62e1b06..9517fa0f 100644 --- a/emu-configs/cemu/controllerProfiles/controller0.xml +++ b/emu-configs/cemu/controllerProfiles/controller0.xml @@ -21,8 +21,8 @@ - 24 - + 25 + 23 @@ -60,18 +60,14 @@ 15 - - 14 - - - - 1 - - 2 + + 14 + + 3 @@ -104,17 +100,25 @@ 10 + + 24 + + 11 + + 13 + + 12 - 13 - + 1 + diff --git a/emu-configs/cemu/settings.xml b/emu-configs/cemu/settings.xml index 62a1e269..45c27204 100644 --- a/emu-configs/cemu/settings.xml +++ b/emu-configs/cemu/settings.xml @@ -94,9 +94,9 @@ 100 100 100 - alsa_output.pci-0000_04_00.5-platform-acp5x_mach.0.HiFi__hw_acp5x_1__sink - alsa_output.pci-0000_04_00.5-platform-acp5x_mach.0.HiFi__hw_acp5x_1__sink - filter-chain-source + default + default + default 2147483649 diff --git a/emu-configs/defaults/retrodeck/controller_configs/RetroDECK_controller_steamdeck_neptune_full.vdf b/emu-configs/defaults/retrodeck/controller_configs/RetroDECK_controller_steamdeck_neptune_full.vdf index a70c5839..01b802f7 100644 --- a/emu-configs/defaults/retrodeck/controller_configs/RetroDECK_controller_steamdeck_neptune_full.vdf +++ b/emu-configs/defaults/retrodeck/controller_configs/RetroDECK_controller_steamdeck_neptune_full.vdf @@ -7301,8 +7301,8 @@ { "bindings" { - "binding" "key_press LEFT_ALT, Set GPU Accuracy, RD-emblem-new.png, " - "binding" "key_press G, Set GPU Accuracy, RD-emblem-new.png, " + "binding" "key_press LEFT_ALT, Yuzu - Set GPU Accuracy, RD-emblem-new.png, " + "binding" "key_press G, Yuzu - Set GPU Accuracy, RD-emblem-new.png, " } } } @@ -7318,8 +7318,8 @@ { "bindings" { - "binding" "key_press LEFT_ALT, Load/Remove Amiibo, RD-preferences-desktop-accessibility.png, " - "binding" "key_press M, Load/Remove Amiibo, RD-preferences-desktop-accessibility.png, " + "binding" "key_press LEFT_ALT, Yuzu - Load / Remove Amiibo, RD-preferences-desktop-accessibility.png, " + "binding" "key_press M, Yuzu - Load / Remove Amiibo, RD-preferences-desktop-accessibility.png, " } } } @@ -7335,8 +7335,24 @@ { "bindings" { - "binding" "key_press LEFT_ALT, Docked / Undocked Mode, RD-emblem-unlocked.png, " - "binding" "key_press D, Docked / Undocked Mode, RD-emblem-unlocked.png, " + "binding" "key_press LEFT_ALT, Yuzu - Docked / Undocked Mode, RD-emblem-unlocked.png, " + "binding" "key_press D, Yuzu - Docked / Undocked Mode, RD-emblem-unlocked.png, " + } + } + } + "disabled_activators" + { + } + } + "touch_menu_button_4" + { + "activators" + { + "Full_Press" + { + "bindings" + { + "binding" "key_press F4, Ryujinx - F4 Open Menu, RD-F4.png, " } } } @@ -12072,4 +12088,3 @@ "right_trackpad_mode" "0" } } - diff --git a/emu-configs/defaults/retrodeck/presets/gba_presets.cfg b/emu-configs/defaults/retrodeck/presets/gba_presets.cfg index 170c0e17..7f4d649e 100644 --- a/emu-configs/defaults/retrodeck/presets/gba_presets.cfg +++ b/emu-configs/defaults/retrodeck/presets/gba_presets.cfg @@ -4,9 +4,9 @@ change^borders^custom_viewport_height^640^^/var/config/retroarch/config/mGBA/gba change^borders^custom_viewport_width^960^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg change^borders^custom_viewport_x^160^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg change^borders^custom_viewport_y^0^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg -change^borders^input_overlay_enable^true^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg change^borders^input_overlay^/var/config/retroarch/overlays/borders/pegasus/gba.cfg^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg change^borders^input_overlay_aspect_adjust_landscape^0.110000^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg +change^borders^input_overlay_enable^true^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg change^borders^input_overlay_scale_landscape^1.2150000^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg change^borders^input_overlay_y_offset_landscape^0.020000^^/var/config/retroarch/config/mGBA/gba.cfg^$emuconfigs/retroarch/retroarch.cfg enable^abxy_button_swap^/var/config/retroarch/config/remaps/mGBA/gba.rmp diff --git a/emu-configs/defaults/retrodeck/reference_lists/bios_checklist.cfg b/emu-configs/defaults/retrodeck/reference_lists/bios_checklist.cfg index c46346b7..a775d8bc 100644 --- a/emu-configs/defaults/retrodeck/reference_lists/bios_checklist.cfg +++ b/emu-configs/defaults/retrodeck/reference_lists/bios_checklist.cfg @@ -1,14 +1,27 @@ -neogeo.zip^^Unknown^Arcade (FinalBurn Neo)^Neo Geo BIOS (Required for this system) -neocdz.zip^^Unknown^Arcade (FinalBurn Neo)^Neo Geo CDZ BIOS (Required for this system) -decocass.zip^^Unknown^Arcade (FinalBurn Neo)^DECO Cassette System BIOS (Required for this system) -isgsm.zip^^Unknown^Arcade (FinalBurn Neo)^ISG Selection Master Type 2006 System BIOS (Required for this system) -midssio.zip^^Unknown^Arcade (FinalBurn Neo)^Midway SSIO Sound Board Internal ROM (Required for this system) -nmk004.zip^^Unknown^Arcade (FinalBurn Neo)^NMK004 Internal ROM (Required for this system) -pgm.zip^^Unknown^Arcade (FinalBurn Neo)^PGM System BIOS (Required for this system) -skns.zip^^Unknown^Arcade (FinalBurn Neo)^Super Kaneko Nova System BIOS (Required for this system) -ym2608.zip^^Unknown^Arcade (FinalBurn Neo)^YM2608 Internal ROM (Required for this system) -cchip.zip^^Unknown^Arcade (FinalBurn Neo)^C-Chip Internal ROM (Required for this system) -bubsys.zip^^Unknown^Arcade (FinalBurn Neo)^Bubble System BIOS (Required for this system) +panafz1.bin^^f47264dd47fe30f73ab3c010015c155b^3DO^Panasonic FZ-1 +panafz10.bin^^51f2f43ae2f3508a14d9f56597e2d3ce^3DO^Panasonic FZ-10 +panafz10-norsa.bin^^1477bda80dc33731a65468c1f5bcbee9^3DO^Panasonic FZ-10 [RSA Patch] +panafz10e-anvil.bin^^a48e6746bd7edec0f40cff078f0bb19f^3DO^Panasonic FZ-10-E [Anvil] +panafz10e-anvil-norsa.bin^^cf11bbb5a16d7af9875cca9de9a15e09^3DO^Panasonic FZ-10-E [Anvil RSA Patch] +panafz1j.bin^^a496cfdded3da562759be3561317b605^3DO^Panasonic FZ-1J +panafz1j-norsa.bin^^f6c71de7470d16abe4f71b1444883dc8^3DO^Panasonic FZ-1J [RSA Patch] +goldstar.bin^^8639fd5e549bd6238cfee79e3e749114^3DO^Goldstar GDO-101M +sanyotry.bin^^35fa1a1ebaaeea286dc5cd15487c13ea^3DO^Sanyo IMP-21J TRY +3do_arcade_saot.bin^^8970fc987ab89a7f64da9f8a8c4333ff^3DO^Shootout At Old Tucson +panafz1-kanji.bin^^b8dc97f778a6245c58e064b0312e8281^3DO^Panasonic FZ-1 Kanji ROM (Font ROM: required for some Japanese games. Optional otherwise.) +panafz10ja-anvil-kanji.bin^^428577250f43edc902ea239c50d2240d^3DO^Panasonic FZ-10JA Kanji ROM (Font ROM: required for some Japanese games. Optional otherwise.) +panafz1j-kanji.bin^^c23fb5d5e6bb1c240d02cf968972be37^3DO^Panasonic FZ-1J Kanji ROM (Font ROM: required for some Japanese games. Optional otherwise.) +neogeo.zip^^00dad01abdbf8ea9e79ad2fe11bdb182^Arcade (FinalBurn Neo)^Neo Geo BIOS (Required for this system) +neocdz.zip^^c733b4b7bd30fa849874d96c591c8639^Arcade (FinalBurn Neo)^Neo Geo CDZ BIOS (Required for this system) +decocass.zip^^b7e1189b341bf6a8e270017c096d21b0^Arcade (FinalBurn Neo)^DECO Cassette System BIOS (Required for this system) +isgsm.zip^^4a56d56e2219c5e2b006b66a4263c01c^Arcade (FinalBurn Neo)^ISG Selection Master Type 2006 System BIOS (Required for this system) +midssio.zip^^5904b0de768d1d506e766aa7e18994c1^Arcade (FinalBurn Neo)^Midway SSIO Sound Board Internal ROM (Required for this system) +nmk004.zip^^bfacf1a68792d5348f93cf724d2f1dda^Arcade (FinalBurn Neo)^NMK004 Internal ROM (Required for this system) +pgm.zip^^87cc944eef4c671aa2629a8ba48a08e0^Arcade (FinalBurn Neo)^PGM System BIOS (Required for this system) +skns.zip^^3f956c4e7008804cb47cbde49bd5b908^Arcade (FinalBurn Neo)^Super Kaneko Nova System BIOS (Required for this system) +ym2608.zip^^79ae0d2bb1901b7e606b6dc339b79a97^Arcade (FinalBurn Neo)^YM2608 Internal ROM (Required for this system) +cchip.zip^^df6f8a3d83c028a5cb9f2f2be60773f3^Arcade (FinalBurn Neo)^C-Chip Internal ROM (Required for this system) +bubsys.zip^^f81298afd68a1a24a49a1a2d9f087964^Arcade (FinalBurn Neo)^Bubble System BIOS (Required for this system) namcoc69.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C69 BIOS (Required for this system) namcoc70.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C70 BIOS (Required for this system) namcoc75.zip^^Unknown^Arcade (FinalBurn Neo)^Namco C75 BIOS (Required for this system) @@ -48,9 +61,9 @@ Complex.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator Complex_4627v1.03.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator Complex_4627.bin^^Unknown^Microsoft XBOX^Used by XEMU emulator syscard3.pce^^38179df8f4ac870017db21ebcbf53114^NEC PC Engine / CD^Super CD-ROM2 System V3.xx (Required) -syscard2.pce^^Unknown^NEC PC Engine / CD^CD-ROM System V2.xx -syscard1.pce^^Unknown^NEC PC Engine / CD^CD-ROM System V1.xx -gexpress.pce^^Unknown^NEC PC Engine / CD^Game Express CD Card +syscard2.pce^^3cdd6614a918616bfc41c862e889dd79^NEC PC Engine / CD^CD-ROM System V2.xx +syscard1.pce^^2b7ccb3d86baa18f6402c176f3065082^NEC PC Engine / CD^CD-ROM System V1.xx +gexpress.pce^^6d2cb14fc3e1f65ceb135633d1694122^NEC PC Engine / CD^Game Express CD Card font.bmp^np2kai/^7da1e5b7c482d4108d22a5b09631d967^NEC PC-98 (Neko Project II Kai)^Needed to display text (Required) FONT.ROM^np2kai/^2af6179d7de4893ea0b705c00e9a98d6^NEC PC-98 (Neko Project II Kai)^Alt font file (Required if normal font file is missing) bios.rom^np2kai/^e246140dec5124c5e404869a84caefce^NEC PC-98 (Neko Project II Kai)^BIOS file (Required) @@ -58,12 +71,12 @@ itf.rom^np2kai/^e9fc3890963b12cf15d0a2eea5815b72^NEC PC-98 (Neko Project II Kai) sound.rom^np2kai/^caf90f22197aed6f14c471c21e64658d^NEC PC-98 (Neko Project II Kai)^BIOS file (Required) bios9821.rom^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^Optional BIOS file d8000.rom^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^Optional BIOS file -2608_BD.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample -2608_SD.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample -2608_TOP.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample -2608_HH.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample -2608_TOM.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample -2608_RIM.WAV^np2kai/^Unknown^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +2608_BD.WAV^np2kai/^d94546e70f17fd899be8df3544ab6cbb^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +2608_SD.WAV^np2kai/^d71004351c8bbfdad53b18222c061d49^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +2608_TOP.WAV^np2kai/^593cff6597ab9380d822b8f824fd2c28^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +2608_HH.WAV^np2kai/^08c54a0c1f774a5538a848a6665a34b4^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +2608_TOM.WAV^np2kai/^96a4ead13f364734f79b0c58af2f0e1f^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample +2608_RIM.WAV^np2kai/^465ea0768b27da404aec45dfc501404b^NEC PC-98 (Neko Project II Kai)^YM2608 RYTHM sample n88.rom^^4f984e04a99d56c4cfe36115415d6eb8^NEC PC-8000 / PC-8800 series (QUASI88)^BIOS File (Required) n88n.rom^^2ff07b8769367321128e03924af668a0^NEC PC-8000 / PC-8800 series (QUASI88)^Required for PC-8000 series emulation. (N BASIC mode) disk.rom^^793f86784e5608352a5d7f03f03e0858^NEC PC-8000 / PC-8800 series (QUASI88)^Required for loading disk images @@ -72,6 +85,19 @@ n88_0.rom^^d675a2ca186c6efcd6277b835de4c7e5^NEC PC-8000 / PC-8800 series (QUASI8 n88_1.rom^^e844534dfe5744b381444dbe61ef1b66^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file n88_2.rom^^6548fa45061274dee1ea8ae1e9e93910^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file n88_3.rom^^fc4b76a402ba501e6ba6de4b3e8b4273^NEC PC-8000 / PC-8800 series (QUASI88)^Optional BIOS file +neocd_f.rom^^8834880c33164ccbe6476b559f3e37de^Neo Geo CD^Front Loader BIOS (At least 1 required) +neocd_sf.rom^^043d76d5f0ef836500700c34faef774d^Neo Geo CD^Front Loader BIOS (SMKDAN 0.7b DEC 2010) (At least 1 required) +neocd_t.rom^^de3cf45d227ad44645b22aa83b49f450^Neo Geo CD^Top Loader BIOS (At least 1 required) +neocd_st.rom^^f6325a33c6d63ea4b9162a3fa8c32727^Neo Geo CD^Top Loader BIOS (SMKDAN 0.7b DEC 2010) (At least 1 required) +neocd_z.rom^^11526d58d4c524daef7d5d677dc6b004^Neo Geo CD^CDZ BIOS (At least 1 required) +neocd_sz.rom^^971ee8a36fb72da57aed01758f0a37f5^Neo Geo CD^CDZ BIOS (SMKDAN 0.7b DEC 2010) (At least 1 required) +front-sp1.bin^^5c2366f25ff92d71788468ca492ebeca^Neo Geo CD^Front Loader BIOS (MAME) (At least 1 required) +top-sp1.bin^^122aee210324c72e8a11116e6ef9c0d0^Neo Geo CD^Top Loader BIOS (MAME) (At least 1 required) +neocd.bin^^f39572af7584cb5b3f70ae8cc848aba2^Neo Geo CD^CDZ BIOS (MAME) (At least 1 required) +uni-bioscd.rom^^08ca8b2dba6662e8024f9e789711c6fc^Neo Geo CD^Universe BIOS CD 3.3 +gb_bios.bin^^32fbbd84168d3482956eb3c5051637f5^Game Boy^Optional BIOS file (used to display the Nintendo logo at boot) +gbc_bios.bin^^dbfce9db9deaa2567f6a84fde55f9680^Game Boy Color^Optional BIOS file (used to display the Nintendo logo at boot) +gba_bios.bin^^a860e8c0b6d573d191e4ec7db1b1e4f6^Game Boy Advance^Optional BIOS file (used to display the Nintendo logo at boot) aes_keys.txt^citra/sysdata/^Unknown^Nintendo 3DS^Decryption keys used by Citra emulator bios7.bin^^df692a80a5b1bc90728bc3dfc76cd948^Nintendo DS^Used by MelonDS emulator (Required, see Wiki) bios9.bin^^a392174eb3e572fed6447e956bde4b25^Nintendo DS^Used by MelonDS emulator (Required, see Wiki) @@ -103,9 +129,9 @@ mpr-18811-mx.ic1^^255113ba943c92a54facd25a10fd780c^Sega Saturn^The King of Fight mpr-19367-mx.ic1^^1cd19988d1d72a3e7caa0b73234c96b4^Sega Saturn^Ultraman: Hikari no Kyojin Densetsu ROM Cartridge (Required for this game) iplrom.dat^keropi/^7fd4caabac1d9169e289f0f7bbf71d8e^Sharp X68000^X68000 BIOS (Required) cgrom.dat^keropi/^cb0a5cfcf7247a7eab74bb2716260269^Sharp X68000^Font file (Required) -iplrom30.dat^keropi/^Unknown^Sharp X68000^X68000 BIOS 2 -iplromco.dat^keropi/^Unknown^Sharp X68000^X68000 BIOS 3 -iplromxv.dat^keropi/^Unknown^Sharp X68000^X68000 BIOS 4 +iplrom30.dat^keropi/^f373003710ab4322642f527f567e020a^Sharp X68000^X68000 BIOS 2 +iplromco.dat^keropi/^cc78d4f4900f622bd6de1aed7f52592f^Sharp X68000^X68000 BIOS 3 +iplromxv.dat^keropi/^0617321daa182c3f3d6f41fd02fb3275^Sharp X68000^X68000 BIOS 4 psxonpsp660.bin^^c53ca5908936d412331790f4426c6c33^Sony PSX^PS1 BIOS (At least 1 required) scph5500.bin^^8dd7d5296a650fac7319bce665a6a53c^Sony PSX^PS1 JP BIOS (At least 1 required) scph5501.bin^^490f666e1afb15b7362b406ed1cea246^Sony PSX^PS1 US BIOS (At least 1 required) @@ -119,11 +145,11 @@ ps1_rom.bin^^81bbe60ba7a3d1cea1d48c14cbcc647b^Sony PSX^PS1 BIOS (At least 1 requ ps2-0200a-20040614.bin^^d333558cc14561c1fdc334c75d5f37b7^Sony PS2^PS2 US BIOS (At least 1 required) ps2-0200e-20040614.bin^^dc752f160044f2ed5fc1f4964db2a095^Sony PS2^PS2 EU BIOS (At least 1 required) ps2-0200j-20040614.bin^^0eee5d1c779aa50e94edd168b4ebf42e^Sony PS2^PS2 JP BIOS (At least 1 required) -128p-0.rom^fuse/^Unknown^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) -128p-1.rom^fuse/^Unknown^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) -trdos.rom^fuse/^Unknown^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) -gluck.rom^fuse/^Unknown^ZX Spectrum^Pentagon 512K/1024 ROM (Required) -256s-0.rom^fuse/^Unknown^ZX Spectrum^Scorpion 256K ROM (Required) -256s-1.rom^fuse/^Unknown^ZX Spectrum^Scorpion 256K ROM (Required) -256s-2.rom^fuse/^Unknown^ZX Spectrum^Scorpion 256K ROM (Required) -256s-3.rom^fuse/^Unknown^ZX Spectrum^Scorpion 256K ROM (Required) +128p-0.rom^fuse/^a249565f03b98d004ee7f019570069cd^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) +128p-1.rom^fuse/^6e09e5d3c4aef166601669feaaadc01c^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) +trdos.rom^fuse/^0da70a5d2a0e733398e005b96b7e4ba6^ZX Spectrum^Pentagon 128K/512K/1024 ROM (Required) +gluck.rom^fuse/^d5869034604dbfd2c1d54170e874fd0a^ZX Spectrum^Pentagon 512K/1024 ROM (Required) +256s-0.rom^fuse/^b9fda5b6a747ff037365b0e2d8c4379a^ZX Spectrum^Scorpion 256K ROM (Required) +256s-1.rom^fuse/^643861ad34831b255bf2eb64e8b6ecb8^ZX Spectrum^Scorpion 256K ROM (Required) +256s-2.rom^fuse/^d8ad507b1c915a9acfe0d73957082926^ZX Spectrum^Scorpion 256K ROM (Required) +256s-3.rom^fuse/^ce0723f9bc02f4948c15d3b3230ae831^ZX Spectrum^Scorpion 256K ROM (Required) \ No newline at end of file diff --git a/emu-configs/defaults/retrodeck/retrodeck.cfg b/emu-configs/defaults/retrodeck/retrodeck.cfg index 4056cc07..88a33896 100644 --- a/emu-configs/defaults/retrodeck/retrodeck.cfg +++ b/emu-configs/defaults/retrodeck/retrodeck.cfg @@ -6,8 +6,8 @@ roms_folder=/home/deck/retrodeck/roms saves_folder=/home/deck/retrodeck/saves states_folder=/home/deck/retrodeck/states bios_folder=/home/deck/retrodeck/bios -media_folder=/home/deck/retrodeck/downloaded_media -themes_folder=/home/deck/retrodeck/themes +media_folder=/home/deck/retrodeck/ES-DE/downloaded_media +themes_folder=/home/deck/retrodeck/ES-DE/themes logs_folder=/home/deck/retrodeck/logs screenshots_folder=/home/deck/retrodeck/screenshots mods_folder=/home/deck/retrodeck/mods @@ -82,3 +82,4 @@ duckstation=false pcsx2=false primehack=false citra=false +rpcs3=false diff --git a/emu-configs/mame/cheat0264.zip b/emu-configs/mame/cheat0264.zip new file mode 100644 index 00000000..6f3f1a5d Binary files /dev/null and b/emu-configs/mame/cheat0264.zip differ diff --git a/emu-configs/mame/default.cfg b/emu-configs/mame/default.cfg index bc995adc..8b2ca5a8 100644 --- a/emu-configs/mame/default.cfg +++ b/emu-configs/mame/default.cfg @@ -1,16 +1,11 @@ - + - - - JOYCODE_1_HAT1UP - - - JOYCODE_1_BUTTON8 + JOYCODE_1_BUTTON8 OR KEYCODE_1 @@ -20,52 +15,72 @@ - JOYCODE_2_BUTTON12 + JOYCODE_2_BUTTON8 OR KEYCODE_2 - JOYCODE_2_BUTTON11 + KEYCODE_6 OR JOYCODE_2_BUTTON7 + + + + + JOYCODE_3_BUTTON8 OR KEYCODE_3 + + + + + KEYCODE_7 OR JOYCODE_3_BUTTON7 + + + + + JOYCODE_4_BUTTON8 OR KEYCODE_4 + + + + + KEYCODE_8 OR JOYCODE_4_BUTTON7 - KEYCODE_1 OR JOYCODE_1_BUTTON12 + JOYCODE_1_BUTTON8 OR KEYCODE_S KEYCODE_1 - KEYCODE_2 OR JOYCODE_2_BUTTON12 + JOYCODE_2_BUTTON8 OR KEYCODE_S KEYCODE_2 - KEYCODE_3 OR JOYCODE_3_BUTTON12 + JOYCODE_3_BUTTON8 OR KEYCODE_S KEYCODE_3 - KEYCODE_4 OR JOYCODE_4_BUTTON12 + JOYCODE_4_BUTTON8 OR KEYCODE_S KEYCODE_4 - KEYCODE_LSHIFT KEYCODE_1 OR JOYCODE_1_BUTTON11 + JOYCODE_1_BUTTON7 OR KEYCODE_LSHIFT KEYCODE_1 - KEYCODE_LSHIFT KEYCODE_2 OR JOYCODE_2_BUTTON11 + JOYCODE_2_BUTTON7 OR KEYCODE_LSHIFT KEYCODE_2 - KEYCODE_LSHIFT KEYCODE_3 OR JOYCODE_3_BUTTON11 + JOYCODE_3_BUTTON7 OR KEYCODE_LSHIFT KEYCODE_3 - KEYCODE_LSHIFT KEYCODE_4 OR JOYCODE_4_BUTTON11 + JOYCODE_4_BUTTON7 OR KEYCODE_LSHIFT KEYCODE_4 @@ -113,31 +128,6 @@ KEYCODE_LALT KEYCODE_T KEYCODE_4 - - - KEYCODE_LALT KEYCODE_S KEYCODE_0 - - - - - KEYCODE_LALT KEYCODE_T KEYCODE_0 - - - - - NONE - - - - - NONE - - - - - NONE - - KEYCODE_LCONTROL KEYCODE_M @@ -148,19 +138,14 @@ KEYCODE_LCONTROL KEYCODE_Q - - - KEYCODE_DEL - - - KEYCODE_PGUP OR JOYCODE_1_ZAXIS_POS_SWITCH + JOYCODE_1_RYAXIS_NEG_SWITCH OR KEYCODE_PGUP - KEYCODE_PGDN OR JOYCODE_1_RZAXIS_POS_SWITCH + JOYCODE_1_RYAXIS_POS_SWITCH OR KEYCODE_PGDN @@ -188,11 +173,6 @@ NONE - - - KEYCODE_LCONTROL KEYCODE_P - - NONE @@ -200,7 +180,7 @@ - KEYCODE_LCONTROL KEYCODE_MINUS + KEYCODE_LCONTROL KEYCODE_MINUSPAD @@ -255,7 +235,7 @@ - KEYCODE_LCONTROL KEYCODE_PLUS + KEYCODE_LCONTROL KEYCODE_PLUSPAD @@ -275,7 +255,7 @@ - NONE + KEYCODE_LCONTROL KEYCODE_V @@ -283,84 +263,14 @@ KEYCODE_LCONTROL KEYCODE_C - - - NONE - - - - - NONE - - - - - NONE - - - - - NONE - - - - - NONE - - - - - NONE - - - - - NONE - - - - - NONE - - - - - NONE - - - - - NONE - - - KEYCODE_TAB OR JOYCODE_1_RZAXIS_POS_SWITCH + JOYCODE_1_RXAXIS_POS_SWITCH - KEYCODE_LSHIFT KEYCODE_TAB OR JOYCODE_1_ZAXIS_POS_SWITCH - - - - - NONE - - - - - JOYCODE_1_BUTTON4 - - - - - NONE - - - - - NONE + JOYCODE_1_RXAXIS_NEG_SWITCH OR KEYCODE_TAB @@ -368,11 +278,6 @@ KEYCODE_LCONTROL KEYCODE_ENTER - - - NONE - - KEYCODE_LCONTROL KEYCODE_Y @@ -383,11 +288,6 @@ KEYCODE_LCONTROL KEYCODE_U - - - NONE - - diff --git a/emu-configs/retroarch/ScummVM.zip b/emu-configs/retroarch/ScummVM.zip new file mode 100644 index 00000000..33e351e3 Binary files /dev/null and b/emu-configs/retroarch/ScummVM.zip differ diff --git a/emu-configs/retroarch/retroarch-core-options.cfg b/emu-configs/retroarch/retroarch-core-options.cfg index ff6e7262..be802a61 100644 --- a/emu-configs/retroarch/retroarch-core-options.cfg +++ b/emu-configs/retroarch/retroarch-core-options.cfg @@ -421,6 +421,7 @@ mgba_sgb_borders = "ON" mgba_skip_bios = "OFF" mgba_solar_sensor_level = "0" mgba_use_bios = "ON" +mesen_fdsautoinsertdisk = "enabled" mupen64plus-169screensize = "960x540" mupen64plus-43screensize = "640x480" mupen64plus-alt-map = "False" diff --git a/emu-configs/rpcs3/GuiConfigs/CurrentSettings.ini b/emu-configs/rpcs3/GuiConfigs/CurrentSettings.ini index b4dba439..0ef87f08 100644 --- a/emu-configs/rpcs3/GuiConfigs/CurrentSettings.ini +++ b/emu-configs/rpcs3/GuiConfigs/CurrentSettings.ini @@ -47,4 +47,5 @@ main_window_stop=Ctrl+Q main_window_toggle_fullscreen=Ctrl+Return [main_window] -infoBoxEnabledWelcome=false \ No newline at end of file +confirmationBoxExitGame=false +infoBoxEnabledWelcome=false diff --git a/functions/checks.sh b/functions/checks.sh index e5dc89af..2bd9af51 100644 --- a/functions/checks.sh +++ b/functions/checks.sh @@ -76,8 +76,8 @@ check_for_version_update() { log i "Showing new version found dialog" choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" --extra-button="Ignore this version" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Update Available" \ - --text="There is a new version of RetroDECK on the stable release channel $online_version. Please update through the Discover app!\n\nIf you would like to ignore this version and recieve a notification at the NEXT version,\nclick the \"Ignore this version\" button.") + --title "RetroDECK - New Update Available" \ + --text="There is a new version of RetroDECK available: $online_version.\nYou can easily update from the app store you have installed, examples: KDE Discover or Gnome Software.\n\nIf you would like to ignore this notification, click the \"Ignore this version\" button.") rc=$? # Capture return code, as "OK" button has no text value if [[ $rc == "1" ]]; then # If any button other than "OK" was clicked log i "Selected: \"OK\"" @@ -87,8 +87,8 @@ check_for_version_update() { log i "Showing update request dialog as \"$online_version\" was found and is greater then \"$version\"" choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Ignore this version" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Update Available" \ - --text="There is a more recent build of the RetroDECK cooker branch.\nYou are running version $hard_version, the latest is $online_version.\n\nWould you like to update to it?\nIf you would like to skip reminders about this version, click \"Ignore this version\".\nYou will be reminded again at the next version update.\n\nIf you would like to disable these update notifications entirely, disable Online Update Checks in the Configurator.") + --title "RetroDECK - New Cooker Version Available" \ + --text="There is a more recent version of RetroDECK cooker.\nYou are running version $hard_version. The latest is $online_version.\n\nWould you like to update?\nIf you would like to ignore this notification, click the \"Ignore this version\" button.\n\nIf you would like to disable these notifications entirely: disable Online Update Checks in the Configurator.") 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 == "Ignore this version" ]]; then @@ -99,22 +99,46 @@ check_for_version_update() { log i "Selected: \"Yes\"" configurator_generic_dialog "RetroDECK Online Update" "The update process may take several minutes.\n\nAfter the update is complete, RetroDECK will close. When you run it again you will be using the latest version." ( - local latest_cooker_download=$(curl --silent https://api.github.com/repos/XargonWan/$update_repo/releases/latest | grep '"browser_download_url":' | sed -E 's/.*"([^"]+)".*/\1/') + local latest_cooker_download=$(curl --silent https://api.github.com/repos/XargonWan/RetroDECK-cooker/releases/latest | grep '"browser_download_url":.*flatpak' | grep -v '\.sha' | sed -E 's/.*"([^"]+)".*/\1/') local temp_folder="$rdhome/RetroDECK_Updates" create_dir $temp_folder log i "Downloading version \"$online_version\" in \"$temp_folder/RetroDECK-cooker.flatpak\" from url: \"$latest_cooker_download\"" + # Downloading the flatpak file wget -P "$temp_folder" "$latest_cooker_download" - log d "Uninstalling old RetroDECK flatpak" - flatpak-spawn --host flatpak remove --noninteractive -y net.retrodeck.retrodeck # Remove current version before installing new one, to avoid duplicates - log d "Installing new flatpak file from: \"$temp_folder/RetroDECK-cooker.flatpak\"" + # And its sha + wget -P "$temp_folder" "$latest_cooker_download.sha" + + # Get the expected SHA checksum from the SHA file + local expected_sha=$(cat "$temp_folder/$(basename "$latest_cooker_download").sha" | awk '{print $1}') + + # Check if the file exists if [ -f "$temp_folder/RetroDECK-cooker.flatpak" ]; then - log d "Flatpak file \"$temp_folder/RetroDECK-cooker.flatpak\" found, proceeding." - flatpak-spawn --host flatpak install --user --bundle --noninteractive -y "$temp_folder/RetroDECK-cooker.flatpak" + # Calculate the actual SHA checksum of the file + actual_sha=$(sha256sum "$temp_folder/RetroDECK-cooker.flatpak" | awk '{print $1}') + + # Log the found and expected SHA checksums + log d "Found SHA: $actual_sha" + log d "Expected SHA: $expected_sha" + + # Check if the SHA checksum matches + if [ "$actual_sha" = "$expected_sha" ]; then + log d "Flatpak file \"$temp_folder/RetroDECK-cooker.flatpak\" found and SHA checksum matches, proceeding." + log d "Uninstalling old RetroDECK flatpak" + # Remove current version before installing new one, to avoid duplicates + flatpak-spawn --host flatpak remove --noninteractive -y net.retrodeck.retrodeck && log d "Uninstallation successful" + log d "Installing new flatpak file from: \"$temp_folder/RetroDECK-cooker.flatpak\"" + flatpak-spawn --host flatpak install --user --bundle --noninteractive -y "$temp_folder/RetroDECK-cooker.flatpak" && log d "Installation successful" + else + log e "Flatpak file \"$temp_folder/RetroDECK-cooker.flatpak\" found but SHA checksum does not match. Quitting." + configurator_generic_dialog "RetroDECK Online Update" "There was an error during the update: flatpak file found but SHA checksum does not match. Please check the log file." + exit 1 + fi else - log e "Flatpak file \"$temp_folder/RetroDECK-cooker.flatpak\" NOT FOUND. Quitting" - configurator_generic_dialog "RetroDECK Online Update" "There was an error during the update: flatpak file not found please check the log file." - exit 1 + log e "Flatpak file \"$temp_folder/RetroDECK-cooker.flatpak\" NOT FOUND. Quitting." + configurator_generic_dialog "RetroDECK Online Update" "There was an error during the update: flatpak file not found. Please check the log file." + exit 1 fi + rm -rf "$temp_folder" # Cleanup old bundles to save space ) | zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ diff --git a/functions/compression.sh b/functions/compression.sh index bb33cd2e..d33f5a2d 100644 --- a/functions/compression.sh +++ b/functions/compression.sh @@ -26,6 +26,29 @@ compress_game() { elif [[ "$1" == "rvz" ]]; then dolphin-tool convert -f rvz -b 131072 -c zstd -l 5 -i "$source_file" -o "$dest_file.rvz" fi + + if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested + if [[ -f "${file%.*}.$compatible_compression_format" ]]; then + log i "Performing post-compression file cleanup" + if [[ "$file" == *".cue" ]]; then + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + local file_path=$(dirname "$(realpath "$file")") + while IFS= read -r line + do + log i "Removing file $file_path/$line" + rm -f "$file_path/$line" + done < <(printf '%s\n' "$cue_bin_files") + log i "Removing file $(realpath $file)" + rm -f $(realpath "$file") + else + log i "Removing file $(realpath $file)" + rm -f "$(realpath "$file")" + fi + else + log i "Compressed file ${file%.*}.$compatible_compression_format not found, skipping original file deletion" + configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "A compressed version of the file was not found, skipping deletion." + fi + fi } find_compatible_compression_format() { @@ -66,7 +89,7 @@ validate_for_chd() { log i "Validating .cue associated .bin files" local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") log i "Associated bin files read:" - log i $(printf '%s\n' "$cue_bin_files") + log i "$(printf '%s\n' "$cue_bin_files")" if [[ ! -z "$cue_bin_files" ]]; then while IFS= read -r line do @@ -96,6 +119,71 @@ validate_for_chd() { fi } +find_compatible_games() { + # The function takes the following arguments, which alter what files are compressed: + # "everything" - Compresses all games found into their compatible formats + # "all" - Compresses a list of user-chosen files into their compatible formats + # "chd" or "zip" or "rvz" - Compresses a list of user-chosen files into the given format + + if [[ -f "$godot_compression_compatible_games" ]]; then + rm -f "$godot_compression_compatible_games" # Godot data transfer temp files + fi + touch "$godot_compression_compatible_games" + + compressable_games_list=() + all_compressable_games=() + games_to_compress=() + target_selection="$1" + + if [[ "$1" == "everything" ]]; then + local compression_format="all" + else + local compression_format="$1" + fi + + if [[ $compression_format == "all" ]]; then + local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d') + else + local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d') + fi + + while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type + do + compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt") + if [[ ! -z $compression_candidates ]]; then + while IFS= read -r game + do + local compatible_compression_format=$(find_compatible_compression_format "$game") + if [[ $compression_format == "chd" ]]; then + if [[ $compatible_compression_format == "chd" ]]; then + all_compressable_games=("${all_compressable_games[@]}" "$game") + compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") + echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games" + fi + elif [[ $compression_format == "zip" ]]; then + if [[ $compatible_compression_format == "zip" ]]; then + all_compressable_games=("${all_compressable_games[@]}" "$game") + compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") + echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games" + fi + elif [[ $compression_format == "rvz" ]]; then + if [[ $compatible_compression_format == "rvz" ]]; then + all_compressable_games=("${all_compressable_games[@]}" "$game") + compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") + echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games" + fi + elif [[ $compression_format == "all" ]]; then + if [[ ! $compatible_compression_format == "none" ]]; then + all_compressable_games=("${all_compressable_games[@]}" "$game") + compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") + echo "${game}"^"$compatible_compression_format" >> "$godot_compression_compatible_games" + fi + fi + done < <(printf '%s\n' "$compression_candidates") + fi + done < <(printf '%s\n' "$compressable_systems_list") +} + cli_compress_single_game() { # This function will compress a single file passed from the CLI arguments # USAGE: cli_compress_single_game $full_file_path @@ -109,26 +197,6 @@ cli_compress_single_game() { if [[ ! $compatible_compression_format == "none" ]]; then log i "$(basename "$file") can be compressed to $compatible_compression_format" compress_game "$compatible_compression_format" "$file" "$system" - if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested - if [[ -f "${file%.*}.$compatible_compression_format" ]]; then - if [[ $(basename "$file") == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do # Remove associated .bin files - log i "Removing original file "$file_path/$line"" - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file - log i "Removing original file $(basename "$file")" - rm -f "$file" - else - log i "Removing original file $(basename "$file")" - rm -f "$file" - fi - else - log w "Compressed version of $(basename "$file") not found, skipping deletion." - fi - fi else log w "$(basename "$file") does not have any compatible compression formats." fi @@ -171,26 +239,6 @@ cli_compress_all_games() { if [[ ! "$compatible_compression_format" == "none" ]]; then log i "$(basename "$file") can be compressed to $compatible_compression_format" compress_game "$compatible_compression_format" "$file" "$system" - if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested - if [[ -f "${file%.*}.$compatible_compression_format" ]]; then - if [[ "$file" == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do # Remove associated .bin files - log i "Removing original file "$file_path/$line"" - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file - log i "Removing original file "$file"" - rm -f $(realpath "$file") - else - log i "Removing original file "$file"" - rm -f $(realpath "$file") - fi - else - log w "Compressed version of $(basename "$file") not found, skipping deletion." - fi - fi else log w "No compatible compression format found for $(basename "$file")" fi diff --git a/functions/configurator_functions.sh b/functions/configurator_functions.sh new file mode 100644 index 00000000..b654105e --- /dev/null +++ b/functions/configurator_functions.sh @@ -0,0 +1,64 @@ +#!/bin/bash + +check_bios_files() { + # This function validates all the BIOS files listed in the $bios_checklist and adds the results to an array called $bios_checked_list which can be used elsewhere + # There is a "basic" and "expert" mode which outputs different levels of data + # USAGE: check_bios_files "mode" + + if [[ -f "$godot_bios_files_checked" ]]; then + rm -f "$godot_bios_files_checked" # Godot data transfer temp files + fi + touch "$godot_bios_files_checked" + + while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc + do + bios_file_found="No" + bios_hash_matched="No" + if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then + bios_file_found="Yes" + if [[ $bios_hash == "Unknown" ]]; then + bios_hash_matched="Unknown" + elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then + bios_hash_matched="Yes" + fi + fi + if [[ "$1" == "basic" ]]; then + bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc") + echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc" >> "$godot_bios_files_checked" # Godot data transfer temp file + else + bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc" "$bios_subdir" "$bios_hash") + echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc"^"$bios_subdir"^"$bios_hash" >> "$godot_bios_files_checked" # Godot data transfer temp file + fi + done < $bios_checklist +} + +find_empty_rom_folders() { + # This function will build an array of all the system subfolders in $roms_folder which are either empty or contain only systeminfo.txt for easy removal + + if [[ -f "$godot_empty_roms_folders" ]]; then + rm -f "$godot_empty_roms_folders" # Godot data transfer temp files + fi + touch "$godot_empty_roms_folders" + + empty_rom_folders_list=() + all_empty_folders=() + + for system in $(find "$roms_folder" -mindepth 1 -maxdepth 1 -type d -printf '%f\n') + do + local dir="$roms_folder/$system" + local files=$(ls -A1 "$dir") + local count=$(ls -A "$dir" | wc -l) + + if [[ $count -eq 0 ]]; then + # Directory is empty + empty_rom_folders_list=("${empty_rom_folders_list[@]}" "false" "$(realpath $dir)") + all_empty_folders=("${all_empty_folders[@]}" "$(realpath $dir)") + echo "$(realpath $dir)" >> "$godot_empty_roms_folders" # Godot data transfer temp file + elif [[ $count -eq 1 ]] && [[ "$(basename "${files[0]}")" == "systeminfo.txt" ]]; then + # Directory contains only systeminfo.txt + empty_rom_folders_list=("${empty_rom_folders_list[@]}" "false" "$(realpath $dir)") + all_empty_folders=("${all_empty_folders[@]}" "$(realpath $dir)") + echo "$(realpath $dir)" >> "$godot_empty_roms_folders" # Godot data transfer temp file + fi + done +} diff --git a/functions/dialogs.sh b/functions/dialogs.sh index 4e611251..3772c7e9 100644 --- a/functions/dialogs.sh +++ b/functions/dialogs.sh @@ -2,6 +2,10 @@ source /app/libexec/functions.sh +# Dialog colors +purple="#a864fc" +blue="#6fbfff" + debug_dialog() { # This function is for displaying commands run by the Configurator without actually running them # USAGE: debug_dialog "command" diff --git a/functions/framework.sh b/functions/framework.sh index 86ae0fbd..92f3b32e 100644 --- a/functions/framework.sh +++ b/functions/framework.sh @@ -39,11 +39,21 @@ set_setting_value() { fi ;; - "rpcs3" | "vita3k" ) # This does not currently work for settings with a $ in them - if [[ -z $current_section_name ]]; then - sed -i 's^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' "$1" - else - sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' "$1" + "rpcs3" | "vita3k" ) + # This does not currently work for settings with a $ in them + + if [[ "$1" =~ (.ini)$ ]]; then # If this is a RPCS3 .ini file + if [[ -z $current_section_name ]]; then + sed -i 's^\^'"$setting_name_to_change"'=.*^'"$setting_name_to_change"'='"$setting_value_to_change"'^' "$1" + else + sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'=^s^\^'"$setting_name_to_change"'=.*^'"$setting_name_to_change"'='"$setting_value_to_change"'^' "$1" + fi + elif [[ "$1" =~ (.yml)$ ]]; then # If this is an YML-based file + if [[ -z $current_section_name ]]; then + sed -i 's^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' "$1" + else + sed -i '\^\['"$current_section_name"'\]^,\^\^'"$setting_name_to_change"'.*^s^\^'"$setting_name_to_change"': .*^'"$setting_name_to_change"': '"$setting_value_to_change"'^' "$1" + fi fi ;; @@ -55,7 +65,9 @@ set_setting_value() { fi ;; - "mame" ) # In this option, $current_section_name is the in the .cfg file. + "mame" ) + # In this option, $current_section_name is the in the .cfg file. + local mame_current_value=$(get_setting_value "$1" "$setting_name_to_change" "$4" "$current_section_name") if [[ "$1" =~ (.ini)$ ]]; then # If this is a MAME .ini file sed -i '\^\^'"$setting_name_to_change"'\s^s^'"$mame_current_value"'^'"$setting_value_to_change"'^' "$1" @@ -84,7 +96,11 @@ get_setting_name() { ;; "rpcs3" | "vita3k" ) - echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?:\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g' + if [[ "$1" =~ (.ini)$ ]]; then # If this is a RPCS3 .ini file + echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?=\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g;s^\\$^^' + elif [[ "$1" =~ (.yml)$ ]]; then # If this is an YML-based file + echo "$current_setting_line" | grep -o -P "^\s*?.*?(?=\s?:\s?)" | sed -e 's/^[ \t]*//;s^\\ ^ ^g' + fi ;; "mame" ) # This only works for mame .ini files, not the .cfg XML files diff --git a/functions/global.sh b/functions/global.sh index 704d7f9f..5ae8c08d 100644 --- a/functions/global.sh +++ b/functions/global.sh @@ -7,12 +7,13 @@ source /app/libexec/checks.sh source /app/libexec/compression.sh source /app/libexec/dialogs.sh source /app/libexec/logger.sh -source /app/libexec/functions.sh +source /app/libexec/other_functions.sh source /app/libexec/multi_user.sh source /app/libexec/framework.sh source /app/libexec/post_update.sh source /app/libexec/prepare_component.sh source /app/libexec/presets.sh +source /app/libexec/configurator_fuctions.sh # Static variables rd_conf="/var/config/retrodeck/retrodeck.cfg" # RetroDECK config file path @@ -52,6 +53,9 @@ pretty_system_names_reference_list="$emuconfigs/defaults/retrodeck/reference_lis # Godot data transfer temp files godot_bios_files_checked="/var/config/retrodeck/godot/godot_bios_files_checked.tmp" +godot_current_preset_settings="/var/config/retrodeck/godot/godot_current_preset_settings.tmp" +godot_compression_compatible_games="/var/config/retrodeck/godot/godot_compression_compatible_games.tmp" +godot_empty_roms_folders="/var/config/retrodeck/godot/godot_empty_roms_folders.tmp" # Config files for emulators with single config files @@ -131,6 +135,11 @@ if [[ ! -d "$rd_logs_folder/ES-DE" ]]; then dir_prep "$rd_logs_folder/ES-DE" "$es_source_logs" fi +# Initialize location of Godot temp data files, if it doesn't exist +if [[ ! -d "/var/config/retrodeck/godot" ]]; then + create_dir "/var/config/retrodeck/godot" +fi + # We moved the lockfile in /var/config/retrodeck in order to solve issue #53 - Remove in a few versions if [[ -f "$HOME/retrodeck/.lock" ]]; then mv "$HOME/retrodeck/.lock" $lockfile diff --git a/functions/logger.sh b/functions/logger.sh index d37dafb6..9c2ea6c3 100755 --- a/functions/logger.sh +++ b/functions/logger.sh @@ -86,11 +86,11 @@ log() { esac # Display the message in the terminal - echo -e "$colored_message" + echo -e "$colored_message" >&2 # Write the log message to the log file if [ ! -f "$logfile" ]; then - echo "$timestamp [WARN] Log file not found in \"$logfile\", creating it" + echo "$timestamp [WARN] Log file not found in \"$logfile\", creating it" >&2 touch "$logfile" fi echo "$log_message" >> "$logfile" diff --git a/functions/functions.sh b/functions/other_functions.sh similarity index 95% rename from functions/functions.sh rename to functions/other_functions.sh index b8ea9953..2c6f9947 100644 --- a/functions/functions.sh +++ b/functions/other_functions.sh @@ -286,36 +286,6 @@ dir_prep() { log i "$symlink is now $real" } -check_bios_files() { - # This function validates all the BIOS files listed in the $bios_checklist and adds the results to an array called bios_checked_list which can be used elsewhere - # There is a "basic" and "expert" mode which outputs different levels of data - # USAGE: check_bios_files "mode" - - rm -f "$godot_bios_files_checked" # Godot data transfer temp files - touch "$godot_bios_files_checked" - - while IFS="^" read -r bios_file bios_subdir bios_hash bios_system bios_desc - do - bios_file_found="No" - bios_hash_matched="No" - if [[ -f "$bios_folder/$bios_subdir$bios_file" ]]; then - bios_file_found="Yes" - if [[ $bios_hash == "Unknown" ]]; then - bios_hash_matched="Unknown" - elif [[ $(md5sum "$bios_folder/$bios_subdir$bios_file" | awk '{ print $1 }') == "$bios_hash" ]]; then - bios_hash_matched="Yes" - fi - fi - if [[ "$1" == "basic" ]]; then - bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc") - echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc" >> "$godot_bios_files_checked" # Godot data transfer temp file - else - bios_checked_list=("${bios_checked_list[@]}" "$bios_file" "$bios_system" "$bios_file_found" "$bios_hash_matched" "$bios_desc" "$bios_subdir" "$bios_hash") - echo "$bios_file"^"$bios_system"^"$bios_file_found"^"$bios_hash_matched"^"$bios_desc"^"$bios_subdir"^"$bios_hash" >> "$godot_bios_files_checked" # Godot data transfer temp file - fi - done < $bios_checklist -} - update_rpcs3_firmware() { create_dir "$roms_folder/ps3/tmp" chmod 777 "$roms_folder/ps3/tmp" @@ -699,7 +669,7 @@ ponzu() { rm -rf "$rdhome/ponzu" } -ponzu_remove(){ +ponzu_remove() { # Call me with yuzu or citra and I will remove them diff --git a/functions/post_update.sh b/functions/post_update.sh index 4ff0c964..3dcc012b 100644 --- a/functions/post_update.sh +++ b/functions/post_update.sh @@ -304,12 +304,34 @@ post_update() { log i "In version 0.8.1b, the following changes were made that required config file updates/reset or other changes to the filesystem:" log i "- ES-DE files were moved inside the retrodeck folder, migrating to the new structure" log i "- Give the user the option to reset Ryujinx, which was not properly initialized in 0.8.0b" + log d "ES-DE files were moved inside the retrodeck folder, migrating to the new structure" dir_prep "$rdhome/ES-DE/collections" "/var/config/ES-DE/collections" dir_prep "$rdhome/ES-DE/gamelists" "/var/config/ES-DE/gamelists" - mv -f "$rdhome/gamelists/"* "$rdhome/ES-DE/gamelists" + log i "Moving ES-DE collections, downloaded_media, gamelist, and themes from \"$rdhome\" to \"$rdhome/ES-DE\"" + set_setting_value "$es_settings" "MediaDirectory" "$rdhome/ES-DE/downloaded_media" "es_settings" + set_setting_value "$es_settings" "UserThemeDirectory" "$rdhome/ES-DE/themes" "es_settings" + mv -f "$rdhome/themes" "$rdhome/ES-DE/themes" && log d "Move of \"$rdhome/themes\" completed" + mv -f "$rdhome/downloaded_media" "$rdhome/ES-DE/downloaded_media" && log d "Move of \"$rdhome/downloaded_media\" completed" + mv -f "$rdhome/gamelists/"* "$rdhome/ES-DE/gamelists" && log d "Move of \"$rdhome/gamelists/\" completed" rm -rf "$rdhome/gamelists" + log i "MAME-SA, migrating samples to the new exposed folder: from \"/var/data/mame/assets/samples\" to \"$bios_folder/mame-sa/samples\"" + create_dir "$bios_folder/mame-sa/samples" + mv -f "/var/data/mame/assets/samples/"* "$bios_folder/mame-sa/samples" + set_setting_value "$mameconf" "samplepath" "$bios_folder/mame-sa/samples" "mame" + + log i "Installing the missing ScummVM assets and renaming \"$mods_folder/RetroArch/ScummVM/themes\" into \"theme\"" + mv -f "$mods_folder/RetroArch/ScummVM/themes" "$mods_folder/RetroArch/ScummVM/theme" + unzip -o "$emuconfigs/retroarch/ScummVM.zip" 'scummvm/extra/*' -d /tmp + unzip -o "$emuconfigs/retroarch/ScummVM.zip" 'scummvm/theme/*' -d /tmp + mv -f /tmp/scummvm/extra "$mods_folder/RetroArch/ScummVM" + mv -f /tmp/scummvm/theme "$mods_folder/RetroArch/ScummVM" + rm -rf /tmp/extra /tmp/theme + + log i "Placing cheats in \"/var/data/mame/cheat\"" + unzip -j -o "$emuconfigs/mame/cheat0264.zip" 'cheat.7z' -d "/var/data/mame/cheat" + log d "Verifying with user if they want to reset Ryujinx" if [[ "$(configurator_generic_question_dialog "RetroDECK 0.8.1b Ryujinx Reset" "In RetroDECK 0.8.0b the Ryujinx emulator was not properly initialized for upgrading users.\nThis would cause Ryujinx to not work properly.\n\nWould you like to reset Ryujinx to default RetroDECK settings now?\n\nIf you have made your own changes to the Ryujinx config, you can decline this reset.")" == "true" ]]; then log d "User agreed to Ryujinx reset" @@ -352,8 +374,9 @@ post_update() { ) | zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Finishing Upgrade" \ - --text="RetroDECK is finishing the upgrade process, please wait.\n\n If it feels like this is taking too much time, please ensure there aren't any windows that unexpectedly slipped into the background and need attention." + --title "RetroDECK - Upgrade Process" \ + --width=400 --height=200 \ + --text="RetroDECK is finishing up the upgrading process, please be patient.\n\nNOTICE - If the process is taking too long:\n\nSome windows might be running in the background that could require your attention: pop-ups from emulators or the upgrade itself that needs user input to continue.\n\n" version=$hard_version conf_write diff --git a/functions/prepare_component.sh b/functions/prepare_component.sh index 26b8c483..a040fa20 100644 --- a/functions/prepare_component.sh +++ b/functions/prepare_component.sh @@ -12,10 +12,12 @@ prepare_component() { action="$1" component=$(echo "$2" | tr '[:upper:]' '[:lower:]') call_source="$3" + component_found="false" log d "Preparing component: \"$component\", action: \"$action\"" if [[ "$component" == "retrodeck" ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Update the paths of all folders in retrodeck.cfg and create them while read -r config_line; do local current_setting_name=$(get_setting_name "$config_line" "retrodeck") @@ -49,9 +51,10 @@ prepare_component() { fi if [[ "$component" =~ ^(es-de|all)$ ]]; then # For use after ESDE-related folders are moved or a reset - log i "--------------------------------" - log i "Prepearing ES-DE" - log i "--------------------------------" + component_found="true" + log i "--------------------------------" + log i "Prepearing ES-DE" + log i "--------------------------------" if [[ "$action" == "reset" ]]; then rm -rf /var/config/ES-DE create_dir /var/config/ES-DE/settings @@ -77,9 +80,10 @@ prepare_component() { fi if [[ "$component" =~ ^(retroarch|all)$ ]]; then - log i "--------------------------------" - log i "Prepearing RetroArch" - log i "--------------------------------" + component_found="true" + log i "--------------------------------" + log i "Prepearing RetroArch" + log i "--------------------------------" if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ $multi_user_mode == "true" ]]; then # Multi-user actions create_dir -d "$multi_user_data_folder/$SteamAppUser/config/retroarch" @@ -88,7 +92,7 @@ prepare_component() { else # Single-user actions create_dir -d /var/config/retroarch dir_prep "$bios_folder" "/var/config/retroarch/system" - dir_prep "$logs_folder/retroarch" "/var/config/retroarch/logs" + dir_prep "$rdhome/logs/retroarch" "/var/config/retroarch/logs" create_dir /var/config/retroarch/shaders/ cp -rf /app/share/libretro/shaders /var/config/retroarch/ dir_prep "$rdhome/shaders/retroarch" "/var/config/retroarch/shaders" @@ -104,17 +108,6 @@ prepare_component() { set_setting_value "$raconf" "screenshot_directory" "$screenshots_folder" "retroarch" set_setting_value "$raconf" "log_dir" "$logs_folder" "retroarch" set_setting_value "$raconf" "rgui_browser_directory" "$roms_folder" "retroarch" - - # Specific Settings for ScummVM core - cp -fv "$emuconfigs/retroarch/scummvm.ini" "$ra_scummvm_conf" - create_dir "$mods_folder/RetroArch/ScummVM/icons" - create_dir "$mods_folder/RetroArch/ScummVM/extra" - create_dir "$mods_folder/RetroArch/ScummVM/themes" - set_setting_value "$ra_scummvm_conf" "iconspath" "$mods_folder/RetroArch/ScummVM/icons" "libretro_scummvm" "scummvm" - set_setting_value "$ra_scummvm_conf" "extrapath" "$mods_folder/RetroArch/ScummVM/extra" "libretro_scummvm" "scummvm" - set_setting_value "$ra_scummvm_conf" "themepath" "$mods_folder/RetroArch/ScummVM/themes" "libretro_scummvm" "scummvm" - set_setting_value "$ra_scummvm_conf" "savepath" "$saves_folder/scummvm" "libretro_scummvm" "scummvm" - set_setting_value "$ra_scummvm_conf" "browser_lastpath" "$roms_folder/scummvm" "libretro_scummvm" "scummvm" fi # Shared actions @@ -161,6 +154,24 @@ prepare_component() { log i "-----------------------------------------------------------" log i "Copying \"/app/retrodeck/extras/Amiga/capsimg.so\" in \"$bios_folder/capsimg.so\"" cp -f "/app/retrodeck/extras/Amiga/capsimg.so" "$bios_folder/capsimg.so" + + # ScummVM + log i "-----------------------------------------------------------" + log i "Prepearing ScummVM LIBRETRO" + log i "-----------------------------------------------------------" + cp -fv "$emuconfigs/retroarch/scummvm.ini" "$ra_scummvm_conf" + create_dir "$mods_folder/RetroArch/ScummVM/icons" + log i "Installing ScummVM assets" + unzip -o "$emuconfigs/retroarch/ScummVM.zip" 'scummvm/extra/*' -d /tmp + unzip -o "$emuconfigs/retroarch/ScummVM.zip" 'scummvm/theme/*' -d /tmp + mv -f /tmp/scummvm/extra "$mods_folder/RetroArch/ScummVM" + mv -f /tmp/scummvm/theme "$mods_folder/RetroArch/ScummVM" + rm -rf /tmp/extra /tmp/theme + set_setting_value "$ra_scummvm_conf" "iconspath" "$mods_folder/RetroArch/ScummVM/icons" "libretro_scummvm" "scummvm" + set_setting_value "$ra_scummvm_conf" "extrapath" "$mods_folder/RetroArch/ScummVM/extra" "libretro_scummvm" "scummvm" + set_setting_value "$ra_scummvm_conf" "themepath" "$mods_folder/RetroArch/ScummVM/theme" "libretro_scummvm" "scummvm" + set_setting_value "$ra_scummvm_conf" "savepath" "$saves_folder/scummvm" "libretro_scummvm" "scummvm" + set_setting_value "$ra_scummvm_conf" "browser_lastpath" "$roms_folder/scummvm" "libretro_scummvm" "scummvm" dir_prep "$texture_packs_folder/RetroArch-Mesen" "/var/config/retroarch/system/HdPacks" dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache" @@ -204,6 +215,7 @@ prepare_component() { fi if [[ "$component" =~ ^(citra|citra-emu|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "------------------------" log i "Prepearing CITRA" @@ -249,6 +261,7 @@ prepare_component() { fi if [[ "$component" =~ ^(cemu|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "----------------------" log i "Prepearing CEMU" @@ -276,6 +289,7 @@ prepare_component() { fi if [[ "$component" =~ ^(dolphin|dolphin-emu|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "----------------------" log i "Prepearing DOLPHIN" @@ -329,6 +343,7 @@ prepare_component() { fi if [[ "$component" =~ ^(duckstation|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "------------------------" log i "Prepearing DUCKSTATION" @@ -374,6 +389,7 @@ prepare_component() { fi if [[ "$component" =~ ^(melonds|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "----------------------" log i "Prepearing MELONDS" @@ -412,6 +428,7 @@ prepare_component() { fi if [[ "$component" =~ ^(pcsx2|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "----------------------" log i "Prepearing PCSX2" @@ -456,6 +473,7 @@ prepare_component() { fi if [[ "$component" =~ ^(pico8|pico-8|all)$ ]]; then + component_found="true" if [[ ("$action" == "reset") || ("$action" == "postmove") ]]; then dir_prep "$bios_folder/pico-8" "$HOME/.lexaloffle/pico-8" # Store binary and config files together. The .lexaloffle directory is a hard-coded location for the PICO-8 config file, cannot be changed dir_prep "$roms_folder/pico8" "$bios_folder/pico-8/carts" # Symlink default game location to RD roms for cleanliness (this location is overridden anyway by the --root_path launch argument anyway) @@ -466,6 +484,7 @@ prepare_component() { fi if [[ "$component" =~ ^(ppsspp|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "------------------------" log i "Prepearing PPSSPPSDL" @@ -494,6 +513,7 @@ prepare_component() { fi if [[ "$component" =~ ^(primehack|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "----------------------" log i "Prepearing Primehack" @@ -537,6 +557,7 @@ prepare_component() { fi if [[ "$component" =~ ^(rpcs3|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "------------------------" log i "Prepearing RPCS3" @@ -573,6 +594,7 @@ prepare_component() { fi if [[ "$component" =~ ^(ryujinx|all)$ ]]; then + component_found="true" # NOTE: for techincal reasons the system folder of Ryujinx IS NOT a sumlink of the bios/switch/keys as not only the keys are located there # When RetroDECK starts there is a "manage_ryujinx_keys" function that symlinks the keys only in Rryujinx/system. if [[ "$action" == "reset" ]]; then # Run reset-only commands @@ -617,6 +639,7 @@ prepare_component() { fi if [[ "$component" =~ ^(yuzu|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "----------------------" log i "Prepearing YUZU" @@ -670,6 +693,7 @@ prepare_component() { fi if [[ "$component" =~ ^(xemu|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "------------------------" log i "Prepearing XEMU" @@ -714,6 +738,7 @@ prepare_component() { fi if [[ "$component" =~ ^(vita3k|all)$ ]]; then + component_found="true" if [[ "$action" == "reset" ]]; then # Run reset-only commands log i "----------------------" log i "Prepearing Vita3K" @@ -738,6 +763,7 @@ prepare_component() { fi if [[ "$component" =~ ^(mame|all)$ ]]; then + component_found="true" # TODO: do a proper script # This is just a placeholder script to test the emulator's flow log i "----------------------" @@ -758,7 +784,7 @@ prepare_component() { create_dir "/var/data/mame/plugin-data" create_dir "/var/data/mame/hash" - create_dir "/var/data/mame/assets/samples" + create_dir "$bios_folder/mame-sa/samples" create_dir "/var/data/mame/assets/artwork" create_dir "/var/data/mame/assets/fonts" create_dir "/var/data/mame/cheat" @@ -799,10 +825,15 @@ prepare_component() { set_setting_value "$mameconf" "state_directory" "$states_folder/mame-sa" "mame" set_setting_value "$mameconf" "snapshot_directory" "$screenshots_folder/mame-sa" "mame" set_setting_value "$mameconf" "diff_directory" "$saves_folder/mame-sa/diff" "mame" + set_setting_value "$mameconf" "samplepath" "$bios_folder/mame-sa/samples" "mame" + + log i "Placing cheats in \"/var/data/mame/cheat\"" + unzip -j -o "$emuconfigs/mame/cheat0264.zip" 'cheat.7z' -d "/var/data/mame/cheat" fi if [[ "$component" =~ ^(gzdoom|all)$ ]]; then + component_found="true" # TODO: do a proper script # This is just a placeholder script to test the emulator's flow log i "----------------------" @@ -823,6 +854,7 @@ prepare_component() { fi if [[ "$component" =~ ^(boilr|all)$ ]]; then + component_found="true" log i "----------------------" log i "Prepearing BOILR" log i "----------------------" @@ -831,7 +863,7 @@ prepare_component() { cp -fvr "/app/libexec/steam-sync/config.toml" "/var/config/boilr" fi - if [[ ! "$component" =~ ^(retrodeck|es-de|retroarch|citra|citra-emu|cemu|dolphin|dolphin-emu|duckstation|melonds|melonDS|pcsx2|pico8|pico-8|ppsspp|primehack|rpcs3|ryujinx|yuzu|xemu|vita3k|mame|gzdoom|boilr|)$ ]]; then + if [[ $component_found="false" ]]; then log e "Supplied component $component not found, not resetting" fi diff --git a/functions/presets.sh b/functions/presets.sh index c5d8af4a..ce384307 100644 --- a/functions/presets.sh +++ b/functions/presets.sh @@ -4,28 +4,7 @@ change_preset_dialog() { # This function will build a list of all systems compatible with a given preset, their current enable/disabled state and allow the user to change one or more # USAGE: change_preset_dialog "$preset" - local preset="$1" - pretty_preset_name=${preset//_/ } # Preset name prettification - pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification - local current_preset_settings=() - local current_enabled_systems=() - local current_disabled_systems=() - local changed_systems=() - local changed_presets=() - local section_results=$(sed -n '/\['"$preset"'\]/, /\[/{ /\['"$preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d') - - while IFS= read -r config_line - do - system_name=$(get_setting_name "$config_line" "retrodeck") - all_systems=("${all_systems[@]}" "$system_name") - system_value=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$preset") - if [[ "$system_value" == "true" ]]; then - current_enabled_systems=("${current_enabled_systems[@]}" "$system_name") - elif [[ "$system_value" == "false" ]]; then - current_disabled_systems=("${current_disabled_systems[@]}" "$system_name") - fi - current_preset_settings=("${current_preset_settings[@]}" "$system_value" "$(make_name_pretty $system_name)" "$system_name") - done < <(printf '%s\n' "$section_results") + build_preset_list_options "$1" choice=$(zenity \ --list --width=1200 --height=720 \ @@ -42,7 +21,56 @@ change_preset_dialog() { if [[ ! -z $choice || "$rc" == 0 ]]; then ( - IFS="," read -ra choices <<< "$choice" + make_preset_changes + ) | + zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ + --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ + --title "RetroDECK Configurator Utility - Presets Configuration" \ + --text="Setting up your presets, please wait..." + else + echo "No choices made" + fi +} + +build_preset_list_options() { + # This function will build a list of all the systems available for a given preset + # The list will be generated into a Godot temp file and the variable $current_preset_settings + + if [[ -f "$godot_current_preset_settings" ]]; then + rm -f "$godot_current_preset_settings" # Godot data transfer temp files + fi + touch "$godot_current_preset_settings" + + preset="$1" + pretty_preset_name=${preset//_/ } # Preset name prettification + pretty_preset_name=$(echo $pretty_preset_name | awk '{for(i=1;i<=NF;i++){$i=toupper(substr($i,1,1))substr($i,2)}}1') # Preset name prettification + current_preset_settings=() + current_enabled_systems=() + current_disabled_systems=() + changed_systems=() + changed_presets=() + local section_results=$(sed -n '/\['"$preset"'\]/, /\[/{ /\['"$preset"'\]/! { /\[/! p } }' $rd_conf | sed '/^$/d') + + while IFS= read -r config_line + do + system_name=$(get_setting_name "$config_line" "retrodeck") + all_systems=("${all_systems[@]}" "$system_name") + system_value=$(get_setting_value "$rd_conf" "$system_name" "retrodeck" "$preset") + if [[ "$system_value" == "true" ]]; then + current_enabled_systems=("${current_enabled_systems[@]}" "$system_name") + elif [[ "$system_value" == "false" ]]; then + current_disabled_systems=("${current_disabled_systems[@]}" "$system_name") + fi + current_preset_settings=("${current_preset_settings[@]}" "$system_value" "$(make_name_pretty $system_name)" "$system_name") + echo "$system_value"^"$(make_name_pretty $system_name)"^"$system_name" >> "$godot_current_preset_settings" + done < <(printf '%s\n' "$section_results") +} + + +make_preset_changes() { + # This function will take an array $choices, which contains the names of systems that have been enabled for this preset and enable them in the backend + + IFS="," read -ra choices <<< "$choice" for emulator in "${all_systems[@]}"; do if [[ " ${choices[*]} " =~ " ${emulator} " && ! " ${current_enabled_systems[*]} " =~ " ${emulator} " ]]; then changed_systems=("${changed_systems[@]}" "$emulator") @@ -71,14 +99,6 @@ change_preset_dialog() { for emulator in "${changed_systems[@]}"; do build_preset_config $emulator ${changed_presets[*]} done - ) | - zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ - --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ - --title "RetroDECK Configurator Utility - Presets Configuration" \ - --text="Setting up your presets, please wait..." - else - echo "No choices made" - fi } build_preset_config() { @@ -128,7 +148,7 @@ build_preset_config() { create_dir "$(realpath "$(dirname "$read_target_file")")" echo "$read_setting_name = \""$new_setting_value"\"" > "$read_target_file" else - if [[ -z $(grep "$read_setting_name" "$read_target_file") ]]; then + if [[ -z $(grep -o -P "^$read_setting_name\b" "$read_target_file") ]]; then add_setting "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section" else set_setting_value "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section" diff --git a/net.retrodeck.retrodeck.appdata.xml b/net.retrodeck.retrodeck.appdata.xml index 4a0d7163..395edded 100644 --- a/net.retrodeck.retrodeck.appdata.xml +++ b/net.retrodeck.retrodeck.appdata.xml @@ -67,22 +67,32 @@ GPL-3.0 CC0-1.0 - + https://github.com/XargonWan/RetroDECK/releases/tag/0.8.1b

Changes:

    +
  • All emulators updated
  • PREPARE_COMPONENT: now the choice is passed lowercased so the script don't have to check for the possible casings, this should fix the issue where GZDoom couldn't be reset as it was expecting both GZDOOM or gzdoom.
  • -
  • ES-DE: gamelists are now moved to retrodeck/ES-DE/gamelist (previously was retrodeck/gamelist)
  • +
  • ES-DE: downloaded_media, gamelist, and themes are now moved to the new retrodeck/ES-DE (previously was retrodeck)
  • ES-DE: custom collections are now located in retrodeck/ES-DE/collections, this prevents to be destroyed by a reset
  • LOGGER: version notes are no more outputed in the terminal or in the logs
  • +
  • WORKFLOWS: added RetroDECK.flatpak.sha files
  • WORKFLOWS: disabled nightly builds (was broken)
  • FRAMEWORK: now the PR builds are recognized same as cooker builds
  • FRAMEWORK: now there is a warning to check background windows, useful when installing RCPS3 firmware as some users were stuck on that screen without noticing the windows in the backgrounds
  • +
  • COOKER_UPDATER: added the hash check before uninstalling the flatpak
  • HELPER_FILES: updated links pointing to the new wiki
  • +
  • MAME-SA: added cheats
  • RYUJINX: added an helper file to specify how to install the firmware (not copying it in the folder)
  • -
  • CITRA_LIBRETRO: upscaled to 2x (was 4x but was too much), set system as "New 3DS"
  • +
  • RPCS3: included the confirm on quit preset, that can be enabled or disabled trough configurator like the other emulators
  • RETROARCH: fixed an issue where if a zip contained more than the game files it failed to load the game
  • +
  • CITRA_LIBRETRO: upscaled to 2x (was 4x but was too much), set system as "New 3DS"
  • +
  • GW_LIBRETRO: Handheld Electronic (GW) Libretro is now the defaulted Game And Watch emulator (due to a bug)
  • +
  • MESEN_LIBRETRO: enabled FDS disk auto load
  • +
  • SCUMMVM_LIBRETRO: provided assets
  • +
  • BIOS_CHECKER: added bios support for 3DO, GB, GBC, GBA, Neo Geo CD
  • +
  • BIOS_CHECKER: added more missing hashes

Known issues:

    diff --git a/net.retrodeck.retrodeck.yml b/net.retrodeck.retrodeck.yml index 58a0ab63..229c52ec 100644 --- a/net.retrodeck.retrodeck.yml +++ b/net.retrodeck.retrodeck.yml @@ -22,7 +22,7 @@ finish-args: - --talk-name=org.freedesktop.login1.Manager - --filesystem=xdg-run/app/com.discordapp.Discord:create - --filesystem=xdg-config/gtk-3.0:ro - - --env=QT_QPA_PLATFORM=wayland-egl;wayland;xcb + - --env=QT_QPA_PLATFORM=wayland;wayland-egl;xcb # Dolphin - --allow=bluetooth # It allows an SDL application to specify its window class, which can be useful for window managers and desktop environments to identify and group similar windows @@ -70,7 +70,7 @@ modules: # # UPDATE STEPS FOR MAIN: # [ ] Update the VERSION variable on line containing "VERSION=THISBRANCH" - # [x] Update the appdata.xml with the version number and notes + # [ ] Update the appdata.xml with the version number and notes # - name: version-initialization buildsystem: simple @@ -162,20 +162,6 @@ modules: url: https://ftp.osuosl.org/pub/blfs/conglomeration/libgudev/libgudev-237.tar.xz sha256: 0d06b21170d20c93e4f0534dbb9b0a8b4f1119ffb00b4031aaeb5b9148b686aa - # # - # DEPRECATED IN FAVOR OF COMPILED MAME TOOL # - # # - # - name: chdman-tool - # buildsystem: simple - # build-commands: - # - cmake -B . -G Ninja - # - cmake --build . - # - cp chdman /app/bin - # sources: - # - type: git - # url: https://github.com/CharlesThobe/chdman.git - # commit: f7cadf1720cbeba8a14f2685830ff424a0c7f6cd - - name: rclone buildsystem: simple build-commands: @@ -224,6 +210,7 @@ modules: url: https://github.com/mikefarah/yq/releases/download/v4.33.3/yq_linux_amd64 sha256: 4ee662847c588c3ef2fec8bfb304e8739e3dbaba87ccb9a608d691c88f5b64dc + # dependency of: CEMU - name: glslang buildsystem: cmake-ninja config-opts: @@ -236,21 +223,13 @@ modules: - /lib/cmake sources: - type: archive - url: https://github.com/KhronosGroup/glslang/archive/14.0.0.tar.gz - sha256: 80bbb916a23e94ea9cbfb1acb5d1a44a7e0c9613bcf5b5947c03f2273bdc92b0 + url: https://github.com/KhronosGroup/glslang/archive/14.2.0.tar.gz + sha256: 14a2edbb509cb3e51a9a53e3f5e435dbf5971604b4b833e63e6076e8c0a997b5 x-checker-data: type: anitya stable-only: true project-id: 205796 url-template: https://github.com/KhronosGroup/glslang/archive/$version.tar.gz - # - type: git - # url: https://github.com/KhronosGroup/SPIRV-Tools.git - # tag: sdk-1.3.261.1 - # dest: External/spirv-tools - # - type: git - # url: https://github.com/KhronosGroup/SPIRV-Headers.git - # tag: sdk-1.3.261.1 - # dest: External/spirv-tools/external/spirv-headers # enables motion controls on non-wii controllers (switch, ps4, etc) # dependency of: DOLPHIN, RPCS3 @@ -260,16 +239,20 @@ modules: config-opts: - -Dtests=disabled - -Ddocumentation=disabled + cleanup: + - /bin + - /include + - /lib/pkgconfig + - /share sources: - type: archive - url: https://www.freedesktop.org/software/libevdev/libevdev-1.13.1.tar.xz - sha256: 06a77bf2ac5c993305882bc1641017f5bec1592d6d1b64787bad492ab34f2f36 + url: https://www.freedesktop.org/software/libevdev/libevdev-1.13.2.tar.xz + sha256: 3eca86a6ce55b81d5bce910637fc451c8bbe373b1f9698f375c7f1ad0de3ac48 x-checker-data: type: anitya project-id: 20540 stable-only: true url-template: https://www.freedesktop.org/software/libevdev/libevdev-$version.tar.xz - # dependency of: CEMU - name: rapidjson buildsystem: cmake-ninja @@ -331,10 +314,17 @@ modules: # dependency of: XEMU, MelonDS - name: libslirp buildsystem: meson + cleanup: + - /include sources: - - type: git - url: https://gitlab.freedesktop.org/slirp/libslirp.git - tag: v4.7.0 + - type: archive + url: https://gitlab.freedesktop.org/slirp/libslirp/-/archive/v4.8.0/libslirp-v4.8.0.tar.gz + sha256: 2a98852e65666db313481943e7a1997abff0183bd9bea80caec1b5da89fda28c + x-checker-data: + type: anitya + project-id: 96796 + stable-only: true + url-template: https://gitlab.freedesktop.org/slirp/libslirp/-/archive/v$version/libslirp-v$version.tar.gz # dependency of: CEMU (1.0.26), DOLPHIN (1.0.27) - name: libusb @@ -357,7 +347,6 @@ modules: # ES-DE - START # https://gitlab.com/es-de/emulationstation-de - #This is disabled because we added the extension (line 11), check if the videos are ok. - name: ffmpeg config-opts: - --disable-static @@ -692,12 +681,12 @@ modules: - ln -s "${FLATPAK_DEST}/pcsx2-qt/usr/bin/pcsx2-qt" "${FLATPAK_DEST}/bin/pcsx2-qt" sources: - type: file - url: https://github.com/PCSX2/pcsx2/releases/download/v1.7.5645/pcsx2-v1.7.5645-linux-appimage-x64-Qt.AppImage - sha256: dcd11469a91d8daa57fe46719a968e73ed282d81925879aca9393527f8b695fd + url: https://github.com/PCSX2/pcsx2/releases/download/v1.7.5900/pcsx2-v1.7.5900-linux-appimage-x64-Qt.AppImage + sha256: a4012fbdd175536cac99ef7f0b5fb65aa8303b4c5b8cc31918a05341d61bbb26 # PCSX2 - END - # Dolphin - START + # Dolphin - START - FROZEN UNTIL KDE 6.7 UPDATE # https://github.com/flathub/org.DolphinEmu.dolphin-emu # WHEN UPADTING: remember to update rd-submodules/dolphin contents @@ -822,8 +811,8 @@ modules: sources: - type: git url: https://github.com/xemu-project/xemu.git - tag: v0.7.120 - commit: 94d826a4f125d755d6d37069ad7084bfde33d650 + tag: v0.7.126 + commit: b2b6a98d5ea21970cd2436a1912230f4b97c5e03 x-checker-data: type: json url: https://api.github.com/repos/xemu-project/xemu/releases/latest @@ -862,7 +851,7 @@ modules: # MELONDS - END - # RPCS3 - START + # RPCS3 - START - FROZEN UNTIL KDE 6.7 UPDATE # https://github.com/flathub/net.rpcs3.RPCS3 - name: rpcs3 @@ -913,7 +902,7 @@ modules: # RPCS3 - END - # PRIMEHACK - START + # PRIMEHACK - START - FROZEN UNTIL KDE 6.7 UPDATE # https://github.com/flathub/io.github.shiiion.primehack - name: primehack @@ -955,7 +944,7 @@ modules: # # PRIMEHACK - END - # Duckstation-AppImage - START + # Duckstation-AppImage - START - AUTOUPDATED # https://github.com/stenzek/duckstation/releases/tag/preview - name: Duckstation-AppImage @@ -1001,8 +990,8 @@ modules: - /lib/cmake sources: - type: archive - url: https://boostorg.jfrog.io/artifactory/main/release/1.84.0/source/boost_1_84_0.tar.bz2 - sha256: cc4b893acf645c9d4b698e9a0f08ca8846aa5d6c68275c14c3e7949c24109454 + url: https://boostorg.jfrog.io/artifactory/main/release/1.85.0/source/boost_1_85_0.tar.bz2 + sha256: 7009fe1faa1697476bdc7027703a2badb84e849b7b0baad5086b087b971f8617 x-checker-data: type: anitya project-id: 6845 @@ -1058,8 +1047,8 @@ modules: - /share sources: - type: archive - url: https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.4/wxWidgets-3.2.4.tar.bz2 - sha256: 0640e1ab716db5af2ecb7389dbef6138d7679261fbff730d23845ba838ca133e + url: https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.5/wxWidgets-3.2.5.tar.bz2 + sha256: 0ad86a3ad3e2e519b6a705248fc9226e3a09bbf069c6c692a02acf7c2d1c6b51 x-checker-data: type: anitya project-id: 5150 @@ -1079,8 +1068,21 @@ modules: x-checker-data: type: git tag-pattern: ^v([\d.]+-\d+)$ - tag: v2.0-73 - commit: 241915e1a6bfd92e4ffd0d6961a178335300e83f + tag: v2.0-86 + commit: 1672f969bbc4a683e4a852aa2e145c1e6f9f68e6 + disable-submodules: true + - type: git + url: https://github.com/mozilla/cubeb + commit: 6c1a6e151c1f981a2800d40af7c041cfcccc710e + dest: dependencies/cubeb + - type: git + url: https://github.com/Exzap/ZArchive + dest: dependencies/ZArchive + tag: v0.1.2 + - type: git + url: https://github.com/ocornut/imgui + dest: dependencies/imgui + commit: f65bcf481ab34cd07d3909aab1479f409fa79f2f - type: shell commands: - sed "s/set(EXPERIMENTAL_VERSION.*/set(EXPERIMENTAL_VERSION \"$(git describe @@ -1128,7 +1130,7 @@ modules: # Cemu - END - # Vita3K - START + # Vita3K - START - AUTOUPDATED - name: vita3k buildsystem: simple @@ -1146,7 +1148,7 @@ modules: sha256: VITA3KSHAPLACEHOLDER - type: file path: res/retrodeck.png - + # Vita3K - END # SOLARUS - START @@ -1233,8 +1235,8 @@ modules: ln -sv ${FLATPAK_DEST}/ryujinx/Ryujinx ${FLATPAK_DEST}/bin/Ryujinx.sh sources: - type: file - url: https://github.com/Ryujinx/release-channel-master/releases/download/1.1.1247/ryujinx-1.1.1247-linux_x64.tar.gz - sha256: c929a17b3fe819b155b1126ae5d255e71c986c0be257c92fbbae967e5070e51a + url: https://github.com/Ryujinx/release-channel-master/releases/download/1.1.1330/ryujinx-1.1.1330-linux_x64.tar.gz + sha256: 1e9158a3f55ff128e089ac3778dfb35127f2cab9d59bc52b5fe63c7b7ac2f6cb # Ryujinx Appimage - END diff --git a/automation_tools/flatpak_build_bundle_persistent.sh b/old/automation_tools/flatpak_build_bundle_persistent.sh similarity index 100% rename from automation_tools/flatpak_build_bundle_persistent.sh rename to old/automation_tools/flatpak_build_bundle_persistent.sh diff --git a/automation_tools/flatpak_build_download_only_persistent.sh b/old/automation_tools/flatpak_build_download_only_persistent.sh similarity index 100% rename from automation_tools/flatpak_build_download_only_persistent.sh rename to old/automation_tools/flatpak_build_download_only_persistent.sh diff --git a/automation_tools/flatpak_build_only_persistent.sh b/old/automation_tools/flatpak_build_only_persistent.sh similarity index 100% rename from automation_tools/flatpak_build_only_persistent.sh rename to old/automation_tools/flatpak_build_only_persistent.sh diff --git a/.github/workflows/cooker-selfhosted-persistent.yml b/old/disabled-workflows/cooker-selfhosted-persistent.yml similarity index 100% rename from .github/workflows/cooker-selfhosted-persistent.yml rename to old/disabled-workflows/cooker-selfhosted-persistent.yml diff --git a/old/disabled-workflows/cooker-selfhosted.yml b/old/disabled-workflows/cooker-selfhosted.yml index 2931fac4..4ffb693a 100644 --- a/old/disabled-workflows/cooker-selfhosted.yml +++ b/old/disabled-workflows/cooker-selfhosted.yml @@ -1,32 +1,31 @@ name: "Build cooker" on: - # push: - # branches: - # - cooker* - # - feat* - # paths: - # - '.github/workflows/**' - # - 'automation_tools/**' - # - 'emu-configs/**' - # - 'es-configs/**' - # - 'functions/**' - # - 'rd-submodules/**' - # - '*.sh' - # - 'net.retrodeck.retrodeck.yml' - # - 'net.retrodeck.retrodeck.appdata.xml' - # pull_request: - # branches: - # - cooker* + push: + branches: + - cooker* + - feat* + paths: + - '.github/workflows/**' + - 'automation_tools/**' + - 'emu-configs/**' + - 'es-configs/**' + - 'functions/**' + - 'rd-submodules/**' + - '*.sh' + - 'net.retrodeck.retrodeck.yml' + - 'net.retrodeck.retrodeck.appdata.xml' + pull_request: + branches: + - cooker* # Italy (CET): 11:00 PM # Japan (JST): 7:00 AM - schedule: - - cron: '0 22 * * *' + # schedule: + # - cron: '0 22 * * *' workflow_dispatch: - jobs: Building_RetroDECK: @@ -49,6 +48,33 @@ jobs: - name: Generate cooker build ID run: "/bin/bash ${GITHUB_WORKSPACE}/automation_tools/cooker_build_id.sh" + - name: Get branch name + id: branch_name + run: echo "BRANCH_NAME=$(echo $GITHUB_REF | sed 's|refs/heads/||')" >> $GITHUB_ENV + + # if it's a feature branch it will not marked as "latest" cooker version + - name: "Set makeLatest (cooker only)" + run: | + if [[ "$BRANCH_NAME" == 'feat/'* || "$BRANCH_NAME" == 'refs/'* ]]; then + echo "MAKE_LATEST=false" >> $GITHUB_ENV + else + echo "MAKE_LATEST=true" >> $GITHUB_ENV + fi + + # if the branch is coming from a PR the tag should be manually built + - name: "Generate version tag" + run: | + if [[ "$BRANCH_NAME" == 'refs/'* ]]; then + pr_number=$(echo ${{env.BRANCH_NAME}} | awk -F'/' '{print $3}') + source_branch=$(curl -s "https://api.github.com/repos/XargonWan/RetroDECK/pulls/$pr_number" | jq -r '.head.ref') + source_branch=${source_branch//\//-} + echo "[DEBUG] source branch is: $source_branch" + echo "TAG=PR-$pr_number-$source_branch-${{ env.buildid }}" >> $GITHUB_ENV + else + echo "TAG=${{env.BRANCH_NAME}}-${{ env.buildid }}" >> $GITHUB_ENV + fi + echo "Version TAG: ${{ env.TAG }}" + # backing up manifest in case download fails and hashes must be recalculated - name: Manifest backup run: "cp ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml ${GITHUB_WORKSPACE}/net.retrodeck.retrodeck.yml.bak" @@ -109,23 +135,10 @@ jobs: id: commits continue-on-error: true - - name: Get branch name - id: branch_name - run: echo "BRANCH_NAME=$(echo $GITHUB_REF | sed 's|refs/heads/||')" >> $GITHUB_ENV - - # if it's a feature branch it will not marked as "latest" cooker version - - name: "Set makeLatest (cooker only)" - run: | - if [[ "$BRANCH_NAME" == 'feat/'* ]]; then - echo "MAKE_LATEST=false" >> $GITHUB_ENV - else - echo "MAKE_LATEST=true" >> $GITHUB_ENV - fi - - name: Publish the flatpak in a new cooker release uses: ncipollo/release-action@v1 with: - tag: "${{env.BRANCH_NAME}}-${{ env.buildid }}" + tag: "${{env.TAG}}" body: | # Release Notes (Cooker) This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}. @@ -139,7 +152,7 @@ jobs: Cooker channel is provided for the community to test fixes and explore new functionality. Please DO NOT open issues or ask support on this build. - artifacts: "RetroDECK-cooker.flatpak,RetroDECK-Artifact.tar.gz" + artifacts: "RetroDECK-cooker.flatpak,RetroDECK-cooker.flatpak.sha,RetroDECK-Artifact.tar.gz" allowUpdates: true makeLatest: ${{env.MAKE_LATEST}} # if it's a feat branch is not considered the latest build token: ${{ secrets.TRIGGER_BUILD_TOKEN }} @@ -154,3 +167,53 @@ jobs: path: RetroDECK-cooker.flatpak continue-on-error: true + # - name: Upload RetroDECK-cooker.flatpak to Gitea Release + # run: | + # # Set variables for Gitea host, organization, repository, access token, and release details + # GITEA_HOST="repo.retrodeck.net" + # ORGANIZATION="RetroDECK" + # REPO="RetroDECK-cooker" + # GITEA_TOKEN="${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }}" + # RELEASE_NAME="RetroDECK ${{env.TAG}}" + # TAG="${{env.TAG}}" + # RELEASE_BODY="# Release Notes (Cooker) + # This is a cooker snapshot based on the commit: ${{ github.event.repository.full_name }}@${{github.sha}}. + # On branch [${{env.BRANCH_NAME}}](https://repo.retrodeck.net/RetroDECK/RetroDECK/src/branch/${{env.BRANCH_NAME}}). + + # ## Commits since last release + # ${{ steps.commits.outputs.commits }} + + # For the full release note for this build please refer to the channel [#BETA-TESTING](https://discord.gg/WDc5C9YWMx) on our Discord server. + + # Cooker channel is provided for the community to test fixes and explore new functionality. + # Please DO NOT open issues or ask support on this build." + + # # Create a release using curl and capture the release ID + # release_response=$(curl -X POST \ + # -H "Authorization: token ${GITEA_TOKEN}" \ + # -H "Content-Type: application/json" \ + # -d "{\"tag_name\":\"$TAG\",\"name\":\"$RELEASE_NAME\",\"body\":\"$RELEASE_BODY\"}" \ + # "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases") + + # # Extract the release ID from the response + # release_id=$(echo $release_response | jq -r '.id') + + # # Upload artifacts + # curl -X POST \ + # -H "Authorization: token ${GITEA_TOKEN}" \ + # -H "Content-Type: multipart/form-data" \ + # -F "attachment=@RetroDECK-cooker.flatpak" \ + # "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak" + + # # Upload artifacts sha + # curl -X POST \ + # -H "Authorization: token ${GITEA_TOKEN}" \ + # -H "Content-Type: multipart/form-data" \ + # -F "attachment=@RetroDECK-cooker.flatpak.sha" \ + # "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak.sha" + + # curl -X POST \ + # -H "Authorization: token ${GITEA_TOKEN}" \ + # -H "Content-Type: multipart/form-data" \ + # -F "attachment=@RetroDECK-Artifact.tar.gz" \ + # "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-Artifact.tar.gz" diff --git a/other_licenses.txt b/other_licenses.txt new file mode 100644 index 00000000..1b8073a9 --- /dev/null +++ b/other_licenses.txt @@ -0,0 +1,27 @@ +All Licenses of the projects we are using are listed on the wiki: +https://retrodeck.readthedocs.io/en/latest/wiki_about/donations-licenses/ + +If we have made some linkage errors or your license needs to be included in the projects github page please contact the RetroDECK Team on Discord or Matrix. + +--- + +Freedoom +https://github.com/freedoom/freedoom?tab=License-1-ov-file#readme + +Copyright © 2001-2024 Contributors to the Freedoom project. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + + Neither the name of the Freedoom project nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +For a list of contributors to the Freedoom project, see the file CREDITS. + +--- + + diff --git a/res/extra_splashes/rd-pride.svg b/res/extra_splashes/rd-pride.svg new file mode 100644 index 00000000..4c473f49 --- /dev/null +++ b/res/extra_splashes/rd-pride.svg @@ -0,0 +1,141 @@ + + diff --git a/res/icon-pride.png b/res/icon-pride.png new file mode 100644 index 00000000..afbde32a Binary files /dev/null and b/res/icon-pride.png differ diff --git a/res/icon-pride.svg b/res/icon-pride.svg new file mode 100644 index 00000000..afb01d39 --- /dev/null +++ b/res/icon-pride.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + diff --git a/retrodeck.sh b/retrodeck.sh index d9bfc95c..52cd7697 100644 --- a/retrodeck.sh +++ b/retrodeck.sh @@ -183,12 +183,6 @@ if [[ $update_check == "true" ]]; then log i "You're running the latest version" fi -# THIS IS A ONE-OFF FORCED REFRESH OF RETRODECK CONTROLLER PROFILES IN A 0.7.6b VERSION REFRESH - REMOVE BEFORE NEXT VERSION RELEASE -if [[ -f "$HOME/.steam/steam/controller_base/templates/RetroDECK_controller_config.vdf" ]]; then # If RetroDECK controller profile has been previously installed - install_retrodeck_controller_profile -fi -# REMOVE BEFORE NEXT VERSION RELEASE - # Normal Startup if [[ $steam_sync == "true" ]]; then diff --git a/tools/configurator.sh b/tools/configurator.sh index 4bdaa0a6..4c0d9278 100644 --- a/tools/configurator.sh +++ b/tools/configurator.sh @@ -52,6 +52,8 @@ source /app/libexec/global.sh # - Move Screenshots folder # - Move Mods folder # - Move Texture Packs folder +# - Tool: Remove Empty ROM Folders +# - Tool: Rebuild All ROM Folders # - Tool: Compress Games # - Compress Single Game # - Compress Multiple Games - CHD @@ -559,6 +561,8 @@ configurator_retrodeck_tools_dialog() { local choices=( "Tool: Move Folders" "Move RetroDECK folders between internal/SD card or to a custom location" + "Tool: Remove Empty ROM Folders" "Remove some or all of the empty ROM folders" + "Tool: Rebuild All ROM Folders" "Rebuild any missing default ROM folders" "Tool: Compress Games" "Compress games for systems that support it" "Install: RetroDECK Controller Layouts" "Install the custom RetroDECK controller layouts on Steam" "Install: PS3 Firmware" "Download and install PS3 firmware for use with the RPCS3 emulator" @@ -585,6 +589,44 @@ configurator_retrodeck_tools_dialog() { configurator_retrodeck_move_tool_dialog ;; + "Tool: Remove Empty ROM Folders" ) + log i "Configurator: opening \"$choice\" menu" + find_empty_rom_folders + + choice=$(zenity \ + --list --width=1200 --height=720 --title "RetroDECK Configurator - RetroDECK: Remove Empty ROM Folders" \ + --checklist --hide-column=3 --ok-label="Remove Selected" --extra-button="Remove All" \ + --separator="," --print-column=2 \ + --text="Choose which ROM folders to remove:" \ + --column "Remove?" \ + --column "System" \ + "${empty_rom_folders_list[@]}") + + local rc=$? + if [[ $rc == "0" && ! -z $choice ]]; then # User clicked "Remove Selected" with at least one system selected + IFS="," read -ra folders_to_remove <<< "$choice" + for folder in "${folders_to_remove[@]}"; do + log i "Removing empty folder $folder" + rm -f "$folder" + done + elif [[ ! -z $choice ]]; then # User clicked "Remove All" + for folder in "${all_empty_folders[@]}"; do + log i "Removing empty folder $folder" + rm -f "$folder" + done + fi + + configurator_generic_dialog "RetroDECK Configurator - Remove Empty ROM Folders" "The removal process is complete." + configurator_retrodeck_tools_dialog + ;; + + "Tool: Rebuild All ROM Folders" ) + log i "Configurator: opening \"$choice\" menu" + es-de --create-system-dirs + configurator_generic_dialog "RetroDECK Configurator - Rebuild All ROM Folders" "The rebuilding process is complete.\n\nAll missing default ROM folders will now exist in $roms_folder" + configurator_retrodeck_tools_dialog + ;; + "Tool: Compress Games" ) log i "Configurator: opening \"$choice\" menu" configurator_generic_dialog "RetroDECK Configurator - Compression Tool" "Depending on your library and compression choices, the process can sometimes take a long time.\nPlease be patient once it is started!" @@ -608,14 +650,13 @@ configurator_retrodeck_tools_dialog() { ( update_rpcs3_firmware ) | - zenity --progress --pulsate \ + zenity --progress --no-cancel --pulsate --auto-close \ --icon-name=net.retrodeck.retrodeck \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --title="Downloading PS3 Firmware" \ --width=400 --height=200 \ - --text="If it feels like this is taking too much time, please ensure there aren't any windows that unexpectedly slipped into the background and need attention.\n\n" \ - --no-cancel \ - --auto-close + --text="Dowloading and installing PS3 Firmware, please be patient.\n\nNOTICE - If the process is taking too long:\n\nSome windows might be running in the background that could require your attention: pop-ups from emulators or the upgrade itself that needs user input to continue.\n\n" + else configurator_generic_dialog "RetroDECK Configurator - Install: PS3 Firmware" "You do not appear to currently have Internet access, which is required by this tool. Please try again when network access has been restored." configurator_retrodeck_tools_dialog @@ -795,28 +836,6 @@ configurator_compress_single_game_dialog() { echo "# Compressing $(basename "$file") to $compatible_compression_format format" # This updates the Zenity dialog log i "Compressing $(basename "$file") to $compatible_compression_format format" compress_game "$compatible_compression_format" "$file" "$system" - if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested - if [[ -f "${file%.*}.$compatible_compression_format" ]]; then - log i "Performing post-compression file cleanup" - if [[ "$file" == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do - log i "Removing file $file_path/$line" - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") - log i "Removing file $(realpath $file)" - rm -f $(realpath "$file") - else - log i "Removing file $(realpath $file)" - rm -f "$(realpath "$file")" - fi - else - log i "Compressed file ${file%.*}.$compatible_compression_format not found, skipping original file deletion" - configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "A compressed version of the file was not found, skipping deletion." - fi - fi ) | zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ @@ -836,54 +855,7 @@ configurator_compress_single_game_dialog() { configurator_compress_multiple_games_dialog() { # This dialog will display any games it finds to be compressable, from the systems listed under each compression type in compression_targets.cfg - local compressable_games_list=() - local all_compressable_games=() - local games_to_compress=() - local target_selection="$1" - - if [[ "$1" == "everything" ]]; then - local compression_format="all" - else - local compression_format="$1" - fi - - if [[ $compression_format == "all" ]]; then - local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d') - else - local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d') - fi - - while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type - do - compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt") - if [[ ! -z $compression_candidates ]]; then - while IFS= read -r game - do - local compatible_compression_format=$(find_compatible_compression_format "$game") - if [[ $compression_format == "chd" ]]; then - if [[ $compatible_compression_format == "chd" ]]; then - all_compressable_games=("${all_compressable_games[@]}" "$game") - compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") - fi - elif [[ $compression_format == "zip" ]]; then - if [[ $compatible_compression_format == "zip" ]]; then - all_compressable_games=("${all_compressable_games[@]}" "$game") - compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") - fi - elif [[ $compression_format == "rvz" ]]; then - if [[ $compatible_compression_format == "rvz" ]]; then - all_compressable_games=("${all_compressable_games[@]}" "$game") - compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") - fi - elif [[ $compression_format == "all" ]]; then - if [[ ! $compatible_compression_format == "none" ]]; then - all_compressable_games=("${all_compressable_games[@]}" "$game") - compressable_games_list=("${compressable_games_list[@]}" "false" "${game#$roms_folder}" "$game") - fi - fi - done < <(printf '%s\n' "$compression_candidates") - fi - done < <(printf '%s\n' "$compressable_systems_list") + find_compatible_games "$1" if [[ ! "$target_selection" == "everything" ]]; then # If the user chose to not auto-compress everything choice=$(zenity \ @@ -923,27 +895,6 @@ configurator_compress_multiple_games_dialog() { games_left_to_compress=$((games_left_to_compress-1)) log i "Games left to compress: $games_left_to_compress" compress_game "$compression_format" "$file" "$system" - if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested - if [[ -f "${file%.*}.$compatible_compression_format" ]]; then - if [[ "$file" == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do - log i "Removing file $file_path/$line" - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") - log i "Removing file $(realpath $file)" - rm -f $(realpath "$file") - else - log i "Removing file $(realpath $file)" - rm -f "$(realpath "$file")" - fi - else - log i "Compressed file ${file%.*}.$compatible_compression_format not found, skipping original file deletion" - configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "Compression of $(basename $file) failed, skipping deletion." - fi - fi done ) | zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \