From 32ebb6e686a71f394107739c63a64215c8a482df Mon Sep 17 00:00:00 2001 From: icenine451 Date: Tue, 2 Apr 2024 09:53:35 -0400 Subject: [PATCH] Add post-compression file check before original deletion Add ROM backup disclaimer to compression auto-cleanup --- functions/compression.sh | 56 +++++++++++++++++++++++----------------- tools/configurator.sh | 48 ++++++++++++++++++++-------------- 2 files changed, 60 insertions(+), 44 deletions(-) diff --git a/functions/compression.sh b/functions/compression.sh index 15bce646..2a0e25d6 100644 --- a/functions/compression.sh +++ b/functions/compression.sh @@ -111,19 +111,23 @@ cli_compress_single_game() { echo "$(basename "$file") can be compressed to $compatible_compression_format" compress_game "$compatible_compression_format" "$file" "$system" if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested - if [[ $(basename "$file") == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do # Remove associated .bin files - echo "Removing original file "$file_path/$line"" - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file - echo "Removing original file $(basename "$file")" - rm -f "$file" + if [[ -f "${file%.*}.$compatible_compression_format" ]]; then + if [[ $(basename "$file") == *".cue" ]]; then + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + local file_path=$(dirname "$(realpath "$file")") + while IFS= read -r line + do # Remove associated .bin files + echo "Removing original file "$file_path/$line"" + rm -f "$file_path/$line" + done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file + echo "Removing original file $(basename "$file")" + rm -f "$file" + else + echo "Removing original file $(basename "$file")" + rm -f "$file" + fi else - echo "Removing original file $(basename "$file")" - rm -f "$file" + echo "Compressed version of $(basename "$file") not found, skipping deletion." fi fi else @@ -169,19 +173,23 @@ cli_compress_all_games() { echo "$(basename "$file") can be compressed to $compatible_compression_format" compress_game "$compatible_compression_format" "$file" "$system" if [[ $post_compression_cleanup == [yY] ]]; then # Remove file(s) if requested - if [[ "$file" == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do # Remove associated .bin files - echo "Removing original file "$file_path/$line"" - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file - echo "Removing original file "$file"" - rm -f $(realpath "$file") + if [[ -f "${file%.*}.$compatible_compression_format" ]]; then + if [[ "$file" == *".cue" ]]; then + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + local file_path=$(dirname "$(realpath "$file")") + while IFS= read -r line + do # Remove associated .bin files + echo "Removing original file "$file_path/$line"" + rm -f "$file_path/$line" + done < <(printf '%s\n' "$cue_bin_files") # Remove original .cue file + echo "Removing original file "$file"" + rm -f $(realpath "$file") + else + echo "Removing original file "$file"" + rm -f $(realpath "$file") + fi else - echo "Removing original file "$file"" - rm -f $(realpath "$file") + echo "Compressed version of $(basename "$file") not found, skipping deletion." fi fi else diff --git a/tools/configurator.sh b/tools/configurator.sh index 7f08d563..f45c27fc 100644 --- a/tools/configurator.sh +++ b/tools/configurator.sh @@ -793,23 +793,27 @@ configurator_compress_single_game_dialog() { echo "# Compressing $(basename "$file") to $compatible_compression_format format" compress_game "$compatible_compression_format" "$file" "$system" if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested - if [[ "$file" == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") - rm -f $(realpath "$file") + if [[ -f "${file%.*}.$compatible_compression_format" ]]; then + if [[ "$file" == *".cue" ]]; then + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + local file_path=$(dirname "$(realpath "$file")") + while IFS= read -r line + do + rm -f "$file_path/$line" + done < <(printf '%s\n' "$cue_bin_files") + rm -f $(realpath "$file") + else + rm -f "$(realpath "$file")" + fi else - rm -f "$(realpath "$file")" + configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "A compressed version of the file was not found, skipping deletion." fi fi ) | zenity --icon-name=net.retrodeck.retrodeck --progress --no-cancel --pulsate --auto-close \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --title "RetroDECK Configurator Utility - Compression in Progress" - configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete!" + configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "The compression process is complete." configurator_compression_tool_dialog else @@ -910,16 +914,20 @@ configurator_compress_multiple_games_dialog() { games_left_to_compress=$((games_left_to_compress-1)) compress_game "$compression_format" "$file" "$system" if [[ $post_compression_cleanup == "true" ]]; then # Remove file(s) if requested - if [[ "$file" == *".cue" ]]; then - local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") - local file_path=$(dirname "$(realpath "$file")") - while IFS= read -r line - do - rm -f "$file_path/$line" - done < <(printf '%s\n' "$cue_bin_files") - rm -f $(realpath "$file") + if [[ -f "${file%.*}.$compatible_compression_format" ]]; then + if [[ "$file" == *".cue" ]]; then + local cue_bin_files=$(grep -o -P "(?<=FILE \").*(?=\".*$)" "$file") + local file_path=$(dirname "$(realpath "$file")") + while IFS= read -r line + do + rm -f "$file_path/$line" + done < <(printf '%s\n' "$cue_bin_files") + rm -f $(realpath "$file") + else + rm -f "$(realpath "$file")" + fi else - rm -f "$(realpath "$file")" + configurator_generic_dialog "RetroDECK Configurator - RetroDECK: Compression Tool" "Compression of $(basename $file) failed, skipping deletion." fi fi done @@ -938,7 +946,7 @@ configurator_compression_cleanup_dialog() { zenity --icon-name=net.retrodeck.retrodeck --question --no-wrap --cancel-label="No" --ok-label="Yes" \ --window-icon="/app/share/icons/hicolor/scalable/apps/net.retrodeck.retrodeck.svg" \ --title "RetroDECK Configurator - RetroDECK: Compression Tool" \ - --text="Do you want to remove old files after they are compressed?\n\nClicking \"No\" will leave all files behind which will need to be cleaned up manually and may result in game duplicates showing in the RetroDECK library." + --text="Do you want to remove old files after they are compressed?\n\nClicking \"No\" will leave all files behind which will need to be cleaned up manually and may result in game duplicates showing in the RetroDECK library.\n\nPlease make sure you have a backup of your ROMs before using automatic cleanup!" local rc=$? # Capture return code, as "Yes" button has no text value if [[ $rc == "0" ]]; then # If user clicked "Yes" echo "true"