Merge branch 'cooker-0.8.2b'

This commit is contained in:
XargonWan 2024-07-15 12:38:14 +09:00
commit b70508f856
50 changed files with 1454 additions and 1509 deletions

View file

@ -171,6 +171,7 @@ jobs:
# run: | # run: |
# # Set variables for Gitea host, organization, repository, access token, and release details # # Set variables for Gitea host, organization, repository, access token, and release details
# GITEA_HOST="repo.retrodeck.net" # GITEA_HOST="repo.retrodeck.net"
# UPLOAD_HOST="upload.retrodeck.net"
# ORGANIZATION="RetroDECK" # ORGANIZATION="RetroDECK"
# REPO="RetroDECK-cooker" # REPO="RetroDECK-cooker"
# GITEA_TOKEN="${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }}" # GITEA_TOKEN="${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }}"
@ -201,19 +202,22 @@ jobs:
# # Upload artifacts # # Upload artifacts
# curl -X POST \ # curl -X POST \
# -H "Authorization: token ${GITEA_TOKEN}" \ # -H "Authorization: token ${GITEA_TOKEN}" \
# -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
# -H "Content-Type: multipart/form-data" \ # -H "Content-Type: multipart/form-data" \
# -F "attachment=@RetroDECK-cooker.flatpak" \ # -F "attachment=@RetroDECK-cooker.flatpak" \
# "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak" # "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak"
# # Upload artifacts sha # # Upload artifacts sha
# curl -X POST \ # curl -X POST \
# -H "Authorization: token ${GITEA_TOKEN}" \ # -H "Authorization: token ${GITEA_TOKEN}" \
# -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
# -H "Content-Type: multipart/form-data" \ # -H "Content-Type: multipart/form-data" \
# -F "attachment=@RetroDECK-cooker.flatpak.sha" \ # -F "attachment=@RetroDECK-cooker.flatpak.sha" \
# "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak.sha" # "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak.sha"
# curl -X POST \ # curl -X POST \
# -H "Authorization: token ${GITEA_TOKEN}" \ # -H "Authorization: token ${GITEA_TOKEN}" \
# -H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
# -H "Content-Type: multipart/form-data" \ # -H "Content-Type: multipart/form-data" \
# -F "attachment=@RetroDECK-Artifact.tar.gz" \ # -F "attachment=@RetroDECK-Artifact.tar.gz" \
# "http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-Artifact.tar.gz" # "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-Artifact.tar.gz"

View file

@ -127,6 +127,7 @@ jobs:
run: | run: |
# Set variables for Gitea host, organization, repository, access token, and release details # Set variables for Gitea host, organization, repository, access token, and release details
GITEA_HOST="repo.retrodeck.net" GITEA_HOST="repo.retrodeck.net"
UPLOAD_HOST="upload.retrodeck.net"
ORGANIZATION="RetroDECK" ORGANIZATION="RetroDECK"
REPO="RetroDECK" REPO="RetroDECK"
GITEA_TOKEN="${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }}" GITEA_TOKEN="${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }}"
@ -154,21 +155,24 @@ jobs:
# Upload artifacts # Upload artifacts
curl -X POST \ curl -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \ -H "Authorization: token ${GITEA_TOKEN}" \
-H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
-H "Content-Type: multipart/form-data" \ -H "Content-Type: multipart/form-data" \
-F "attachment=@RetroDECK.flatpak" \ -F "attachment=@RetroDECK.flatpak" \
"http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak" "http://$UPLOAD_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=RetroDECK-cooker.flatpak"
curl -X POST \ curl -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \ -H "Authorization: token ${GITEA_TOKEN}" \
-H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
-H "Content-Type: multipart/form-data" \ -H "Content-Type: multipart/form-data" \
-F "attachment=@RetroDECK-Artifact.tar.gz" \ -F "attachment=@RetroDECK-Artifact.tar.gz" \
"http://$GITEA_HOST/api/v1/repos/$ORGANIZATION/$REPO/releases/$release_id/assets?name=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 - name: Upload RetroDECK.flatpak.sha to Gitea Release
run: | run: |
curl -X POST \ curl -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \ -H "Authorization: token ${GITEA_TOKEN}" \
-H "X-GitHub-Token: ${{ secrets.UPLOAD_TOKEN }}" \
-F "file=@RetroDECK.flatpak.sha" \ -F "file=@RetroDECK.flatpak.sha" \
"https://repo.retrodeck.net/RetroDECK/RetroDECK/releases/${{ env.REL_VER }}/assets?name=RetroDECK.flatpak.sha" "https://$UPLOAD_HOST/RetroDECK/RetroDECK/releases/${{ env.REL_VER }}/assets?name=RetroDECK.flatpak.sha"
env: env:
GITEA_TOKEN: ${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }} GITEA_TOKEN: ${{ secrets.GITEA_TRIGGER_BUILD_TOKEN }}

2
.gitignore vendored
View file

@ -18,7 +18,7 @@ backup
tmp tmp
.godot .godot
rd-submodules/es-de/patches-tmp* rd-submodules/es-de/patches-tmp*
.local/ retrodeck-repo
buildid buildid
*.bak *.bak
incconfigs/ incconfigs/

View file

@ -1,7 +1,7 @@
# The proper format for this file is # The proper format for this file is
# ACTION^PLACEHOLDERTEXT^URL^REPO(Optional) # ACTION^PLACEHOLDERTEXT^URL^REPO(Optional)
# hash^DOOMSHAPLACEHOLDER^https://buildbot.libretro.com/assets/cores/DOOM/Doom%20%28Shareware%29.zip # hash^DOOMSHAPLACEHOLDER^https://buildbot.libretro.com/assets/cores/DOOM/Doom%20%28Shareware%29.zip
hash^DUCKSTATIONSHAPLACEHOLDER^https://github.com/stenzek/duckstation/releases/download/preview/DuckStation-x64.AppImage #hash^DUCKSTATIONSHAPLACEHOLDER^https://github.com/stenzek/duckstation/releases/download/preview/DuckStation-x64.AppImage
hash^SAMEDUCKSHAPLACEHOLDER^https://buildbot.libretro.com/nightly/linux/x86_64/latest/sameduck_libretro.so.zip hash^SAMEDUCKSHAPLACEHOLDER^https://buildbot.libretro.com/nightly/linux/x86_64/latest/sameduck_libretro.so.zip
hash^PPSSPPBIOSHASHPLACEHOLDER^https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip hash^PPSSPPBIOSHASHPLACEHOLDER^https://github.com/hrydgard/ppsspp/archive/refs/heads/master.zip
hash^MSXBIOSHASHPLACEHOLDER^http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip hash^MSXBIOSHASHPLACEHOLDER^http://bluemsx.msxblue.com/rel_download/blueMSXv282full.zip

View file

@ -3,9 +3,9 @@
# This is building the bundle RetroDECK.flatpak after the download and build steps are done # This is building the bundle RetroDECK.flatpak after the download and build steps are done
if [ "${GITHUB_REF##*/}" = "main" ]; then if [ "${GITHUB_REF##*/}" = "main" ]; then
flatpak build-bundle "${GITHUB_WORKSPACE}/.local" "$GITHUB_WORKSPACE/RetroDECK.flatpak" net.retrodeck.retrodeck flatpak build-bundle "${GITHUB_WORKSPACE}/retrodeck-repo" "$GITHUB_WORKSPACE/RetroDECK.flatpak" net.retrodeck.retrodeck
sha256sum RetroDECK.flatpak > RetroDECK.flatpak.sha sha256sum RetroDECK.flatpak > RetroDECK.flatpak.sha
else else
flatpak build-bundle "${GITHUB_WORKSPACE}/.local" "$GITHUB_WORKSPACE/RetroDECK-cooker.flatpak" net.retrodeck.retrodeck flatpak build-bundle "${GITHUB_WORKSPACE}/retrodeck-repo" "$GITHUB_WORKSPACE/RetroDECK-cooker.flatpak" net.retrodeck.retrodeck
sha256sum RetroDECK-cooker.flatpak > RetroDECK-cooker.flatpak.sha sha256sum RetroDECK-cooker.flatpak > RetroDECK-cooker.flatpak.sha
fi fi

View file

@ -12,12 +12,12 @@ else
FOLDER=retrodeck-flatpak-cooker FOLDER=retrodeck-flatpak-cooker
fi fi
mkdir -vp "${GITHUB_WORKSPACE}"/{.local,retrodeck-flatpak-cooker} mkdir -vp "${GITHUB_WORKSPACE}"/{retrodeck-repo,retrodeck-flatpak-cooker}
flatpak-builder --user --force-clean \ flatpak-builder --user --force-clean \
--install-deps-from=flathub \ --install-deps-from=flathub \
--install-deps-from=flathub-beta \ --install-deps-from=flathub-beta \
--repo="${GITHUB_WORKSPACE}/.local" \ --repo="${GITHUB_WORKSPACE}/retrodeck-repo" \
--download-only \ --download-only \
"${GITHUB_WORKSPACE}/${FOLDER}" \ "${GITHUB_WORKSPACE}/${FOLDER}" \
net.retrodeck.retrodeck.yml net.retrodeck.retrodeck.yml

View file

@ -12,13 +12,13 @@ else
FOLDER=retrodeck-flatpak-cooker FOLDER=retrodeck-flatpak-cooker
fi fi
mkdir -vp ${GITHUB_WORKSPACE}/.local mkdir -vp ${GITHUB_WORKSPACE}/retrodeck-repo
mkdir -vp ${GITHUB_WORKSPACE}/"$FOLDER" mkdir -vp ${GITHUB_WORKSPACE}/"$FOLDER"
flatpak-builder --user --force-clean \ flatpak-builder --user --force-clean \
--install-deps-from=flathub \ --install-deps-from=flathub \
--install-deps-from=flathub-beta \ --install-deps-from=flathub-beta \
--repo=${GITHUB_WORKSPACE}/.local \ --repo=${GITHUB_WORKSPACE}/retrodeck-repo \
--disable-download \ --disable-download \
"${GITHUB_WORKSPACE}/$FOLDER" \ "${GITHUB_WORKSPACE}/$FOLDER" \
net.retrodeck.retrodeck.yml net.retrodeck.retrodeck.yml

View file

@ -8,6 +8,8 @@
# Needs the URL of the file, in this line format: hash^PLACEHOLDERTEXT^url # 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. # 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 # 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. # 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/<owner-name>/<repo-name>/releases/latest^<file suffix> # Needs the API URL of the repo, in this line format: latestappimage^PLACEHOLDERTEXT^https://api.github.com/repos/<owner-name>/<repo-name>/releases/latest^<file suffix>
# As this command updates two different placeholders (one for the URL, one for the file hash) in the manifest, # As this command updates two different placeholders (one for the URL, one for the file hash) in the manifest,
@ -48,7 +50,7 @@ cat "$automation_task_list"
echo echo
# Update all collected information # Update all collected information
while IFS="^" read -r action placeholder url branch while IFS="^" read -r action placeholder url branch || [[ -n "$action" ]];
do do
if [[ ! $action == "#"* ]] && [[ ! -z "$action" ]]; then if [[ ! $action == "#"* ]] && [[ ! -z "$action" ]]; then
case "$action" in case "$action" in
@ -82,10 +84,20 @@ do
/bin/sed -i 's^'"$placeholder"'^'"$commit"'^' $rd_manifest /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" ) "latestghrelease" )
echo echo
echo "Placeholder text: $placeholder" echo "Placeholder text: $placeholder"
echo "Repo to look for AppImage releases: $url" echo "Repo to look for latest releases: $url"
echo echo
ghreleaseurl=$(curl -s "$url" | grep browser_download_url | grep "$branch\""$ | cut -d : -f 2,3 | tr -d \" | sed -n 1p | tr -d ' ') 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" echo "GitHub release URL found: $ghreleaseurl"

View file

@ -2,9 +2,22 @@
# WARNING: run this script from the project root folder, not from here!! # WARNING: run this script from the project root folder, not from here!!
# Check if script is running with elevated privileges
if [ "$EUID" -ne 0 ]; then
echo "The build might fail without some superuser permissions, please run me with sudo. Continue without sudo? [y/N,]"
read -r continue_without_sudo
if [[ "$continue_without_sudo" != "y" ]]; then
exit 1
fi
fi
git submodule update --init --recursive git submodule update --init --recursive
export GITHUB_WORKSPACE="." export GITHUB_WORKSPACE="."
# Initialize the Flatpak repo
ostree init --mode=archive-z2 --repo=${GITHUB_WORKSPACE}/retrodeck-repo
cp net.retrodeck.retrodeck.appdata.xml net.retrodeck.retrodeck.appdata.xml.bak cp net.retrodeck.retrodeck.appdata.xml net.retrodeck.retrodeck.appdata.xml.bak
cp net.retrodeck.retrodeck.yml net.retrodeck.retrodeck.yml.bak cp net.retrodeck.retrodeck.yml net.retrodeck.retrodeck.yml.bak
@ -12,7 +25,8 @@ automation_tools/install_dependencies.sh
automation_tools/cooker_build_id.sh automation_tools/cooker_build_id.sh
automation_tools/pre_build_automation.sh automation_tools/pre_build_automation.sh
automation_tools/cooker_flatpak_portal_add.sh automation_tools/cooker_flatpak_portal_add.sh
automation_tools/appdata_management.sh # THIS SCRIPT IS BROKEN HENCE DISABLED FTM
# automation_tools/appdata_management.sh
automation_tools/flatpak_build_download_only.sh automation_tools/flatpak_build_download_only.sh
automation_tools/flatpak_build_only.sh automation_tools/flatpak_build_only.sh
automation_tools/flatpak_build_bundle.sh automation_tools/flatpak_build_bundle.sh

View file

@ -25,7 +25,7 @@
</controller> </controller>
<controller> <controller>
<api>SDLController</api> <api>SDLController</api>
<uuid>0_03000000de280000ff11000001000000</uuid> <uuid>0_030079f6de280000ff11000001000000</uuid>
<display_name>Steam Virtual Gamepad</display_name> <display_name>Steam Virtual Gamepad</display_name>
<rumble>0</rumble> <rumble>0</rumble>
<axis> <axis>
@ -41,6 +41,54 @@
<range>1</range> <range>1</range>
</trigger> </trigger>
<mappings> <mappings>
<entry>
<mapping>25</mapping>
<button>8</button>
</entry>
<entry>
<mapping>1</mapping>
<button>1</button>
</entry>
<entry>
<mapping>2</mapping>
<button>0</button>
</entry>
<entry>
<mapping>3</mapping>
<button>3</button>
</entry>
<entry>
<mapping>4</mapping>
<button>2</button>
</entry>
<entry>
<mapping>5</mapping>
<button>9</button>
</entry>
<entry>
<mapping>6</mapping>
<button>10</button>
</entry>
<entry>
<mapping>7</mapping>
<button>42</button>
</entry>
<entry>
<mapping>8</mapping>
<button>43</button>
</entry>
<entry>
<mapping>9</mapping>
<button>6</button>
</entry>
<entry>
<mapping>10</mapping>
<button>4</button>
</entry>
<entry>
<mapping>11</mapping>
<button>11</button>
</entry>
<entry> <entry>
<mapping>24</mapping> <mapping>24</mapping>
<button>40</button> <button>40</button>
@ -93,50 +141,6 @@
<mapping>12</mapping> <mapping>12</mapping>
<button>12</button> <button>12</button>
</entry> </entry>
<entry>
<mapping>11</mapping>
<button>11</button>
</entry>
<entry>
<mapping>10</mapping>
<button>4</button>
</entry>
<entry>
<mapping>9</mapping>
<button>6</button>
</entry>
<entry>
<mapping>8</mapping>
<button>43</button>
</entry>
<entry>
<mapping>7</mapping>
<button>42</button>
</entry>
<entry>
<mapping>6</mapping>
<button>10</button>
</entry>
<entry>
<mapping>5</mapping>
<button>9</button>
</entry>
<entry>
<mapping>4</mapping>
<button>3</button>
</entry>
<entry>
<mapping>3</mapping>
<button>2</button>
</entry>
<entry>
<mapping>2</mapping>
<button>1</button>
</entry>
<entry>
<mapping>1</mapping>
<button>0</button>
</entry>
</mappings> </mappings>
</controller> </controller>
</emulated_controller> </emulated_controller>

View file

@ -4,7 +4,7 @@
<profile>SteamInput-P1</profile> <profile>SteamInput-P1</profile>
<controller> <controller>
<api>SDLController</api> <api>SDLController</api>
<uuid>0_03000000de280000ff11000001000000</uuid> <uuid>0_030079f6de280000ff11000001000000</uuid>
<display_name>Steam Virtual Gamepad</display_name> <display_name>Steam Virtual Gamepad</display_name>
<rumble>0</rumble> <rumble>0</rumble>
<axis> <axis>
@ -20,6 +20,10 @@
<range>1</range> <range>1</range>
</trigger> </trigger>
<mappings> <mappings>
<entry>
<mapping>25</mapping>
<button>8</button>
</entry>
<entry> <entry>
<mapping>24</mapping> <mapping>24</mapping>
<button>40</button> <button>40</button>
@ -65,56 +69,56 @@
<button>14</button> <button>14</button>
</entry> </entry>
<entry> <entry>
<mapping>1</mapping> <mapping>13</mapping>
<button>0</button> <button>13</button>
</entry>
<entry>
<mapping>2</mapping>
<button>1</button>
</entry>
<entry>
<mapping>3</mapping>
<button>2</button>
</entry>
<entry>
<mapping>4</mapping>
<button>3</button>
</entry>
<entry>
<mapping>5</mapping>
<button>9</button>
</entry>
<entry>
<mapping>6</mapping>
<button>10</button>
</entry>
<entry>
<mapping>7</mapping>
<button>42</button>
</entry>
<entry>
<mapping>8</mapping>
<button>43</button>
</entry>
<entry>
<mapping>9</mapping>
<button>6</button>
</entry>
<entry>
<mapping>10</mapping>
<button>4</button>
</entry>
<entry>
<mapping>11</mapping>
<button>11</button>
</entry> </entry>
<entry> <entry>
<mapping>12</mapping> <mapping>12</mapping>
<button>12</button> <button>12</button>
</entry> </entry>
<entry> <entry>
<mapping>13</mapping> <mapping>11</mapping>
<button>13</button> <button>11</button>
</entry>
<entry>
<mapping>10</mapping>
<button>4</button>
</entry>
<entry>
<mapping>9</mapping>
<button>6</button>
</entry>
<entry>
<mapping>8</mapping>
<button>43</button>
</entry>
<entry>
<mapping>7</mapping>
<button>42</button>
</entry>
<entry>
<mapping>6</mapping>
<button>10</button>
</entry>
<entry>
<mapping>5</mapping>
<button>9</button>
</entry>
<entry>
<mapping>4</mapping>
<button>2</button>
</entry>
<entry>
<mapping>3</mapping>
<button>3</button>
</entry>
<entry>
<mapping>2</mapping>
<button>0</button>
</entry>
<entry>
<mapping>1</mapping>
<button>1</button>
</entry> </entry>
</mappings> </mappings>
</controller> </controller>

View file

@ -4,7 +4,7 @@
<profile>SteamInput-P1</profile> <profile>SteamInput-P1</profile>
<controller> <controller>
<api>SDLController</api> <api>SDLController</api>
<uuid>0_03000000de280000ff11000001000000</uuid> <uuid>0_030079f6de280000ff11000001000000</uuid>
<display_name>Steam Virtual Gamepad</display_name> <display_name>Steam Virtual Gamepad</display_name>
<rumble>0</rumble> <rumble>0</rumble>
<axis> <axis>
@ -20,6 +20,58 @@
<range>1</range> <range>1</range>
</trigger> </trigger>
<mappings> <mappings>
<entry>
<mapping>1</mapping>
<button>1</button>
</entry>
<entry>
<mapping>2</mapping>
<button>0</button>
</entry>
<entry>
<mapping>3</mapping>
<button>3</button>
</entry>
<entry>
<mapping>4</mapping>
<button>2</button>
</entry>
<entry>
<mapping>5</mapping>
<button>9</button>
</entry>
<entry>
<mapping>6</mapping>
<button>10</button>
</entry>
<entry>
<mapping>7</mapping>
<button>42</button>
</entry>
<entry>
<mapping>8</mapping>
<button>43</button>
</entry>
<entry>
<mapping>9</mapping>
<button>6</button>
</entry>
<entry>
<mapping>10</mapping>
<button>4</button>
</entry>
<entry>
<mapping>11</mapping>
<button>11</button>
</entry>
<entry>
<mapping>12</mapping>
<button>12</button>
</entry>
<entry>
<mapping>25</mapping>
<button>8</button>
</entry>
<entry> <entry>
<mapping>24</mapping> <mapping>24</mapping>
<button>40</button> <button>40</button>
@ -64,54 +116,6 @@
<mapping>14</mapping> <mapping>14</mapping>
<button>14</button> <button>14</button>
</entry> </entry>
<entry>
<mapping>1</mapping>
<button>0</button>
</entry>
<entry>
<mapping>2</mapping>
<button>1</button>
</entry>
<entry>
<mapping>3</mapping>
<button>2</button>
</entry>
<entry>
<mapping>4</mapping>
<button>3</button>
</entry>
<entry>
<mapping>5</mapping>
<button>9</button>
</entry>
<entry>
<mapping>6</mapping>
<button>10</button>
</entry>
<entry>
<mapping>7</mapping>
<button>42</button>
</entry>
<entry>
<mapping>8</mapping>
<button>43</button>
</entry>
<entry>
<mapping>9</mapping>
<button>6</button>
</entry>
<entry>
<mapping>10</mapping>
<button>4</button>
</entry>
<entry>
<mapping>11</mapping>
<button>11</button>
</entry>
<entry>
<mapping>12</mapping>
<button>12</button>
</entry>
<entry> <entry>
<mapping>13</mapping> <mapping>13</mapping>
<button>13</button> <button>13</button>

View file

@ -1,7 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<emulated_controller> <emulated_controller>
<type>Wii U Pro Controller</type> <type>Wii U Pro Controller</type>
<profile>SteamInput-P2</profile>
<controller> <controller>
<api>SDLController</api> <api>SDLController</api>
<uuid>1_03000000de280000ff11000001000000</uuid> <uuid>1_03000000de280000ff11000001000000</uuid>
@ -19,65 +18,65 @@
<range>1</range> <range>1</range>
</trigger> </trigger>
<mappings> <mappings>
<entry>
<mapping>12</mapping>
<button>11</button>
</entry>
<entry> <entry>
<mapping>13</mapping> <mapping>13</mapping>
<button>12</button> <button>12</button>
</entry> </entry>
<entry>
<mapping>14</mapping>
<button>13</button>
</entry>
<entry>
<mapping>15</mapping>
<button>14</button>
</entry>
<entry>
<mapping>16</mapping>
<button>7</button>
</entry>
<entry>
<mapping>17</mapping>
<button>8</button>
</entry>
<entry>
<mapping>18</mapping>
<button>45</button>
</entry>
<entry>
<mapping>19</mapping>
<button>39</button>
</entry>
<entry>
<mapping>20</mapping>
<button>44</button>
</entry>
<entry>
<mapping>21</mapping>
<button>38</button>
</entry>
<entry>
<mapping>22</mapping>
<button>47</button>
</entry>
<entry> <entry>
<mapping>23</mapping> <mapping>23</mapping>
<button>41</button> <button>41</button>
</entry> </entry>
<entry> <entry>
<mapping>1</mapping> <mapping>22</mapping>
<button>0</button> <button>47</button>
</entry>
<entry>
<mapping>21</mapping>
<button>38</button>
</entry>
<entry>
<mapping>20</mapping>
<button>44</button>
</entry>
<entry>
<mapping>19</mapping>
<button>39</button>
</entry>
<entry>
<mapping>18</mapping>
<button>45</button>
</entry>
<entry>
<mapping>17</mapping>
<button>8</button>
</entry>
<entry>
<mapping>16</mapping>
<button>7</button>
</entry>
<entry>
<mapping>15</mapping>
<button>14</button>
</entry>
<entry>
<mapping>24</mapping>
<button>46</button>
</entry> </entry>
<entry> <entry>
<mapping>2</mapping> <mapping>2</mapping>
<button>1</button> <button>0</button>
</entry> </entry>
<entry> <entry>
<mapping>3</mapping> <mapping>3</mapping>
<button>2</button> <button>3</button>
</entry> </entry>
<entry> <entry>
<mapping>4</mapping> <mapping>4</mapping>
<button>3</button> <button>2</button>
</entry> </entry>
<entry> <entry>
<mapping>5</mapping> <mapping>5</mapping>
@ -103,17 +102,17 @@
<mapping>10</mapping> <mapping>10</mapping>
<button>4</button> <button>4</button>
</entry> </entry>
<entry>
<mapping>12</mapping>
<button>11</button>
</entry>
<entry> <entry>
<mapping>25</mapping> <mapping>25</mapping>
<button>40</button> <button>40</button>
</entry> </entry>
<entry> <entry>
<mapping>24</mapping> <mapping>14</mapping>
<button>46</button> <button>13</button>
</entry>
<entry>
<mapping>1</mapping>
<button>1</button>
</entry> </entry>
</mappings> </mappings>
</controller> </controller>

View file

@ -20,25 +20,29 @@
</trigger> </trigger>
<mappings> <mappings>
<entry> <entry>
<mapping>24</mapping> <mapping>13</mapping>
<button>46</button> <button>12</button>
</entry> </entry>
<entry> <entry>
<mapping>25</mapping> <mapping>23</mapping>
<button>40</button> <button>41</button>
</entry>
<entry>
<mapping>12</mapping>
<button>11</button>
</entry> </entry>
<entry> <entry>
<mapping>10</mapping> <mapping>10</mapping>
<button>4</button> <button>4</button>
</entry> </entry>
<entry>
<mapping>22</mapping>
<button>47</button>
</entry>
<entry> <entry>
<mapping>9</mapping> <mapping>9</mapping>
<button>6</button> <button>6</button>
</entry> </entry>
<entry>
<mapping>21</mapping>
<button>38</button>
</entry>
<entry> <entry>
<mapping>8</mapping> <mapping>8</mapping>
<button>43</button> <button>43</button>
@ -60,21 +64,21 @@
<button>3</button> <button>3</button>
</entry> </entry>
<entry> <entry>
<mapping>3</mapping> <mapping>25</mapping>
<button>2</button> <button>40</button>
</entry> </entry>
<entry> <entry>
<mapping>13</mapping> <mapping>12</mapping>
<button>12</button> <button>11</button>
</entry>
<entry>
<mapping>14</mapping>
<button>13</button>
</entry> </entry>
<entry> <entry>
<mapping>1</mapping> <mapping>1</mapping>
<button>0</button> <button>0</button>
</entry> </entry>
<entry>
<mapping>14</mapping>
<button>13</button>
</entry>
<entry> <entry>
<mapping>15</mapping> <mapping>15</mapping>
<button>14</button> <button>14</button>
@ -87,6 +91,10 @@
<mapping>16</mapping> <mapping>16</mapping>
<button>7</button> <button>7</button>
</entry> </entry>
<entry>
<mapping>3</mapping>
<button>2</button>
</entry>
<entry> <entry>
<mapping>17</mapping> <mapping>17</mapping>
<button>8</button> <button>8</button>
@ -104,16 +112,8 @@
<button>44</button> <button>44</button>
</entry> </entry>
<entry> <entry>
<mapping>21</mapping> <mapping>24</mapping>
<button>38</button> <button>46</button>
</entry>
<entry>
<mapping>22</mapping>
<button>47</button>
</entry>
<entry>
<mapping>23</mapping>
<button>41</button>
</entry> </entry>
</mappings> </mappings>
</controller> </controller>

View file

@ -20,25 +20,29 @@
</trigger> </trigger>
<mappings> <mappings>
<entry> <entry>
<mapping>24</mapping> <mapping>13</mapping>
<button>46</button> <button>12</button>
</entry> </entry>
<entry> <entry>
<mapping>25</mapping> <mapping>23</mapping>
<button>40</button> <button>41</button>
</entry>
<entry>
<mapping>12</mapping>
<button>11</button>
</entry> </entry>
<entry> <entry>
<mapping>10</mapping> <mapping>10</mapping>
<button>4</button> <button>4</button>
</entry> </entry>
<entry>
<mapping>22</mapping>
<button>47</button>
</entry>
<entry> <entry>
<mapping>9</mapping> <mapping>9</mapping>
<button>6</button> <button>6</button>
</entry> </entry>
<entry>
<mapping>21</mapping>
<button>38</button>
</entry>
<entry> <entry>
<mapping>8</mapping> <mapping>8</mapping>
<button>43</button> <button>43</button>
@ -60,21 +64,21 @@
<button>3</button> <button>3</button>
</entry> </entry>
<entry> <entry>
<mapping>3</mapping> <mapping>25</mapping>
<button>2</button> <button>40</button>
</entry> </entry>
<entry> <entry>
<mapping>13</mapping> <mapping>12</mapping>
<button>12</button> <button>11</button>
</entry>
<entry>
<mapping>14</mapping>
<button>13</button>
</entry> </entry>
<entry> <entry>
<mapping>1</mapping> <mapping>1</mapping>
<button>0</button> <button>0</button>
</entry> </entry>
<entry>
<mapping>14</mapping>
<button>13</button>
</entry>
<entry> <entry>
<mapping>15</mapping> <mapping>15</mapping>
<button>14</button> <button>14</button>
@ -87,6 +91,10 @@
<mapping>16</mapping> <mapping>16</mapping>
<button>7</button> <button>7</button>
</entry> </entry>
<entry>
<mapping>3</mapping>
<button>2</button>
</entry>
<entry> <entry>
<mapping>17</mapping> <mapping>17</mapping>
<button>8</button> <button>8</button>
@ -104,16 +112,8 @@
<button>44</button> <button>44</button>
</entry> </entry>
<entry> <entry>
<mapping>21</mapping> <mapping>24</mapping>
<button>38</button> <button>46</button>
</entry>
<entry>
<mapping>22</mapping>
<button>47</button>
</entry>
<entry>
<mapping>23</mapping>
<button>41</button>
</entry> </entry>
</mappings> </mappings>
</controller> </controller>

View file

@ -94,9 +94,9 @@
<TVVolume>100</TVVolume> <TVVolume>100</TVVolume>
<PadVolume>100</PadVolume> <PadVolume>100</PadVolume>
<InputVolume>100</InputVolume> <InputVolume>100</InputVolume>
<TVDevice>alsa_output.pci-0000_04_00.5-platform-acp5x_mach.0.HiFi__hw_acp5x_1__sink</TVDevice> <TVDevice>default</TVDevice>
<PadDevice>alsa_output.pci-0000_04_00.5-platform-acp5x_mach.0.HiFi__hw_acp5x_1__sink</PadDevice> <PadDevice>default</PadDevice>
<InputDevice>filter-chain-source</InputDevice> <InputDevice>default</InputDevice>
</Audio> </Audio>
<Account> <Account>
<PersistentId>2147483649</PersistentId> <PersistentId>2147483649</PersistentId>

View file

@ -1,17 +1,23 @@
dolphin^Dolphin (GameCube / Wii Standalone Emulator) cemu^Cemu (Nintendo Wii U Standalone Emulator)
citra^Citra (Nintendo 3DS Standalone Emulator, via Ponzu)
dolphin^Dolphin (Nintendo GameCube / Wii Standalone Emulator)
duckstation^Duckstation (Sony Playstation Standalone Emulator) duckstation^Duckstation (Sony Playstation Standalone Emulator)
gb^Nintendo GameBoy gb^Nintendo GameBoy
gba^Nintendo GameBoy Advance gba^Nintendo GameBoy Advance
gbc^Nintendo GameBoy Color gbc^Nintendo GameBoy Color
genesis^Sega Genesis/Master System genesis^Sega Genesis/Master System
gg^Sega GameGear gg^Sega GameGear
mame^MAME (Multi-Arcade Machine Standalone Emulator)
melonds^MelonDS (Nintendo DS Standalone Emulator)
n64^Nintendo 64 n64^Nintendo 64
pcsx2^PCSX2 (Sony Playstation 2 Standalone Emulator) pcsx2^PCSX2 (Sony Playstation 2 Standalone Emulator)
ppsspp^PPSSPP (Sony PSP Standalone Emulator) ppsspp^PPSSPP (Sony PSP Standalone Emulator)
primehack^Primehack (Metroid Prime Standalone Emulator) primehack^Primehack (Metroid Prime Standalone Emulator)
psx_ra^Sony Playstation (RetroArch Core) psx_ra^Sony Playstation (RetroArch Core)
retroarch^RetroArch (Multi-emulator Frontend) retroarch^RetroArch (Multi-emulator Frontend)
rpcs3^RPCS3 (Sony Playstation 3 Standalone Emulator)
ryujinx^Ryujinx (Nintendo Switch Standalone Emulator) ryujinx^Ryujinx (Nintendo Switch Standalone Emulator)
snes^Nintendo Super Nintendo snes^Nintendo Super Nintendo
vita3k^Vita3K (Sony PSVita Standalone Emulator)
xemu^XEMU (Microsoft Xbox Standalone Emulator)
yuzu^Yuzu (Nintendo Switch Standalone Emulator, via Ponzu) yuzu^Yuzu (Nintendo Switch Standalone Emulator, via Ponzu)
citra^Citra (Nintendo 3DS Standalone Emulator, via Ponzu)

View file

@ -1,74 +1,67 @@
Credits & The Team
This is the page where we try to introduce the team and thank everyone who have contributed to the project so far.
If you feel you have contributed to the project but lacks mention, please contact us on discord!
The Team The Team
XargonWan
RetroDECK project founder and also one of the founding members of AmberELEC.
IceNine451 ---
Creator of the RetroDECK configurator and the RetroDECK Framework.
XargonWan
RetroDECK project founder and also one of the founding members of AmberELEC.
Grand General of the IPL (Italian Pizza Legion) also known as the Napoletanan Fist in the internal pizza war.
---
Lazorne Lazorne
Community management/outreach, testing, documentation and Wiki Lord.
Community management/outreach, testing, documentation, emulator configurations, Steam Input and feature request / issue management.
Meme Lord of the Wiki and also the cult leader of the NPC (The Nordic Pizza Cult) also called by the others as "The Pizza Heresy Cult" or "Harbingers of Pizza Chaos". Instigator of the internal pizza war.
---
jiannazzone
Web Development, Community management/outreach, testing, documentation. Have not choosen a side yet in the Pizza War.
---
IceNine451
Creator of the RetroDECK configurator, the RetroDECK Framework and various cool things.
Freedom loving leader of the MCCP (Murican Cheese Crust Patriots) in the internal pizza war.
---
Lx32
Develops various new features, functions and tools.
1st Commander of the IPL (Italian Pizza Legion) nicknamed Paladin al Taglio in the internal pizza war.
---
WallK WallK
Works on Godot Features.
LX32 Checks GODOT and other things.
Works on a many projects. Pizza Mercenary
---
dottormac dottormac
Tester
Does bleeding edge cooker testing (lives in the danger zone), some feature suggestions and design.
Collaborators ---
Leon Styhre
Maker of EmulationStation Desktop Edition
anthonycaccese We want give special thanks to:
Theme creator for ES-DE and AmberELEC
- Our Patreon and donors that keeps the build servers running and provide feedback.
Additional credits - All related emulation, front end and software projects that we are dependent on.
RavenKilit
Former Beta Tester and AmberELEC contributor
MorGuux - All people that have put both time and money into emulation projects.
Made the RetroDECK steamdb graphics for the old logo
Pixelguin - All the users who help others with support, guidance and good spirit.
Made the new logo and steamdb graphics
teotwaki - All the users who help with testing and reporting issues.
Generous cloud hosting sponsor
Niroku / Atari - All the community creators who creates various art and assets for the community.
Helps with community management, is also part of Batocera
Gabeboii You are all the ones that makes this project possible.
Webmaster
Draco
Former server admiistrator and code consultant
ItzSelenux
Maker of pixelitos
Kenny.nl
The Kenny.nl project provides several free game assets under open licenses.
Special Thanks
We want give special thanks to:
Our Patreons that keeps the build servers running and provide feedback.
All related emulation projects, such as Batocera and AmberELEC where we are taking our inspiration.
All people that have put both time and money into emulation projects.
All the users who help others with support, guidance and good spirit.
All the users who help with testing and reporting issues.
All the community creators who creates various art and assets for the community.
You are the ones that makes this project possible.

View file

@ -0,0 +1,15 @@
cemu^/app/bin/Cemu-wrapper
citra^/var/data/ponzu/Citra/bin/citra-qt
dolphin^/app/bin/dolphin-emu
duckstation^/app/bin/duckstation-qt
mame^/app/bin/mame
melonds^/app/bin/melonds
pcsx2^/app/bin/pcsx2-qt
ppsspp^/app/bin/PPSSPPSDL
primehack^/app/bin/primehack-wrapper
retroarch^/app/bin/retroarch
rpcs3^/app/bin/rpcs3
ryujinx^/app/bin/Ryujinx.sh
vita3k^/app/bin/Vita3K
xemu^/app/bin/xemu
yuzu^/var/data/ponzu/Yuzu/bin/yuzu

View file

@ -7,7 +7,7 @@ SyncToHostRefreshRate = false
IncreaseTimerResolution = true IncreaseTimerResolution = true
InhibitScreensaver = true InhibitScreensaver = true
StartPaused = false StartPaused = false
StartFullscreen = false StartFullscreen = true
PauseOnFocusLoss = true PauseOnFocusLoss = true
PauseOnMenu = true PauseOnMenu = true
SaveStateOnExit = false SaveStateOnExit = false

View file

@ -68,7 +68,7 @@ else
# Check if the .doom file exists # Check if the .doom file exists
if [[ ! -e "$doom_file" ]]; then if [[ ! -e "$doom_file" ]]; then
log e "doom file not found in \"$doom_file\"" log e "doom file not found in \"$doom_file\""
zenity --error --no-wrap \ rd_zenity --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \ --title "RetroDECK" \
--text="File \"$doom_file\" not found. Quitting." --text="File \"$doom_file\" not found. Quitting."
@ -85,7 +85,7 @@ else
# If the file is not found, exit with an error # If the file is not found, exit with an error
if [[ -z "$found_file" ]]; then if [[ -z "$found_file" ]]; then
log "[ERROR] File not found in \"$line\"" log "[ERROR] File not found in \"$line\""
zenity --error --no-wrap \ rd_zenity --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \ --title "RetroDECK" \
--text="File \"$doom_file\" not found. Quitting." --text="File \"$doom_file\" not found. Quitting."

View file

@ -20,7 +20,6 @@ Core:
SPU loop detection: false SPU loop detection: false
Max SPURS Threads: 6 Max SPURS Threads: 6
SPU Block Size: Mega SPU Block Size: Mega
Accurate GETLLAR: false
Accurate SPU DMA: false Accurate SPU DMA: false
Accurate SPU Reservations: true Accurate SPU Reservations: true
Accurate Cache Line Stores: false Accurate Cache Line Stores: false
@ -104,6 +103,7 @@ Video:
Strict Texture Flushing: false Strict Texture Flushing: false
Multithreaded RSX: false Multithreaded RSX: false
Relaxed ZCULL Sync: false Relaxed ZCULL Sync: false
Force Hardware MSAA Resolve: false
3D Display Mode: Disabled 3D Display Mode: Disabled
Debug Program Analyser: false Debug Program Analyser: false
Accurate ZCULL stats: true Accurate ZCULL stats: true
@ -165,6 +165,7 @@ Audio:
Convert to 16 bit: false Convert to 16 bit: false
Audio Format: Stereo Audio Format: Stereo
Audio Formats: 0 Audio Formats: 0
Audio Channel Layout: Automatic
Audio Device: "@@@default@@@" Audio Device: "@@@default@@@"
Master Volume: 100 Master Volume: 100
Enable Buffering: true Enable Buffering: true
@ -186,6 +187,7 @@ Input/Output:
Buzz emulated controller: "Null" Buzz emulated controller: "Null"
Turntable emulated controller: "Null" Turntable emulated controller: "Null"
GHLtar emulated controller: "Null" GHLtar emulated controller: "Null"
GameTablet emulated controller: Disabled
Pad handler mode: Single-threaded Pad handler mode: Single-threaded
Keep pads connected: false Keep pads connected: false
Pad handler sleep (microseconds): 1000 Pad handler sleep (microseconds): 1000
@ -200,6 +202,7 @@ System:
Keyboard Type: English keyboard (US standard) Keyboard Type: English keyboard (US standard)
Enter button assignment: Enter with cross Enter button assignment: Enter with cross
Console time offset (s): 0 Console time offset (s): 0
System Name: RPCS3-960
PSID high: 0 PSID high: 0
PSID low: 0 PSID low: 0
HDD Model Name: "" HDD Model Name: ""

View file

@ -25,10 +25,15 @@ screen-filter: Bilinear
v-sync: true v-sync: true
anisotropic-filtering: 1 anisotropic-filtering: 1
texture-cache: true texture-cache: true
async-pipeline-compilation: true
show-compile-shaders: true show-compile-shaders: true
hashless-texture-cache: false hashless-texture-cache: false
import-textures: false
export-textures: false
export-as-png: true
boot-apps-full-screen: true boot-apps-full-screen: true
audio-backend: SDL audio-backend: SDL
audio-volume: 100
ngs-enable: true ngs-enable: true
sys-button: 1 sys-button: 1
sys-lang: 1 sys-lang: 1
@ -78,16 +83,20 @@ keyboard-button-psbutton: 19
keyboard-gui-toggle-gui: 10 keyboard-gui-toggle-gui: 10
keyboard-gui-fullscreen: 68 keyboard-gui-fullscreen: 68
keyboard-gui-toggle-touch: 23 keyboard-gui-toggle-touch: 23
keyboard-toggle-texture-replacement: 0
keyboard-take-screenshot: 0
user-id: 00 user-id: 00
user-auto-connect: true user-auto-connect: true
dump-textures: false user-lang: ""
display-info-message: true display-info-message: true
show-welcome: false show-welcome: false
check-for-updates: false
asia-font-support: false asia-font-support: false
shader-cache: true shader-cache: true
spirv-shader: false spirv-shader: false
fps-hack: true
current-ime-lang: 4 current-ime-lang: 4
psn-status: 0 psn-signed-in: 0
http-enable: true http-enable: true
http-timeout-attempts: 50 http-timeout-attempts: 50
http-timeout-sleep-ms: 100 http-timeout-sleep-ms: 100

View file

@ -54,7 +54,7 @@ save_migration() {
save_backup_file=$rdhome/savebackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip" save_backup_file=$rdhome/savebackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip"
state_backup_file=$rdhome/statesbackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip" state_backup_file=$rdhome/statesbackup_"$(date +"%Y_%m_%d_%I_%M_%p").zip"
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \ --title "RetroDECK" \
--text="You are updating to a version of RetroDECK where save file locations have changed!\n\nYour existing files will be backed up for safety and then sorted automatically.\n\nIf a file cannot be sorted automatically it will remain where it is for manual sorting.\n\nPLEASE BE PATIENT! This process can take several minutes if you have a large ROM library." --text="You are updating to a version of RetroDECK where save file locations have changed!\n\nYour existing files will be backed up for safety and then sorted automatically.\n\nIf a file cannot be sorted automatically it will remain where it is for manual sorting.\n\nPLEASE BE PATIENT! This process can take several minutes if you have a large ROM library."
@ -144,7 +144,7 @@ save_migration() {
done done
) | ) |
zenity --progress \ rd_zenity --progress \
--icon-name=net.retrodeck.retrodeck \ --icon-name=net.retrodeck.retrodeck \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title="Processing Files" \ --title="Processing Files" \
@ -154,14 +154,14 @@ save_migration() {
--auto-close --auto-close
if [[ $(cat $migration_logfile | grep "ERROR" | wc -l) -eq 0 ]]; then if [[ $(cat $migration_logfile | grep "ERROR" | wc -l) -eq 0 ]]; then
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \ --title "RetroDECK" \
--text="The migration process has sorted all of your files automatically.\n\nEverything should be working normally, if you experience any issues please check the RetroDECK wiki or contact us directly on the Discord." --text="The migration process has sorted all of your files automatically.\n\nEverything should be working normally, if you experience any issues please check the RetroDECK wiki or contact us directly on the Discord."
else else
cat $migration_logfile | grep "ERROR" > "$rdhome/manual_sort_needed.log" cat $migration_logfile | grep "ERROR" > "$rdhome/manual_sort_needed.log"
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \ --title "RetroDECK" \
--text="The migration process was unable to sort $(cat $migration_logfile | grep "ERROR" | wc -l) files automatically.\n\nThese files will need to be moved manually to their new locations, find more detail on the RetroDECK wiki.\n\nA log of the files that need manual sorting can be found at $rdhome/manual_sort_needed.log" --text="The migration process was unable to sort $(cat $migration_logfile | grep "ERROR" | wc -l) files automatically.\n\nThese files will need to be moved manually to their new locations, find more detail on the RetroDECK wiki.\n\nA log of the files that need manual sorting can be found at $rdhome/manual_sort_needed.log"

View file

@ -51,7 +51,7 @@ check_for_version_update() {
if [[ ! "$update_ignore" == "$online_version" ]]; then if [[ ! "$update_ignore" == "$online_version" ]]; then
if [[ "$update_repo" == "RetroDECK" ]] && [[ $(sed -e 's/[\.a-z]//g' <<< $version) -le $(sed -e 's/[\.a-z]//g' <<< $online_version) ]]; then if [[ "$update_repo" == "RetroDECK" ]] && [[ $(sed -e 's/[\.a-z]//g' <<< $version) -le $(sed -e 's/[\.a-z]//g' <<< $online_version) ]]; then
# choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Ignore this version" \ # choice=$(rd_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" \ # --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
# --title "RetroDECK Update Available" \ # --title "RetroDECK Update Available" \
# --text="There is a new version of RetroDECK on the stable release channel $online_version. Would you like to update to it?\n\n(depending on your internet speed this could takes several minutes).") # --text="There is a new version of RetroDECK on the stable release channel $online_version. Would you like to update to it?\n\n(depending on your internet speed this could takes several minutes).")
@ -65,7 +65,7 @@ check_for_version_update() {
# ( # (
# flatpak-spawn --host flatpak update --noninteractive -y net.retrodeck.retrodeck # flatpak-spawn --host flatpak update --noninteractive -y net.retrodeck.retrodeck
# ) | # ) |
# zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ # rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
# --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ # --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
# --title "RetroDECK Updater" \ # --title "RetroDECK Updater" \
# --text="Upgrade in process please wait (this could takes several minutes)." # --text="Upgrade in process please wait (this could takes several minutes)."
@ -74,7 +74,7 @@ check_for_version_update() {
# fi # fi
# TODO: add the logic to check and update the branch from the configuration file # TODO: add the logic to check and update the branch from the configuration file
log i "Showing new version found dialog" 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" \ choice=$(rd_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" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK - New Update Available" \ --title "RetroDECK - New Update Available" \
--text="There is a new version of RetroDECK available: <span foreground='$blue'><b>$online_version</b></span>.\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.") --text="There is a new version of RetroDECK available: <span foreground='$blue'><b>$online_version</b></span>.\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.")
@ -85,7 +85,7 @@ check_for_version_update() {
fi fi
elif [[ "$update_repo" == "RetroDECK-cooker" ]] && [[ ! $version == $online_version ]]; then elif [[ "$update_repo" == "RetroDECK-cooker" ]] && [[ ! $version == $online_version ]]; then
log i "Showing update request dialog as \"$online_version\" was found and is greater then \"$version\"" 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" \ choice=$(rd_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" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK - New Cooker Version Available" \ --title "RetroDECK - New Cooker Version Available" \
--text="There is a more recent version of RetroDECK cooker.\nYou are running version <span foreground='$blue'><b>$hard_version</b></span>. The latest is <span foreground='$blue'><b>$online_version</b></span>.\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.") --text="There is a more recent version of RetroDECK cooker.\nYou are running version <span foreground='$blue'><b>$hard_version</b></span>. The latest is <span foreground='$blue'><b>$online_version</b></span>.\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.")
@ -141,7 +141,7 @@ check_for_version_update() {
rm -rf "$temp_folder" # Cleanup old bundles to save space rm -rf "$temp_folder" # Cleanup old bundles to save space
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Updater" \ --title "RetroDECK Updater" \
--text="RetroDECK is updating to the latest version, please wait." --text="RetroDECK is updating to the latest version, please wait."
@ -156,11 +156,13 @@ check_for_version_update() {
} }
validate_input() { validate_input() {
while IFS="^" read -r input action while IFS="^" read -r input action || [[ -n "$input" ]];
do do
if [[ "$input" == "$1" ]]; then if [[ ! $input == "#"* ]] && [[ ! -z "$input" ]]; then
eval "$action" if [[ "$input" == "$1" ]]; then
input_validated="true" eval "$action"
input_validated="true"
fi
fi fi
done < $input_validation done < $input_validation
} }

View file

@ -26,6 +26,28 @@ compress_game() {
elif [[ "$1" == "rvz" ]]; then elif [[ "$1" == "rvz" ]]; then
dolphin-tool convert -f rvz -b 131072 -c zstd -l 5 -i "$source_file" -o "$dest_file.rvz" dolphin-tool convert -f rvz -b 131072 -c zstd -l 5 -i "$source_file" -o "$dest_file.rvz"
fi fi
if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested
if [[ -f "${file%.*}.$1" ]]; 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%.*}.$1 not found, skipping original file deletion"
fi
fi
} }
find_compatible_compression_format() { find_compatible_compression_format() {
@ -66,7 +88,7 @@ validate_for_chd() {
log i "Validating .cue associated .bin files" log i "Validating .cue associated .bin files"
local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file")
log i "Associated bin files read:" 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 if [[ ! -z "$cue_bin_files" ]]; then
while IFS= read -r line while IFS= read -r line
do do
@ -96,6 +118,71 @@ validate_for_chd() {
fi 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" && ! -f "$(echo ${game%.*}.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" && ! -f "$(echo ${game%.*}.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" && ! -f "$(echo ${game%.*}.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() { cli_compress_single_game() {
# This function will compress a single file passed from the CLI arguments # This function will compress a single file passed from the CLI arguments
# USAGE: cli_compress_single_game $full_file_path # USAGE: cli_compress_single_game $full_file_path
@ -109,26 +196,6 @@ cli_compress_single_game() {
if [[ ! $compatible_compression_format == "none" ]]; then if [[ ! $compatible_compression_format == "none" ]]; then
log i "$(basename "$file") can be compressed to $compatible_compression_format" log i "$(basename "$file") can be compressed to $compatible_compression_format"
compress_game "$compatible_compression_format" "$file" "$system" 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 else
log w "$(basename "$file") does not have any compatible compression formats." log w "$(basename "$file") does not have any compatible compression formats."
fi fi
@ -171,26 +238,6 @@ cli_compress_all_games() {
if [[ ! "$compatible_compression_format" == "none" ]]; then if [[ ! "$compatible_compression_format" == "none" ]]; then
log i "$(basename "$file") can be compressed to $compatible_compression_format" log i "$(basename "$file") can be compressed to $compatible_compression_format"
compress_game "$compatible_compression_format" "$file" "$system" 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 else
log w "No compatible compression format found for $(basename "$file")" log w "No compatible compression format found for $(basename "$file")"
fi fi

View file

@ -0,0 +1,89 @@
#!/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 || [[ -n "$bios_file" ]];
do
if [[ ! $bios_file == "#"* ]] && [[ ! -z "$bios_file" ]]; then
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
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=()
all_helper_files=()
while IFS='^' read -r file dest || [[ -n "$file" ]];
do
if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then
all_helper_files=("${all_helper_files[@]}" "$file")
fi
done < "$helper_files_list"
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
elif [[ $count -eq 2 ]] && [[ "$files" =~ "systeminfo.txt" ]]; then
# Directory contains 2 files, one of which is "systeminfo.txt"
for helper_file in ${all_helper_files[@]} # Compare helper file list to dir file list
do
if [[ "$files" =~ "$helper_file" ]]; then
contains_helper_file="true" # Helper file was found
break
fi
done
if [[ "$contains_helper_file" == "true" ]]; then
# Directory contains only systeminfo.txt and a helper file
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
fi
done
}

View file

@ -1,7 +1,5 @@
#!/bin/bash #!/bin/bash
source /app/libexec/functions.sh
# Dialog colors # Dialog colors
purple="#a864fc" purple="#a864fc"
blue="#6fbfff" blue="#6fbfff"
@ -10,7 +8,7 @@ debug_dialog() {
# This function is for displaying commands run by the Configurator without actually running them # This function is for displaying commands run by the Configurator without actually running them
# USAGE: debug_dialog "command" # USAGE: debug_dialog "command"
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Debug Dialog" \ --title "RetroDECK Configurator Utility - Debug Dialog" \
--text="$1" --text="$1"
@ -19,7 +17,7 @@ debug_dialog() {
configurator_process_complete_dialog() { configurator_process_complete_dialog() {
# This dialog shows when a process is complete. # This dialog shows when a process is complete.
# USAGE: configurator_process_complete_dialog "process text" # USAGE: configurator_process_complete_dialog "process text"
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Quit" --extra-button="OK" \ rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Quit" --extra-button="OK" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Process Complete" \ --title "RetroDECK Configurator Utility - Process Complete" \
--text="The process of $1 is now complete.\n\nYou may need to quit and restart RetroDECK for your changes to take effect\n\nClick OK to return to the Main Menu or Quit to quit RetroDECK." --text="The process of $1 is now complete.\n\nYou may need to quit and restart RetroDECK for your changes to take effect\n\nClick OK to return to the Main Menu or Quit to quit RetroDECK."
@ -35,7 +33,7 @@ configurator_generic_dialog() {
# This dialog is for showing temporary messages before another process happens. # This dialog is for showing temporary messages before another process happens.
# USAGE: configurator_generic_dialog "title text" "info text" # USAGE: configurator_generic_dialog "title text" "info text"
log i "Showing a configurator_generic_dialog" log i "Showing a configurator_generic_dialog"
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "$1" \ --title "$1" \
--text="$2" --text="$2"
@ -45,7 +43,7 @@ configurator_generic_question_dialog() {
# This dialog provides a generic dialog for getting a response from a user. # This dialog provides a generic dialog for getting a response from a user.
# USAGE: $(configurator_generic_question_dialog "title text" "action text") # USAGE: $(configurator_generic_question_dialog "title text" "action text")
# This function will return a "true" if the user clicks "Yes", and "false" if they click "No". # This function will return a "true" if the user clicks "Yes", and "false" if they click "No".
choice=$(zenity --title "RetroDECK - $1" --question --no-wrap --cancel-label="No" --ok-label="Yes" \ choice=$(rd_zenity --title "RetroDECK - $1" --question --no-wrap --cancel-label="No" --ok-label="Yes" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--text="$2") --text="$2")
if [[ $? == "0" ]]; then if [[ $? == "0" ]]; then
@ -59,7 +57,7 @@ configurator_destination_choice_dialog() {
# This dialog is for making things easy for new users to move files to common locations. Gives the options for "Internal", "SD Card" and "Custom" locations. # This dialog is for making things easy for new users to move files to common locations. Gives the options for "Internal", "SD Card" and "Custom" locations.
# USAGE: $(configurator_destination_choice_dialog "folder being moved" "action text") # USAGE: $(configurator_destination_choice_dialog "folder being moved" "action text")
# This function returns one of the values: "Back" "Internal Storage" "SD Card" "Custom Location" # This function returns one of the values: "Back" "Internal Storage" "SD Card" "Custom Location"
choice=$(zenity --title "RetroDECK Configurator Utility - Moving $1 folder" --info --no-wrap --ok-label="Back" --extra-button="Internal Storage" --extra-button="SD Card" --extra-button="Custom Location" \ choice=$(rd_zenity --title "RetroDECK Configurator Utility - Moving $1 folder" --info --no-wrap --ok-label="Back" --extra-button="Internal Storage" --extra-button="SD Card" --extra-button="Custom Location" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--text="$2") --text="$2")
@ -75,7 +73,7 @@ configurator_reset_confirmation_dialog() {
# This dialog provides a confirmation for any reset functions, before the reset is actually performed. # This dialog provides a confirmation for any reset functions, before the reset is actually performed.
# USAGE: $(configurator_reset_confirmation_dialog "emulator being reset" "action text") # USAGE: $(configurator_reset_confirmation_dialog "emulator being reset" "action text")
# This function will return a "true" if the user clicks Confirm, and "false" if they click Cancel. # This function will return a "true" if the user clicks Confirm, and "false" if they click Cancel.
choice=$(zenity --title "RetroDECK Configurator Utility - Reset $1" --question --no-wrap --cancel-label="Cancel" --ok-label="Confirm" \ choice=$(rd_zenity --title "RetroDECK Configurator Utility - Reset $1" --question --no-wrap --cancel-label="Cancel" --ok-label="Confirm" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--text="$2") --text="$2")
if [[ $? == "0" ]]; then if [[ $? == "0" ]]; then
@ -135,7 +133,7 @@ configurator_move_folder_dialog() {
configurator_generic_dialog "RetroDECK Configurator - Move Folder" "The moving process was not completed, please try again." configurator_generic_dialog "RetroDECK Configurator - Move Folder" "The moving process was not completed, please try again."
fi fi
else # If there isn't enough space in the picked destination else # If there isn't enough space in the picked destination
zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ rd_zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Move Directories" \ --title "RetroDECK Configurator Utility - Move Directories" \
--text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space." --text="The destination directory you have selected does not have enough free space for the files you are trying to move.\n\nPlease select a new destination or free up some space."
@ -172,7 +170,7 @@ changelog_dialog() {
if [[ "$1" == "all" ]]; then if [[ "$1" == "all" ]]; then
xml sel -t -m "//release" -v "concat('RetroDECK version: ', @version)" -n -v "description" -n $rd_appdata | awk '{$1=$1;print}' | sed -e '/./b' -e :n -e 'N;s/\n$//;tn' > "/var/config/retrodeck/changelog.txt" xml sel -t -m "//release" -v "concat('RetroDECK version: ', @version)" -n -v "description" -n $rd_appdata | awk '{$1=$1;print}' | sed -e '/./b' -e :n -e 'N;s/\n$//;tn' > "/var/config/retrodeck/changelog.txt"
zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \ rd_zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Changelogs" \ --title "RetroDECK Changelogs" \
--filename="/var/config/retrodeck/changelog.txt" --filename="/var/config/retrodeck/changelog.txt"
@ -181,7 +179,7 @@ changelog_dialog() {
echo -e "In RetroDECK version $1, the following changes were made:\n$version_changelog" > "/var/config/retrodeck/changelog-partial.txt" 2>/dev/null echo -e "In RetroDECK version $1, the following changes were made:\n$version_changelog" > "/var/config/retrodeck/changelog-partial.txt" 2>/dev/null
zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \ rd_zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Changelogs" \ --title "RetroDECK Changelogs" \
--filename="/var/config/retrodeck/changelog-partial.txt" --filename="/var/config/retrodeck/changelog-partial.txt"
@ -192,7 +190,7 @@ get_cheevos_token_dialog() {
# This function will return a RetroAchvievements token from a valid username and password, will return "login failed" otherwise # This function will return a RetroAchvievements token from a valid username and password, will return "login failed" otherwise
# USAGE: get_cheevos_token_dialog # USAGE: get_cheevos_token_dialog
local cheevos_info=$(zenity --forms --title="Cheevos" \ local cheevos_info=$(rd_zenity --forms --title="Cheevos" \
--text="Username and password." \ --text="Username and password." \
--separator="^" \ --separator="^" \
--add-entry="Username" \ --add-entry="Username" \
@ -219,7 +217,7 @@ desktop_mode_warning() {
if [[ $(check_desktop_mode) == "true" && $desktop_mode_warning == "true" ]]; then if [[ $(check_desktop_mode) == "true" && $desktop_mode_warning == "true" ]]; then
local message='You appear to be running RetroDECK in the Steam Deck'\''s Desktop mode!\n\nSome functions of RetroDECK may not work properly in Desktop mode, such as the Steam Deck'\''s normal controls.\n\nRetroDECK is best enjoyed in Game mode!\n\nDo you still want to proceed?' local message='You appear to be running RetroDECK in the Steam Deck'\''s Desktop mode!\n\nSome functions of RetroDECK may not work properly in Desktop mode, such as the Steam Deck'\''s normal controls.\n\nRetroDECK is best enjoyed in Game mode!\n\nDo you still want to proceed?'
log i "Showing message:\n$message" log i "Showing message:\n$message"
choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Never show this again" \ choice=$(rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Never show this again" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Desktop Mode Warning" \ --title "RetroDECK Desktop Mode Warning" \
--text="$message") --text="$message")
@ -247,7 +245,7 @@ low_space_warning() {
if [[ "$used_percent" -ge 90 && -d "$HOME/retrodeck" ]]; then # If there is any RetroDECK data on the main drive to move if [[ "$used_percent" -ge 90 && -d "$HOME/retrodeck" ]]; then # If there is any RetroDECK data on the main drive to move
local message='Your main drive is over 90% full!\n\nIf your drive fills completely this can lead to data loss or system crash.\n\nPlease consider moving some RetroDECK folders to other storage locations using the Configurator.' local message='Your main drive is over 90% full!\n\nIf your drive fills completely this can lead to data loss or system crash.\n\nPlease consider moving some RetroDECK folders to other storage locations using the Configurator.'
log i "Showing message:\n$message" log i "Showing message:\n$message"
choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" --extra-button="Never show this again" \ choice=$(rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" --extra-button="Never show this again" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Low Space Warning" \ --title "RetroDECK Low Space Warning" \
--text="$message") --text="$message")

View file

@ -410,47 +410,44 @@ deploy_single_patch() {
cp -fv "$1" "$3" # Create a copy of the original file to be patched cp -fv "$1" "$3" # Create a copy of the original file to be patched
while IFS="^" read -r action current_section setting_name setting_value system_name while IFS="^" read -r action current_section setting_name setting_value system_name || [[ -n "$action" ]];
do do
if [[ ! $action == "#"* ]] && [[ ! -z "$action" ]]; then
case $action in
case $action in "disable_file" )
eval disable_file "$setting_name"
;;
"disable_file" ) "enable_file" )
eval disable_file "$setting_name" eval enable_file "$setting_name"
;; ;;
"enable_file" ) "add_setting_line" )
eval enable_file "$setting_name" add_setting_line "$3" "$setting_name" "$system_name" "$current_section"
;; ;;
"add_setting_line" ) "disable_setting" )
add_setting_line "$3" "$setting_name" "$system_name" "$current_section" disable_setting "$3" "$setting_name" "$system_name" "$current_section"
;; ;;
"disable_setting" ) "enable_setting" )
disable_setting "$3" "$setting_name" "$system_name" "$current_section" enable_setting "$3" "$setting_name" "$system_name" "$current_section"
;; ;;
"enable_setting" ) "change" )
enable_setting "$3" "$setting_name" "$system_name" "$current_section" if [[ "$setting_value" = \$* ]]; then # If patch setting value is a reference to an internal variable name
;; eval setting_value="$setting_value"
fi
set_setting_value "$3" "$setting_name" "$setting_value" "$system_name" "$current_section"
;;
"change" ) * )
if [[ "$setting_value" = \$* ]]; then # If patch setting value is a reference to an internal variable name log e "Config line malformed: $action"
eval setting_value="$setting_value" ;;
fi
set_setting_value "$3" "$setting_name" "$setting_value" "$system_name" "$current_section"
;;
*"#"* ) esac
# Comment line in patch file fi
;;
* )
echo "Config line malformed: $action"
;;
esac
done < "$2" done < "$2"
} }
@ -461,60 +458,58 @@ deploy_multi_patch() {
# Patch file format should be as follows, with optional entries in (). Optional settings can be left empty, but must still have ^ dividers: # Patch file format should be as follows, with optional entries in (). Optional settings can be left empty, but must still have ^ dividers:
# $action^($current_section)^$setting_name^$setting_value^$system_name^($config file) # $action^($current_section)^$setting_name^$setting_value^$system_name^($config file)
while IFS="^" read -r action current_section setting_name setting_value system_name config_file while IFS="^" read -r action current_section setting_name setting_value system_name config_file || [[ -n "$action" ]];
do do
case $action in if [[ ! $action == "#"* ]] && [[ ! -z "$action" ]]; then
case $action in
"disable_file" ) "disable_file" )
if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name
eval config_file="$config_file" eval config_file="$config_file"
fi fi
disable_file "$config_file" disable_file "$config_file"
;; ;;
"enable_file" ) "enable_file" )
if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name
eval config_file="$config_file" eval config_file="$config_file"
fi fi
enable_file "$config_file" enable_file "$config_file"
;; ;;
"add_setting_line" ) "add_setting_line" )
if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name
eval config_file="$config_file" eval config_file="$config_file"
fi fi
add_setting_line "$config_file" "$setting_name" "$system_name" "$current_section" add_setting_line "$config_file" "$setting_name" "$system_name" "$current_section"
;; ;;
"disable_setting" ) "disable_setting" )
if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name
eval config_file="$config_file" eval config_file="$config_file"
fi fi
disable_setting "$config_file" "$setting_name" "$system_name" "$current_section" disable_setting "$config_file" "$setting_name" "$system_name" "$current_section"
;; ;;
"enable_setting" ) "enable_setting" )
if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name if [[ "$config_file" = \$* ]]; then # If patch setting value is a reference to an internal variable name
eval config_file="$config_file" eval config_file="$config_file"
fi fi
enable_setting "$config_file" "$setting_name" "$system_name" "$current_section" enable_setting "$config_file" "$setting_name" "$system_name" "$current_section"
;; ;;
"change" ) "change" )
if [[ "$setting_value" = \$* ]]; then # If patch setting value is a reference to an internal variable name if [[ "$setting_value" = \$* ]]; then # If patch setting value is a reference to an internal variable name
eval setting_value="$setting_value" eval setting_value="$setting_value"
fi fi
set_setting_value "$config_file" "$setting_name" "$setting_value" "$system_name" "$current_section" set_setting_value "$config_file" "$setting_name" "$setting_value" "$system_name" "$current_section"
;; ;;
*"#"* ) * )
# Comment line in patch file log e "Config line malformed: $action"
;; ;;
* ) esac
echo "Config line malformed: $action" fi
;;
esac
done < "$1" done < "$1"
} }

View file

@ -7,12 +7,13 @@ source /app/libexec/checks.sh
source /app/libexec/compression.sh source /app/libexec/compression.sh
source /app/libexec/dialogs.sh source /app/libexec/dialogs.sh
source /app/libexec/logger.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/multi_user.sh
source /app/libexec/framework.sh source /app/libexec/framework.sh
source /app/libexec/post_update.sh source /app/libexec/post_update.sh
source /app/libexec/prepare_component.sh source /app/libexec/prepare_component.sh
source /app/libexec/presets.sh source /app/libexec/presets.sh
source /app/libexec/configurator_functions.sh
# Static variables # Static variables
rd_conf="/var/config/retrodeck/retrodeck.cfg" # RetroDECK config file path 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 data transfer temp files
godot_bios_files_checked="/var/config/retrodeck/godot/godot_bios_files_checked.tmp" 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 # Config files for emulators with single config files
@ -114,8 +118,7 @@ rpcs3vfsconf="/var/config/rpcs3/vfs.yml"
# Vita3k config files # Vita3k config files
vita3kconf="/var/data/Vita3K/config.yml" vita3kconf="/var/config/Vita3K/config.yml"
vita3kusrconfdir="$bios_folder/Vita3K/Vita3K"
# MAME-SA config files # MAME-SA config files
@ -131,6 +134,11 @@ if [[ ! -d "$rd_logs_folder/ES-DE" ]]; then
dir_prep "$rd_logs_folder/ES-DE" "$es_source_logs" dir_prep "$rd_logs_folder/ES-DE" "$es_source_logs"
fi 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 # 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 if [[ -f "$HOME/retrodeck/.lock" ]]; then
mv "$HOME/retrodeck/.lock" $lockfile mv "$HOME/retrodeck/.lock" $lockfile
@ -191,7 +199,6 @@ else
fi fi
conf_read conf_read
#tmplog_merger # This function is tempry(?) removed
# Verify rdhome is where it is supposed to be. # Verify rdhome is where it is supposed to be.
if [[ ! -d "$rdhome" ]]; then if [[ ! -d "$rdhome" ]]; then

View file

@ -86,11 +86,11 @@ log() {
esac esac
# Display the message in the terminal # Display the message in the terminal
echo -e "$colored_message" echo -e "$colored_message" >&2
# Write the log message to the log file # Write the log message to the log file
if [ ! -f "$logfile" ]; then 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" touch "$logfile"
fi fi
echo "$log_message" >> "$logfile" echo "$log_message" >> "$logfile"

View file

@ -2,7 +2,7 @@
multi_user_set_default_dialog() { multi_user_set_default_dialog() {
chosen_user="$1" chosen_user="$1"
choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="No and don't ask again" \ choice=$(rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="No and don't ask again" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Default User" \ --title "RetroDECK Default User" \
--text="Would you like to set $chosen_user as the default user?\n\nIf the current user cannot be determined from the system, the default will be used.\nThis normally only happens in Desktop Mode.\n\nIf you would like to be asked which user is playing every time, click \"No and don't ask again\"") --text="Would you like to set $chosen_user as the default user?\n\nIf the current user cannot be determined from the system, the default will be used.\nThis normally only happens in Desktop Mode.\n\nIf you would like to be asked which user is playing every time, click \"No and don't ask again\"")
@ -23,7 +23,7 @@ do
full_userlist=("${full_userlist[@]}" "$user") full_userlist=("${full_userlist[@]}" "$user")
done < <(ls -1 "$multi_user_data_folder") done < <(ls -1 "$multi_user_data_folder")
chosen_user=$(zenity \ chosen_user=$(rd_zenity \
--list --width=1200 --height=720 \ --list --width=1200 --height=720 \
--ok-label="Select User" \ --ok-label="Select User" \
--text="Choose the current user:" \ --text="Choose the current user:" \
@ -65,7 +65,7 @@ multi_user_disable_multi_user_mode() {
full_userlist=("${full_userlist[@]}" "$user") full_userlist=("${full_userlist[@]}" "$user")
done < <(ls -1 "$multi_user_data_folder") done < <(ls -1 "$multi_user_data_folder")
single_user=$(zenity \ single_user=$(rd_zenity \
--list --width=1200 --height=720 \ --list --width=1200 --height=720 \
--ok-label="Select User" \ --ok-label="Select User" \
--text="Choose the current user:" \ --text="Choose the current user:" \
@ -125,7 +125,7 @@ multi_user_determine_current_user() {
multi_user_setup_new_user multi_user_setup_new_user
else # If running in Desktop mode for the first time else # If running in Desktop mode for the first time
configurator_generic_dialog "RetroDECK Multi-User Mode" "The current user could not be determined from the system and there is no existing userlist.\n\nPlease enter the Steam account username (not profile name) into the next dialog, or run RetroDECK in game mode." configurator_generic_dialog "RetroDECK Multi-User Mode" "The current user could not be determined from the system and there is no existing userlist.\n\nPlease enter the Steam account username (not profile name) into the next dialog, or run RetroDECK in game mode."
if zenity --entry \ if rd_zenity --entry \
--title="Specify Steam username" \ --title="Specify Steam username" \
--text="Enter Steam username:" --text="Enter Steam username:"
then # User clicked "OK" then # User clicked "OK"
@ -149,7 +149,7 @@ multi_user_determine_current_user() {
multi_user_return_to_single_user() { multi_user_return_to_single_user() {
single_user="$1" single_user="$1"
echo "Returning to single-user mode for $single_user" log i "Returning to single-user mode for $single_user"
unlink "$saves_folder" unlink "$saves_folder"
unlink "$states_folder" unlink "$states_folder"
unlink "$rd_conf" unlink "$rd_conf"
@ -182,7 +182,7 @@ multi_user_return_to_single_user() {
multi_user_setup_new_user() { multi_user_setup_new_user() {
# TODO: RPCS3 one-offs # TODO: RPCS3 one-offs
echo "Setting up new user" log i "Setting up new user"
unlink "$saves_folder" unlink "$saves_folder"
unlink "$states_folder" unlink "$states_folder"
dir_prep "$multi_user_data_folder/$SteamAppUser/saves" "$saves_folder" dir_prep "$multi_user_data_folder/$SteamAppUser/saves" "$saves_folder"
@ -220,7 +220,7 @@ multi_user_setup_new_user() {
} }
multi_user_link_current_user_files() { multi_user_link_current_user_files() {
echo "Linking existing user" log i "Linking existing user"
ln -sfT "$multi_user_data_folder/$SteamAppUser/saves" "$saves_folder" ln -sfT "$multi_user_data_folder/$SteamAppUser/saves" "$saves_folder"
ln -sfT "$multi_user_data_folder/$SteamAppUser/states" "$states_folder" ln -sfT "$multi_user_data_folder/$SteamAppUser/states" "$states_folder"
ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf" ln -sfT "$multi_user_data_folder/$SteamAppUser/config/retrodeck/retrodeck.cfg" "$rd_conf"

View file

@ -8,10 +8,10 @@ directory_browse() {
while [ $path_selected == false ] while [ $path_selected == false ]
do do
local target="$(zenity --file-selection --title="Choose $1" --directory)" local target="$(rd_zenity --file-selection --title="Choose $1" --directory)"
if [ ! -z "$target" ] #yes if [ ! -z "$target" ] #yes
then then
zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ rd_zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \
--text="Directory $target chosen, is this correct?" --text="Directory $target chosen, is this correct?"
if [ $? == 0 ] if [ $? == 0 ]
then then
@ -20,7 +20,7 @@ directory_browse() {
break break
fi fi
else else
zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ rd_zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \
--text="No directory selected. Do you want to exit the selection process?" --text="No directory selected. Do you want to exit the selection process?"
if [ $? == 0 ] if [ $? == 0 ]
then then
@ -38,10 +38,10 @@ file_browse() {
while [ $file_selected == false ] while [ $file_selected == false ]
do do
local target="$(zenity --file-selection --title="Choose $1")" local target="$(rd_zenity --file-selection --title="Choose $1")"
if [ ! -z "$target" ] #yes if [ ! -z "$target" ] #yes
then then
zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ rd_zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \
--text="File $target chosen, is this correct?" --text="File $target chosen, is this correct?"
if [ $? == 0 ] if [ $? == 0 ]
then then
@ -50,7 +50,7 @@ file_browse() {
break break
fi fi
else else
zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \ rd_zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" \
--text="No file selected. Do you want to exit the selection process?" --text="No file selected. Do you want to exit the selection process?"
if [ $? == 0 ] if [ $? == 0 ]
then then
@ -89,13 +89,13 @@ move() {
rsync -a --remove-source-files --ignore-existing --mkpath "$source_dir" "$dest_dir" # Copy files but don't overwrite conflicts rsync -a --remove-source-files --ignore-existing --mkpath "$source_dir" "$dest_dir" # Copy files but don't overwrite conflicts
find "$source_dir" -type d -empty -delete # Cleanup empty folders that were left behind find "$source_dir" -type d -empty -delete # Cleanup empty folders that were left behind
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Move in Progress" \ --title "RetroDECK Configurator Utility - Move in Progress" \
--text="Moving directory $(basename "$1") to new location of $2, please wait." --text="Moving directory $(basename "$1") to new location of $2, please wait."
if [[ -d "$source_dir" ]]; then # Some conflicting files remain if [[ -d "$source_dir" ]]; then # Some conflicting files remain
zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \ rd_zenity --icon-name=net.retrodeck.retrodeck --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Move Directories" \ --title "RetroDECK Configurator Utility - Move Directories" \
--text="There were some conflicting files that were not moved.\n\nAll files that could be moved are in the new location,\nany files that already existed at the new location have not been moved and will need to be handled manually." --text="There were some conflicting files that were not moved.\n\nAll files that could be moved are in the new location,\nany files that already existed at the new location have not been moved and will need to be handled manually."
@ -133,7 +133,7 @@ download_file() {
( (
wget "$1" -O "$2" -q wget "$1" -O "$2" -q
) | ) |
zenity --progress \ rd_zenity --progress \
--title="Downloading File" \ --title="Downloading File" \
--text="Downloading $3..." \ --text="Downloading $3..." \
--pulsate \ --pulsate \
@ -153,7 +153,6 @@ update_rd_conf() {
# STAGE 2: To handle presets sections that use duplicate setting names # STAGE 2: To handle presets sections that use duplicate setting names
mv -f $rd_conf $rd_conf_backup # Backup config file agiain before update but after Stage 1 expansion
generate_single_patch $rd_defaults $rd_conf_backup $rd_update_patch retrodeck # Create a patch file for differences between defaults and current user settings generate_single_patch $rd_defaults $rd_conf_backup $rd_update_patch retrodeck # Create a patch file for differences between defaults and current user settings
sed -i '/change^^version/d' $rd_update_patch # Remove version line from temporary patch file sed -i '/change^^version/d' $rd_update_patch # Remove version line from temporary patch file
deploy_single_patch $rd_defaults $rd_update_patch $rd_conf # Re-apply user settings to defaults file deploy_single_patch $rd_defaults $rd_update_patch $rd_conf # Re-apply user settings to defaults file
@ -286,34 +285,9 @@ dir_prep() {
log i "$symlink is now $real" log i "$symlink is now $real"
} }
check_bios_files() { rd_zenity() {
# 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 # This function replaces the standard 'zenity' command and filters out annoying GTK errors on Steam Deck
# There is a "basic" and "expert" mode which outputs different levels of data zenity 2> >(grep -v 'Gtk' >&2) "$@"
# 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() { update_rpcs3_firmware() {
@ -343,7 +317,7 @@ make_name_pretty() {
if [[ ! -z "$system" ]]; then if [[ ! -z "$system" ]]; then
IFS='^' read -r internal_name pretty_name < <(echo "$system") IFS='^' read -r internal_name pretty_name < <(echo "$system")
else else
pretty_name="$system" pretty_name="$1"
fi fi
echo "$pretty_name" echo "$pretty_name"
} }
@ -353,10 +327,10 @@ finit_browse() {
path_selected=false path_selected=false
while [ $path_selected == false ] while [ $path_selected == false ]
do do
local target="$(zenity --file-selection --title="Choose RetroDECK data directory location" --directory)" local target="$(rd_zenity --file-selection --title="Choose RetroDECK data directory location" --directory)"
if [[ ! -z "$target" ]]; then if [[ ! -z "$target" ]]; then
if [[ -w "$target" ]]; then if [[ -w "$target" ]]; then
zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \ rd_zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \
--cancel-label="No" \ --cancel-label="No" \
--ok-label "Yes" \ --ok-label "Yes" \
--text="Your RetroDECK data folder will be:\n\n$target/retrodeck\n\nis that ok?" --text="Your RetroDECK data folder will be:\n\n$target/retrodeck\n\nis that ok?"
@ -366,7 +340,7 @@ do
echo "$target/retrodeck" echo "$target/retrodeck"
break break
else else
zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" --text="Do you want to quit?" rd_zenity --question --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" --cancel-label="No" --ok-label "Yes" --text="Do you want to quit?"
if [ $? == 0 ] # yes, quit if [ $? == 0 ] # yes, quit
then then
quit_retrodeck quit_retrodeck
@ -374,7 +348,7 @@ do
fi fi
fi fi
else else
zenity --error --no-wrap \ rd_zenity --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \ --title "RetroDECK" \
--ok-label "Quit" \ --ok-label "Quit" \
@ -387,13 +361,15 @@ done
finit_user_options_dialog() { finit_user_options_dialog() {
finit_available_options=() finit_available_options=()
while IFS="^" read -r enabled option_name option_desc option_tag while IFS="^" read -r enabled option_name option_desc option_tag || [[ -n "$enabled" ]];
do do
finit_available_options=("${finit_available_options[@]}" "$enabled" "$option_name" "$option_desc" "$option_tag") if [[ ! $enabled == "#"* ]] && [[ ! -z "$enabled" ]]; then
finit_available_options=("${finit_available_options[@]}" "$enabled" "$option_name" "$option_desc" "$option_tag")
fi
done < $finit_options_list done < $finit_options_list
local choices=$(zenity \ local choices=$(rd_zenity \
--list --width=1200 --height=720 \ --list --width=1200 --height=720 \
--checklist --hide-column=4 --ok-label="Confirm Selections" --extra-button="Enable All" \ --checklist --hide-column=4 --ok-label="Confirm Selections" --extra-button="Enable All" \
--separator=" " --print-column=4 \ --separator=" " --print-column=4 \
@ -437,7 +413,7 @@ finit() {
if [ ! -d "$sdcard" ] # SD Card path is not existing if [ ! -d "$sdcard" ] # SD Card path is not existing
then then
log e "SD card not found" log e "SD card not found"
zenity --error --no-wrap \ rd_zenity --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \ --title "RetroDECK" \
--ok-label "Browse" \ --ok-label "Browse" \
@ -450,7 +426,7 @@ finit() {
elif [ ! -w "$sdcard" ] #SD card found but not writable elif [ ! -w "$sdcard" ] #SD card found but not writable
then then
log e "SD card found but not writable" log e "SD card found but not writable"
zenity --error --no-wrap \ rd_zenity --error --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \ --title "RetroDECK" \
--ok-label "Quit" \ --ok-label "Quit" \
@ -465,7 +441,7 @@ finit() {
"Custom Location" ) "Custom Location" )
log i "Custom Location selected" log i "Custom Location selected"
zenity --info --no-wrap \ rd_zenity --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK" \ --title "RetroDECK" \
--ok-label "Browse" \ --ok-label "Browse" \
@ -479,6 +455,8 @@ finit() {
esac esac
log i "\"retrodeck\" folder will be located in \"$rdhome\""
prepare_component "reset" "retrodeck" # Parse the [paths] section of retrodeck.cfg and set the value of / create all needed folders prepare_component "reset" "retrodeck" # Parse the [paths] section of retrodeck.cfg and set the value of / create all needed folders
conf_write # Write the new values to retrodeck.cfg conf_write # Write the new values to retrodeck.cfg
@ -494,7 +472,7 @@ finit() {
configurator_generic_dialog "Vita3K Firmware Install" "You have chosen to install the Vita3K firmware during the RetroDECK first setup.\n\nThis process will take several minutes and requires network access.\n\nVita3K will be launched automatically at the end of the RetroDECK setup process.\nOnce the firmware is installed, please close the emulator to finish the process." configurator_generic_dialog "Vita3K Firmware Install" "You have chosen to install the Vita3K firmware during the RetroDECK first setup.\n\nThis process will take several minutes and requires network access.\n\nVita3K will be launched automatically at the end of the RetroDECK setup process.\nOnce the firmware is installed, please close the emulator to finish the process."
fi fi
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --title "RetroDECK" \
--text="RetroDECK will now install the needed files, which can take up to one minute.\nRetroDECK will start once the process is completed.\n\nPress OK to continue." --text="RetroDECK will now install the needed files, which can take up to one minute.\nRetroDECK will start once the process is completed.\n\nPress OK to continue."
@ -522,7 +500,7 @@ finit() {
fi fi
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Finishing Initialization" \ --title "RetroDECK Finishing Initialization" \
--text="RetroDECK is finishing the initial setup process, please wait." --text="RetroDECK is finishing the initial setup process, please wait."
@ -585,13 +563,12 @@ deploy_helper_files() {
# This script will distribute helper documentation files throughout the filesystem according to the $helper_files_list # This script will distribute helper documentation files throughout the filesystem according to the $helper_files_list
# USAGE: deploy_helper_files # USAGE: deploy_helper_files
while IFS='^' read -r file dest while IFS='^' read -r file dest || [[ -n "$file" ]];
do do
if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then if [[ ! "$file" == "#"* ]] && [[ ! -z "$file" ]]; then
eval current_dest="$dest" eval current_dest="$dest"
cp -f "$helper_files_folder/$file" "$current_dest/$file" cp -f "$helper_files_folder/$file" "$current_dest/$file"
fi fi
done < "$helper_files_list" done < "$helper_files_list"
} }
@ -604,13 +581,15 @@ easter_eggs() {
current_day=$(date +"%0m%0d") # Read the current date in a format that can be calculated in ranges current_day=$(date +"%0m%0d") # Read the current date in a format that can be calculated in ranges
current_time=$(date +"%0H%0M") # Read the current time in a format that can be calculated in ranges current_time=$(date +"%0H%0M") # Read the current time in a format that can be calculated in ranges
if [[ ! -z $(cat $easter_egg_checklist) ]]; then if [[ ! -z $(cat $easter_egg_checklist) ]]; then
while IFS="^" read -r start_date end_date start_time end_time splash_file # Read Easter Egg checklist file and separate values while IFS="^" read -r start_date end_date start_time end_time splash_file || [[ -n "$start_date" ]]; # Read Easter Egg checklist file and separate values
do do
if [[ "$((10#$current_day))" -ge "$((10#$start_date))" && "$((10#$current_day))" -le "$((10#$end_date))" && "$((10#$current_time))" -ge "$((10#$start_time))" && "$((10#$current_time))" -le "$((10#$end_time))" ]]; then # If current line specified date/time matches current date/time, set $splash_file to be deployed if [[ ! $start_date == "#"* ]] && [[ ! -z "$start_date" ]]; then
new_splash_file="$splashscreen_dir/$splash_file" if [[ "$((10#$current_day))" -ge "$((10#$start_date))" && "$((10#$current_day))" -le "$((10#$end_date))" && "$((10#$current_time))" -ge "$((10#$start_time))" && "$((10#$current_time))" -le "$((10#$end_time))" ]]; then # If current line specified date/time matches current date/time, set $splash_file to be deployed
break new_splash_file="$splashscreen_dir/$splash_file"
else # When there are no matches, the default splash screen is set to deploy break
new_splash_file="$default_splash_file" else # When there are no matches, the default splash screen is set to deploy
new_splash_file="$default_splash_file"
fi
fi fi
done < $easter_egg_checklist done < $easter_egg_checklist
else else
@ -699,7 +678,7 @@ ponzu() {
rm -rf "$rdhome/ponzu" rm -rf "$rdhome/ponzu"
} }
ponzu_remove(){ ponzu_remove() {
# Call me with yuzu or citra and I will remove them # Call me with yuzu or citra and I will remove them
@ -739,7 +718,7 @@ branch_selector() {
# Display branches in a Zenity list dialog # Display branches in a Zenity list dialog
selected_branch=$( selected_branch=$(
zenity --list \ rd_zenity --list \
--icon-name=net.retrodeck.retrodeck \ --icon-name=net.retrodeck.retrodeck \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Cooker Branch - Select Branch" \ --title "RetroDECK Configurator Cooker Branch - Select Branch" \
@ -749,7 +728,7 @@ branch_selector() {
# Display warning message # Display warning message
if [ $selected_branch ]; then if [ $selected_branch ]; then
zenity --question --icon-name=net.retrodeck.retrodeck --no-wrap \ rd_zenity --question --icon-name=net.retrodeck.retrodeck --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Cooker Branch - Switch Branch" \ --title "RetroDECK Configurator Cooker Branch - Switch Branch" \
--text="Are you sure you want to move to \"$selected_branch\" branch?" --text="Are you sure you want to move to \"$selected_branch\" branch?"
@ -770,7 +749,7 @@ branch_selector() {
flatpak-spawn --host flatpak install --user --bundle --noninteractive -y "$rdhome/RetroDECK_Updates/RetroDECK-cooker.flatpak" flatpak-spawn --host flatpak install --user --bundle --noninteractive -y "$rdhome/RetroDECK_Updates/RetroDECK-cooker.flatpak"
rm -rf "$rdhome/RetroDECK_Updates" # Cleanup old bundles to save space rm -rf "$rdhome/RetroDECK_Updates" # Cleanup old bundles to save space
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Updater" \ --title "RetroDECK Updater" \
--text="RetroDECK is updating to the latest \"$selected_branch\" version, please wait." --text="RetroDECK is updating to the latest \"$selected_branch\" version, please wait."

View file

@ -313,8 +313,7 @@ post_update() {
set_setting_value "$es_settings" "UserThemeDirectory" "$rdhome/ES-DE/themes" "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/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/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" mv -f "$rdhome/gamelists/"* "$rdhome/ES-DE/gamelists" && log d "Move of \"$rdhome/gamelists/\" completed" && rm -rf "$rdhome/gamelists"
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\"" 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" create_dir "$bios_folder/mame-sa/samples"
@ -339,6 +338,17 @@ post_update() {
fi fi
fi fi
if [[ $(check_version_is_older_than "0.8.2b") == "true" ]]; then
log i "Vita3K changed some paths, reflecting them: moving \"/var/data/Vita3K\" in \"/var/config/Vita3K\""
mv -f "/var/data/Vita3K" "/var/config/Vita3K"
log i "Moving ES-DE downloaded_media, gamelist, and themes from \"$rdhome\" to \"$rdhome/ES-DE\" due to a RetroDECK Framework bug"
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 "Since in this version we moved to a PR build of Ryujinx we need to symlink it."
ln -sv $ryujinxconf "$(dirname $ryujinxconf)/PRConfig.json"
fi
# if [[ $(check_version_is_older_than "0.9.0b") == "true" ]]; then # if [[ $(check_version_is_older_than "0.9.0b") == "true" ]]; then
# # Placeholder for version 0.9.0b # # Placeholder for version 0.9.0b
# rm /var/config/emulationstation/.emulationstation # remving the old symlink to .emulationstation as it might be not needed anymore # rm /var/config/emulationstation/.emulationstation # remving the old symlink to .emulationstation as it might be not needed anymore
@ -352,7 +362,10 @@ post_update() {
# log AND ZENITY "Found Cemu keys.txt" in "/var/data/Cemu/keys.txt", for a better compatibility is better to move it into "$bios_folder/cemu/mlc/keys.txt, do you want to continue? # log AND ZENITY "Found Cemu keys.txt" in "/var/data/Cemu/keys.txt", for a better compatibility is better to move it into "$bios_folder/cemu/mlc/keys.txt, do you want to continue?
# if yes: mv "/var/data/Cemu/keys.txt" "$bios_folder/cemu/mlc/keys.txt" # if yes: mv "/var/data/Cemu/keys.txt" "$bios_folder/cemu/mlc/keys.txt"
# ln -s "$bios_folder/cemu/mlc/keys.txt" "/var/data/Cemu/keys.txt" <--- AND THIS SHOULD BE EVEN PUT IN THE PREPARATION SCRIPT # ln -s "$bios_folder/cemu/mlc/keys.txt" "/var/data/Cemu/keys.txt" <--- AND THIS SHOULD BE EVEN PUT IN THE PREPARATION SCRIPT
# fi # fi
# TODO: is this true?
# log i "Since in this version we restored Ryujinx to a main buikd we don't need the symlink anymore."
# rm "$(dirname $ryujinxconf)/PRConfig.json"
# fi # fi
# The following commands are run every time. # The following commands are run every time.
@ -372,7 +385,7 @@ post_update() {
deploy_helper_files deploy_helper_files
build_retrodeck_current_presets build_retrodeck_current_presets
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK - Upgrade Process" \ --title "RetroDECK - Upgrade Process" \
--width=400 --height=200 \ --width=400 --height=200 \

View file

@ -12,16 +12,19 @@ prepare_component() {
action="$1" action="$1"
component=$(echo "$2" | tr '[:upper:]' '[:lower:]') component=$(echo "$2" | tr '[:upper:]' '[:lower:]')
call_source="$3" call_source="$3"
component_found="false"
log d "Preparing component: \"$component\", action: \"$action\"" log d "Preparing component: \"$component\", action: \"$action\""
if [[ "$component" == "retrodeck" ]]; then if [[ "$component" == "retrodeck" ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Update the paths of all folders in retrodeck.cfg and create them if [[ "$action" == "reset" ]]; then # Update the paths of all folders in retrodeck.cfg and create them
while read -r config_line; do while read -r config_line; do
local current_setting_name=$(get_setting_name "$config_line" "retrodeck") local current_setting_name=$(get_setting_name "$config_line" "retrodeck")
if [[ ! $current_setting_name =~ (rdhome|sdcard) ]]; then # Ignore these locations if [[ ! $current_setting_name =~ (rdhome|sdcard) ]]; then # Ignore these locations
local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "paths") local current_setting_value=$(get_setting_value "$rd_conf" "$current_setting_name" "retrodeck" "paths")
declare -g "$current_setting_name=$rdhome/$(basename $current_setting_value)" declare -g "$current_setting_name=$rdhome/${current_setting_value#*retrodeck/}" #removes everything until "retrodeck" and adds the actual retrodeck folder
log d "Setting: $current_setting_name=$current_setting_value"
if [[ ! $current_setting_name == "logs_folder" ]]; then # Don't create a logs folder normally, we want to maintain the current files exactly to not lose early-install logs. if [[ ! $current_setting_name == "logs_folder" ]]; then # Don't create a logs folder normally, we want to maintain the current files exactly to not lose early-install logs.
create_dir "$rdhome/$(basename $current_setting_value)" create_dir "$rdhome/$(basename $current_setting_value)"
else # Log folder-specific actions else # Log folder-specific actions
@ -31,8 +34,8 @@ prepare_component() {
fi fi
fi fi
done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f') done < <(grep -v '^\s*$' $rd_conf | awk '/^\[paths\]/{f=1;next} /^\[/{f=0} f')
create_dir "/var/config/retrodeck/godot" create_dir "/var/config/retrodeck/godot" # TODO: what is this for? Can we delete it or add it to the retrodeck.cfg so the folder will be created by the above script?
fi fi
if [[ "$action" == "postmove" ]]; then # Update the paths of any folders that came with the retrodeck folder during a move if [[ "$action" == "postmove" ]]; then # Update the paths of any folders that came with the retrodeck folder during a move
while read -r config_line; do while read -r config_line; do
@ -49,9 +52,10 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(es-de|all)$ ]]; then # For use after ESDE-related folders are moved or a reset if [[ "$component" =~ ^(es-de|all)$ ]]; then # For use after ESDE-related folders are moved or a reset
log i "--------------------------------" component_found="true"
log i "Prepearing ES-DE" log i "--------------------------------"
log i "--------------------------------" log i "Prepearing ES-DE"
log i "--------------------------------"
if [[ "$action" == "reset" ]]; then if [[ "$action" == "reset" ]]; then
rm -rf /var/config/ES-DE rm -rf /var/config/ES-DE
create_dir /var/config/ES-DE/settings create_dir /var/config/ES-DE/settings
@ -77,9 +81,10 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(retroarch|all)$ ]]; then if [[ "$component" =~ ^(retroarch|all)$ ]]; then
log i "--------------------------------" component_found="true"
log i "Prepearing RetroArch" log i "--------------------------------"
log i "--------------------------------" log i "Prepearing RetroArch"
log i "--------------------------------"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
if [[ $multi_user_mode == "true" ]]; then # Multi-user actions if [[ $multi_user_mode == "true" ]]; then # Multi-user actions
create_dir -d "$multi_user_data_folder/$SteamAppUser/config/retroarch" create_dir -d "$multi_user_data_folder/$SteamAppUser/config/retroarch"
@ -120,7 +125,7 @@ prepare_component() {
create_dir "$bios_folder/fbneo/cheats" create_dir "$bios_folder/fbneo/cheats"
create_dir "$bios_folder/fbneo/blend" create_dir "$bios_folder/fbneo/blend"
dir_prep "$mods_folder/FBNeo" "$bios_folder/fbneo/patched" dir_prep "$mods_folder/FBNeo" "$bios_folder/fbneo/patched"
# PPSSPP # PPSSPP
log i "--------------------------------" log i "--------------------------------"
log i "Prepearing PPSSPP_LIBRETRO" log i "Prepearing PPSSPP_LIBRETRO"
@ -168,11 +173,11 @@ prepare_component() {
set_setting_value "$ra_scummvm_conf" "themepath" "$mods_folder/RetroArch/ScummVM/theme" "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" "savepath" "$saves_folder/scummvm" "libretro_scummvm" "scummvm"
set_setting_value "$ra_scummvm_conf" "browser_lastpath" "$roms_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-Mesen" "/var/config/retroarch/system/HdPacks"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache" dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/cache" "/var/config/retroarch/system/Mupen64plus/cache"
dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture" dir_prep "$texture_packs_folder/RetroArch-Mupen64Plus/hires_texture" "/var/config/retroarch/system/Mupen64plus/hires_texture"
# Reset default preset settings # Reset default preset settings
set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "cheevos")" "retrodeck" "cheevos" set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "cheevos")" "retrodeck" "cheevos"
set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "cheevos_hardcore")" "retrodeck" "cheevos_hardcore" set_setting_value "$rd_conf" "retroarch" "$(get_setting_value "$rd_defaults" "retroarch" "retrodeck" "cheevos_hardcore")" "retrodeck" "cheevos_hardcore"
@ -211,6 +216,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(citra|citra-emu|all)$ ]]; then if [[ "$component" =~ ^(citra|citra-emu|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------" log i "------------------------"
log i "Prepearing CITRA" log i "Prepearing CITRA"
@ -244,7 +250,7 @@ prepare_component() {
set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit" set_setting_value "$rd_conf" "citra" "$(get_setting_value "$rd_defaults" "citra" "retrodeck" "ask_to_exit")" "retrodeck" "ask_to_exit"
fi fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands if [[ "$action" == "postmove" ]]; then # Run only post-move commands
dir_prep "$rdhome/bios/citra/sysdata" "/var/data/citra-emu/sysdata" dir_prep "$bios_folder/citra/sysdata" "/var/data/citra-emu/sysdata"
dir_prep "$rdhome/logs/citra" "/var/data/citra-emu/log" dir_prep "$rdhome/logs/citra" "/var/data/citra-emu/log"
dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods" dir_prep "$mods_folder/Citra" "/var/data/citra-emu/load/mods"
dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures" dir_prep "$texture_packs_folder/Citra" "/var/data/citra-emu/load/textures"
@ -256,6 +262,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(cemu|all)$ ]]; then if [[ "$component" =~ ^(cemu|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Prepearing CEMU" log i "Prepearing CEMU"
@ -283,6 +290,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(dolphin|dolphin-emu|all)$ ]]; then if [[ "$component" =~ ^(dolphin|dolphin-emu|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Prepearing DOLPHIN" log i "Prepearing DOLPHIN"
@ -336,6 +344,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(duckstation|all)$ ]]; then if [[ "$component" =~ ^(duckstation|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------" log i "------------------------"
log i "Prepearing DUCKSTATION" log i "Prepearing DUCKSTATION"
@ -381,6 +390,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(melonds|all)$ ]]; then if [[ "$component" =~ ^(melonds|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Prepearing MELONDS" log i "Prepearing MELONDS"
@ -419,6 +429,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(pcsx2|all)$ ]]; then if [[ "$component" =~ ^(pcsx2|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Prepearing PCSX2" log i "Prepearing PCSX2"
@ -463,6 +474,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(pico8|pico-8|all)$ ]]; then if [[ "$component" =~ ^(pico8|pico-8|all)$ ]]; then
component_found="true"
if [[ ("$action" == "reset") || ("$action" == "postmove") ]]; then 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 "$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) 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)
@ -473,6 +485,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(ppsspp|all)$ ]]; then if [[ "$component" =~ ^(ppsspp|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------" log i "------------------------"
log i "Prepearing PPSSPPSDL" log i "Prepearing PPSSPPSDL"
@ -501,6 +514,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(primehack|all)$ ]]; then if [[ "$component" =~ ^(primehack|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Prepearing Primehack" log i "Prepearing Primehack"
@ -544,6 +558,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(rpcs3|all)$ ]]; then if [[ "$component" =~ ^(rpcs3|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------" log i "------------------------"
log i "Prepearing RPCS3" log i "Prepearing RPCS3"
@ -580,6 +595,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(ryujinx|all)$ ]]; then 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 # 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. # 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 if [[ "$action" == "reset" ]]; then # Run reset-only commands
@ -612,6 +628,9 @@ prepare_component() {
dir_prep "$saves_folder/switch/ryujinx/sdcard" "/var/config/Ryujinx/sdcard" dir_prep "$saves_folder/switch/ryujinx/sdcard" "/var/config/Ryujinx/sdcard"
dir_prep "$bios_folder/switch/firmware" "/var/config/Ryujinx/bis/system/Contents/registered" dir_prep "$bios_folder/switch/firmware" "/var/config/Ryujinx/bis/system/Contents/registered"
dir_prep "$bios_folder/switch/keys" "/var/config/Ryujinx/system" dir_prep "$bios_folder/switch/keys" "/var/config/Ryujinx/system"
# TODO: delete these two lines after Ryujinx is back to a proper build
log i "Since in this version we moved to a PR build of Ryujinx we need to symlink it." # TODO: deleteme later
ln -sv $ryujinxconf "$(dirname $ryujinxconf)/PRConfig.json" # TODO: deleteme later
fi fi
fi fi
# if [[ "$action" == "reset" ]] || [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves # if [[ "$action" == "reset" ]] || [[ "$action" == "postmove" ]]; then # Run commands that apply to both resets and moves
@ -624,6 +643,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(yuzu|all)$ ]]; then if [[ "$component" =~ ^(yuzu|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Prepearing YUZU" log i "Prepearing YUZU"
@ -677,6 +697,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(xemu|all)$ ]]; then if [[ "$component" =~ ^(xemu|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "------------------------" log i "------------------------"
log i "Prepearing XEMU" log i "Prepearing XEMU"
@ -721,6 +742,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(vita3k|all)$ ]]; then if [[ "$component" =~ ^(vita3k|all)$ ]]; then
component_found="true"
if [[ "$action" == "reset" ]]; then # Run reset-only commands if [[ "$action" == "reset" ]]; then # Run reset-only commands
log i "----------------------" log i "----------------------"
log i "Prepearing Vita3K" log i "Prepearing Vita3K"
@ -729,22 +751,23 @@ prepare_component() {
log d "Figure out what Vita3k needs for multi-user" log d "Figure out what Vita3k needs for multi-user"
else # Single-user actions else # Single-user actions
# NOTE: the component is writing in "." so it must be placed in the rw filesystem. A symlink of the binary is already placed in /app/bin/Vita3K # NOTE: the component is writing in "." so it must be placed in the rw filesystem. A symlink of the binary is already placed in /app/bin/Vita3K
rm -rf "/var/data/Vita3K" rm -rf "/var/config/Vita3K"
create_dir "/var/data/Vita3K/Vita3K" create_dir "/var/config/Vita3K"
cp -fvr "$emuconfigs/vita3k/config.yml" "/var/data/Vita3K" # component config cp -fvr "$emuconfigs/vita3k/config.yml" "$vita3kconf" # component config
cp -fvr "$emuconfigs/vita3k/ux0" "$bios_folder/Vita3K/Vita3K" # User config cp -fvr "$emuconfigs/vita3k/ux0" "$bios_folder/Vita3K/" # User config
set_setting_value "$vita3kconf" "pref-path" "$rdhome/bios/Vita3K/Vita3K/" "vita3k" set_setting_value "$vita3kconf" "pref-path" "$bios_folder/Vita3K/" "vita3k"
fi fi
# Shared actions # Shared actions
dir_prep "$saves_folder/psvita/vita3k" "$bios_folder/Vita3K/Vita3K/ux0/user/00/savedata" # Multi-user safe? dir_prep "$saves_folder/psvita/vita3k" "$bios_folder/Vita3K/ux0/user/00/savedata" # Multi-user safe?
fi fi
if [[ "$action" == "postmove" ]]; then # Run only post-move commands if [[ "$action" == "postmove" ]]; then # Run only post-move commands
dir_prep "$saves_folder/psvita/vita3k" "$bios_folder/Vita3K/Vita3K/ux0/user/00/savedata" # Multi-user safe? dir_prep "$saves_folder/psvita/vita3k" "$bios_folder/Vita3K/ux0/user/00/savedata" # Multi-user safe?
set_setting_value "$vita3kconf" "pref-path" "$rdhome/bios/Vita3K/Vita3K/" "vita3k" set_setting_value "$vita3kconf" "pref-path" "$bios_folder/Vita3K/" "vita3k"
fi fi
fi fi
if [[ "$component" =~ ^(mame|all)$ ]]; then if [[ "$component" =~ ^(mame|all)$ ]]; then
component_found="true"
# TODO: do a proper script # TODO: do a proper script
# This is just a placeholder script to test the emulator's flow # This is just a placeholder script to test the emulator's flow
log i "----------------------" log i "----------------------"
@ -814,6 +837,7 @@ prepare_component() {
fi fi
if [[ "$component" =~ ^(gzdoom|all)$ ]]; then if [[ "$component" =~ ^(gzdoom|all)$ ]]; then
component_found="true"
# TODO: do a proper script # TODO: do a proper script
# This is just a placeholder script to test the emulator's flow # This is just a placeholder script to test the emulator's flow
log i "----------------------" log i "----------------------"
@ -824,7 +848,7 @@ prepare_component() {
create_dir "/var/data/gzdoom/audio/midi" create_dir "/var/data/gzdoom/audio/midi"
create_dir "/var/data/gzdoom/audio/fm_banks" create_dir "/var/data/gzdoom/audio/fm_banks"
create_dir "/var/data/gzdoom/audio/soundfonts" create_dir "/var/data/gzdoom/audio/soundfonts"
create_dir "$rdhome/bios/gzdoom" create_dir "$bios_folder/gzdoom"
cp -fvr "$emuconfigs/gzdoom/gzdoom.ini" "/var/config/gzdoom" cp -fvr "$emuconfigs/gzdoom/gzdoom.ini" "/var/config/gzdoom"
@ -833,16 +857,7 @@ prepare_component() {
sed -i 's#RETRODECKSAVESDIR#'$saves_folder'#g' "/var/config/gzdoom/gzdoom.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON sed -i 's#RETRODECKSAVESDIR#'$saves_folder'#g' "/var/config/gzdoom/gzdoom.ini" # This is an unfortunate one-off because set_setting_value does not currently support JSON
fi fi
if [[ "$component" =~ ^(boilr|all)$ ]]; then if [[ $component_found == "false" ]]; then
log i "----------------------"
log i "Prepearing BOILR"
log i "----------------------"
create_dir "/var/config/boilr"
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
log e "Supplied component $component not found, not resetting" log e "Supplied component $component not found, not resetting"
fi fi

View file

@ -4,30 +4,9 @@ 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 # 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" # USAGE: change_preset_dialog "$preset"
local preset="$1" build_preset_list_options "$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 choice=$(rd_zenity \
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")
choice=$(zenity \
--list --width=1200 --height=720 \ --list --width=1200 --height=720 \
--checklist \ --checklist \
--separator="," \ --separator="," \
@ -42,7 +21,56 @@ change_preset_dialog() {
if [[ ! -z $choice || "$rc" == 0 ]]; then if [[ ! -z $choice || "$rc" == 0 ]]; then
( (
IFS="," read -ra choices <<< "$choice" make_preset_changes
) |
rd_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
log i "No preset 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 for emulator in "${all_systems[@]}"; do
if [[ " ${choices[*]} " =~ " ${emulator} " && ! " ${current_enabled_systems[*]} " =~ " ${emulator} " ]]; then if [[ " ${choices[*]} " =~ " ${emulator} " && ! " ${current_enabled_systems[*]} " =~ " ${emulator} " ]]; then
changed_systems=("${changed_systems[@]}" "$emulator") changed_systems=("${changed_systems[@]}" "$emulator")
@ -51,11 +79,14 @@ change_preset_dialog() {
fi fi
set_setting_value "$rd_conf" "$emulator" "true" "retrodeck" "$preset" set_setting_value "$rd_conf" "$emulator" "true" "retrodeck" "$preset"
# Check for conflicting presets for this system # Check for conflicting presets for this system
while IFS=: read -r preset_being_checked known_incompatible_preset; do while IFS=: read -r preset_being_checked known_incompatible_preset || [[ -n "$preset_being_checked" ]];
if [[ "$preset" == "$preset_being_checked" ]]; then do
if [[ $(get_setting_value "$rd_conf" "$emulator" "retrodeck" "$known_incompatible_preset") == "true" ]]; then if [[ ! $preset_being_checked == "#"* ]] && [[ ! -z "$preset_being_checked" ]]; then
changed_presets=("${changed_presets[@]}" "$known_incompatible_preset") if [[ "$preset" == "$preset_being_checked" ]]; then
set_setting_value "$rd_conf" "$emulator" "false" "retrodeck" "$known_incompatible_preset" if [[ $(get_setting_value "$rd_conf" "$emulator" "retrodeck" "$known_incompatible_preset") == "true" ]]; then
changed_presets=("${changed_presets[@]}" "$known_incompatible_preset")
set_setting_value "$rd_conf" "$emulator" "false" "retrodeck" "$known_incompatible_preset"
fi
fi fi
fi fi
done < "$incompatible_presets_reference_list" done < "$incompatible_presets_reference_list"
@ -71,14 +102,6 @@ change_preset_dialog() {
for emulator in "${changed_systems[@]}"; do for emulator in "${changed_systems[@]}"; do
build_preset_config $emulator ${changed_presets[*]} build_preset_config $emulator ${changed_presets[*]}
done 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() { build_preset_config() {
@ -96,81 +119,83 @@ build_preset_config() {
local read_system_name=$(get_setting_name "$system_line") local read_system_name=$(get_setting_name "$system_line")
if [[ "$read_system_name" == "$system_being_changed" ]]; then if [[ "$read_system_name" == "$system_being_changed" ]]; then
local read_system_enabled=$(get_setting_value "$rd_conf" "$read_system_name" "retrodeck" "$current_preset") local read_system_enabled=$(get_setting_value "$rd_conf" "$read_system_name" "retrodeck" "$current_preset")
while IFS='^' read -r action read_preset read_setting_name new_setting_value section target_file defaults_file while IFS='^' read -r action read_preset read_setting_name new_setting_value section target_file defaults_file || [[ -n "$action" ]];
do do
case "$action" in if [[ ! $action == "#"* ]] && [[ ! -z "$action" ]]; then
case "$action" in
"config_file_format" ) "config_file_format" )
if [[ "$read_preset" == "retroarch-all" ]]; then if [[ "$read_preset" == "retroarch-all" ]]; then
local retroarch_all="true" local retroarch_all="true"
local read_config_format="retroarch" local read_config_format="retroarch"
else else
local read_config_format="$read_preset" local read_config_format="$read_preset"
fi fi
;; ;;
"change" ) "change" )
if [[ "$read_preset" == "$current_preset" ]]; then if [[ "$read_preset" == "$current_preset" ]]; then
if [[ "$target_file" = \$* ]]; then # Read current target file and resolve if it is a variable if [[ "$target_file" = \$* ]]; then # Read current target file and resolve if it is a variable
eval target_file=$target_file eval target_file=$target_file
fi
local read_target_file="$target_file"
if [[ "$defaults_file" = \$* ]]; then #Read current defaults file and resolve if it is a variable
eval defaults_file=$defaults_file
fi
local read_defaults_file="$defaults_file"
if [[ "$read_system_enabled" == "true" ]]; then
if [[ "$new_setting_value" = \$* ]]; then
eval new_setting_value=$new_setting_value
fi fi
if [[ "$read_config_format" == "retroarch" && ! "$retroarch_all" == "true" ]]; then # If this is a RetroArch core, generate the override file local read_target_file="$target_file"
if [[ ! -f "$read_target_file" ]]; then if [[ "$defaults_file" = \$* ]]; then #Read current defaults file and resolve if it is a variable
create_dir "$(realpath "$(dirname "$read_target_file")")" eval defaults_file=$defaults_file
echo "$read_setting_name = \""$new_setting_value"\"" > "$read_target_file" fi
else local read_defaults_file="$defaults_file"
if [[ -z $(grep -o -P "^$read_setting_name\b" "$read_target_file") ]]; then if [[ "$read_system_enabled" == "true" ]]; then
add_setting "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section" if [[ "$new_setting_value" = \$* ]]; then
eval new_setting_value=$new_setting_value
fi
if [[ "$read_config_format" == "retroarch" && ! "$retroarch_all" == "true" ]]; then # If this is a RetroArch core, generate the override file
if [[ ! -f "$read_target_file" ]]; then
create_dir "$(realpath "$(dirname "$read_target_file")")"
echo "$read_setting_name = \""$new_setting_value"\"" > "$read_target_file"
else else
set_setting_value "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section" if [[ -z $(grep -o -P "^$read_setting_name\b" "$read_target_file") ]]; then
fi 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"
fi
fi
else
set_setting_value "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section"
fi fi
else else
set_setting_value "$read_target_file" "$read_setting_name" "$new_setting_value" "$read_config_format" "$section" if [[ "$read_config_format" == "retroarch" && ! "$retroarch_all" == "true" ]]; then
fi if [[ -f "$read_target_file" ]]; then
else delete_setting "$read_target_file" "$read_setting_name" "$read_config_format" "$section"
if [[ "$read_config_format" == "retroarch" && ! "$retroarch_all" == "true" ]]; then if [[ -z $(cat "$read_target_file") ]]; then # If the override file is empty
if [[ -f "$read_target_file" ]]; then rm -f "$read_target_file"
delete_setting "$read_target_file" "$read_setting_name" "$read_config_format" "$section" fi
if [[ -z $(cat "$read_target_file") ]]; then # If the override file is empty if [[ -z $(ls -1 "$(dirname "$read_target_file")") ]]; then # If the override folder is empty
rm -f "$read_target_file" rmdir "$(realpath "$(dirname "$read_target_file")")"
fi fi
if [[ -z $(ls -1 "$(dirname "$read_target_file")") ]]; then # If the override folder is empty
rmdir "$(realpath "$(dirname "$read_target_file")")"
fi fi
else
local default_setting_value=$(get_setting_value "$read_defaults_file" "$read_setting_name" "$read_config_format" "$section")
set_setting_value "$read_target_file" "$read_setting_name" "$default_setting_value" "$read_config_format" "$section"
fi fi
else
local default_setting_value=$(get_setting_value "$read_defaults_file" "$read_setting_name" "$read_config_format" "$section")
set_setting_value "$read_target_file" "$read_setting_name" "$default_setting_value" "$read_config_format" "$section"
fi fi
fi fi
fi ;;
;;
"enable" ) "enable" )
if [[ "$read_preset" == "$current_preset" ]]; then if [[ "$read_preset" == "$current_preset" ]]; then
if [[ "$read_system_enabled" == "true" ]]; then if [[ "$read_system_enabled" == "true" ]]; then
enable_file "$read_setting_name" enable_file "$read_setting_name"
else else
disable_file "$read_setting_name" disable_file "$read_setting_name"
fi
fi fi
fi ;;
;;
* ) * )
echo "Other data: $action $read_preset $read_setting_name $new_setting_value $section" # DEBUG log d "Other data: $action $read_preset $read_setting_name $new_setting_value $section" # DEBUG
;; ;;
esac esac
fi
done < <(cat "$presets_dir/$read_system_name"_presets.cfg) done < <(cat "$presets_dir/$read_system_name"_presets.cfg)
fi fi
done < <(printf '%s\n' "$preset_section") done < <(printf '%s\n' "$preset_section")
@ -182,7 +207,7 @@ build_retrodeck_current_presets() {
# This can also be used to build the "current" state post-update after adding new systems # This can also be used to build the "current" state post-update after adding new systems
# USAGE: build_retrodeck_current_presets # USAGE: build_retrodeck_current_presets
while IFS= read -r current_setting_line # Read the existing retrodeck.cfg while IFS= read -r current_setting_line || [[ -n "$current_setting_line" ]]; # Read the existing retrodeck.cfg
do do
if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it if [[ (! -z "$current_setting_line") && (! "$current_setting_line" == "#"*) && (! "$current_setting_line" == "[]") ]]; then # If the line has a valid entry in it
if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header if [[ ! -z $(grep -o -P "^\[.+?\]$" <<< "$current_setting_line") ]]; then # If the line is a section header

View file

@ -1,61 +0,0 @@
debug = false
config_version = 1
blacklisted_games = []
boilr_tag = "retrodeck"
[steamgrid_db]
enabled = true
prefer_animated = false
banned_images = []
only_download_boilr_images = false
allow_nsfw = false
[steam]
create_collections = false
optimize_for_big_picture = false
stop_steam = false
start_steam = false
[bottles]
enabled = false
[epic_games]
enabled = false
safe_launch = []
[flatpak]
enabled = false
[gog]
enabled = false
create_symlinks = true
[heroic]
enabled = false
launch_games_through_heroic = []
default_launch_through_heroic = true
[itch]
enabled = false
create_symlinks = true
[legendary]
enabled = false
[lutris]
enabled = false
executable = "lutris"
flatpak = true
flatpak_image = "net.lutris.Lutris"
installed = true
[origin]
enabled = false
[uplay]
enabled = false
[minigalaxy]
enabled = true
create_symlinks = false
games_folder = "/var/config/boilr/sync/"

View file

@ -1,456 +0,0 @@
"""Sync RetroDECK favorites games with steam shortcuts"""
import binascii
import os
import re
import shlex
import shutil
import glob
import sys
import time
import hashlib
import xml.etree.ElementTree as ET
command_list_default={
"3do": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/opera_libretro.so",
"amiga": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"amiga1200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"amiga600": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"amigacd32": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"amstradcpc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so",
"arcade": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"arduboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/arduous_libretro.so",
"astrocde": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"atari2600": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella_libretro.so",
"atari5200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/a5200_libretro.so",
"atari7800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prosystem_libretro.so",
"atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
"atarijaguar": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/virtualjaguar_libretro.so",
"atarijaguarcd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/virtualjaguar_libretro.so",
"atarilynx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/handy_libretro.so",
"atarist": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/hatari_libretro.so",
"atarixe": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
"atomiswave": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
"c64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64sc_libretro.so",
"cavestory": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nxengine_libretro.so",
"cdimono1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/same_cdi_libretro.so",
"cdtv": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"chailove": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/chailove_libretro.so",
"channelf": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/freechaf_libretro.so",
"colecovision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"cps": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"cps1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"cps2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"cps3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"doom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prboom_libretro.so",
"dos": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_pure_libretro.so",
"dreamcast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
"easyrpg": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/easyrpg_libretro.so",
"famicom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
"fba": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_libretro.so",
"fbneo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so",
"fds": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
"gameandwatch": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gw_libretro.so",
"gamegear": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"gb": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so",
"gba": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so",
"gbc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so",
"genesis": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"gx4000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so",
"intellivision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/freeintv_libretro.so",
"j2me": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/squirreljme_libretro.so",
"lcdgames": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gw_libretro.so",
"lutro": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/lutro_libretro.so",
"mame": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"mastersystem": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"megacd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"megacdjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"megadrive": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"megaduck": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/sameduck_libretro.so",
"mess": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mess2015_libretro.so",
"model2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"moto": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/theodore_libretro.so",
"msx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"msx1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"msx2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"msxturbor": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"multivision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearsystem_libretro.so",
"n64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mupen64plus_next_libretro.so",
"n64dd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/parallel_n64_libretro.so",
"naomi": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
"naomigd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
"nds": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume_libretro.so",
"neogeo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so",
"neogeocd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so",
"neogeocdjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so",
"nes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
"ngp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so",
"ngpc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so",
"odyssey2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/o2em_libretro.so",
"palm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mu_libretro.so",
"pc88": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/quasi88_libretro.so",
"pc98": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/np2kai_libretro.so",
"pcengine": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
"pcenginecd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
"pcfx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pcfx_libretro.so",
"pokemini": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pokemini_libretro.so",
"psx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/swanstation_libretro.so",
"quake": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tyrquake_libretro.so",
"satellaview": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"saturn": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so",
"saturnjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so",
"scummvm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/scummvm_libretro.so",
"sega32x": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
"sega32xjp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
"sega32xna": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
"segacd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"sfc": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"sg-1000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"sgb": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen-s_libretro.so",
"snes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"snesna": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"spectravideo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"sufami": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"supergrafx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supergrafx_libretro.so",
"supervision": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/potator_libretro.so",
"tg16": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
"tg-cd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
"tic80": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tic80_libretro.so",
"to8": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/theodore_libretro.so",
"uzebox": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/uzem_libretro.so",
"vectrex": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vecx_libretro.so",
"vic20": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_xvic_libretro.so",
"videopac": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/o2em_libretro.so",
"virtualboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_vb_libretro.so",
"wasm4": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/wasm4_libretro.so",
"wonderswan": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_wswan_libretro.so",
"wonderswancolor": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_wswan_libretro.so",
"x1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/x1_libretro.so",
"x68000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/px68k_libretro.so",
"zx81": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/81_libretro.so",
"zxspectrum": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fuse_libretro.so",
"switch": "flatpak run --command=/var/data/ponzu/Yuzu/bin/yuzu net.retrodeck.retrodeck -f -g",
"n3ds": "flatpak run --command=/var/data/ponzu/Citra/bin/citra-qt net.retrodeck.retrodeck",
"ps2": "flatpak run --command=pcsx2-qt net.retrodeck.retrodeck -batch",
"wiiu": "flatpak run --command=Cemu-wrapper net.retrodeck.retrodeck -g",
"gc": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e",
"wii": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e",
"xbox": "flatpak run --command=xemu net.retrodeck.retrodeck -dvd_path",
"ps3": "flatpak run --command=pcsx3 net.retrodeck.retrodeck --no-gui",
"psp": "flatpak run --command=PPSSPPSDL net.retrodeck.retrodeck",
"pico8": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -run"
}
alt_command_list={
"PUAE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae_libretro.so",
"Caprice32": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cap32_libretro.so",
"MAME - CURRENT": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"Stella": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella_libretro.so",
"a5200": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/a5200_libretro.so",
"Atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
"Handy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/handy_libretro.so",
"VICE x64sc Accurate": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64sc_libretro.so",
"SAME CDi": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/same_cdi_libretro.so",
"blueMSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bluemsx_libretro.so",
"MAME - CURRENT": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame_libretro.so",
"PrBoom": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/prboom_libretro.so",
"DOSBox-Pure": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_pure_libretro.so",
"Mesen": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen_libretro.so",
"Genesis Plus GX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_libretro.so",
"Gamebatte": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gambatte_libretro.so",
"mGBA": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so",
"ParaLLEI N64": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/parallel_n64_libretro.so",
"DeSmuME": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume_libretro.so",
"NeoCD": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/neocd_libretro.so",
"Beetle NeoPop": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_ngp_libretro.so",
"Neko Project II Kai": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/np2kai_libretro.so",
"Beetle PCE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so",
"Swanstation": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/swanstation_libretro.so",
"TyrQuake": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tyrquake_libretro.so",
"Beetle Saturn": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_saturn_libretro.so",
"Snes 9x - Current": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x_libretro.so",
"Beetle SuperGrafx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supergrafx_libretro.so",
"Yuzu (Standalone)": "flatpak run --command=yuzu net.retrodeck.retrodeck -f -g",
"Citra (Standalone)": "flatpak run --command=citra net.retrodeck.retrodeck",
"PCSX2 (Standalone)": "flatpak run --command=pcsx2-qt net.retrodeck.retrodeck -batch",
"Dolphin (Standalone)": "flatpak run --command=dolphin-emu-wrapper net.retrodeck.retrodeck -b -e",
"RPCS3 Directory (Standalone)": "flatpak run --command=pcsx3 net.retrodeck.retrodeck --no-gui",
"PPSSPP (Standalone)": "flatpak run --command=PPSSPPSDL net.retrodeck.retrodeck",
"PICO-8 (Standalone)": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -run",
"PUAE 2021": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/puae2021_libretro.so",
"CrocoDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/crocods_libretro.so",
"CPCemu (Standalone)": "NYI", #NYI
"MAME 2010": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2010_libretro.so",
"MAME 2003-Plus": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2003_plus_libretro.so",
"MAME 2000": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mame2000_libretro.so",
"MAME (Standalone)": "NYI", #NYI
"FinalBurn Neo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbneo_libretro.so",
"FinalBurn Neo (Standalone)": "NYI", #NYI
"FB Alpha 2012": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_libretro.so",
"Flycast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/flycast_libretro.so",
"Flycast (Standalone)": "NYI", #NYI
"Kronos": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/kronos_libretro.so",
"Supermodel (Standalone)": "NYI", #NYI
"Supermodel [Fullscreen] (Standalone)": "NYI", #NYI
"Shortcut or script": "TODO: I have to catch how it works", #TODO
"Atari800 (Standalone)": "NYI", #NYI
"Stella 2014": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/stella2014_libretro.so",
"Atari800": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/atari800_libretro.so",
"Beetle Lynx": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_lynx_libretro.so",
"VICE x64 Fast": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x64_libretro.so",
"VICE x64 SuperCPU": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_xscpu64_libretro.so",
"VICE x128": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vice_x128_libretro.so",
"Frodo": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/frodo_libretro.so",
"CDi 2015": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/cdi2015_libretro.so",
"Gearcoleco": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearcoleco_libretro.so",
"FB Alpha 2012 CPS-1": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps1_libretro.so",
"FB Alpha 2012 CPS-2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps2_libretro.so",
"FB Alpha 2012 CPS-3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fbalpha2012_cps3_libretro.so",
"Boom 3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/boom3_libretro.so",
"Boom 3 xp": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/boom3_libretro_xp.so",
"DOSBox-Core": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_core_libretro.so",
"DOSBox-SVN": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dosbox_svn_libretro.so",
"Keep ES-DE running": "TODO: I have to catch how it works", #TODO
"AppImage (Suspend ES-DE)": "TODO: I have to catch how it works", #TODO
"AppImage (Keep ES-DE running)": "TODO: I have to catch how it works", #TODO
"Nestopia UE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nestopia_libretro.so",
"FCEUmm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fceumm_libretro.so",
"QuickNES": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/quicknes_libretro.so",
"Genesis Plus GX Wide": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/genesis_plus_gx_wide_libretro.so",
"Gearsystem": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearsystem_libretro.so",
"SMS Plus GX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/smsplus_libretro.so",
"SameBoy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/sameboy_libretro.so",
"Gearboy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gearboy_libretro.so",
"TGB Dual": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/tgbdual_libretro.so",
"Mesen-S": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mesen-s_libretro.so",
"VBA-M": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vbam_libretro.so",
"bsnes": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_libretro.so",
"mGBA": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mgba_libretro.so",
"VBA Next": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vba_next_libretro.so",
"gpSP": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/gpsp_libretro.so",
"Dolphin": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/dolphin_libretro.so",
"PrimeHack (Standalone)": "flatpak run --command=primehack-wrapper net.retrodeck.retrodeck -b -e",
"PicoDrive": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/picodrive_libretro.so",
"BlastEm": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/blastem_libretro.so",
"CrocoDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/crocods_libretro.so",
"fMSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/fmsx_libretro.so",
"Citra": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/citra_libretro.so",
"Citra 2018": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/citra2018_libretro.so",
"Mupen64Plus-Next": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mupen64plus_next_libretro.so",
"DeSmuME 2015": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/desmume2015_libretro.so",
"melonDS": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/melonds_libretro.so",
"melonDS (Standalone)": "flatpak run --command=melonDS net.retrodeck.retrodeck",
"FinalBurn Neo neogeocd": "flatpak run --command=retroarch net.retrodeck.retrodeck --subsystem neocd -L /var/config/retroarch/cores/fbneo_libretro.so",
"RACE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/race_libretro.so",
"Neko Project II": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/nekop2_libretro.so",
"Beetle PCE FAST": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_fast_libretro.so",
"PICO-8 Splore (Standalone)": "flatpak run --command=pico8 net.retrodeck.retrodeck -desktop_path ~/retrodeck/screenshots -root_path {GAMEDIR} -splore",
"AppImage": "TODO: I have to catch how it works", #TODO
"LRPS2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx2_libretro.so",
"PCSX2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx2_libretro.so",
"RPCS3 Shortcut (Standalone)": "TODO: I have to catch how it works", #TODO
"PPSSPP": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/ppsspp_libretro.so",
"Beetle PSX": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_psx_libretro.so",
"Beetle PSX HW": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_psx_hw_libretro.so",
"PCSX ReARMed": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/pcsx_rearmed_libretro.so",
"DuckStation (Standalone)": "flatpak run --command=duckstation-qt net.retrodeck.retrodeck -batch",
"vitaQuake 2": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2_libretro.so",
"vitaQuake 2 [Rogue]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-rogue_libretro.so",
"vitaQuake 2 [Xatrix]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-xatrix_libretro.so",
"vitaQuake 2 [Zaero]": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake2-zaero_libretro.so",
"vitaQuake 3": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/vitaquake3_libretro.so",
"YabaSanshiro": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/yabasanshiro_libretro.so",
"Yabause": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/yabause_libretro.so",
"Snes9x 2010": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/snes9x2010_libretro.so",
"bsnes-hd": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_hd_beta_libretro.so",
"bsnes-mercury Accuracy": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/bsnes_mercury_accuracy_libretro.so",
"Beetle Supafaust": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_supafaust_libretro.so",
"Beetle PCE": "flatpak run --command=retroarch net.retrodeck.retrodeck -L /var/config/retroarch/cores/mednafen_pce_libretro.so"
}
exit_file="/tmp/retrodeck_steam_sync_exit"
rdhome=""
roms_folder=""
def create_shortcut_new(games):
changes=0
old_games=os.listdir(rdhome+"/.sync/")
for game in games:
try:
i=old_games.index(game[0])
old_games[i]=0
except ValueError:
print(game[0]+" is a new game!")
changes=1
path=rdhome+"/.sync/"+game[0]
print("Go to path: "+path)
if not os.path.exists(path):
os.makedirs(path)
fl=open(path+"/goggame-0.info","w")
fl.write('{\n')
fl.write(' "buildId": "",\n')
fl.write(' "clientId": "",\n')
fl.write(' "gameId": "",\n')
fl.write(' "name": "'+game[0]+'",\n')
fl.write(' "playTasks": [\n')
fl.write(' {\n')
fl.write(' "category": "launcher",\n')
fl.write(' "isPrimary": true,\n')
fl.write(' "languages": [\n')
fl.write(' "en-US"\n')
fl.write(' ],\n')
fl.write(' "name": "'+game[0]+'",\n')
fl.write(' "path": "launch.sh",\n')
fl.write(' "type": "FileTask"\n')
fl.write(' }\n')
fl.write(' ]\n')
fl.write('}\n')
fl.close()
fl=open(path+"/launch.sh","w")
fl.write("#!/bin/bash\n\n")
fl.write('if test "$(whereis flatpak)" = "flatpak:"\n')
fl.write("then\n")
fl.write("flatpak-spawn --host "+game[1]+"\n")
fl.write("else\n")
fl.write(game[1]+"\n")
fl.write("fi\n")
fl.close()
st=os.stat(path+"/launch.sh")
os.chmod(path+"/launch.sh", st.st_mode | 0o0111)
print("Start removing")
print(old_games)
for game in old_games:
if game:
shutil.rmtree(rdhome+"/.sync/"+game)
changes=1
if changes:
os.system("boilr --no-ui")
def addToSteam(systems):
games=[]
for system in systems:
print("Start parsing system: {}".format(system))
f=open(rdhome+"/gamelists/"+system+"/gamelist.xml","r")
f.readline()
parser=ET.XMLParser()
parser.feed(b'<root>')
parser.feed(f.read())
parser.feed(b'</root>')
root=parser.close()
f.close()
globalAltEmu=""
for subroot in root:
if subroot.tag=="alternativeEmulator":
for alt in subroot:
globalAltEmu=alt.text
else:
for game in subroot:
path=""
name=""
favorite=""
altemulator=globalAltEmu
for tag in game:
if tag.tag=="path":
path=tag.text
elif tag.tag=="name":
name=tag.text
elif tag.tag=="favorite":
favorite=tag.text
elif tag.tag=="altemulator":
altemulator=tag.text
if favorite=="true" and altemulator=="":
print("Find favorite game: {}".format(name))
games.append([name,command_list_default[system]+" '"+roms_folder+"/"+system+path[1:]+"'"])
elif favorite=="true":
print("Find favorite game with alternative emulator: {}, {}".format(name,altemulator))
if ("neogeocd" in system) and altemulator=="FinalBurn Neo":
games.append([name,alt_command_list[altemulator+" neogeocd"]+" '"+roms_folder+"/"+system+path[1:]+"'"])
print(alt_command_list[altemulator+" neogeocd"]+" '"+roms_folder+"/"+system+path[1:]+"'")
elif system=="pico8" and altemulator=="PICO-8 Splore (Standalone)":
games.append([name,alt_command_list[altemulator]])
print(alt_command_list[altemulator])
else:
games.append([name,alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'"])
print(alt_command_list[altemulator]+" '"+roms_folder+"/"+system+path[1:]+"'")
if not games==[]:
create_shortcut_new(games)
def start_config():
global rdhome
global roms_folder
global command_list_default
global alt_command_list
if os.path.isfile(exit_file):
os.remove(exit_file)
print("Open RetroDECK config file: {}".format(os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.cfg")))
fl=open(os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/retrodeck/retrodeck.cfg"),"r")
lines=fl.readlines()
for line in lines:
if "rdhome" in line:
rdhome=line[7:-1]
elif "roms_folder" in line:
roms_folder=line[12:-1]
fl.close()
command_list_default["pico8"]=command_list_default["pico8"].replace("{GAMEDIR}",roms_folder+"/pico8")
alt_command_list["PICO-8 Splore (Standalone)"]=alt_command_list["PICO-8 Splore (Standalone)"].replace("{GAMEDIR}",roms_folder+"/pico8")
if not os.path.exists(rdhome+"/.sync/"):
os.makedirs(rdhome+"/.sync/")
boilr_path=os.path.expanduser("~/.var/app/net.retrodeck.retrodeck/config/boilr/config.toml")
if os.path.isfile(boilr_path):
with open(boilr_path,"r") as f:
data=f.read()
data=re.sub("\"games_folder.*","games_folder = "+rdhome+"/.sync/\"",data)
with open(boilr_path,"w") as f:
f.write(data)
else:
print("Error! BoilR config not initialized.")
if __name__=="__main__":
start_config()
new_hash={}
for system in os.listdir(rdhome+"/gamelists/"):
new_hash[system]=hashlib.md5(open(rdhome+"/gamelists/"+system+"/gamelist.xml","rb").read()).hexdigest()
running=True
while running:
time.sleep(30)
systems=[]
for system in os.listdir(rdhome+"/gamelists/"):
if not system in systems:
if system in new_hash.keys():
old_hash=new_hash[system]
new_hash[system]=hashlib.md5(open(rdhome+"/gamelists/"+system+"/gamelist.xml","rb").read()).hexdigest()
if not new_hash[system] == old_hash:
print("System {} changed!".format(system))
systems.append(system)
else:
print("System {} not changed!".format(system))
else:
new_hash[system]=hashlib.md5(open(rdhome+"/gamelists/"+system+"/gamelist.xml","rb").read()).hexdigest()
print("System {} added!".format(system))
systems.append(system)
if os.path.isfile(exit_file):
running=False
os.remove(exit_file)
addToSteam(systems)
print("Finish!")

View file

@ -67,6 +67,31 @@
<project_license>GPL-3.0</project_license> <project_license>GPL-3.0</project_license>
<metadata_license>CC0-1.0</metadata_license> <metadata_license>CC0-1.0</metadata_license>
<releases> <releases>
<release version="0.8.2b" date="2024-07-15">
<url>https://github.com/XargonWan/RetroDECK/releases/tag/0.8.2b</url>
<description>
<p>Changes:</p>
<ul>
<li>ES-DE: updated to 3.0.3</li>
<li>RUNTIME: updated to KDE 6.7</li>
<li>All emulators and engines updated</li>
<li>CONFIGURATOR: fixed an issue in the multi-file compression tool that prevented some type of files to be converted</li>
<li>CONFIGURATOR: added headless state for some functions (this will help to migrate to the Godot Configurator)</li>
<li>CONFIGURATOR: added a new "Empty ROMs folder removal" tool helping the user to cleanup the roms folder by deleting the empty folders</li>
<li>CONFIGURATOR: added a new "Rebuild removed ROMs folders" tool. This is complementary to the previous one:by recreating the whole roms folder structure</li>
<li>CONFIGURATOR: chd compression functionality restored</li>
<li>FRAMEWORK: fixed an issue where second level subfolders inside retrodeck folder were not correctly placed, this caused errors on ES-DE as themes and downloaded_media folder could not be found after a reset or first install</li>
<li>CEMU: now audio should work correctly when docking and undocking the Steam Deck</li>
<li>CEMU: added microphone blow input to R3</li>
<li>DUCKSTATION: now out of the rolling release</li>
<li>INFRASTRUCTURE: we now have a self-hosted Gitea repo in case fo disaster recovery</li>
</ul>
<p>Known issues:</p>
<ul>
<li>Please check the know issues in the Wiki under General Information.</li>
</ul>
</description>
</release>
<release version="0.8.1b" date="2024-05-13"> <release version="0.8.1b" date="2024-05-13">
<url>https://github.com/XargonWan/RetroDECK/releases/tag/0.8.1b</url> <url>https://github.com/XargonWan/RetroDECK/releases/tag/0.8.1b</url>
<description> <description>
@ -96,7 +121,7 @@
</ul> </ul>
<p>Known issues:</p> <p>Known issues:</p>
<ul> <ul>
<li>Please check the know issues in the Wiki under General Infomration.</li> <li>Please check the know issues in the Wiki under General Information.</li>
</ul> </ul>
</description> </description>
</release> </release>
@ -154,7 +179,7 @@
</ul> </ul>
<p>Known issues:</p> <p>Known issues:</p>
<ul> <ul>
<li>Please check the know issues in the Wiki under General Infomration.</li> <li>Please check the know issues in the Wiki under General Information.</li>
</ul> </ul>
</description> </description>
</release> </release>
@ -172,7 +197,7 @@
</ul> </ul>
<p>Known issues:</p> <p>Known issues:</p>
<ul> <ul>
<li>Please check the know issues in the Wiki under General Infomration.</li> <li>Please check the know issues in the Wiki under General Information.</li>
</ul> </ul>
</description> </description>
</release> </release>
@ -208,7 +233,7 @@
</ul> </ul>
<p>Known issues:</p> <p>Known issues:</p>
<ul> <ul>
<li>Please check the know issues in the Wiki under General Infomration</li> <li>Please check the know issues in the Wiki under General Information</li>
</ul> </ul>
</description> </description>
</release> </release>
@ -222,7 +247,7 @@
</ul> </ul>
<p>Known issues:</p> <p>Known issues:</p>
<ul> <ul>
<li>Please check the know issues in the Wiki under General Infomration</li> <li>Please check the know issues in the Wiki under General Information</li>
</ul> </ul>
</description> </description>
</release> </release>

View file

@ -1,10 +1,9 @@
app-id: net.retrodeck.retrodeck app-id: net.retrodeck.retrodeck
runtime: org.kde.Platform runtime: org.kde.Platform
runtime-version: "6.5" runtime-version: "6.7"
sdk: org.kde.Sdk sdk: org.kde.Sdk
sdk-extensions: sdk-extensions:
- org.freedesktop.Sdk.Extension.llvm16 # Needed for RPCS3 (llvm17 actually) - org.freedesktop.Sdk.Extension.llvm18 # Needed for RPCS3
- org.freedesktop.Sdk.Extension.rust-stable # Needed for BoilR
command: retrodeck.sh command: retrodeck.sh
finish-args: finish-args:
@ -69,8 +68,8 @@ modules:
# The version number is hardcoded in /app/retrodeck/version # The version number is hardcoded in /app/retrodeck/version
# #
# UPDATE STEPS FOR MAIN: # UPDATE STEPS FOR MAIN:
# [x] Update the VERSION variable on line containing "VERSION=THISBRANCH" # [ ] 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 - name: version-initialization
buildsystem: simple buildsystem: simple
@ -79,7 +78,7 @@ modules:
# on main please update this with the version variable, eg: VERSION=0.8.0b # on main please update this with the version variable, eg: VERSION=0.8.0b
# on cooker will be THISBRANCH # on cooker will be THISBRANCH
VERSION=0.8.1b VERSION=THISBRANCH
git checkout ${GITHUB_REF_NAME} git checkout ${GITHUB_REF_NAME}
mkdir -p ${FLATPAK_DEST}/retrodeck/ mkdir -p ${FLATPAK_DEST}/retrodeck/
@ -223,21 +222,13 @@ modules:
- /lib/cmake - /lib/cmake
sources: sources:
- type: archive - type: archive
url: https://github.com/KhronosGroup/glslang/archive/14.1.0.tar.gz url: https://github.com/KhronosGroup/glslang/archive/14.2.0.tar.gz
sha256: b5e4c36d60eda7613f36cfee3489c6f507156829c707e1ecd7f48ca45b435322 sha256: 14a2edbb509cb3e51a9a53e3f5e435dbf5971604b4b833e63e6076e8c0a997b5
x-checker-data: x-checker-data:
type: anitya type: anitya
stable-only: true stable-only: true
project-id: 205796 project-id: 205796
url-template: https://github.com/KhronosGroup/glslang/archive/$version.tar.gz 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) # enables motion controls on non-wii controllers (switch, ps4, etc)
# dependency of: DOLPHIN, RPCS3 # dependency of: DOLPHIN, RPCS3
@ -247,16 +238,20 @@ modules:
config-opts: config-opts:
- -Dtests=disabled - -Dtests=disabled
- -Ddocumentation=disabled - -Ddocumentation=disabled
cleanup:
- /bin
- /include
- /lib/pkgconfig
- /share
sources: sources:
- type: archive - type: archive
url: https://www.freedesktop.org/software/libevdev/libevdev-1.13.1.tar.xz url: https://www.freedesktop.org/software/libevdev/libevdev-1.13.2.tar.xz
sha256: 06a77bf2ac5c993305882bc1641017f5bec1592d6d1b64787bad492ab34f2f36 sha256: 3eca86a6ce55b81d5bce910637fc451c8bbe373b1f9698f375c7f1ad0de3ac48
x-checker-data: x-checker-data:
type: anitya type: anitya
project-id: 20540 project-id: 20540
stable-only: true stable-only: true
url-template: https://www.freedesktop.org/software/libevdev/libevdev-$version.tar.xz url-template: https://www.freedesktop.org/software/libevdev/libevdev-$version.tar.xz
# dependency of: CEMU # dependency of: CEMU
- name: rapidjson - name: rapidjson
buildsystem: cmake-ninja buildsystem: cmake-ninja
@ -315,13 +310,20 @@ modules:
# dependency of: CEMU, RPCS3 # dependency of: CEMU, RPCS3
- rd-submodules/shared-modules/glew/glew.json - rd-submodules/shared-modules/glew/glew.json
# dependency of: XEMU, MelonDS # dependency of: XEMU, MelonDS (4.7.0)
- name: libslirp - name: libslirp
buildsystem: meson buildsystem: meson
cleanup:
- /include
sources: sources:
- type: git - type: archive
url: https://gitlab.freedesktop.org/slirp/libslirp.git url: https://gitlab.freedesktop.org/slirp/libslirp/-/archive/v4.8.0/libslirp-v4.8.0.tar.gz
tag: v4.7.0 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) # dependency of: CEMU (1.0.26), DOLPHIN (1.0.27)
- name: libusb - name: libusb
@ -358,7 +360,7 @@ modules:
sources: sources:
- type: git - type: git
url: https://github.com/FFmpeg/FFmpeg.git url: https://github.com/FFmpeg/FFmpeg.git
tag: n5.1.1 tag: n5.1.4
- name: freeimage - name: freeimage
no-autogen: true no-autogen: true
@ -678,8 +680,8 @@ modules:
- ln -s "${FLATPAK_DEST}/pcsx2-qt/usr/bin/pcsx2-qt" "${FLATPAK_DEST}/bin/pcsx2-qt" - ln -s "${FLATPAK_DEST}/pcsx2-qt/usr/bin/pcsx2-qt" "${FLATPAK_DEST}/bin/pcsx2-qt"
sources: sources:
- type: file - type: file
url: https://github.com/PCSX2/pcsx2/releases/download/v1.7.5769/pcsx2-v1.7.5769-linux-appimage-x64-Qt.AppImage url: https://github.com/PCSX2/pcsx2/releases/download/v2.0.3/pcsx2-v2.0.3-linux-appimage-x64-Qt.AppImage
sha256: d819a339b9f3c43ee44fe9b6d975b9f76cff7716b5976a3b94f77e2cf4cab667 sha256: ce1a6240643a1c7b68d5ad21789bf9de218fcef6f61649a6503b7de7bfce186f
# PCSX2 - END # PCSX2 - END
@ -687,7 +689,6 @@ modules:
# https://github.com/flathub/org.DolphinEmu.dolphin-emu # https://github.com/flathub/org.DolphinEmu.dolphin-emu
# WHEN UPADTING: remember to update rd-submodules/dolphin contents # WHEN UPADTING: remember to update rd-submodules/dolphin contents
# needed for screensaver inhibition
- name: xdg-screensaver-shim - name: xdg-screensaver-shim
buildsystem: meson buildsystem: meson
sources: sources:
@ -707,14 +708,15 @@ modules:
- /share/man - /share/man
post-install: post-install:
- install -D -t ${FLATPAK_DEST}/bin/ dolphin-emu-wrapper - install -D -t ${FLATPAK_DEST}/bin/ dolphin-emu-wrapper
- sed -i -e 's/"2048"/"512"/g' /app/share/icons/hicolor/scalable/apps/dolphin-emu.svg - sed -i -e 's/viewBox="0 0 1024.02 571.29"/viewBox="0 -285.645 1024 1024" width="2048"
height="2048"/g' /app/share/icons/hicolor/scalable/apps/dolphin-emu.svg
sources: sources:
- type: git - type: git
# Sometimes Dolphin or its submodules clone are failing in https so it must done in ssh # Sometimes Dolphin or its submodules clone are failing in https so it must done in ssh
# fatal: remote transport reported error # fatal: remote transport reported error
# url: ssh://git@github.com/dolphin-emu/dolphin.git # url: ssh://git@github.com/dolphin-emu/dolphin.git
url: https://github.com/dolphin-emu/dolphin.git url: https://github.com/dolphin-emu/dolphin.git
commit: 032c77b462a220016f23c5079e71bb23e0ad2adf commit: b92e354389bb7c0bd114a8631b8af110d3cb3a14
x-checker-data: x-checker-data:
type: json type: json
url: https://dolphin-emu.org/update/latest/beta url: https://dolphin-emu.org/update/latest/beta
@ -809,8 +811,8 @@ modules:
sources: sources:
- type: git - type: git
url: https://github.com/xemu-project/xemu.git url: https://github.com/xemu-project/xemu.git
tag: v0.7.120 tag: v0.7.126
commit: 94d826a4f125d755d6d37069ad7084bfde33d650 commit: b2b6a98d5ea21970cd2436a1912230f4b97c5e03
x-checker-data: x-checker-data:
type: json type: json
url: https://api.github.com/repos/xemu-project/xemu/releases/latest url: https://api.github.com/repos/xemu-project/xemu/releases/latest
@ -856,11 +858,8 @@ modules:
buildsystem: cmake-ninja buildsystem: cmake-ninja
builddir: true builddir: true
build-options: build-options:
# llvm17 is not available in framework 6.5 but in 6.6, so we're trying llvm16 and cross our fingers until Primehack is updated (as Primehack breaks on 6.6) append-ld-library-path: /usr/lib/sdk/llvm18/lib
#append-ld-library-path: /usr/lib/sdk/llvm17/lib append-path: /usr/lib/sdk/llvm18/bin
#append-path: /usr/lib/sdk/llvm17/bin
append-ld-library-path: /usr/lib/sdk/llvm16/lib
append-path: /usr/lib/sdk/llvm16/bin
cflags: &optflags -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong cflags: &optflags -O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong
-grecord-gcc-switches -fasynchronous-unwind-tables -fstack-clash-protection -grecord-gcc-switches -fasynchronous-unwind-tables -fstack-clash-protection
-fcf-protection -fno-omit-frame-pointer -fcf-protection -fno-omit-frame-pointer
@ -886,8 +885,7 @@ modules:
- -DUSE_SYSTEM_ZLIB=ON - -DUSE_SYSTEM_ZLIB=ON
- -Wno-dev - -Wno-dev
post-install: post-install:
#- cp /usr/lib/sdk/llvm17/lib/libLLVM-17.so /app/lib/ - cp /usr/lib/sdk/llvm18/lib/libLLVM.so.18.1 /app/lib/
- cp /usr/lib/sdk/llvm16/lib/libLLVM-16.so /app/lib/
- |- - |-
set -eux set -eux
COMM_TAG="$(awk -F'[\{,]' '/version{.*}/{printf "%d.%d.%d", $2, $3, $4}' ../rpcs3/rpcs3_version.cpp)" COMM_TAG="$(awk -F'[\{,]' '/version{.*}/{printf "%d.%d.%d", $2, $3, $4}' ../rpcs3/rpcs3_version.cpp)"
@ -896,7 +894,7 @@ modules:
sources: sources:
- type: git - type: git
url: https://github.com/RPCS3/rpcs3.git url: https://github.com/RPCS3/rpcs3.git
commit: 4ecf8ecd06c15f0557e1d9243f31e4c2d7baebe2 commit: 5b973448bf75a239f34fd9c7698c8a02b04e2ea9
# RPCS3 - END # RPCS3 - END
@ -911,17 +909,14 @@ modules:
- -DENABLE_SDL=ON - -DENABLE_SDL=ON
- -DENABLE_EVDEV=ON - -DENABLE_EVDEV=ON
- -DDISTRIBUTOR=Flathub - -DDISTRIBUTOR=Flathub
- -DQT_DIR=
cleanup: cleanup:
- /share/man - /share/man
post-install: post-install:
- install -D primehack-wrapper /app/bin/primehack-wrapper - install -D primehack-wrapper /app/bin/primehack-wrapper
sources: sources:
- type: git - type: git
url: https://github.com/XargonWan/primehack url: https://github.com/shiiion/dolphin.git
commit: af7710ef7b04a632b4294eae5e0eff8fe9c4d1f8 commit: 81bfb9686afd2d190134b44dd72d3cee876fe2ab # This commit refers to the PR 166: https://github.com/shiiion/dolphin/pull/166, please change it when it's approved
#url: https://github.com/TheDrifter363/primehack.git
#commit: 6295c695307a67f11ee202b05cbdd7b5c1edae5c
# detects whether dolphin is running in a flatpak sandbox # detects whether dolphin is running in a flatpak sandbox
# and makes it use xdg directories if it is. # and makes it use xdg directories if it is.
# prevents dolphin from attempting to write conf files # prevents dolphin from attempting to write conf files
@ -940,9 +935,9 @@ modules:
- primehack "$@" - primehack "$@"
dest-filename: primehack-wrapper dest-filename: primehack-wrapper
# # PRIMEHACK - END # PRIMEHACK - END
# Duckstation-AppImage - START # Duckstation-AppImage - START - AUTOUPDATED
# https://github.com/stenzek/duckstation/releases/tag/preview # https://github.com/stenzek/duckstation/releases/tag/preview
- name: Duckstation-AppImage - name: Duckstation-AppImage
@ -955,8 +950,8 @@ modules:
- ln -s "${FLATPAK_DEST}/duckstation/usr/bin/duckstation-qt" "${FLATPAK_DEST}/bin/duckstation-qt" - ln -s "${FLATPAK_DEST}/duckstation/usr/bin/duckstation-qt" "${FLATPAK_DEST}/bin/duckstation-qt"
sources: sources:
- type: file - type: file
url: https://github.com/stenzek/duckstation/releases/download/preview/DuckStation-x64.AppImage url: https://github.com/stenzek/duckstation/releases/download/v0.1-6937/DuckStation-x64.AppImage
sha256: DUCKSTATIONSHAPLACEHOLDER sha256: 8a16f034cc8b11341ed9ad382226549301736794582bdec46a5e19b3ca981e07
# Duckstation-AppImage - END # Duckstation-AppImage - END
@ -1045,8 +1040,8 @@ modules:
- /share - /share
sources: sources:
- type: archive - type: archive
url: https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.4/wxWidgets-3.2.4.tar.bz2 url: https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.5/wxWidgets-3.2.5.tar.bz2
sha256: 0640e1ab716db5af2ecb7389dbef6138d7679261fbff730d23845ba838ca133e sha256: 0ad86a3ad3e2e519b6a705248fc9226e3a09bbf069c6c692a02acf7c2d1c6b51
x-checker-data: x-checker-data:
type: anitya type: anitya
project-id: 5150 project-id: 5150
@ -1066,8 +1061,21 @@ modules:
x-checker-data: x-checker-data:
type: git type: git
tag-pattern: ^v([\d.]+-\d+)$ tag-pattern: ^v([\d.]+-\d+)$
tag: v2.0-79 tag: v2.0-88
commit: efbbb817fe1cbe09ee132344b44a0f61f8b8ac96 commit: aefbb918beb8718af8f190a73018ff63bf801d95
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 - type: shell
commands: commands:
- sed "s/set(EXPERIMENTAL_VERSION.*/set(EXPERIMENTAL_VERSION \"$(git describe - sed "s/set(EXPERIMENTAL_VERSION.*/set(EXPERIMENTAL_VERSION \"$(git describe
@ -1115,7 +1123,7 @@ modules:
# Cemu - END # Cemu - END
# Vita3K - START # Vita3K - START - AUTOUPDATED
- name: vita3k - name: vita3k
buildsystem: simple buildsystem: simple
@ -1133,7 +1141,7 @@ modules:
sha256: VITA3KSHAPLACEHOLDER sha256: VITA3KSHAPLACEHOLDER
- type: file - type: file
path: res/retrodeck.png path: res/retrodeck.png
# Vita3K - END # Vita3K - END
# SOLARUS - START # SOLARUS - START
@ -1211,17 +1219,34 @@ modules:
# Ryujinx Appimage - START # Ryujinx Appimage - START
# https://ryujinx.org/download # https://ryujinx.org/download
- name: Ryujinx # Temporary disabled to test a symlink fix build
# - name: Ryujinx
# buildsystem: simple
# build-commands:
# - |
# tar -zxvf *.tar.gz
# mv -v publish ${FLATPAK_DEST}/ryujinx
# 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.1343/ryujinx-1.1.1343-linux_x64.tar.gz
# sha256: 3cd2172d2f42a0fb93a83bffe6bd8fb2d1d81fb45afc80e0068a245c8f755ac1
- name: Ryujinx-with-symlink-fix
buildsystem: simple buildsystem: simple
build-commands: build-commands:
- | - |
tar -zxvf *.tar.gz mkdir -p ${FLATPAK_DEST}/ryujinx
mv -v publish ${FLATPAK_DEST}/ryujinx mkdir -p ${FLATPAK_DEST}/bin
ln -sv ${FLATPAK_DEST}/ryujinx/Ryujinx ${FLATPAK_DEST}/bin/Ryujinx.sh chmod +x Ryujinx.sh
chmod +x Ryujinx
mv -v * ${FLATPAK_DEST}/ryujinx
ln -sv ${FLATPAK_DEST}/ryujinx/Ryujinx.sh ${FLATPAK_DEST}/bin/Ryujinx.sh
chmod +x ${FLATPAK_DEST}/bin/Ryujinx.sh
sources: sources:
- type: file - type: archive
url: https://github.com/Ryujinx/release-channel-master/releases/download/1.1.1297/ryujinx-1.1.1297-linux_x64.tar.gz url: https://gitlab.com/-/project/59825450/uploads/8519a04d7a3f5b5949f14b6ad25a4185/ryujinx-Release-1.1.0+81fd228-linux_x64.zip
sha256: 28b38754e7d2e92083b313b23278c180ae54ac025edbbd0276ec03baec0cec0f sha256: 9e4a4393a3dcc44fda2aec40c2842492e30656c7369a9959d865a3351f12eeb9
# Ryujinx Appimage - END # Ryujinx Appimage - END

View file

@ -30,5 +30,4 @@ index 8d9dc2abb8..8a9d39a3d5 100644
const char* data_home = getenv("XDG_DATA_HOME"); const char* data_home = getenv("XDG_DATA_HOME");
std::string data_path = std::string data_path =
-- --
2.37.1 2.37.1

View file

@ -1,13 +1,12 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt diff --git a/CMake/ScmRevGen.cmake b/CMake/ScmRevGen.cmake
index 9af66009a1..2acd3bed9a 100644 index aacf7491ce..503791cda8 100644
--- a/CMakeLists.txt --- a/CMake/ScmRevGen.cmake
+++ b/CMakeLists.txt +++ b/CMake/ScmRevGen.cmake
@@ -149,7 +149,7 @@ if(GIT_FOUND) @@ -7,7 +7,7 @@ if(GIT_FOUND)
OUTPUT_VARIABLE DOLPHIN_WC_REVISION OUTPUT_VARIABLE DOLPHIN_WC_REVISION
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)
# defines DOLPHIN_WC_DESCRIBE # defines DOLPHIN_WC_DESCRIBE
- execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --always --long --dirty - execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --always --long --dirty
+ execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --always --long + execute_process(WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMAND ${GIT_EXECUTABLE} describe --always --long
OUTPUT_VARIABLE DOLPHIN_WC_DESCRIBE OUTPUT_VARIABLE DOLPHIN_WC_DESCRIBE
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)

@ -1 +1 @@
Subproject commit c2aad98600a47ab250f1b133328d0ccc1310f65e Subproject commit eec4bcca8c9e514467fb62cca4a7b2d12c6a2328

@ -1 +1 @@
Subproject commit ea1dae930a6f61388c2b5e05f95bb6ed0120926e Subproject commit 41761a7dc36ec8520bdaca796d9d0b1219b66a07

@ -1 +1 @@
Subproject commit f63cb3f5fff835c141769d35cd54ce0ae042fcbf Subproject commit 782d3cc04ccdd8071017f622d4bacd35faecbd86

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

BIN
res/icon-pride.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

100
res/icon-pride.svg Normal file
View file

@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="100%"
height="100%"
viewBox="0 0 256 256"
version="1.1"
xml:space="preserve"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"
id="svg17"
sodipodi:docname="icon (pride).svg"
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:serif="http://www.serif.com/"><sodipodi:namedview
id="namedview19"
pagecolor="#ffffff"
bordercolor="#111111"
borderopacity="1"
inkscape:showpageshadow="0"
inkscape:pageopacity="0"
inkscape:pagecheckerboard="1"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="3.3398438"
inkscape:cx="147.31228"
inkscape:cy="177.85263"
inkscape:window-width="1920"
inkscape:window-height="1009"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Left-Symbol" />
<g
transform="matrix(1.88235,0,0,1.86861,-7.52941,-5.60584)"
id="g4">
<path
d="M140,37.25C140,18.347 124.765,3 106,3L38,3C19.235,3 4,18.347 4,37.25L4,105.75C4,124.653 19.235,140 38,140L106,140C124.765,140 140,124.653 140,105.75L140,37.25Z"
style="fill:rgb(17,17,17);"
id="path2" />
</g>
<g
transform="matrix(2.02105,0,0,2.02105,-13.4737,-13.4737)"
id="g12">
<g
id="D"
transform="matrix(-0.674885,8.26495e-17,-8.26495e-17,-0.674885,223.747,109.037)">
<path
d="M172.54,-2.511C175.786,-5.757 179.378,-8.24 183.315,-9.96C187.251,-11.68 191.533,-12.54 196.16,-12.54L271.855,-12.54L271.855,6.901L196.16,6.901C194.44,6.901 192.823,7.222 191.309,7.864C189.795,8.506 188.475,9.39 187.348,10.517C186.222,11.643 185.337,12.964 184.695,14.478C184.053,15.992 183.732,17.609 183.732,19.329L183.732,96.355C183.732,97.954 184.084,99.498 184.786,100.988C185.489,102.478 186.416,103.798 187.566,104.949C188.717,106.1 190.037,107.027 191.527,107.729C193.017,108.432 194.562,108.783 196.16,108.783L271.855,108.783L271.855,128.224L196.16,128.224C193.859,128.224 191.624,127.982 189.456,127.498C187.288,127.013 185.204,126.329 183.206,125.444C181.207,124.56 179.311,123.5 177.518,122.265C175.726,121.029 174.066,119.673 172.54,118.195C169.366,115.118 166.901,111.575 165.145,107.566C163.389,103.556 162.51,99.226 162.51,94.574L162.51,21.11C162.51,16.458 163.37,12.17 165.09,8.246C166.811,4.321 169.294,0.736 172.54,-2.511Z"
style="fill:white;fill-rule:nonzero;"
id="path6" />
</g>
<g
id="Left-Symbol"
serif:id="Left Symbol"
transform="matrix(0.494792,-0,-0,0.494792,6.66667,6.66667)">
<path
id="rect6600"
style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;fill:url(#pattern7632);stroke:none;stroke-width:0.999998"
d="M 47.199248 80.802785 C 45.822808 80.802785 44.569351 81.044902 43.441434 81.527395 C 42.313512 82.009865 41.343959 82.696403 40.531275 83.587943 C 39.718995 84.47953 39.092064 85.5436 38.652368 86.781305 C 38.212654 88.019017 37.994165 89.393933 37.994165 90.904354 L 38.021508 168.91026 L 54.769566 168.91026 L 54.769566 134.23446 L 97.697327 134.23446 L 123.50594 168.91026 L 144.29501 168.91026 L 118.4864 134.23446 L 118.80281 134.23446 C 121.49824 134.23446 123.9587 133.88769 126.18563 133.1954 C 128.413 132.50312 130.41571 131.54371 132.19344 130.31649 C 133.97116 129.0893 135.52516 127.63538 136.8536 125.95711 C 138.18246 124.27862 139.2867 122.44931 140.1661 120.46687 C 141.0455 118.48428 141.70493 116.39222 142.14462 114.18952 C 142.58434 111.98667 142.80282 109.76227 142.80282 107.51765 C 142.82193 105.31474 142.61167 103.12832 142.17196 100.95709 C 141.73228 98.786016 141.07285 96.708861 140.19345 94.726622 C 139.31404 92.744383 138.21178 90.902392 136.8829 89.203181 C 135.55439 87.503908 133.99477 86.036596 132.20711 84.798881 C 130.41986 83.561223 128.413 82.584399 126.18563 81.871145 C 123.95873 81.157899 121.49637 80.802785 118.80086 80.802785 L 47.199248 80.802785 z M 54.769566 97.63678 L 118.4864 97.63678 C 119.76727 97.63678 120.87996 97.919949 121.82625 98.48639 C 122.77254 99.052829 123.55673 99.797753 124.17781 100.72077 C 124.79933 101.64378 125.26257 102.69763 125.56844 103.88288 C 125.87432 105.06816 126.02275 106.27995 126.01375 107.51765 C 126.0044 108.75534 125.8409 109.96715 125.52547 111.15241 C 125.21005 112.33768 124.73643 113.3915 124.10555 114.31452 C 123.47468 115.23757 122.6907 115.98249 121.75398 116.5489 C 120.81726 117.1153 119.72901 117.39851 118.4864 117.39851 L 54.769566 117.39851 L 54.769566 97.63678 z "
transform="translate(2.6596517e-5,2.6596517e-5)" />
</g>
</g>
<defs
id="defs15"><pattern
inkscape:collect="always"
xlink:href="#pattern6592"
id="pattern7632"
patternTransform="matrix(0.13680989,0,0,0.18355902,37.993601,80.802163)" />
<image
id="_Image1"
width="104px"
height="79px"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGgAAABPCAYAAAAHtYAvAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGHUlEQVR4nO2de2xTVRzHP6cbe4qg8jB1ioQMcDJAHgEVMPyjgaAGQR4xhAxEGfIY8gaBGCXGGEULjMG2FhEG6JCBhEgEJWRBBkaDopIYwRAsigSHoMLa3usftzVla7eu/bWU9HySJvd37jnfnNzvPae95/Scq2hE7cTz6YZigqEYYKAKTUWhoehoKDBQmAqsYzCUwlBYaUGxocBsFBuAGS7Gn6ZUkFaQfnOx/9hsFIfSalE7rJa/rk3jBkNRbyjqDVS9qfjRUBw3FMcM1IlvXkpvaHx9W4sKDo5McPc1lKo0FP2aGKINajYOca3+MBSlpqL02+L0C9EaZAscfDnBPRs4DvSLVkxzAx2BlcDZXmXeioIy34PRiNgA6sa7+wBvA+ly9dP4yQSmAid7bvDt77HR16c1hW11493pQAXanETwOFCbX+4bGWkBGzAOGBC3KmkacxvwSbdyoziSzDZgYHzrowmBDSjtWmG81aXSsLWUsVdi6qQJwXxgy31OQ4XLYAMKE1cfTQgmApPDnbQBnRNXF00YVuc5TXuoE832f5qE0R5Yb3eZTbo6bVDy8BQwvnGiNii5WGN3mbnBCdqg5KIDMCo4QRuUfEwMDiSGd5YCLgGdWw0bUAAM8X+GI3PDj7C7zPbuIlUPMgZdHlPZ6TcBnVsRN3AAYLDDMxL4EMhttkTLZACj8d/0uosT4ujsNvuAYcDvAnL/d3PaIEHqZrX5GlgsIDUs8EykDZJnK3A2Ro1M4E7QBolzfGYbD/COgNQ9oA2KF0cFNLRBceS0gIY2KI5cBK7GqKENiiOK2J8xvaANihd5QFaMGr+CNihe5AtonANtULwYLqChDYoHA9d62gEzBaR0FxcnZgHtYtT4y12kroBlkBlzlTQADFrjGQ0sE5A6HDjQLUiIwQ5PCbCT2H+9AWwPHEjMB927c+qFvim4/MRmQKGhGGoohhrQXeBaAlwD9gQCCYMWIzPErrHYG/j+Ad3FJSPbgwNtUHJxEdgXnKANSi5muYvUv8EJ2qDkoQbY0ThRG5Qc/AnMcBepJs+k2qDkoOTcFHU+1Ak9knDzqQI+CHdSt6Cby5vApLNTbGEbiV7ZfXPwAsVnnrdVtJRRG5R4LgNjf55mOxBJZt3FJQ4T66f0wz9NS4vIHNAtKBFcBSoBx6kX01r9dyxtUPz4BXAAzpPT0y9HKyJh0BXgHwGdeHM7kC2o58VaflKP9b1SD5wCvvJ/zpyYkR7zI4zIdMOYyk6lAjpxZeqrfxcAdVhbsUiggMm1czIOCemFJGV+JFSuzP0BeE5QMg2oHvJew/2Cmk1IqZEE54rcPcByQcm7gN2POBpiXVUXlpRpQUGsAqoF9XoDmwY7PGH324mFlDNo04pcEygCvhOUHYu1mFqclDMIYPPy3KvA08AlQdnXBq3xPCmoB6SoQQBbXsk5AzwL+IQkFbB14FrPA0J6QAobBFC1LOdzYK6gZFtgd/91njukBFPaID9rAaegXj6w7aF13jQJsZQ3aNuyHBOYgcy60gBPAG9ICKW8QQA7luZcB57BGrqRYkGfUm/MD8baID8fLck+j7UFy3VB2Yre670x7aicUiMJLbFzSfYx4AVBySxgV68y793RCugW1Ihdi7M3A6sFJfOA6oIyX0Y0hbVBoVmIfxcrIR4F1vbc4Gv1cJA2KAQ1i7K9WPuHSmxIEWAaML21hbRBYdizMOsS1kavsW5IEYyjx0bfY60poA1qhr0Ls74HJglKpgPV+eW+LpEW0Aa1wL4FWTVY7wGSogNQ063ciGgOSRsUGa8DHwvq9QWcXSvCv7MhgDYoAj6dn2VgvV/hpKDsOCJYOqoNipD98zLjMYe0qkulMaq5DHokoRV8Ni/zNNadLzmHVHWf0+gZLoNuQa3k4MuZB4F5gpJtgd15TrN9qJPaoOhwAJsE9boDVXaX2WQOSRsUBV/MzTSBYqw/QkoxAusfRzegDYqSQyUZ17DmkEIuXYySRXaXecO7G7RBMXC4JMONNYcU8yuhg3DaXWb/QKANipHaORl1yM8h1dhdZmfQBolwZHbG+8C7gpJ5QLXdZWZog+RYABwU1BsCOP4DNMctuHcT4JEAAAAASUVORK5CYII=" />
<pattern
patternUnits="userSpaceOnUse"
width="777"
height="480"
id="pattern6592"><path
fill="#770088"
d="M 0,0 H 777 V 480 H 0 Z"
id="path6457" /><path
fill="#004cff"
d="M 0,0 H 777 V 400 H 0 Z"
id="path6459" /><path
fill="#028121"
d="M 0,0 H 777 V 320 H 0 Z"
id="path6461" /><path
fill="#ffee00"
d="M 0,0 H 777 V 240 H 0 Z"
id="path6463" /><path
fill="#ff8d00"
d="M 0,0 H 777 V 160 H 0 Z"
id="path6465" /><path
fill="#e50000"
d="M 0,0 H 777 V 80 H 0 Z"
id="path6467" /></pattern></defs>
</svg>

After

Width:  |  Height:  |  Size: 7.8 KiB

View file

@ -56,10 +56,10 @@ https://retrodeck.net
;; ;;
--reset-component*) --reset-component*)
echo "You are about to reset one or more RetroDECK components or emulators." echo "You are about to reset one or more RetroDECK components or emulators."
echo "Available options are: es-de, retroarch, cemu, dolphin, duckstation, gzdoom, melonds, pcsx3, pico8, ppsspp, primehack, rpcs3, ryujinx, xemu, vita3k, mame, boilr, all" echo "Available options are: es-de, retroarch, cemu, dolphin, duckstation, gzdoom, melonds, pcsx3, pico8, ppsspp, primehack, rpcs3, ryujinx, xemu, vita3k, mame, all"
read -p "Please enter the component you would like to reset: " component read -p "Please enter the component you would like to reset: " component
component=$(echo "$component" | tr '[:upper:]' '[:lower:]') component=$(echo "$component" | tr '[:upper:]' '[:lower:]')
if [[ "$component" =~ ^(es-de|retroarch|cemu|dolphin|duckstation|gzdoom|mame|melonds|pcsx2|ppsspp|primehack|ryujinx|rpcs3|xemu|all)$ ]]; then if [[ "$component" =~ ^(es-de|retroarch|cemu|dolphin|duckstation|gzdoom|mame|melonds|pcsx2|ppsspp|primehack|ryujinx|rpcs3|vita3k|xemu|all)$ ]]; then
read -p "You are about to reset $component to default settings. Enter 'y' to continue, 'n' to stop: " response read -p "You are about to reset $component to default settings. Enter 'y' to continue, 'n' to stop: " response
if [[ $response == [yY] ]]; then if [[ $response == [yY] ]]; then
prepare_component "reset" "$component" "cli" prepare_component "reset" "$component" "cli"
@ -113,7 +113,7 @@ if [ -f "$lockfile" ]; then
set_setting_value $rd_conf "update_check" "true" retrodeck "options" set_setting_value $rd_conf "update_check" "true" retrodeck "options"
set_setting_value $rd_conf "developer_options" "true" retrodeck "options" set_setting_value $rd_conf "developer_options" "true" retrodeck "options"
cooker_base_version=$(echo $hard_version | cut -d'-' -f2) cooker_base_version=$(echo $hard_version | cut -d'-' -f2)
choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Upgrade" --extra-button="Don't Upgrade" --extra-button="Full Wipe and Fresh Install" \ choice=$(rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Upgrade" --extra-button="Don't Upgrade" --extra-button="Full Wipe and Fresh Install" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Cooker Upgrade" \ --title "RetroDECK Cooker Upgrade" \
--text="You appear to be upgrading to a \"cooker\" build of RetroDECK.\n\nWould you like to perform the standard post-update process, skip the post-update process or remove ALL existing RetroDECK folders and data (including ROMs and saves) to start from a fresh install?\n\nPerforming the normal post-update process multiple times may lead to unexpected results.") --text="You appear to be upgrading to a \"cooker\" build of RetroDECK.\n\nWould you like to perform the standard post-update process, skip the post-update process or remove ALL existing RetroDECK folders and data (including ROMs and saves) to start from a fresh install?\n\nPerforming the normal post-update process multiple times may lead to unexpected results.")
@ -184,13 +184,4 @@ if [[ $update_check == "true" ]]; then
fi fi
# Normal Startup # Normal Startup
if [[ $steam_sync == "true" ]]; then
python3 /app/libexec/steam-sync/steam-sync.py &
fi
start_retrodeck start_retrodeck
if [[ $steam_sync == "true" ]]; then
touch /tmp/retrodeck_steam_sync_exit
fi

View file

@ -52,6 +52,8 @@ source /app/libexec/global.sh
# - Move Screenshots folder # - Move Screenshots folder
# - Move Mods folder # - Move Mods folder
# - Move Texture Packs folder # - Move Texture Packs folder
# - Tool: Remove Empty ROM Folders
# - Tool: Rebuild All ROM Folders
# - Tool: Compress Games # - Tool: Compress Games
# - Compress Single Game # - Compress Single Game
# - Compress Multiple Games - CHD # - Compress Multiple Games - CHD
@ -99,8 +101,8 @@ source /app/libexec/global.sh
# - Change Multi-user mode # - Change Multi-user mode
# - Change Update channel # - Change Update channel
# - Browse the wiki # - Browse the wiki
# - USB Import tool
# - Install: RetroDECK Starter Pack # - Install: RetroDECK Starter Pack
# - Tool: USB Import
# DIALOG TREE FUNCTIONS # DIALOG TREE FUNCTIONS
@ -122,7 +124,7 @@ configurator_welcome_dialog() {
"RetroDECK: About" "Show additional information about RetroDECK") "RetroDECK: About" "Show additional information about RetroDECK")
fi fi
choice=$(zenity --list --title="RetroDECK Configurator Utility" --cancel-label="Quit" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility" --cancel-label="Quit" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \ --column="Choice" --column="Action" \
"${welcome_menu_options[@]}") "${welcome_menu_options[@]}")
@ -154,11 +156,6 @@ configurator_welcome_dialog() {
configurator_about_retrodeck_dialog configurator_about_retrodeck_dialog
;; ;;
"Sync with Steam" )
log i "Configurator: opening \"$choice\" menu"
configurator_add_steam
;;
"Developer Options" ) "Developer Options" )
log i "Configurator: opening \"$choice\" menu" log i "Configurator: opening \"$choice\" menu"
configurator_generic_dialog "RetroDECK Configurator - Developer Options" "The following features and options are potentially VERY DANGEROUS for your RetroDECK install!\n\nThey should be considered the bleeding-edge of upcoming RetroDECK features, and never used when you have important saves/states/roms that are not backed up!\n\nYOU HAVE BEEN WARNED!" configurator_generic_dialog "RetroDECK Configurator - Developer Options" "The following features and options are potentially VERY DANGEROUS for your RetroDECK install!\n\nThey should be considered the bleeding-edge of upcoming RetroDECK features, and never used when you have important saves/states/roms that are not backed up!\n\nYOU HAVE BEEN WARNED!"
@ -174,7 +171,7 @@ configurator_welcome_dialog() {
} }
configurator_presets_and_settings_dialog() { configurator_presets_and_settings_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - Presets & Settings" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - Presets & Settings" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \ --column="Choice" --column="Action" \
"Global: Presets & Settings" "Here you find presets and settings that that span over multiple emulators" \ "Global: Presets & Settings" "Here you find presets and settings that that span over multiple emulators" \
@ -207,7 +204,7 @@ configurator_presets_and_settings_dialog() {
} }
configurator_global_presets_and_settings_dialog() { configurator_global_presets_and_settings_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - Global: Presets & Settings" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - Global: Presets & Settings" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \ --column="Choice" --column="Action" \
"Widescreen: Enable/Disable" "Enable or disable widescreen in supported systems" \ "Widescreen: Enable/Disable" "Enable or disable widescreen in supported systems" \
@ -290,7 +287,7 @@ configurator_global_presets_and_settings_dialog() {
} }
configurator_retroarch_presets_and_settings_dialog() { configurator_retroarch_presets_and_settings_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroArch: Presets & Settings" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - RetroArch: Presets & Settings" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \ --column="Choice" --column="Action" \
"Borders: Enable/Disable" "Enable or disable borders in supported systems" ) "Borders: Enable/Disable" "Enable or disable borders in supported systems" )
@ -312,7 +309,7 @@ configurator_retroarch_presets_and_settings_dialog() {
} }
configurator_wii_and_gamecube_presets_and_settings_dialog() { configurator_wii_and_gamecube_presets_and_settings_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - Wii & GameCube: Presets & Settings" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - Wii & GameCube: Presets & Settings" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \ --column="Choice" --column="Action" \
"Dolphin Textures: Universal Dynamic Input" "Enable/Disable Venomalia's Universal Dynamic Input Textures for Dolphin" \ "Dolphin Textures: Universal Dynamic Input" "Enable/Disable Venomalia's Universal Dynamic Input Textures for Dolphin" \
@ -340,7 +337,7 @@ configurator_wii_and_gamecube_presets_and_settings_dialog() {
configurator_dolphin_input_textures_dialog() { configurator_dolphin_input_textures_dialog() {
if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then if [[ -d "/var/data/dolphin-emu/Load/DynamicInputTextures" ]]; then
zenity --question \ rd_zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - Dolphin Textures: Universal Dynamic Input" \ --title "RetroDECK Configurator - Dolphin Textures: Universal Dynamic Input" \
--text="Custom input textures are currently enabled. Do you want to disable them?" --text="Custom input textures are currently enabled. Do you want to disable them?"
@ -354,7 +351,7 @@ configurator_dolphin_input_textures_dialog() {
configurator_wii_and_gamecube_presets_and_settings_dialog configurator_wii_and_gamecube_presets_and_settings_dialog
fi fi
else else
zenity --question \ rd_zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - Dolphin Textures: Universal Dynamic Input" \ --title "RetroDECK Configurator - Dolphin Textures: Universal Dynamic Input" \
--text="Custom input textures are currently disabled. Do you want to enable them?\n\nThis process may take several minutes to complete." --text="Custom input textures are currently disabled. Do you want to enable them?\n\nThis process may take several minutes to complete."
@ -366,7 +363,7 @@ configurator_dolphin_input_textures_dialog() {
mkdir "/var/data/dolphin-emu/Load/DynamicInputTextures" mkdir "/var/data/dolphin-emu/Load/DynamicInputTextures"
rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/dolphin-emu/Load/DynamicInputTextures/" rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/dolphin-emu/Load/DynamicInputTextures/"
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Dolphin Custom Input Textures Install" --title "RetroDECK Configurator Utility - Dolphin Custom Input Textures Install"
configurator_process_complete_dialog "enabling Dolphin custom input textures" configurator_process_complete_dialog "enabling Dolphin custom input textures"
@ -378,7 +375,7 @@ configurator_dolphin_input_textures_dialog() {
configurator_primehack_input_textures_dialog() { configurator_primehack_input_textures_dialog() {
if [[ -d "/var/data/primehack/Load/DynamicInputTextures" ]]; then if [[ -d "/var/data/primehack/Load/DynamicInputTextures" ]]; then
zenity --question \ rd_zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - Dolphin Custom Input Textures" \ --title "RetroDECK Configurator - Dolphin Custom Input Textures" \
--text="Custom input textures are currently enabled. Do you want to disable them?" --text="Custom input textures are currently enabled. Do you want to disable them?"
@ -392,7 +389,7 @@ configurator_primehack_input_textures_dialog() {
configurator_wii_and_gamecube_presets_and_settings_dialog configurator_wii_and_gamecube_presets_and_settings_dialog
fi fi
else else
zenity --question \ rd_zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - Primehack Custom Input Textures" \ --title "RetroDECK Configurator - Primehack Custom Input Textures" \
--text="Custom input textures are currently disabled. Do you want to enable them?\n\nThis process may take several minutes to complete." --text="Custom input textures are currently disabled. Do you want to enable them?\n\nThis process may take several minutes to complete."
@ -404,7 +401,7 @@ configurator_primehack_input_textures_dialog() {
mkdir "/var/data/primehack/Load/DynamicInputTextures" mkdir "/var/data/primehack/Load/DynamicInputTextures"
rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/primehack/Load/DynamicInputTextures/" rsync -rlD --mkpath "/app/retrodeck/extras/DynamicInputTextures/" "/var/data/primehack/Load/DynamicInputTextures/"
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Primehack Custom Input Textures Install" --title "RetroDECK Configurator Utility - Primehack Custom Input Textures Install"
configurator_process_complete_dialog "enabling Primehack custom input textures" configurator_process_complete_dialog "enabling Primehack custom input textures"
@ -416,7 +413,7 @@ configurator_primehack_input_textures_dialog() {
configurator_power_user_warning_dialog() { configurator_power_user_warning_dialog() {
if [[ $power_user_warning == "true" ]]; then if [[ $power_user_warning == "true" ]]; then
choice=$(zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Never show this again" \ choice=$(rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="Yes" --extra-button="No" --extra-button="Never show this again" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Power User Warning" \ --title "RetroDECK Power User Warning" \
--text="Making manual changes to an emulator's configuration may create serious issues,\nand some settings may be overwitten during RetroDECK updates or when using presets.\n\nSome standalone emulator functions may not work properly outside of Desktop mode.\n\nPlease continue only if you know what you're doing.\n\nDo you want to continue?") --text="Making manual changes to an emulator's configuration may create serious issues,\nand some settings may be overwitten during RetroDECK updates or when using presets.\n\nSome standalone emulator functions may not work properly outside of Desktop mode.\n\nPlease continue only if you know what you're doing.\n\nDo you want to continue?")
@ -460,7 +457,7 @@ configurator_open_emulator_dialog() {
emulator_list+=("Citra" "Open the 3DS emulator Citra") emulator_list+=("Citra" "Open the 3DS emulator Citra")
fi fi
emulator=$(zenity --list \ emulator=$(rd_zenity --list \
--title "RetroDECK Configurator Utility - Open Emulator" --cancel-label="Back" \ --title "RetroDECK Configurator Utility - Open Emulator" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--text="Which emulator do you want to launch?" \ --text="Which emulator do you want to launch?" \
@ -559,6 +556,8 @@ configurator_retrodeck_tools_dialog() {
local choices=( local choices=(
"Tool: Move Folders" "Move RetroDECK folders between internal/SD card or to a custom location" "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" "Tool: Compress Games" "Compress games for systems that support it"
"Install: RetroDECK Controller Layouts" "Install the custom RetroDECK controller layouts on Steam" "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" "Install: PS3 Firmware" "Download and install PS3 firmware for use with the RPCS3 emulator"
@ -573,7 +572,7 @@ configurator_retrodeck_tools_dialog() {
choices+=("Ponzu - Remove Citra" "Run Ponzu to remove Citra from RetroDECK. Configurations and saves will be mantained.") choices+=("Ponzu - Remove Citra" "Run Ponzu to remove Citra from RetroDECK. Configurations and saves will be mantained.")
fi fi
choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Tools" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Tools" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \ --column="Choice" --column="Action" \
"${choices[@]}") "${choices[@]}")
@ -585,6 +584,48 @@ configurator_retrodeck_tools_dialog() {
configurator_retrodeck_move_tool_dialog configurator_retrodeck_move_tool_dialog
;; ;;
"Tool: Remove Empty ROM Folders" )
log i "Configurator: opening \"$choice\" menu"
configurator_generic_dialog "RetroDECK Configurator - Remove Empty ROM Folders" "Before removing any identified empty ROM folders,\nplease make sure your ROM collection is backed up, just in case!"
configurator_generic_dialog "RetroDECK Configurator - Remove Empty ROM Folders" "Searching for empty rom folders, please be patient..."
find_empty_rom_folders
choice=$(rd_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 -rf "$folder"
done
configurator_generic_dialog "RetroDECK Configurator - Remove Empty ROM Folders" "The removal process is complete."
elif [[ ! -z $choice ]]; then # User clicked "Remove All"
for folder in "${all_empty_folders[@]}"; do
log i "Removing empty folder $folder"
rm -rf "$folder"
done
configurator_generic_dialog "RetroDECK Configurator - Remove Empty ROM Folders" "The removal process is complete."
fi
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" ) "Tool: Compress Games" )
log i "Configurator: opening \"$choice\" menu" 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!" 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,7 +649,7 @@ configurator_retrodeck_tools_dialog() {
( (
update_rpcs3_firmware update_rpcs3_firmware
) | ) |
zenity --progress --no-cancel --pulsate --auto-close \ rd_zenity --progress --no-cancel --pulsate --auto-close \
--icon-name=net.retrodeck.retrodeck \ --icon-name=net.retrodeck.retrodeck \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title="Downloading PS3 Firmware" \ --title="Downloading PS3 Firmware" \
@ -627,7 +668,7 @@ configurator_retrodeck_tools_dialog() {
( (
update_vita3k_firmware update_vita3k_firmware
) | ) |
zenity --progress --pulsate \ rd_zenity --progress --pulsate \
--icon-name=net.retrodeck.retrodeck \ --icon-name=net.retrodeck.retrodeck \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title="Downloading PS Vita Firmware" \ --title="Downloading PS Vita Firmware" \
@ -661,7 +702,7 @@ configurator_retrodeck_tools_dialog() {
} }
configurator_retrodeck_move_tool_dialog() { configurator_retrodeck_move_tool_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Move Tool" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Move Tool" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \ --column="Choice" --column="Action" \
"Move all of RetroDECK" "Move the entire retrodeck folder to a new location" \ "Move all of RetroDECK" "Move the entire retrodeck folder to a new location" \
@ -733,7 +774,7 @@ configurator_retrodeck_move_tool_dialog() {
} }
configurator_compression_tool_dialog() { configurator_compression_tool_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Compression Tool" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Compression Tool" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \ --column="Choice" --column="Action" \
"Compress Single Game" "Compress a single game into a compatible format" \ "Compress Single Game" "Compress a single game into a compatible format" \
@ -794,30 +835,8 @@ configurator_compress_single_game_dialog() {
echo "# Compressing $(basename "$file") to $compatible_compression_format format" # This updates the Zenity 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" log i "Compressing $(basename "$file") to $compatible_compression_format format"
compress_game "$compatible_compression_format" "$file" "$system" 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 \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Compression in Progress" --title "RetroDECK Configurator Utility - Compression in Progress"
configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete." configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete."
@ -835,78 +854,37 @@ configurator_compress_single_game_dialog() {
configurator_compress_multiple_games_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 # 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=() find_compatible_games "$1"
local all_compressable_games=()
local games_to_compress=()
local target_selection="$1"
if [[ "$1" == "everything" ]]; then if [[ ! $(echo "${#all_compressable_games[@]}") == "0" ]]; then
local compression_format="all" if [[ ! "$target_selection" == "everything" ]]; then # If the user chose to not auto-compress everything
else choice=$(rd_zenity \
local compression_format="$1" --list --width=1200 --height=720 --title "RetroDECK Configurator - RetroDECK: Compression Tool" \
fi --checklist --hide-column=3 --ok-label="Compress Selected" --extra-button="Compress All" \
--separator="," --print-column=3 \
--text="Choose which games to compress:" \
--column "Compress?" \
--column "Game" \
--column "Game Full Path" \
"${compressable_games_list[@]}")
if [[ $compression_format == "all" ]]; then local rc=$?
local compressable_systems_list=$(cat $compression_targets | sed '/^$/d' | sed '/^\[/d') if [[ $rc == "0" && ! -z $choice ]]; then # User clicked "Compress Selected" with at least one game selected
else IFS="," read -ra games_to_compress <<< "$choice"
local compressable_systems_list=$(sed -n '/\['"$compression_format"'\]/, /\[/{ /\['"$compression_format"'\]/! { /\[/! p } }' $compression_targets | sed '/^$/d') local total_games_to_compress=${#games_to_compress[@]}
fi local games_left_to_compress=$total_games_to_compress
elif [[ ! -z $choice ]]; then # User clicked "Compress All"
while IFS= read -r system # Find and validate all games that are able to be compressed with this compression type games_to_compress=("${all_compressable_games[@]}")
do local total_games_to_compress=${#all_compressable_games[@]}
compression_candidates=$(find "$roms_folder/$system" -type f -not -iname "*.txt") local games_left_to_compress=$total_games_to_compress
if [[ ! -z $compression_candidates ]]; then fi
while IFS= read -r game else # The user chose to auto-compress everything
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")
if [[ ! "$target_selection" == "everything" ]]; then # If the user chose to not auto-compress everything
choice=$(zenity \
--list --width=1200 --height=720 --title "RetroDECK Configurator - RetroDECK: Compression Tool" \
--checklist --hide-column=3 --ok-label="Compress Selected" --extra-button="Compress All" \
--separator="," --print-column=3 \
--text="Choose which games to compress:" \
--column "Compress?" \
--column "Game" \
--column "Game Full Path" \
"${compressable_games_list[@]}")
local rc=$?
if [[ $rc == "0" && ! -z $choice ]]; then # User clicked "Compress Selected" with at least one game selected
IFS="," read -ra games_to_compress <<< "$choice"
local total_games_to_compress=${#games_to_compress[@]}
local games_left_to_compress=$total_games_to_compress
elif [[ ! -z $choice ]]; then # User clicked "Compress All"
games_to_compress=("${all_compressable_games[@]}") games_to_compress=("${all_compressable_games[@]}")
local total_games_to_compress=${#all_compressable_games[@]} local total_games_to_compress=${#all_compressable_games[@]}
local games_left_to_compress=$total_games_to_compress local games_left_to_compress=$total_games_to_compress
fi fi
else # The user chose to auto-compress everything else
games_to_compress=("${all_compressable_games[@]}") configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "No compressable files were found."
fi fi
if [[ ! $(echo "${#games_to_compress[@]}") == "0" ]]; then if [[ ! $(echo "${#games_to_compress[@]}") == "0" ]]; then
@ -922,30 +900,9 @@ configurator_compress_multiple_games_dialog() {
games_left_to_compress=$((games_left_to_compress-1)) games_left_to_compress=$((games_left_to_compress-1))
log i "Games left to compress: $games_left_to_compress" log i "Games left to compress: $games_left_to_compress"
compress_game "$compression_format" "$file" "$system" 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 done
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Compression in Progress" --title "RetroDECK Configurator Utility - Compression in Progress"
configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete!" configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete!"
@ -956,7 +913,7 @@ configurator_compress_multiple_games_dialog() {
} }
configurator_compression_cleanup_dialog() { configurator_compression_cleanup_dialog() {
zenity --icon-name=net.retrodeck.retrodeck --question --no-wrap --cancel-label="No" --ok-label="Yes" \ rd_zenity --icon-name=net.retrodeck.retrodeck --question --no-wrap --cancel-label="No" --ok-label="Yes" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK: Compression Tool" \ --title "RetroDECK Configurator - RetroDECK: Compression Tool" \
--text="Do you want to remove old files after they are compressed?\n\nClicking \"No\" will leave all files behind which will need to be cleaned up manually and may result in game duplicates showing in the RetroDECK library.\n\nPlease make sure you have a backup of your ROMs before using automatic cleanup!" --text="Do you want to remove old files after they are compressed?\n\nClicking \"No\" will leave all files behind which will need to be cleaned up manually and may result in game duplicates showing in the RetroDECK library.\n\nPlease make sure you have a backup of your ROMs before using automatic cleanup!"
@ -970,7 +927,7 @@ configurator_compression_cleanup_dialog() {
configurator_online_update_setting_dialog() { configurator_online_update_setting_dialog() {
if [[ $(get_setting_value $rd_conf "update_check" retrodeck "options") == "true" ]]; then if [[ $(get_setting_value $rd_conf "update_check" retrodeck "options") == "true" ]]; then
zenity --question \ rd_zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Online Update Check" \ --title "RetroDECK Configurator - RetroDECK Online Update Check" \
--text="Online update checks for RetroDECK are currently enabled.\n\nDo you want to disable them?" --text="Online update checks for RetroDECK are currently enabled.\n\nDo you want to disable them?"
@ -982,7 +939,7 @@ configurator_online_update_setting_dialog() {
configurator_retrodeck_tools_dialog configurator_retrodeck_tools_dialog
fi fi
else else
zenity --question \ rd_zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Online Update Check" \ --title "RetroDECK Configurator - RetroDECK Online Update Check" \
--text="Online update checks for RetroDECK are currently disabled.\n\nDo you want to enable them?" --text="Online update checks for RetroDECK are currently disabled.\n\nDo you want to enable them?"
@ -997,7 +954,7 @@ configurator_online_update_setting_dialog() {
} }
configurator_retrodeck_troubleshooting_dialog() { configurator_retrodeck_troubleshooting_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Troubleshooting" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Troubleshooting" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \ --column="Choice" --column="Action" \
"Backup: RetroDECK Userdata" "Compress and backup important RetroDECK user data folders" \ "Backup: RetroDECK Userdata" "Compress and backup important RetroDECK user data folders" \
@ -1014,7 +971,7 @@ configurator_retrodeck_troubleshooting_dialog() {
( (
backup_retrodeck_userdata backup_retrodeck_userdata
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Backup in Progress" \ --title "RetroDECK Configurator Utility - Backup in Progress" \
--text="Backing up RetroDECK userdata, please wait..." --text="Backing up RetroDECK userdata, please wait..."
@ -1059,7 +1016,7 @@ configurator_check_bios_files() {
check_bios_files "basic" check_bios_files "basic"
zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \ rd_zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column "BIOS File Name" \ --column "BIOS File Name" \
--column "System" \ --column "System" \
@ -1077,7 +1034,7 @@ configurator_check_bios_files_expert_mode() {
check_bios_files "expert" check_bios_files "expert"
zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \ rd_zenity --list --title="RetroDECK Configurator Utility - Check & Verify: BIOS Files" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column "BIOS File Name" \ --column "BIOS File Name" \
--column "System" \ --column "System" \
@ -1095,7 +1052,7 @@ configurator_check_multifile_game_structure() {
local folder_games=($(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")) local folder_games=($(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3"))
if [[ ${#folder_games[@]} -gt 1 ]]; then if [[ ${#folder_games[@]} -gt 1 ]]; then
echo "$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")" > $logs_folder/multi_file_games_"$(date +"%Y_%m_%d_%I_%M_%p").log" echo "$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")" > $logs_folder/multi_file_games_"$(date +"%Y_%m_%d_%I_%M_%p").log"
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - Check & Verify: Multi-file structure" \ --title "RetroDECK Configurator - Check & Verify: Multi-file structure" \
--text="The following games were found to have the incorrect folder structure:\n\n$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")\n\nIncorrect folder structure can result in failure to launch games or saves being in the incorrect location.\n\nPlease see the RetroDECK wiki for more details!\n\nYou can find this list of games in ~/retrodeck/logs" --text="The following games were found to have the incorrect folder structure:\n\n$(find $roms_folder -maxdepth 2 -mindepth 2 -type d ! -name "*.m3u" ! -name "*.ps3")\n\nIncorrect folder structure can result in failure to launch games or saves being in the incorrect location.\n\nPlease see the RetroDECK wiki for more details!\n\nYou can find this list of games in ~/retrodeck/logs"
@ -1114,7 +1071,7 @@ configurator_reset_dialog() {
"Reset RetroDECK" "Reset RetroDECK to default settings" "Reset RetroDECK" "Reset RetroDECK to default settings"
) )
choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Reset" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - RetroDECK: Reset" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Action" \ --column="Choice" --column="Action" \
"${choices[@]}") "${choices[@]}")
@ -1148,7 +1105,7 @@ configurator_reset_dialog() {
"Reset Emulator or Engine" ) "Reset Emulator or Engine" )
log i "Configurator: opening \"$choice\" menu" log i "Configurator: opening \"$choice\" menu"
component_to_reset=$(zenity --list \ component_to_reset=$(rd_zenity --list \
--title "RetroDECK Configurator Utility - Reset Specific Standalone Emulator" --cancel-label="Back" \ --title "RetroDECK Configurator Utility - Reset Specific Standalone Emulator" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--text="Which emulator or engine do you want to reset to default?" \ --text="Which emulator or engine do you want to reset to default?" \
@ -1190,18 +1147,17 @@ configurator_reset_dialog() {
;; ;;
"Reset RetroDECK Component" ) "Reset RetroDECK Component" )
component_to_reset=$(zenity --list \ component_to_reset=$(rd_zenity --list \
--title "RetroDECK Configurator Utility - Reset Specific RetroDECK Component" --cancel-label="Back" \ --title "RetroDECK Configurator Utility - Reset Specific RetroDECK Component" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--text="Which component do you want to reset to default settings?" \ --text="Which component do you want to reset to default settings?" \
--column="Component" --column="Action" \ --column="Component" --column="Action" \
"BoilR" "Reset BoilR that manages the sync and scraping toward Steam library" \
"ES-DE" "Reset the ES-DE frontend" \ ) "ES-DE" "Reset the ES-DE frontend" \ )
# TODO: "GyroDSU" "Reset the gyroscope manager GyroDSU" # TODO: "GyroDSU" "Reset the gyroscope manager GyroDSU"
case $component_to_reset in case $component_to_reset in
"BoilR" | "ES-DE" ) # TODO: GyroDSU "ES-DE" ) # TODO: GyroDSU
if [[ $(configurator_reset_confirmation_dialog "$component_to_reset" "Are you sure you want to reset $component_to_reset to default settings?\n\nThis process cannot be undone.") == "true" ]]; then if [[ $(configurator_reset_confirmation_dialog "$component_to_reset" "Are you sure you want to reset $component_to_reset to default settings?\n\nThis process cannot be undone.") == "true" ]]; then
prepare_component "reset" "$component_to_reset" "configurator" prepare_component "reset" "$component_to_reset" "configurator"
configurator_process_complete_dialog "resetting $component_to_reset" configurator_process_complete_dialog "resetting $component_to_reset"
@ -1225,7 +1181,7 @@ configurator_reset_dialog() {
( (
prepare_component "reset" "all" prepare_component "reset" "all"
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Finishing Initialization" \ --title "RetroDECK Finishing Initialization" \
--text="RetroDECK is finishing the reset process, please wait." --text="RetroDECK is finishing the reset process, please wait."
@ -1243,7 +1199,7 @@ configurator_reset_dialog() {
"Reset RetroDECK" ) "Reset RetroDECK" )
log i "Configurator: opening \"$choice\" menu" log i "Configurator: opening \"$choice\" menu"
if [[ $(configurator_reset_confirmation_dialog "RetroDECK" "Are you sure you want to reset RetroDECK entirely?\n\nThis process cannot be undone.") == "true" ]]; then if [[ $(configurator_reset_confirmation_dialog "RetroDECK" "Are you sure you want to reset RetroDECK entirely?\n\nThis process cannot be undone.") == "true" ]]; then
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \ rd_zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - Reset RetroDECK" \ --title "RetroDECK Configurator Utility - Reset RetroDECK" \
--text="You are resetting RetroDECK to its default state.\n\nAfter the process is complete you will need to exit RetroDECK and run it again, where you will go through the initial setup process." --text="You are resetting RetroDECK to its default state.\n\nAfter the process is complete you will need to exit RetroDECK and run it again, where you will go through the initial setup process."
@ -1264,7 +1220,7 @@ configurator_reset_dialog() {
} }
configurator_about_retrodeck_dialog() { configurator_about_retrodeck_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK: About" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - RetroDECK: About" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Description" \ --column="Choice" --column="Description" \
"Version History" "View the version changelogs for RetroDECK" \ "Version History" "View the version changelogs for RetroDECK" \
@ -1279,7 +1235,7 @@ configurator_about_retrodeck_dialog() {
"Credits" ) "Credits" )
log i "Configurator: opening \"$choice\" menu" log i "Configurator: opening \"$choice\" menu"
zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \ rd_zenity --icon-name=net.retrodeck.retrodeck --text-info --width=1200 --height=720 \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Credits" \ --title "RetroDECK Credits" \
--filename="$emuconfigs/defaults/retrodeck/reference_lists/retrodeck_credits.txt" --filename="$emuconfigs/defaults/retrodeck/reference_lists/retrodeck_credits.txt"
@ -1294,49 +1250,6 @@ configurator_about_retrodeck_dialog() {
esac esac
} }
configurator_add_steam() {
if [[ $(get_setting_value $rd_conf "steam_sync" retrodeck "options") == "true" ]]; then
zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Steam Syncronization" \
--text="Steam syncronization is currently enabled. Do you want to disable it?\n\nThe already added shortcut will not be removed.\n"
if [ $? == 0 ] # User clicked "Yes"
then
disable_steam_sync
else # User clicked "Cancel"
configurator_welcome_dialog
fi
else
zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Steam Syncronization" \
--text="Steam syncronization is currently disabled. Do you want to enable it?\n\nAll the games marked as favorites will be syncronized with Steam thanks to BoilR.\nRemember to restart Steam each time to see the changes.\n"
if [ $? == 0 ]
then
enable_steam_sync
else
configurator_welcome_dialog
fi
fi
}
enable_steam_sync() {
set_setting_value $rd_conf "steam_sync" "true" retrodeck "options"
zenity --icon-name=net.retrodeck.retrodeck --info --no-wrap --ok-label="OK" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Steam Syncronization" \
--text="Steam syncronization enabled, restart RetroDECK to get effect."
configurator_welcome_dialog
}
disable_steam_sync() {
set_setting_value $rd_conf "steam_sync" "false" retrodeck "options"
touch /tmp/retrodeck_steam_sync_exit
configurator_welcome_dialog
}
configurator_version_history_dialog() { configurator_version_history_dialog() {
local version_array=($(xml sel -t -v '//component/releases/release/@version' -n $rd_appdata)) local version_array=($(xml sel -t -v '//component/releases/release/@version' -n $rd_appdata))
local all_versions_list=() local all_versions_list=()
@ -1345,7 +1258,7 @@ configurator_version_history_dialog() {
all_versions_list=("${all_versions_list[@]}" "RetroDECK $rd_version Changelog" "View the changes specific to version $rd_version") all_versions_list=("${all_versions_list[@]}" "RetroDECK $rd_version Changelog" "View the changes specific to version $rd_version")
done done
choice=$(zenity --list --title="RetroDECK Configurator Utility - RetroDECK Version History" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - RetroDECK Version History" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Description" \ --column="Choice" --column="Description" \
"Full RetroDECK Changelog" "View the list of all changes that have ever been made to RetroDECK" \ "Full RetroDECK Changelog" "View the list of all changes that have ever been made to RetroDECK" \
@ -1370,14 +1283,14 @@ configurator_version_history_dialog() {
} }
configurator_developer_dialog() { configurator_developer_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - Developer Options" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - Developer Options" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Description" \ --column="Choice" --column="Description" \
"Change Multi-user mode" "Enable or disable multi-user support" \ "Change Multi-user mode" "Enable or disable multi-user support" \
"Change Update Channel" "Change between normal and cooker builds" \ "Change Update Channel" "Change between normal and cooker builds" \
"Browse the Wiki" "Browse the RetroDECK wiki online" \ "Browse the Wiki" "Browse the RetroDECK wiki online" \
"USB Import" "Prepare a USB device for ROMs or import an existing collection" \ "Install RetroDECK Starter Pack" "Install the optional RetroDECK starter pack" \
"Install RetroDECK Starter Pack" "Install the optional RetroDECK starter pack" ) "Tool: USB Import" "Prepare a USB device for ROMs or import an existing collection")
case $choice in case $choice in
@ -1397,11 +1310,6 @@ configurator_developer_dialog() {
configurator_developer_dialog configurator_developer_dialog
;; ;;
"USB Import" )
log i "Configurator: opening \"$choice\" menu"
configurator_usb_import_dialog
;;
"Install RetroDECK Starter Pack" ) "Install RetroDECK Starter Pack" )
log i "Configurator: opening \"$choice\" menu" log i "Configurator: opening \"$choice\" menu"
if [[ $(configurator_generic_question_dialog "Install: RetroDECK Starter Pack" "The RetroDECK creators have put together a collection of classic retro games you might enjoy!\n\nWould you like to have them automatically added to your library?") == "true" ]]; then if [[ $(configurator_generic_question_dialog "Install: RetroDECK Starter Pack" "The RetroDECK creators have put together a collection of classic retro games you might enjoy!\n\nWould you like to have them automatically added to your library?") == "true" ]]; then
@ -1410,6 +1318,11 @@ configurator_developer_dialog() {
configurator_developer_dialog configurator_developer_dialog
;; ;;
"Tool: USB Import" )
log i "Configurator: opening \"$choice\" menu"
configurator_usb_import_dialog
;;
"" ) # No selection made or Back button clicked "" ) # No selection made or Back button clicked
log i "Configurator: going back" log i "Configurator: going back"
configurator_welcome_dialog configurator_welcome_dialog
@ -1419,7 +1332,7 @@ configurator_developer_dialog() {
configurator_retrodeck_multiuser_dialog() { configurator_retrodeck_multiuser_dialog() {
if [[ $(get_setting_value $rd_conf "multi_user_mode" retrodeck "options") == "true" ]]; then if [[ $(get_setting_value $rd_conf "multi_user_mode" retrodeck "options") == "true" ]]; then
zenity --question \ rd_zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Multi-user Support" \ --title "RetroDECK Configurator - RetroDECK Multi-user Support" \
--text="Multi-user support is currently enabled. Do you want to disable it?\n\nIf there is more than one user configured,\nyou will be given a choice of which to use as the single RetroDECK user.\n\nThis user's files will be moved to the default locations.\n\nOther users' files will remain in the mutli-user-data folder.\n" --text="Multi-user support is currently enabled. Do you want to disable it?\n\nIf there is more than one user configured,\nyou will be given a choice of which to use as the single RetroDECK user.\n\nThis user's files will be moved to the default locations.\n\nOther users' files will remain in the mutli-user-data folder.\n"
@ -1431,7 +1344,7 @@ configurator_retrodeck_multiuser_dialog() {
configurator_developer_dialog configurator_developer_dialog
fi fi
else else
zenity --question \ rd_zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Multi-user support" \ --title "RetroDECK Configurator - RetroDECK Multi-user support" \
--text="Multi-user support is currently disabled. Do you want to enable it?\n\nThe current user's saves and states will be backed up and then moved to the \"retrodeck/multi-user-data\" folder.\nAdditional users will automatically be stored in their own folder here as they are added." --text="Multi-user support is currently disabled. Do you want to enable it?\n\nThe current user's saves and states will be backed up and then moved to the \"retrodeck/multi-user-data\" folder.\nAdditional users will automatically be stored in their own folder here as they are added."
@ -1447,7 +1360,7 @@ configurator_retrodeck_multiuser_dialog() {
configurator_online_update_channel_dialog() { configurator_online_update_channel_dialog() {
if [[ $(get_setting_value $rd_conf "update_repo" retrodeck "options") == "RetroDECK" ]]; then if [[ $(get_setting_value $rd_conf "update_repo" retrodeck "options") == "RetroDECK" ]]; then
zenity --question \ rd_zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Change Update Branch" \ --title "RetroDECK Configurator - RetroDECK Change Update Branch" \
--text="You are currently on the production branch of RetroDECK updates. Would you like to switch to the cooker branch?\n\nAfter installing a cooker build, you may need to remove the \"stable\" branch install of RetroDECK to avoid overlap." --text="You are currently on the production branch of RetroDECK updates. Would you like to switch to the cooker branch?\n\nAfter installing a cooker build, you may need to remove the \"stable\" branch install of RetroDECK to avoid overlap."
@ -1459,7 +1372,7 @@ configurator_online_update_channel_dialog() {
configurator_developer_dialog configurator_developer_dialog
fi fi
else else
zenity --question \ rd_zenity --question \
--no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --no-wrap --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator - RetroDECK Change Update Branch" \ --title "RetroDECK Configurator - RetroDECK Change Update Branch" \
--text="You are currently on the cooker branch of RetroDECK updates. Would you like to switch to the production branch?\n\nAfter installing a production build, you may need to remove the \"cooker\" branch install of RetroDECK to avoid overlap." --text="You are currently on the cooker branch of RetroDECK updates. Would you like to switch to the production branch?\n\nAfter installing a production build, you may need to remove the \"cooker\" branch install of RetroDECK to avoid overlap."
@ -1474,25 +1387,27 @@ configurator_online_update_channel_dialog() {
} }
configurator_usb_import_dialog() { configurator_usb_import_dialog() {
choice=$(zenity --list --title="RetroDECK Configurator Utility - Developer Options" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - Developer Options" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--column="Choice" --column="Description" \ --column="Choice" --column="Description" \
"Prepare USB device" "Create ROM folders on a selected USB device" \ "Prepare USB device" "Create ROM and BIOS folders on a selected USB device" \
"Import from USB" "Import collection from a previously prepared device" ) "Import from USB" "Import collection from a previously prepared device" )
case $choice in case $choice in
"Prepare USB device" ) "Prepare USB device" )
log i "Configurator: opening \"$choice\" menu" log i "Configurator: opening \"$choice\" menu"
configurator_generic_dialog "RetroDeck Configurator - USB Import" "If you have an SD card installed that is not currently configured in RetroDECK it may show up in this list, but not be suitable for USB import.\n\nPlease select your desired drive carefully."
external_devices=() external_devices=()
while read -r size device_path; do while read -r size device_path; do
device_name=$(basename "$device_path") device_name=$(basename "$device_path")
external_devices=("${external_devices[@]}" "$device_name" "$size" "$device_path") external_devices=("${external_devices[@]}" "$device_name" "$size" "$device_path")
done < <(df --output=size,target | grep media | grep -v $default_sd | awk '{$1=$1;print}') done < <(df --output=size,target -h | grep "/run/media/" | grep -v "$sdcard" | awk '{$1=$1;print}')
if [[ "${#external_devices[@]}" -gt 0 ]]; then if [[ "${#external_devices[@]}" -gt 0 ]]; then
choice=$(zenity --list --title="RetroDECK Configurator Utility - USB Migration Tool" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - USB Migration Tool" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--hide-column=3 --print-column=3 \ --hide-column=3 --print-column=3 \
--column "Device Name" \ --column "Device Name" \
@ -1501,8 +1416,33 @@ configurator_usb_import_dialog() {
"${external_devices[@]}") "${external_devices[@]}")
if [[ ! -z "$choice" ]]; then if [[ ! -z "$choice" ]]; then
es-de --home "$choice" --create-system-dirs es-de --home "$choice/RetroDECK Import" --create-system-dirs
rm -rf "$choice/ES-DE" # Cleanup unnecessary folder rm -rf "$choice/RetroDECK Import/ES-DE" # Cleanup unnecessary folder
create_dir "$choice/RetroDECK Import/BIOS"
# Prepare default BIOS folder subfolders
create_dir "$choice/RetroDECK Import/BIOS/np2kai"
create_dir "$choice/RetroDECK Import/BIOS/dc"
create_dir "$choice/RetroDECK Import/BIOS/Mupen64plus"
create_dir "$choice/RetroDECK Import/BIOS/quasi88"
create_dir "$choice/RetroDECK Import/BIOS/fbneo/samples"
create_dir "$choice/RetroDECK Import/BIOS/fbneo/cheats"
create_dir "$choice/RetroDECK Import/BIOS/fbneo/blend"
create_dir "$choice/RetroDECK Import/BIOS/fbneo/patched"
create_dir "$choice/RetroDECK Import/BIOS/citra/sysdata"
create_dir "$choice/RetroDECK Import/BIOS/cemu"
create_dir "$choice/RetroDECK Import/BIOS/pico-8/carts"
create_dir "$choice/RetroDECK Import/BIOS/pico-8/cdata"
create_dir "$choice/RetroDECK Import/BIOS/rpcs3/dev_hdd0"
create_dir "$choice/RetroDECK Import/BIOS/rpcs3/dev_hdd1"
create_dir "$choice/RetroDECK Import/BIOS/rpcs3/dev_flash"
create_dir "$choice/RetroDECK Import/BIOS/rpcs3/dev_flash2"
create_dir "$choice/RetroDECK Import/BIOS/rpcs3/dev_flash3"
create_dir "$choice/RetroDECK Import/BIOS/rpcs3/dev_bdvd"
create_dir "$choice/RetroDECK Import/BIOS/rpcs3/dev_usb000"
create_dir "$choice/RetroDECK Import/BIOS/Vita3K/"
create_dir "$choice/RetroDECK Import/BIOS/mame-sa/samples"
create_dir "$choice/RetroDECK Import/BIOS/gzdoom"
fi fi
else else
configurator_generic_dialog "RetroDeck Configurator - USB Import" "There were no USB devices found." configurator_generic_dialog "RetroDeck Configurator - USB Import" "There were no USB devices found."
@ -1515,14 +1455,14 @@ configurator_usb_import_dialog() {
external_devices=() external_devices=()
while read -r size device_path; do while read -r size device_path; do
if [[ -d "$device_path/ROMs" ]]; then if [[ -d "$device_path/RetroDECK Import/ROMs" ]]; then
device_name=$(basename "$device_path") device_name=$(basename "$device_path")
external_devices=("${external_devices[@]}" "$device_name" "$size" "$device_path") external_devices=("${external_devices[@]}" "$device_name" "$size" "$device_path")
fi fi
done < <(df --output=size,target | grep media | grep -v $default_sd | awk '{$1=$1;print}') done < <(df --output=size,target -h | grep "/run/media/" | grep -v "$sdcard" | awk '{$1=$1;print}')
if [[ "${#external_devices[@]}" -gt 0 ]]; then if [[ "${#external_devices[@]}" -gt 0 ]]; then
choice=$(zenity --list --title="RetroDECK Configurator Utility - USB Migration Tool" --cancel-label="Back" \ choice=$(rd_zenity --list --title="RetroDECK Configurator Utility - USB Migration Tool" --cancel-label="Back" \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
--hide-column=3 --print-column=3 \ --hide-column=3 --print-column=3 \
--column "Device Name" \ --column "Device Name" \
@ -1531,21 +1471,23 @@ configurator_usb_import_dialog() {
"${external_devices[@]}") "${external_devices[@]}")
if [[ ! -z "$choice" ]]; then if [[ ! -z "$choice" ]]; then
if [[ $(verify_space "$choice/ROMs" "$roms_folder") == "false" ]]; then if [[ $(verify_space "$choice/RetroDECK Import/ROMs" "$roms_folder") == "false" || $(verify_space "$choice/RetroDECK Import/BIOS" "$bios_folder") == "false" ]]; then
if [[ $(configurator_generic_question_dialog "RetroDECK Configurator Utility - USB Migration Tool" "You MAY not have enough free space to import this ROM library.\n\nThis utility only imports new additions from the USB device, so if there are a lot of the same ROMs in both locations you are likely going to be fine\nbut we are not able to verify how much data will be transferred before it happens.\n\nIf you are unsure, please verify your available free space before continuing.\n\nDo you want to continue now?") == "true" ]]; then if [[ $(configurator_generic_question_dialog "RetroDECK Configurator Utility - USB Migration Tool" "You MAY not have enough free space to import this ROM/BIOS library.\n\nThis utility only imports new additions from the USB device, so if there are a lot of the same files in both locations you are likely going to be fine\nbut we are not able to verify how much data will be transferred before it happens.\n\nIf you are unsure, please verify your available free space before continuing.\n\nDo you want to continue now?") == "true" ]]; then
( (
rsync -a --mkpath "$choice/ROMs/"* "$roms_folder" rsync -a --mkpath "$choice/RetroDECK Import/ROMs/"* "$roms_folder"
rsync -a --mkpath "$choice/RetroDECK Import/BIOS/"* "$bios_folder"
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - USB Import In Progress" --title "RetroDECK Configurator Utility - USB Import In Progress"
configurator_generic_dialog "RetroDECK Configurator - USB Migration Tool" "The import process is complete!" configurator_generic_dialog "RetroDECK Configurator - USB Migration Tool" "The import process is complete!"
fi fi
else else
( (
rsync -a --mkpath "$choice/ROMs/"* "$roms_folder" rsync -a --mkpath "$choice/RetroDECK Import/ROMs/"* "$roms_folder"
rsync -a --mkpath "$choice/RetroDECK Import/BIOS/"* "$bios_folder"
) | ) |
zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \ rd_zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --auto-close \
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \
--title "RetroDECK Configurator Utility - USB Import In Progress" --title "RetroDECK Configurator Utility - USB Import In Progress"
configurator_generic_dialog "RetroDECK Configurator - USB Migration Tool" "The import process is complete!" configurator_generic_dialog "RetroDECK Configurator - USB Migration Tool" "The import process is complete!"
@ -1562,7 +1504,6 @@ configurator_usb_import_dialog() {
configurator_developer_dialog configurator_developer_dialog
;; ;;
esac esac
} }
# START THE CONFIGURATOR # START THE CONFIGURATOR