Romhacks are now fully installable

This commit is contained in:
Libretto 2024-01-27 15:32:42 +01:00
parent 9377502a9f
commit 50ee06784d
2 changed files with 44 additions and 26 deletions

View file

@ -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"
} }

View file

@ -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