EmuDeck/tools/binupdate/binupdate.sh
Dragoon Dorise 86a6dd5624 Azahar
2025-03-20 14:05:42 +01:00

340 lines
11 KiB
Bash
Executable File

#!/bin/bash
#while this is in testing, i'm copying in the functions. once we leave the original repo in place and don't delete it, i'd like to use the functions we already made.
# shellcheck source=functions/all.sh
. "$HOME/.config/EmuDeck/backend/functions/all.sh"
if [ "$?" == "1" ]; then
echo "functions could not be loaded."
zenity --error \
--text="EmuDeck Functions could not be loaded. Please re-run Emudeck install." 2>/dev/null
exit
fi
updateCemu() {
local showProgress="$1"
local releasesStr=$(curl -sL https://cemu.info | awk 'BEGIN{
RS="</a>"
IGNORECASE=1
}
{
for(o=1;o<=NF;o++){
if ( $o ~ /href/){
gsub(/.*href=\042/,"",$o)
gsub(/\042.*/,"",$o)
print $(o)
}
}
}' | grep releases | grep -v github)
mapfile -t releases <<<"$releasesStr"
local releaseTable=()
for release in "${releases[@]}"; do
releaseTable+=(false "$release")
echo "release: $release"
done
releaseTable+=(false "https://cemu.info/releases/cemu_1.27.1.zip")
releaseTable+=(false "$(getReleaseURLGH "cemu-project/Cemu" "windows-x64.zip")")
local releaseChoice=""
if [ ${#releaseTable[@]} != 0 ]; then
releaseChoice=$(
zenity --list \
--title="EmuDeck" \
--height=500 \
--width=800 \
--ok-label="OK" \
--cancel-label="Exit" \
--text="Select your Cemu (Windows) version. 2.0 is recommended" \
--radiolist \
--column="Select" \
--column="Release" \
"${releaseTable[@]}" 2>/dev/null
)
fi
if [ -n "$releaseChoice" ]; then
if safeDownload "cemu" "$releaseChoice" "$romsPath/wiiu/cemu.zip" "$showProgress"; then
mkdir -p "$romsPath/wiiu/tmp"
unzip -o "$romsPath/wiiu/cemu.zip" -d "$romsPath/wiiu/tmp"
mv "$romsPath"/wiiu/tmp/[Cc]emu_*/ "$romsPath/wiiu/tmp/cemu/" #don't quote the *
rsync -avzh "$romsPath/wiiu/tmp/cemu/" "$romsPath/wiiu/"
rm -rf "$romsPath/wiiu/tmp"
rm -f "$romsPath/wiiu/cemu.zip"
return 0
fi
fi
return 1
}
function runBinDownloads {
local binsToDL=$1
progresspct=0
numBins=$(awk -F'|' '{print NF}' <<<"$binsToDL")
pct=$((100 / (numBins + 1)))
echo "User selected: $binsToDL"
if [[ "$binsToDL" == *"BigPEmu (Proton)"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating BigPEmu (Proton)"
if BigPEmu_install "true" 2>&1; then
messages+=("BigPEmu (Proton) Updated Successfully")
else
messages+=("There was a problem updating BigPEmu (Proton)")
fi
fi
if [[ "$binsToDL" == *"Cemu (Proton)"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating Cemu (win/proton)"
if CemuProton_install "true" 2>&1; then
messages+=("Cemu (win/proton) Updated Successfully")
else
messages+=("There was a problem updating Cemu (win/proton")
fi
fi
if [[ "$binsToDL" == *"Cemu (Native)"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating Cemu (Native)"
if Cemu_install "true" 2>&1; then
messages+=("Cemu (Native) Updated Successfully")
else
messages+=("There was a problem updating Cemu (Native)")
fi
fi
if [[ "$binsToDL" == *"ES-DE"* ]]; then
echo "0"
echo "# Updating ES-DE"
if ESDE_install "true" 2>&1; then
messages+=("ES-DE Updated Successfully")
else
messages+=("There was a problem updating ES-DE")
fi
fi
if [[ "$binsToDL" == *"Azahar"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating Azahar"
if Azahar_install "true" 2>&1; then
messages+=("Azahar Updated Successfully")
else
messages+=("There was a problem updating Azahar")
fi
fi
if [[ "$binsToDL" == *"mGBA"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating mGBA"
if mGBA_install "true" 2>&1; then
messages+=("mGBA Updated Successfully")
else
messages+=("There was a problem updating mGBA")
fi
fi
if [[ "$binsToDL" == *"PCSX2"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating PCSX2"
if PCSX2QT_install "true" 2>&1; then
messages+=("PCSX2Updated Successfully")
else
messages+=("There was a problem updating PCSX2")
fi
fi
if [[ "$binsToDL" == *"RPCS3"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating RPCS3"
if RPCS3_install "true" 2>&1; then
messages+=("RPCS3 Updated Successfully")
else
messages+=("There was a problem updating RPCS3")
fi
fi
if [[ "$binsToDL" == *"ShadPS4"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating ShadPS4"
if ShadPS4_install "true" 2>&1; then
messages+=("ShadPS4 Updated Successfully")
else
messages+=("There was a problem updating ShadPS4")
fi
fi
if [[ "$binsToDL" == *"Ryujinx"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating Ryujinx"
if Ryujinx_install "true" 2>&1; then
messages+=("Ryujinx Updated Successfully")
else
messages+=("There was a problem updating Ryujinx")
fi
fi
if [[ "$binsToDL" == *"Steam ROM Manager"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating SteamRomManager"
if SRM_install "true" 2>&1; then
messages+=("Steam ROM Manager Updated Successfully")
else
messages+=("There was a problem updating Steam ROM Manager")
fi
fi
if [[ "$binsToDL" == *"Vita3K"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating Vita3K"
if Vita3K_install "true" 2>&1; then
messages+=("Vita3K Updated Successfully")
else
messages+=("There was a problem updating Vita3K")
fi
fi
if [[ "$binsToDL" == *"Xenia (Proton)"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating Xenia-Canary"
if Xenia_install "canary" "true" 2>&1; then
messages+=("Xenia Updated Successfully")
else
messages+=("There was a problem updating Xenia")
fi
fi
echo "100"
echo "# Complete!"
}
#begin script
#source the all.sh, these should be pulled correctly!
scriptPath="${toolsPath}/binupdate"
#initialize log
TIMESTAMP=$(date "+%Y%m%d_%H%M%S")
LOGFILE="${scriptPath}/binupdate-$TIMESTAMP.log"
exec > >(tee "${LOGFILE}") 2>&1
declare -a binTable
binTable=()
if [ "$(BigPEmu_IsInstalled ""$emuDeckEmuTypeWindows"")" == "true" ]; then
binTable+=(TRUE "BigPEmu (Proton)" "Atari Jaguar and Jaguar CD")
else
binTable+=(FALSE "BigPEmu (Proton)" "Atari Jaguar and Jaguar CD")
fi
if [ "$(CemuProton_IsInstalled ""$emuDeckEmuTypeWindows"")" == "true" ]; then
binTable+=(TRUE "Cemu (Proton)" "Nintendo Wii U")
else
binTable+=(FALSE "Cemu (Proton)" "Nintendo Wii U")
fi
if [ "$(Cemu_IsInstalled ""$emuDeckEmuTypeAppImage"")" == "true" ]; then
binTable+=(TRUE "Cemu (Native)" "Nintendo Wii U")
else
binTable+=(FALSE "Cemu (Native)" "Nintendo Wii U")
fi
if [ "$(ESDE_IsInstalled ""$emuDeckEmuTypeAppImage"")" == "true" ]; then
binTable+=(TRUE "ES-DE" "Emulator Front-End")
else
binTable+=(FALSE "ES-DE" "Emulator Front-End")
fi
if [ "$(Azahar_IsInstalled ""$emuDeckEmuTypeAppImage"")" == "true" ]; then
binTable+=(TRUE "Azahar" "Nintendo 3DS")
else
binTable+=(FALSE "Azahar" "Nintendo 3DS")
fi
if [ "$(mGBA_IsInstalled ""$emuDeckEmuTypeAppImage"")" == "true" ]; then
binTable+=(TRUE "mGBA" "Nintendo Game Boy Family")
else
binTable+=(FALSE "mGBA" "Nintendo Game Boy Family")
fi
if [ "$(PCSX2QT_IsInstalled ""$emuDeckEmuTypeAppImage"")" == "true" ]; then
binTable+=(TRUE "PCSX2" "Sony PlayStation 2")
else
binTable+=(FALSE "PCSX2" "Sony PlayStation 2")
fi
if [ "$(RPCS3_IsInstalled ""$emuDeckEmuTypeAppImage"")" == "true" ]; then
binTable+=(TRUE "RPCS3" "Sony PlayStation 3")
else
binTable+=(FALSE "RPCS3" "Sony PlayStation 3")
fi
if [ "$(ShadPS4_IsInstalled ""$emuDeckEmuTypeAppImage"")" == "true" ]; then
binTable+=(TRUE "ShadPS4" "Sony PlayStation 4")
else
binTable+=(FALSE "ShadPS4" "Sony PlayStation 4")
fi
if [ "$(Ryujinx_IsInstalled ""$emuDeckEmuTypeBinary"")" == "true" ]; then
binTable+=(TRUE "Ryujinx" "Nintendo Switch")
else
binTable+=(FALSE "Ryujinx" "Nintendo Switch")
fi
if [ "$(SRM_IsInstalled ""$emuDeckEmuTypeAppImage"")" == "true" ]; then
binTable+=(TRUE "Steam ROM Manager" "Emulation Tool")
else
binTable+=(FALSE "Steam ROM Manager" "Emulation Tool")
fi
if [ "$(Vita3K_IsInstalled ""$emuDeckEmuTypeBinary"")" == "true" ]; then
binTable+=(TRUE "Vita3K" "Sony PlayStation Vita")
else
binTable+=(FALSE "Vita3K" "Sony PlayStation Vita")
fi
if [ "$(Xenia_IsInstalled ""$emuDeckEmuTypeWindows"")" == "true" ]; then
binTable+=(TRUE "Xenia (Proton)" "Microsoft Xbox 360")
else
binTable+=(FALSE "Xenia (Proton)" "Microsoft Xbox 360")
fi
if [ "${#binTable[@]}" -gt 0 ]; then
#Binary selector
text="$(printf "Which emulators or tools would you like to update?\n Any updated emulators or tools will be overwritten with the latest available version.")"
binsToDL=$(
zenity --list \
--title="EmuDeck" \
--height=500 \
--width=250 \
--ok-label="OK" \
--cancel-label="Exit" \
--text="${text}" \
--checklist \
--column="Select" \
--column="Emulator" \
--column="System" \
--print-column=2 \
"${binTable[@]}" 2>/dev/null
)
ans=$?
messages=()
if [ $ans -eq 0 ]; then
if [ -n "$binsToDL" ]; then
runBinDownloads "$binsToDL" | zenity --progress --pulsate --title="Updating!" --width=600 --height=250 2>/dev/null
if [ "$?" = -1 ]; then
zenity --error \
--text="Update canceled." 2>/dev/null
fi
if [[ ${#messages[@]} -gt 0 ]]; then
zenity --list \
--title="Update Status" \
--text="" \
--width=400 \
--height=500 \
--column="Messages" \
"${messages[@]}" 2>/dev/null
fi
fi
fi
else
zenity --error \
--text="Nothing available to be updated." 2>/dev/null
fi