mirror of
https://github.com/dragoonDorise/EmuDeck.git
synced 2025-05-05 16:02:48 +00:00
* new paths * / * EmuDeck/ * mv * no & * ESDE new location * ESDE new path * no symlink load * bigpemu new path * force move * global vars * oopsie * missing $emudeckBackend * better migration detection * Keep Appimages in Applications * Keep Appimages in Applications
331 lines
8.2 KiB
Bash
331 lines
8.2 KiB
Bash
#!/bin/bash
|
|
#variables
|
|
RPCS3_emuName="RPCS3"
|
|
RPCS3_emuType="$emuDeckEmuTypeAppImage"
|
|
RPCS3_emuPath="$emusFolder/rpcs3.AppImage"
|
|
RPCS3_emuPathFlatpak="net.rpcs3.RPCS3"
|
|
RPCS3_VFSConf="$HOME/.config/rpcs3/vfs.yml"
|
|
RPCS3_migrationFlag="$emudeckFolder/.${RPCS3_emuName}MigrationCompleted"
|
|
RPCS3_configFile="$HOME/.config/rpcs3/config.yml"
|
|
|
|
declare -A RPCS3_languages
|
|
RPCS3_languages=(
|
|
["ja"]=""
|
|
["en"]="English (US)"
|
|
["fr"]="French"
|
|
["de"]="German"
|
|
["it"]="Italian"
|
|
["es"]="Spanish"
|
|
["ko"]="Korean"
|
|
["nl"]="Dutch"
|
|
["pt"]="Portiguese (Portugal)"
|
|
["ru"]="Russian")
|
|
|
|
|
|
#cleanupOlderThings
|
|
RPCS3_cleanup(){
|
|
echo "NYI"
|
|
}
|
|
|
|
# RPCS3 Update API
|
|
RPCS3_download_link=""
|
|
RPCS3_download_link_checksum=""
|
|
RPCS3_ApiGetUpdateInfo(){
|
|
RPCS3_download_link=""
|
|
RPCS3_download_link_checksum=""
|
|
|
|
local apiUrl="https://update.rpcs3.net/"
|
|
local localFile="$RPCS3_emuPath"
|
|
local currentVersion="$1"
|
|
local apiVersion="v3"
|
|
local osType="linux"
|
|
local osArch="x64"
|
|
local osVersion=$(grep "VERSION_ID" /etc/os-release | cut -d'=' -f2 | tr -d '"')
|
|
local should_return_update=0
|
|
|
|
echo "Checking for RPCS3 updates..."
|
|
|
|
local response=$(curl -s -G "$apiUrl" \
|
|
--data-urlencode "api=$apiVersion" \
|
|
--data-urlencode "os_type=$osType" \
|
|
--data-urlencode "os_arch=$osArch" \
|
|
--data-urlencode "os_version=$osVersion")
|
|
|
|
local return_code=$(echo "$response" | jq '.return_code')
|
|
|
|
if [ "$return_code" -eq 1 ]; then
|
|
echo "Newer RPCS3 build found!"
|
|
elif [ "$return_code" -eq 0 ]; then
|
|
echo "Latest RPCS3 build found!" # when not using the $currentVersion (NYI), the API returns 0
|
|
elif [ "$return_code" -eq -3 ]; then
|
|
echo "Illegal search"
|
|
return 1
|
|
elif [ "$return_code" -eq -2 ]; then
|
|
echo "Maintenance mode"
|
|
return 1
|
|
elif [ "$return_code" -eq -1 ]; then
|
|
echo "Current build is not a master build."
|
|
return 1
|
|
else
|
|
echo "Failed to check for updates. Return Code: $return_code"
|
|
return 1
|
|
fi
|
|
|
|
#local latest_build=$(echo "$response" | jq -r '.latest_build')
|
|
#echo "Latest Build: $latest_build"
|
|
|
|
local download_link=$(echo "$response" | jq -r '.latest_build.linux.download')
|
|
local remote_checksum=$(echo "$response" | jq -r '.latest_build.linux.checksum' | tr '[:upper:]' '[:lower:]')
|
|
|
|
# Check if the local file exists
|
|
if [ "$return_code" -eq 0 ]; then
|
|
if [ -f "$localFile" ]; then
|
|
local local_checksum=$(calculate_checksum_sha256 "$localFile" | tr '[:upper:]' '[:lower:]')
|
|
|
|
echo "Local Checksum: $local_checksum"
|
|
echo "Remote Checksum: $remote_checksum"
|
|
|
|
if [ "$local_checksum" != "$remote_checksum" ]; then
|
|
echo "Checksums differ, returning download link and checksum."
|
|
should_return_update=1
|
|
else
|
|
echo "Checksums match, no need to update."
|
|
return 2
|
|
fi
|
|
else
|
|
echo "Local file not found, returning download link and checksum."
|
|
should_return_update=1
|
|
fi
|
|
else
|
|
should_return_update=1
|
|
fi
|
|
|
|
if [ "$should_return_update" -eq 1 ]; then
|
|
echo "Download Link: $download_link"
|
|
echo "Checksum: $remote_checksum"
|
|
RPCS3_download_link="$download_link"
|
|
RPCS3_download_link_checksum="$remote_checksum"
|
|
return 0
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
#Install
|
|
RPCS3_install(){
|
|
setMSG "Installing RPCS3"
|
|
|
|
# Migrates configurations to RPCS3 AppImage
|
|
RPCS3_migrate
|
|
|
|
# Install RPCS3
|
|
|
|
local showProgress="$1"
|
|
|
|
RPCS3_ApiGetUpdateInfo
|
|
apiGetUpdateInfoResult=$?
|
|
|
|
if [ "$apiGetUpdateInfoResult" -eq 0 ] || [ "$apiGetUpdateInfoResult" -eq 2 ]; then
|
|
#if installEmuAI "$RPCS3_emuName" "" "$(getLatestReleaseURLGH "RPCS3/rpcs3-binaries-linux" ".AppImage")" "rpcs3" "" "emulator" "$showProgress"; then #
|
|
if installEmuAI "$RPCS3_emuName" "" "$RPCS3_download_link" "rpcs3" "" "emulator" "$showProgress" "" "" "${RPCS3_download_link_checksum}"; then #
|
|
#echo "RPCS3 installed or updated successfully."
|
|
:
|
|
else
|
|
#echo "RPCS3 installation or update failed."
|
|
return 1
|
|
fi
|
|
else
|
|
#echo "RPCS3 is already up to date or failed to retrieve update information."
|
|
return 1
|
|
fi
|
|
|
|
# Preserve flatpak permissions for old RPCS3 Install
|
|
flatpak override net.rpcs3.RPCS3 --filesystem=host --user
|
|
}
|
|
|
|
#ApplyInitialSettings
|
|
RPCS3_init(){
|
|
RPCS3_migrate
|
|
configEmuAI "$RPCS3_emuName" "config" "$HOME/.config/rpcs3" "$emudeckBackend/configs/rpcs3" "true"
|
|
RPCS3_setupStorage
|
|
RPCS3_setEmulationFolder
|
|
RPCS3_setupSaves
|
|
#SRM_createParsers
|
|
RPCS3_flushEmulatorLauncher
|
|
RPCS3_setLanguage
|
|
|
|
}
|
|
|
|
RPCS3_setLanguage(){
|
|
setMSG "Setting RPCS3 Language"
|
|
local language=$(locale | grep LANG | cut -d= -f2 | cut -d_ -f1)
|
|
local languageOpt=" Language"
|
|
if [ ${RPCS3_languages[$language]+_} ]; then
|
|
newLanguageOpt="${RPCS3_languages[$language]}"
|
|
iniFieldUpdate "$RPCS3_configFile" "" "$languageOpt" "$newLanguageOpt" ": "
|
|
fi
|
|
}
|
|
|
|
#update
|
|
RPCS3_update(){
|
|
RPCS3_migrate
|
|
configEmuAI "$RPCS3_emuName" "config" "$HOME/.config/rpcs3" "$emudeckBackend/configs/rpcs3"
|
|
RPCS3_setupStorage
|
|
RPCS3_setEmulationFolder
|
|
RPCS3_setupSaves
|
|
RPCS3_addESConfig
|
|
RPCS3_flushEmulatorLauncher
|
|
|
|
}
|
|
|
|
#ConfigurePaths
|
|
RPCS3_setEmulationFolder(){
|
|
iniFieldUpdate "$RPCS3_VFSConf" "" "/dev_hdd0/" "$storagePath/rpcs3/dev_hdd0/" ": "
|
|
iniFieldUpdate "$RPCS3_VFSConf" "" "/games/" "$romsPath/ps3/" ": "
|
|
}
|
|
|
|
#SetupSaves
|
|
RPCS3_setupSaves(){
|
|
linkToSaveFolder rpcs3 saves "${storagePath}/rpcs3/dev_hdd0/home/00000001/savedata"
|
|
linkToSaveFolder rpcs3 trophy "${storagePath}/rpcs3/dev_hdd0/home/00000001/trophy"
|
|
}
|
|
|
|
#SetupStorage
|
|
RPCS3_setupStorage(){
|
|
mkdir -p "$storagePath/rpcs3/"
|
|
|
|
if [ ! -d "$storagePath"/rpcs3/dev_hdd0 ] && [ -d "$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3/" -o -d "$HOME/.config/rpcs3/" ]; then
|
|
echo "RPCS3 HDD does not exist in storage path"
|
|
|
|
echo -e ""
|
|
setMSG "Moving RPCS3 HDD to the Emulation/storage folder"
|
|
echo -e ""
|
|
|
|
mkdir -p "$storagePath/rpcs3"
|
|
|
|
if [ -d "$savesPath/rpcs3/dev_hdd0" ]; then
|
|
mv -f "$savesPath"/rpcs3/dev_hdd0 "$storagePath"/rpcs3/
|
|
|
|
elif [ -d "$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3/dev_hdd0" ]; then
|
|
rsync -av "$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3/dev_hdd0" "$storagePath"/rpcs3/ && rm -rf "$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3/dev_hdd0"
|
|
|
|
elif [ -d "$HOME/.config/rpcs3/dev_hdd0" ]; then
|
|
rsync -av "$HOME/.config/rpcs3/dev_hdd0" "$storagePath"/rpcs3/ && rm -rf "$HOME/.config/rpcs3/dev_hdd0"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
#WipeSettings
|
|
RPCS3_wipe(){
|
|
setMSG "Wiping $RPCS3_emuName settings."
|
|
rm -rf "$HOME/.config/rpcs3"
|
|
rm -rf "$HOME/.cache/rpcs3"
|
|
}
|
|
|
|
|
|
#Uninstall
|
|
RPCS3_uninstall(){
|
|
setMSG "Uninstalling $RPCS3_emuName."
|
|
uninstallEmuAI "$RPCS3_emuName" "rpcs3" "" "emulator"
|
|
#RPCS3_wipe
|
|
}
|
|
|
|
#setABXYstyle
|
|
RPCS3_setABXYstyle(){
|
|
echo "NYI"
|
|
}
|
|
|
|
|
|
#Migrate
|
|
RPCS3_migrate(){
|
|
echo "Begin RPCS3 Migration"
|
|
|
|
# Migration
|
|
if [ "$(RPCS3_IsMigrated)" != "true" ]; then
|
|
#RPCS3 flatpak to appimage
|
|
#From -- > to
|
|
migrationTable=()
|
|
migrationTable+=("$HOME/.var/app/net.rpcs3.RPCS3/config/rpcs3" "$HOME/.config/rpcs3")
|
|
|
|
migrateAndLinkConfig "$RPCS3_emuName" "$migrationTable"
|
|
fi
|
|
|
|
echo "true"
|
|
}
|
|
|
|
#WideScreenOn
|
|
RPCS3_wideScreenOn(){
|
|
echo "NYI"
|
|
}
|
|
|
|
#WideScreenOff
|
|
RPCS3_wideScreenOff(){
|
|
echo "NYI"
|
|
}
|
|
|
|
#BezelOn
|
|
RPCS3_bezelOn(){
|
|
echo "NYI"
|
|
}
|
|
|
|
#BezelOff
|
|
RPCS3_bezelOff(){
|
|
echo "NYI"
|
|
}
|
|
|
|
#finalExec - Extra stuff
|
|
RPCS3_finalize(){
|
|
echo "NYI"
|
|
}
|
|
|
|
RPCS3_IsInstalled(){
|
|
local emuType=$1 # if empty we assume the caller doesn't care what type is installed, so we can check both
|
|
# if flatpak type or no type is requested and we haven't yet migrated, check flatpak installation status
|
|
if ([ "$emuType" == "$emuDeckEmuTypeFlatpak" ] || [ -z "$emuType" ]) && [ "$(RPCS3_IsMigrated)" != "true" ] && [ "$(isFpInstalled "$RPCS3_emuPathFlatpak")" == "true" ]; then
|
|
echo "true"
|
|
# we can stop here if flatpak type was requested - we already migrated and no longer want to care about flatpak and launcher / desktop shortcut updates
|
|
elif [ "$emuType" == "$emuDeckEmuTypeFlatpak" ]; then
|
|
echo "false"
|
|
# appimage check
|
|
elif [ -e "$RPCS3_emuPath" ]; then
|
|
echo "true"
|
|
else
|
|
echo "false"
|
|
fi
|
|
}
|
|
|
|
RPCS3_IsMigrated(){
|
|
if [ -f "$RPCS3_migrationFlag" ]; then
|
|
echo "true"
|
|
else
|
|
echo "false"
|
|
fi
|
|
}
|
|
|
|
RPCS3_resetConfig(){
|
|
RPCS3_init &>/dev/null && echo "true" || echo "false"
|
|
}
|
|
|
|
RPCS3_setResolution(){
|
|
|
|
case $rpcs3Resolution in
|
|
"720P") res=100;;
|
|
"1080P") res=150;;
|
|
"1440P") res=200;;
|
|
"4K") res=300;;
|
|
*) echo "Error"; return 1;;
|
|
esac
|
|
|
|
RetroArch_setConfigOverride "Resolution Scale:" $res "$RPCS3_configFile"
|
|
|
|
sed -i "s|Resolution Scale:=|Resolution Scale:|g" "$RPCS3_configFile"
|
|
|
|
}
|
|
|
|
RPCS3_flushEmulatorLauncher(){
|
|
|
|
|
|
flushEmulatorLaunchers "rpcs3.sh"
|
|
|
|
}
|