From 7f413a28c644bec2eb5a92a2b1b6db6b02c90b79 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Sun, 4 Jul 2021 17:36:37 -0500 Subject: [PATCH] Release 2.01 - Fixed error output on 'mv' commands - Added error checking for when Recycle Bin is configured but doesn't exist - Reordered error redirects. No functional difference. - Updated Readme - Updated Usage display --- README.md | 2 +- root/usr/local/bin/striptracks.sh | 63 +++++++++++++++++-------------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 3e962e0..3173542 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ Both audio and subtitles that match the selected language(s) are kept. >**Note:** The intent of the Radarr language selection 'Original' is not well documented. For the purposes of this script, it has the same function as 'Any' and will preserve all languages in the video file. #### Manual Override -The script still supports command line arguments that can override what is detected. More granular control can be therefore be exerted or extended using tagging and defining multiple Connect scripts (this is outside the scope of this documentation). +The script still supports command line arguments that will override what is detected. More granular control can therefore be exerted or extended using tagging and defining multiple Connect scripts (this is native Radarr/Sonarr functionality outside the scope of this documentation). The script accepts two command line arguments and one option: diff --git a/root/usr/local/bin/striptracks.sh b/root/usr/local/bin/striptracks.sh index 3ca2828..0a7276c 100644 --- a/root/usr/local/bin/striptracks.sh +++ b/root/usr/local/bin/striptracks.sh @@ -86,7 +86,7 @@ Video remuxing script designed for use with Radarr and Sonarr Source: https://github.com/TheCaptain989/radarr-striptracks Usage: - $0 [-d] [ []] + $0 [-d] Options and Arguments: -d enable debug logging @@ -103,7 +103,7 @@ Examples: # and Japanese audio, and English and # Spanish subtitles " - >&2 echo "$usage" + echo "$usage" >&2 } # Can still go over striptracks_maxlog if read line is too long # Must include whole function in subshell for read to work! @@ -216,7 +216,7 @@ while getopts ":d" opt; do d ) # For debug purposes only striptracks_message="Debug|Enabling debug logging." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 striptracks_debug=1 printenv | sort | sed 's/^/Debug|/' | log ;; @@ -228,7 +228,7 @@ shift $((OPTIND -1)) if [ ! -f "/usr/bin/mkvmerge" ]; then striptracks_message="Error|/usr/bin/mkvmerge is required by this script" echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 exit 4 fi @@ -259,7 +259,7 @@ if [ -f "$striptracks_arr_config" ]; then # Radarr/Sonarr version 2 striptracks_message="Error|This script does not support ${striptracks_type^} version ${striptracks_arr_version}. Please upgrade." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 exit 8 fi @@ -272,7 +272,7 @@ else # No config file means we can't call the API. Best effort at this point. striptracks_message="Warn|Unable to locate ${striptracks_type^} config file: '$striptracks_arr_config'" echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi # Handle Test event @@ -286,7 +286,7 @@ fi if [ -z "$striptracks_video" ]; then striptracks_message="Error|No video file specified! Not called from Radarr/Sonarr?" echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 usage exit 1 fi @@ -295,7 +295,7 @@ fi if [ ! -f "$striptracks_video" ]; then striptracks_message="Error|Input file not found: \"$striptracks_video\"" echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 exit 5 fi @@ -318,7 +318,7 @@ if [ -n "$striptracks_api_url" ]; then # Should never fire due to previous check, but just in case striptracks_message "Error|Unknown environment: ${striptracks_type}" echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 exit 7 fi striptracks_profilename=$(echo $striptracks_profiles | jq -crM ".[] | select(.id == $striptracks_profileid).name") @@ -333,26 +333,26 @@ if [ -n "$striptracks_api_url" ]; then # 'hasFile' is False in returned JSON. striptracks_message="Warn|The '$striptracks_video_api' API with id $striptracks_video_id returned a false hasFile." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi else # Get Profiles API failed striptracks_message="Warn|Unable to retrieve $striptracks_profile_type profiles from ${striptracks_type^} API" echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi else # No URL means we can't call the API striptracks_message="Warn|Unable to determine ${striptracks_type^} API URL." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi # Check for command line options; will override the detected languages if [ -z "$1" -a -z "$striptracks_langcodes" ]; then striptracks_message="Error|No audio languages specified!" echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 usage exit 2 elif [ -z "$1" ]; then @@ -363,7 +363,7 @@ fi if [ -z "$2" -a -z "$striptracks_langcodes" ]; then striptracks_message="Error|No subtitles languages specified!" echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 usage exit 3 elif [ -z "$2" ]; then @@ -379,11 +379,11 @@ echo "$striptracks_message" | log # Rename the original video file to a temporary name [ $striptracks_debug -eq 1 ] && echo "Debug|Renaming: \"$striptracks_video\" to \"$striptracks_tempvideo\"" | log -mv -f "$striptracks_video" "$striptracks_tempvideo" | log +mv -f "$striptracks_video" "$striptracks_tempvideo" 2>&1 | log striptracks_return=$?; [ "$striptracks_return" != 0 ] && { striptracks_message="ERROR[$striptracks_return]: Unable to rename video: \"$striptracks_video\" to temp video: \"$striptracks_tempvideo\". Halting." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 exit 6 } @@ -393,7 +393,7 @@ striptracks_json=$(/usr/bin/mkvmerge -J "$striptracks_tempvideo") striptracks_return=$?; [ "$striptracks_return" != 0 ] && { striptracks_message="ERROR[$striptracks_return]: Error executing mkvmerge." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 } # This and the modified AWK script are a hack, and I know it. JQ is crazy hard to learn, BTW. @@ -517,17 +517,22 @@ if [ -s "$striptracks_newvideo" ]; then # Use Recycle Bin if configured if [ "$striptracks_recyclebin" ]; then [ $striptracks_debug -eq 1 ] && echo "Debug|Recycling: \"$striptracks_tempvideo\" to \"${striptracks_recyclebin%/}/$(basename "$striptracks_video")"\" | log - mv "$striptracks_tempvideo" "${striptracks_recyclebin%/}/$(basename "$striptracks_video")" | log + mv "$striptracks_tempvideo" "${striptracks_recyclebin%/}/$(basename "$striptracks_video")" 2>&1 | log + striptracks_return=$?; [ "$striptracks_return" != 0 ] && { + striptracks_message="ERROR[$striptracks_return]: Unable to move video: \"$striptracks_tempvideo\" to Recycle Bin: \"${striptracks_recyclebin%/}\"" + echo "$striptracks_message" | log + echo "$striptracks_message" >&2 + } else [ $striptracks_debug -eq 1 ] && echo "Debug|Deleting: \"$striptracks_tempvideo\"" | log - rm "$striptracks_tempvideo" | log + rm "$striptracks_tempvideo" 2>&1 | log fi else striptracks_message="Error|Unable to locate or invalid remuxed file: \"$striptracks_newvideo\". Undoing rename." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 [ $striptracks_debug -eq 1 ] && echo "Debug|Renaming: \"$striptracks_tempvideo\" to \"$striptracks_video\"" | log - mv -f "$striptracks_tempvideo" "$striptracks_video" | log + mv -f "$striptracks_tempvideo" "$striptracks_video" 2>&1 | log exit 10 fi @@ -578,7 +583,7 @@ if [ -n "$striptracks_api_url" ]; then else striptracks_message="Warn|Unable to update ${striptracks_type^} $striptracks_video_api '$striptracks_title' to quality '$(echo $striptracks_original_quality | jq -crM .quality.name)'" echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi else # The quality is already correct @@ -589,44 +594,44 @@ if [ -n "$striptracks_api_url" ]; then # No '.path' in returned JSON striptracks_message="Warn|The '$striptracks_videofile_api' API with ${striptracks_video_api}File id $striptracks_videofile_id returned no path." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi else # 'hasFile' is False in returned JSON. striptracks_message="Warn|The '$striptracks_video_api' API with id $striptracks_video_id returned a false hasFile (Normal with Radarr on try #1)." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi else # Timeout or failure striptracks_message="Warn|${striptracks_type^} job ID $striptracks_jobid timed out or failed." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi else # Error from API striptracks_message="Error|The '$striptracks_rescan_api' API with $striptracks_json_key $striptracks_video_id failed." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi done else # No '.path' in returned JSON striptracks_message="Warn|The '$striptracks_videofile_api' API with ${striptracks_video_api}File id $striptracks_videofile_id returned no path." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi else # No video ID means we can't call the API striptracks_message="Warn|Missing or empty environment variable: striptracks_video_id='$striptracks_video_id' or striptracks_videofile_id='$striptracks_videofile_id'" echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi else # No URL means we can't call the API striptracks_message="Warn|Unable to determine ${striptracks_type^} API URL." echo "$striptracks_message" | log - >&2 echo "$striptracks_message" + echo "$striptracks_message" >&2 fi # Cool bash feature