EmuDeck/tools/binupdate/binupdate.sh
2023-11-02 19:43:11 +01:00

296 lines
9.5 KiB
Bash

#!/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="Choose your Cemu (windows) version. 2.0 is now 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" == *"esde"* ]]; then
echo "0"
echo "# Updating EmulationStation-DE"
if ESDE_install "true" 2>&1; then
messages+=("EmulationStation-DE Updated Successfully")
else
messages+=("There was a problem updating EmulationStation-DE")
fi
fi
if [[ "$binsToDL" == *"srm"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating SteamRomManager"
if SRM_install "true" 2>&1; then
messages+=("SteamRomManager Updated Successfully")
else
messages+=("There was a problem updating SteamRomManager")
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" == *"yuzu (early access)"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating Yuzu Early Access"
if YuzuEA_install "true" 2>&1; then
messages+=("Yuzu Early Access Updated Successfully")
else
messages+=("There was a problem updating Yuzu Early Access")
fi
fi
if [[ "$binsToDL" == *"yuzu (mainline)"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating Yuzu"
if Yuzu_install "true" 2>&1; then
messages+=("Yuzu Updated Successfully")
else
messages+=("There was a problem updating Yuzu")
fi
fi
if [[ "$binsToDL" == *"pcsx2-qt"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating PCSX2-QT"
if PCSX2QT_install "true" 2>&1; then
messages+=("PCSX2-QT Updated Successfully")
else
messages+=("There was a problem updating PCSX2-QT")
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" == *"cemu (win/proton)"* ]]; then
((progresspct += pct)) || true
echo "$progresspct"
echo "# Updating Cemu (win/proton)"
if updateCemu "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 CemuNative_install "true" 2>&1; then
messages+=("Cemu (Native) Updated Successfully")
else
messages+=("There was a problem updating Cemu (Native)")
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"* ]]; 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
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
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
binTable=()
if [ "$(ESDE_IsInstalled)" == "true" ]; then
binTable+=(TRUE "EmulationStation-DE" "esde")
fi
if [ "$(SRM_IsInstalled)" == "true" ]; then
binTable+=(TRUE "Steam ROM Manager" "srm")
fi
if [ "$(mGBA_IsInstalled)" == "true" ]; then
binTable+=(TRUE "GameBoy / Color / Advance Emu" "mgba")
fi
if [ "$(Yuzu_IsInstalled)" == "true" ]; then
binTable+=(TRUE "Nintendo Switch Emu" "yuzu (mainline)")
fi
if [ "$(YuzuEA_IsInstalled)" == "true" ] && [ -e "$YuzuEA_tokenFile" ]; then
binTable+=(TRUE "Nintendo Switch Emu" "yuzu (early access)")
fi
if [ "$(Ryujinx_IsInstalled)" == "true" ]; then
binTable+=(TRUE "Nintendo Switch Emu" "ryujinx")
fi
if [ "$(PCSX2QT_IsInstalled)" == "true" ]; then
binTable+=(TRUE "Sony PlayStation 2 Emu" "pcsx2-qt")
fi
if [ "$(Cemu_IsInstalled)" == "true" ]; then
binTable+=(TRUE "Nintendo WiiU Emu (Proton)" "cemu (win/proton)")
fi
if [ "$(CemuNative_IsInstalled)" == "true" ]; then
binTable+=(TRUE "Nintendo WiiU Emu (Native)" "cemu (native)")
fi
if [ "$(Vita3K_IsInstalled)" == "true" ]; then
binTable+=(TRUE "Sony PlayStation Vita Emu" "vita3k")
fi
if [ "$(Xenia_IsInstalled)" == "true" ]; then
binTable+=(TRUE "Xbox 360 Emu" "xenia")
fi
if [ "$(RPCS3_IsInstalled)" == "true" ]; then
binTable+=(TRUE "PlayStation 3 Emu" "rpcs3")
fi
if [ "${#binTable[@]}" -gt 0 ]; then
#Binary selector
text="$(printf "What tools do you want to get the latest version of?\n This tool will simply overwrite what you have with the newest available.")"
binsToDL=$(
zenity --list \
--title="EmuDeck" \
--height=500 \
--width=250 \
--ok-label="OK" \
--cancel-label="Exit" \
--text="${text}" \
--checklist \
--column="Select" \
--column="System" \
--column="Name" \
--print-column=3 \
"${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