mirror of
https://github.com/RetroDECK/RetroDECK.git
synced 2025-02-16 19:35:39 +00:00
Romhacks are now fully installable
This commit is contained in:
parent
9377502a9f
commit
50ee06784d
|
@ -4,15 +4,12 @@ hacks_db_setup() {
|
||||||
crc32_cmd="python3 /app/libexec/crc32.py"
|
crc32_cmd="python3 /app/libexec/crc32.py"
|
||||||
|
|
||||||
# "hacks" is the general name which includes ROM Hacks, Homebrew and Ports
|
# "hacks" is the general name which includes ROM Hacks, Homebrew and Ports
|
||||||
hacks_repo_url="https://raw.githubusercontent.com/Libretto7/best-romhacks/main"
|
|
||||||
hacks_db_path="$HOME/.var/app/net.retrodeck.retrodeck/data/hacks_metadata.db"
|
hacks_db_path="$HOME/.var/app/net.retrodeck.retrodeck/data/hacks_metadata.db"
|
||||||
|
|
||||||
# set up hacks database
|
# Set up hacks database
|
||||||
rm $hacks_db_path
|
|
||||||
sqlite3 $hacks_db_path < <(curl -sL "$hacks_repo_url"/db_setup.sql)
|
|
||||||
sqlite3 $hacks_db_path < <(echo "ALTER TABLE bases ADD COLUMN local_path;")
|
|
||||||
|
|
||||||
declare -g hacks_db_cmd="sqlite3 $hacks_db_path"
|
declare -g hacks_db_cmd="sqlite3 $hacks_db_path"
|
||||||
|
$hacks_db_cmd < <(curl -sL "https://raw.githubusercontent.com/Libretto7/best-romhacks/main/db_setup.sql")
|
||||||
|
$hacks_db_cmd "ALTER TABLE bases ADD COLUMN local_path;"
|
||||||
}
|
}
|
||||||
|
|
||||||
db_sanitize() {
|
db_sanitize() {
|
||||||
|
@ -35,8 +32,6 @@ check_romhacks_compatibility() {
|
||||||
install_romhack() {
|
install_romhack() {
|
||||||
# $1: name of romhack
|
# $1: name of romhack
|
||||||
|
|
||||||
set -exo pipefail
|
|
||||||
|
|
||||||
hack_name="$1"
|
hack_name="$1"
|
||||||
infos=$($hacks_db_cmd "SELECT bases.system,bases.name,bases.local_path \
|
infos=$($hacks_db_cmd "SELECT bases.system,bases.name,bases.local_path \
|
||||||
FROM bases JOIN rhacks ON bases.crc32 = rhacks.base_crc32 \
|
FROM bases JOIN rhacks ON bases.crc32 = rhacks.base_crc32 \
|
||||||
|
@ -44,11 +39,19 @@ install_romhack() {
|
||||||
|
|
||||||
IFS='|' read -r system base_name base_local_path <<< $infos
|
IFS='|' read -r system base_name base_local_path <<< $infos
|
||||||
|
|
||||||
# download patchfile
|
# Download patchfile
|
||||||
wget -q "https://github.com/Libretto7/best-romhacks/raw/main/rhacks/$system/$base_name/$hack_name/patch.tar.xz" -O "/tmp/patch.tar.xz"
|
wget -q "https://github.com/Libretto7/best-romhacks/raw/main/rhacks/$system/$base_name/$hack_name/patch.tar.xz" \
|
||||||
|
-O "/tmp/patch.tar.xz"
|
||||||
|
|
||||||
|
# Extract patchfile
|
||||||
patchfile_name=$(tar -xvf "/tmp/patch.tar.xz" --directory="$roms_folder/$system")
|
patchfile_name=$(tar -xvf "/tmp/patch.tar.xz" --directory="$roms_folder/$system")
|
||||||
echo "$patchfile_name"
|
|
||||||
|
|
||||||
flips="flatpak-spawn --host flatpak run com.github.Alcaro.Flips"
|
# Create the hack
|
||||||
|
base_name="$(basename "$base_local_path")"
|
||||||
|
ext="$(echo "${base_name##*.}")"
|
||||||
|
flatpak-spawn --host flatpak run com.github.Alcaro.Flips \
|
||||||
|
--apply "$roms_folder/$system/$patchfile_name" "$base_local_path" "$roms_folder/$system/$hack_name.$ext" >/dev/null
|
||||||
|
|
||||||
|
# Cleanup
|
||||||
|
rm "$roms_folder/$system/$patchfile_name"
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,8 +103,6 @@ source /app/libexec/global.sh
|
||||||
# DIALOG TREE FUNCTIONS
|
# DIALOG TREE FUNCTIONS
|
||||||
|
|
||||||
configurator_welcome_dialog() {
|
configurator_welcome_dialog() {
|
||||||
configurator_romhack_downloader_dialog
|
|
||||||
|
|
||||||
if [[ $developer_options == "true" ]]; then
|
if [[ $developer_options == "true" ]]; then
|
||||||
welcome_menu_options=("Presets & Settings" "Here you find various presets, tweaks and settings to customize your RetroDECK experience" \
|
welcome_menu_options=("Presets & Settings" "Here you find various presets, tweaks and settings to customize your RetroDECK experience" \
|
||||||
"Open Emulator" "Launch and configure each emulators settings (for advanced users)" \
|
"Open Emulator" "Launch and configure each emulators settings (for advanced users)" \
|
||||||
|
@ -155,6 +153,7 @@ configurator_welcome_dialog() {
|
||||||
;;
|
;;
|
||||||
|
|
||||||
"ROM Hack Downloader" )
|
"ROM Hack Downloader" )
|
||||||
|
configurator_generic_dialog "RetroDECK Configurator - ROM Hack Downloader" "In order to download ROM Hacks you need to have the ROMs the hacks are based on already available. Your base ROMs need to be compatible with the hacks, otherwise those hacks will not be shown.\n\nRight now, your base ROMs need to be uncompressed for this to work.\n\nThe compatible ROM Hacks will now be listed."
|
||||||
configurator_romhack_downloader_dialog
|
configurator_romhack_downloader_dialog
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
@ -1373,13 +1372,14 @@ configurator_game_downloader_dialog() {
|
||||||
choice=$(zenity --list --title="RetroDECK Configurator Utility - Game Downloader" --cancel-label="Back" \
|
choice=$(zenity --list --title="RetroDECK Configurator Utility - Game Downloader" --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" \
|
||||||
"ROM Hack Downloader" "Install ROM Hacks which are compatible with your ROMs (Right now: Only shows compatible ROMs with Super Mario World (USA) and Super Mario Bros. (World). Can't download.)" \
|
"ROM Hack Downloader" "Install ROM Hacks which are compatible with your ROMs" \
|
||||||
"Homebrew Downloader" "Install Homebrew (Not yet functional)" \
|
"Homebrew Downloader" "Install Homebrew (Not yet functional)" \
|
||||||
"Ports Downloader" "Install Ports (Not yet functional)" )
|
"Ports Downloader" "Install Ports (Not yet functional)" )
|
||||||
|
|
||||||
case $choice in
|
case $choice in
|
||||||
|
|
||||||
"ROM Hack Downloader" )
|
"ROM Hack Downloader" )
|
||||||
|
configurator_generic_dialog "RetroDECK Configurator - ROM Hack Downloader" "In order to download ROM Hacks you need to have the ROMs the hacks are based on already available. Your base ROMs need to be compatible with the hacks, otherwise those hacks will not be shown.\n\nRight now, your base ROMs need to be uncompressed for this to work.\n\nThe compatible ROM Hacks will now be listed."
|
||||||
configurator_romhack_downloader_dialog
|
configurator_romhack_downloader_dialog
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
@ -1399,18 +1399,18 @@ configurator_game_downloader_dialog() {
|
||||||
}
|
}
|
||||||
|
|
||||||
configurator_romhack_downloader_dialog() {
|
configurator_romhack_downloader_dialog() {
|
||||||
|
|
||||||
hacks_db_setup
|
hacks_db_setup
|
||||||
check_romhacks_compatibility # add paths of available base roms to db
|
check_romhacks_compatibility # add paths of available base roms to db
|
||||||
|
|
||||||
available_bases_crc32s="$($hacks_db_cmd "SELECT crc32 FROM bases WHERE local_path NOT NULL;")"
|
available_bases_crc32s="$($hacks_db_cmd "SELECT crc32 FROM bases WHERE local_path NOT NULL;")"
|
||||||
|
|
||||||
zenity_columns=()
|
zenity_columns=()
|
||||||
|
|
||||||
while IFS= read -r base_crc32; do
|
while IFS= read -r base_crc32; do
|
||||||
|
|
||||||
# Get info of the available hacks for this base crc32
|
# Get info of the available hacks for this base crc32
|
||||||
info_of_hacks_compatible_with_base="$($hacks_db_cmd "SELECT name,released,retro_achievements,description FROM rhacks WHERE base_crc32 = '""$base_crc32""'")"
|
info_of_hacks_compatible_with_base="$($hacks_db_cmd "SELECT rhacks.name,bases.system,rhacks.released,rhacks.retro_achievements,rhacks.description \
|
||||||
|
FROM bases JOIN rhacks ON bases.crc32 = rhacks.base_crc32
|
||||||
|
WHERE bases.crc32 = '""$base_crc32""'")"
|
||||||
|
|
||||||
while IFS= read -r single_hack_info; do
|
while IFS= read -r single_hack_info; do
|
||||||
|
|
||||||
|
@ -1426,15 +1426,30 @@ configurator_romhack_downloader_dialog() {
|
||||||
|
|
||||||
done <<< "$available_bases_crc32s"
|
done <<< "$available_bases_crc32s"
|
||||||
|
|
||||||
choice=$(zenity --list --title="RetroDECK Configurator Utility - Game Downloader: ROM Hacks" --cancel-label="Back" \
|
if [[ ${#zenity_columns[@]} != 0 ]]; then # Compatible base ROMs found
|
||||||
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
|
|
||||||
--column="ROM Hack Name" --column="Released" --column="RetroAchievements" --column="Description" \
|
|
||||||
"${zenity_columns[@]}" )
|
|
||||||
|
|
||||||
echo "$choice"
|
choice=$(zenity --list --title="RetroDECK Configurator Utility - ROM Hack Downloader" --cancel-label="Back" \
|
||||||
install_romhack "$choice" && echo "success"
|
--window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" --width=1200 --height=720 \
|
||||||
|
--column="ROM Hack Name" --column="System" --column="Released" --column="RetroAchievements" --column="Description" \
|
||||||
|
"${zenity_columns[@]}" )
|
||||||
|
|
||||||
configurator_welcome_dialog
|
if [[ -z "$choice" ]]; then # no selection or back button
|
||||||
|
configurator_welcome_dialog
|
||||||
|
else
|
||||||
|
install_romhack "$choice"
|
||||||
|
rc=$?
|
||||||
|
if [[ $rc == "0" ]]; then
|
||||||
|
configurator_generic_dialog "RetroDECK Configurator - ROM Hack Downloader" "$choice was installed successfully!"
|
||||||
|
else
|
||||||
|
configurator_generic_dialog "RetroDECK Configurator - ROM Hack Downloader" "Something went wrong :("
|
||||||
|
fi
|
||||||
|
|
||||||
|
configurator_romhack_downloader_dialog
|
||||||
|
fi
|
||||||
|
else # No compatible base ROMs
|
||||||
|
configurator_generic_dialog "RetroDECK Configurator - ROM Hack Downloader" "You have no uncompressed ROMs which are compatible with the available patches."
|
||||||
|
configurator_welcome_dialog
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# START THE CONFIGURATOR
|
# START THE CONFIGURATOR
|
||||||
|
|
Loading…
Reference in a new issue