EmuDeck/functions/migrateAndLinkConfig.sh
Rodrigo 24582eeb74 Revert "== > ="
This reverts commit 28e8adc03d.
2023-11-30 22:39:36 +01:00

129 lines
5.8 KiB
Bash

#!/bin/bash
migrateAndLinkConfig(){
emu=$1
migrationTable=$2
#step 1 should be attempt to unlink everything that gets passed in so we can start fresh.
#for path in $migrationTable[@]
#do
# if [ -L $path ]; then
# echo unlinking $path
# unlink $path
# fi
#done
migrationFlag="$HOME/.config/EmuDeck/.${emu}MigrationCompleted"
#check if we have a nomigrateflag for $emu
if [ ! -f "$migrationFlag" ]; then
#ask user before migrating data
# text="`printf "We would like to migrate data from the flatpak to the AppImage for ${emu}. \
# \nThe AppImage version should perform better than the one you already have\nNew directories for this emulator will be made, and config changes will point to these new folders regardless of this choice.\
# \nYou should allow this migration if you want to move your flatpak data and config to it's new home. \
# \nIf you would like to move your files manually, you may decline.
# \nDon't forget to run Steam ROM Manager to update your games for ${emu}"`"
# doMigrate=$(zenity --info --title "Migrate "${emu}" Data?" \
# --text="${text}" \
# --width=300 \
# --ok-label "Leave ${emu} alone this time" \
# --extra-button "Leave ${emu} alone forever" \
# --extra-button "Migrate Data" 2>/dev/null)
# rc=$?
doMigrate="Migrate Data"
echo "$emu Do migration? User chose: $doMigrate"
if [ "$doMigrate" == "Migrate Data" ]; then
n=$(( ${#migrationTable[@]} - 1 ))
#odd should be flatpak
#even should be appimage
#determine plan based on first pair
if [[ ! -e ${migrationTable[0]} ]]; then
#no flatpak data. nothing to do. (or should we link it?)
echo "No flatpak data found, continuing."
elif [[ -L ${migrationTable[0]} && -L ${migrationTable[1]} ]]; then
echo "Both sides of migration are symlinks. Stopping migration. User needs to manually resolve."
elif [[ -d ${migrationTable[0]} && -d ${migrationTable[1]} ]]; then
#both locations exist
#ask user which to keep
text="`printf "Data was found for both the appimage and flatpak for ${emu}.\nWe will be using the AppImage from now on.\nPlease choose which data to keep.\nThe AppImage version should perform better than the one you already have\nDo not forget to run Steam ROM Manager to update your games for ${emu}"`"
ans=$(zenity --info --title "Migrate "${emu}" Data?" \
--text="${text}" \
--width=300 \
--ok-label "Don't do anything with my stuff" \
--extra-button "Keep AppImage Data" \
--extra-button "Migrate Flatpak Data" 2>/dev/null)
rc=$?
if [[ ! $ans == "" ]]; then #user didn't cancel
echo "$emu flatpak/appimage data choice. User Chose: $ans"
for ((i=0; i<=n; i=(i+2))) { # for each pair of dirs
if [[ $ans == "Migrate Flatpak Data" ]]; then
fromDir=${migrationTable[i]}
toDir=${migrationTable[i+1]}
echo "Migrating ${fromDir} to ${toDir}"
#in case the destination is a symlink
if [[ -L $toDir ]]; then
unlink ${toDir}
echo ${toDir}" is a symlink. Unlinked."
else
#backup destination location, delete it, then sync original over
mv "$toDir" "$toDir.orig"
echo ${toDir}" is a directory. Backed up."
fi
mkdir -p $toDir && rsync -av "${fromDir}/" "${toDir}"
cd ${fromDir}
cd ..
#backup and remove original
mv "${fromDir}" "${fromDir}.orig" && rm -rf "${fromDir}"
#link .config to .var so flatpak still works
ln -sfn ${toDir} .
elif [[ $ans == "Keep AppImage Data" ]]; then
fromDir=${migrationTable[i+1]}
toDir=${migrationTable[i]}
cd ${toDir}
cd ..
#backup flatpak data
mv "${toDir}" "${toDir}.orig"
#link appimage data to flatpak folder
ln -sfn "${fromDir}" .
else
echo "Something went wrong"
exit
fi
}
else
echo "User doesn't want migration at this time."
fi
elif [[ -L ${migrationTable[0]} && -d ${migrationTable[0]} && -d ${migrationTable[1]} && ! -L ${migrationTable[1]} ]]; then
echo "Flatpak already linked"
elif [[ -d ${migrationTable[0]} && ! -e ${migrationTable[1]} ]]; then
echo "No AppImage data found, but flatpak data found. New AppImage install."
for ((i=0; i<=n; i=(i+2))) { # for each pair of dirs
fromDir=${migrationTable[i]}
toDir=${migrationTable[i+1]}
echo "Migrating ${fromDir} to ${toDir}"
cd ${fromDir}/..
#backup destination location, delete it, then sync original over
mkdir -p ${toDir} && rmdir ${toDir} #make the path for todir, but remove the end folder
mv "${fromDir}" "${toDir}" #move the original to the new location
#link .config to .var so flatpak still works
ln -sfn ${toDir} .
}
else
echo "do nothing"
fi
touch $migrationFlag
elif [ $doMigrate == "Leave ${emu} alone forever" ]; then
touch $migrationFlag
fi
fi
}