From 7f80e55fce724896bb25eaa0356cec8294ea41c6 Mon Sep 17 00:00:00 2001 From: TheCaptain989 Date: Sun, 11 Feb 2024 21:44:28 -0600 Subject: [PATCH] Release 2.5 - **New:** Added support for *Custom Formats* language selection - **New:** Now fully supports Sonarr v4 - 'Original' language support - Deprecated `languageprofile` API endpoint accounted for (Fixes TheCaptain989/radarr-striptracks#64) - *Still* backward compatible with Sonarr v3 - Fixes TheCaptain989/radarr-striptracks#66 - Added Radarr/Sonarr feature compatibility tests - Added quick drop-out if unable to determine Radarr/Sonarr version - Added a longer wait for rescan, delete, and update completion - Improved Radarr/Sonarr database update logic - Editor API will no longer be called if there are no changes - No update with 'Unknown' language - Improved automatic language detection logic - Improved debug logging - Incremented GitHub workflow actions, per the [Node.js 16 deprecation](https://github.blog/changelog/2023-09-22-github-actions-transitioning-from-node-16-to-node-20/ "GitHub Actions: Transitioning from Node 16 to Node 20") announcement - Updated README --- .assets/custom-format-condition.png | Bin 0 -> 28498 bytes .assets/custom-format-score.png | Bin 0 -> 22664 bytes .assets/radarr-quality-profile.png | Bin 39181 -> 28195 bytes .assets/sonarr-language-profile.png | Bin 30245 -> 0 bytes README.md | 104 ++++--- SECURITY.md | 4 +- root/usr/local/bin/striptracks.sh | 433 +++++++++++++++++++--------- 7 files changed, 376 insertions(+), 165 deletions(-) create mode 100644 .assets/custom-format-condition.png create mode 100644 .assets/custom-format-score.png delete mode 100644 .assets/sonarr-language-profile.png diff --git a/.assets/custom-format-condition.png b/.assets/custom-format-condition.png new file mode 100644 index 0000000000000000000000000000000000000000..d24c862609e9241356f16d8239c8c43295ced448 GIT binary patch literal 28498 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 b4JzBmtgXkd1Y%GBysM{uSF2p(apZpiMKwfu literal 0 HcmV?d00001 diff --git a/.assets/radarr-quality-profile.png b/.assets/radarr-quality-profile.png index 753448e0121405304953b68109b5cd35a29a78f4..47e11b1dd580a7f6e21e1e6073ec25d8eece3d64 100644 GIT binary patch literal 28195 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 literal 39181 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 E18#Wi7XSbN diff --git a/.assets/sonarr-language-profile.png b/.assets/sonarr-language-profile.png deleted file mode 100644 index 27a38e87168656d623ae7d84108bbbd9bfc3c6c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30245 zcmce-1yGzp6E>LOF2OxO65I*ynxMhm7ALs7%iz$gNcebaer=Nbh!+$79qoWX`ynFW!{rfiw<#+F3X5PJf-++Vw?OC)j z{tf+l@1!g(_O5cA^Z@z*XD%u)`tDs#Eb6lnJoFja{+pK5yLTA9|32>r?La2)-nq1V zmk?ET*FRZB)>WO|L_E*#dB-jUM*!CiC+R?)ZBm)~vnYwls=07SyXaue{6@cQLfMPu zCbh_tS&NXld0Y834@gT7;LH)*&%p@H5sMG%0lrS8Hh1|0*K^qKpKepz?y~sZc<;t{ zxXs5`O5j2iUv|L>qE!DHeJ)IZwwHE(6!yP1wR+EmBw}is0{qub-@|_W*BggN2nzq# zQQjpYF9B^P@Ca7_`85OU51fA^v;qRs{tXyHL7VwEKtkOx=gYqlwJ`rbOz}e$#)ZDo zXOhB4cp)Zo1lNMwc%

+$TyYRU|fQRO#M#gcfa|W<1rzghFwvM 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:** The Radarr language selection 'Any' will preserve all languages in the video file. Selecting this profile language is functionally equivalent to calling the script with `--audio :any --subs :any` command-line options. See [Any language code](./README.md#any-language-code) below for more details. +The language selection **'Original'** will use the language Radarr pulled from [The Movie Database](https://www.themoviedb.org/ "TMDB") or that Sonarr pulled from [The TVDB](https://www.thetvdb.com/ "TVDB") during its last refresh. +Selecting this language is functionally equivalent to calling the script with `--audio :org --subs :org` command-line options. See [Original language code](./README.md#original-language-code) below for more details. ->**Note:** The Radarr language selection 'Original' will use the language Radarr pulled from [The Movie Database](https://www.themoviedb.org/ "TMDB") during its last refresh. Selecting this profile language is functionally equivalent to calling the script with `--audio :org --subs :org` command-line options. See [Original language code](./README.md#original-language-code) below for more details. +The language selection **'Unknown'** will match tracks with **no configured language** in the video file. Selecting this language is functionally equivalent to calling the script with `--audio :und --subs :und` command-line options. See [Unknown language code](./README.md#unknown-language-code) below for more details. ->**Note:** The Sonarr language selection 'Unknown' will match tracks with no configured language in the video file. Selecting this profile language is functionally equivalent to calling the script with `--audio :und --subs :und` command-line options. See [Unknown language code](./README.md#unknown-language-code) below for more details. +The Radarr language selection **'Any'** has two purposes: + 1) It will trigger a search of languages in ***Custom Formats*** + 2) If none are found, it will will preserve **all languages** in the video file. This is functionally equivalent to calling the script with `--audio :any --subs :any` command-line options. See [Any language code](./README.md#any-language-code) below for more details. + +>**Note:** When using the *Custom Format* conditions and scoring to select languages you may not get the results you expect. +>This can be non-intuitive configuration, especially when using negative scoring and the 'Negate' option. +>The script does not care what custom format is *detected* (aka applied) by Radarr/Sonarr on the video file, only what the *scores* are in the *Quality Profile*. +>If you choose to use Custom Formats, it is **highly recommended** to first run the script with the debug option `-d`, perform some test downloads and script runs, and then examine your results and the script logs closely to be sure things are working the way you want them to. *Radarr Quality Profile Example* ![radarr profile](.assets/radarr-quality-profile.png "Radarr Quality Profile settings") -*Sonarr Language Profile Example* -![sonarr profile](.assets/sonarr-language-profile.png "Sonarr Language Profile settings") +*Custom Format Condition Example* +![custom format](.assets/custom-format-condition.png "Custom Format Language setting") -#### Command-Line Options and Arguments -The script also supports command-line arguments that will override the automatic language detection. 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). +*Radarr Custom Format Language Score Example* +![custom format score](.assets/custom-format-score.png "Custom Format Language scoring") + +### Language Detection Precedence +The following chart represents the order of precedence that the script follows to decide which language(s) to select when there are multiple settings configured. Moving left to right, it will stop when it finds a configured language. + +```mermaid +graph LR + A[Command-Line] + B["Quality + Profile"] + C["Custom + Formats"] + D["Language Profile + (Sonarr only)"] + A-->B + B-- 'Any' -->C + C-->D +``` + +Descriptively, these steps are: +1. Command-line options override all automatic language selection. +2. If there are no command-line options, the video's *Quality Profile* is examined for a language configuration (only supported in Radarr). +3. If there is no *Quality Profile* language **or** it is set to 'Any', then examine the *Custom Formats* and scores associated with the quality profile. All language conditions with positive scores *and* negated conditions with negative score are selected. +4. If the *Custom Format* scores are zero (0) or there are none with configured language conditions, examine the *Language Profile* (only supported in Sonarr v3) + +>**Note:** For step 3 above, using *Custom Formats* when 'Any' is in the *Quality Profile* is consistent with the behavior described in [TRaSH Guides](https://trash-guides.info/Sonarr/Tips/How-to-setup-language-custom-formats/ "TraSH Guides: How to setup Language Custom Formats"). + +## Command-Line Syntax + +### Options and Arguments +The script also supports command-line arguments that will override the automatic language detection. 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 syntax for the command-line is: `striptracks.sh [{-a|--audio} [{-s|--subs} ] [{-f|--file} ]] [{-l,--log} ] [{-d|--debug} []]` @@ -137,29 +175,29 @@ Multiple codes may be concatenated, such as `:eng:spa` for both English and Span >![warning] **NOTE:** If no subtitle language is detected in the profile or specified on the command-line, all subtitles are removed. -#### Any language code +### Any language code The `:any` language code is a special code. When used, the script will preserve all language tracks, regardless of how they are tagged in the source video. -#### Original language code -The `:org` language code is a special code. When used, instead of retaining a specific language, the script substitutes the original movie language as specified in its [The Movie Database](https://www.themoviedb.org/ "TMDB") entry. +### Original language code +The `:org` language code is a special code. When used, instead of retaining a specific language, the script substitutes the original movie or TV show language as specified in its [The Movie Database](https://www.themoviedb.org/ "TMDB") or [The TVDB](https://www.thetvdb.com/ "TVDB") entry. As an example, when importing "*Amores Perros (2000)*" with options `--audio :org:eng`, the Spanish and English audio tracks are preserved. Several [Included Wrapper Scripts](./README.md#included-wrapper-scripts) use this special code. ->![danger] **NOTE:** This feature relies on the 'originalLanguage' field in the Radarr database. It is not known to exist in Sonarr, and the `:org` code will therefore be ignored. It is also invalid when used in Batch Mode. +>![danger] **NOTE:** This feature relies on the 'originalLanguage' field in the Radarr/Sonarr database. The `:org` code is therefore invalid when used in Batch Mode. > The script will log a warning if it detects the use of `:org` in an invalid way, though it will continue to execute. -#### Unknown language code -The `:und` language code is a special code. When used, the script will match on any track that has a null or blank language entry. If not included, tracks with a blank language value will be removed. +### Unknown language code +The `:und` language code is a special code. When used, the script will match on any track that has a null or blank language attribute. If not included, tracks with no language attribute will be removed. >![danger] **NOTE:** It is common for M2TS and AVI containers to have tracks with unknown languages! It is strongly recommended to include `:und` in most instances unless you know exactly what you're doing. -### Special Handling of Audio +## Special Handling of Audio The script is smart enough to not remove the last audio track. There is in fact no way to force the script to remove all audio. This way you don't have to specify every possible language if you are importing a foreign film, for example. Additionally, two ISO 639-2 language codes are handled specially: the "*Uncoded languages*" code of `mis` and the "*No linguistic content*" code of `zxx`. Tracks with either of these codes are always retained as they are often used for instrumental tracks in silent films. There is no way to force the script to remove audio tracks with these codes. -### Examples +## Examples ```shell -d 2 # Enable debugging level 2, audio and subtitles @@ -176,10 +214,10 @@ There is no way to force the script to remove audio tracks with these codes. -a :any -s "" # Keep all audio and remove all subtitles ``` -### Wrapper Scripts +## Wrapper Scripts To supply arguments to the script, one of the included wrapper scripts may be used or a custom wrapper script must be created. -#### Included Wrapper Scripts +### Included Wrapper Scripts For your convenience, several wrapper scripts are included in the `/usr/local/bin/` directory. You may use any of these scripts in place of `striptracks.sh` mentioned in the [Installation](./README.md#installation) section above. @@ -201,7 +239,7 @@ striptracks-org-ger.sh # Keep Original and German audio, and Original and Ge striptracks-org-spa.sh # Keep Original and Spanish audio, and Original and Spanish subtitles ``` -#### Example Wrapper Script +### Example Wrapper Script To configure an entry from the [Examples](./README.md#examples) section above, create and save a file called `striptracks-custom.sh` to `/config` containing the following text: ```shell @@ -220,31 +258,31 @@ Then put `/config/striptracks-custom.sh` in the **Path** field in place of `/usr >**Note:** If you followed the Linuxserver.io recommendations when configuring your container, the `/config` directory will be mapped to an external storage location. It is therefore recommended to place custom scripts in the `/config` directory so they will survive container updates, but they may be placed anywhere that is accessible by Radarr or Sonarr. -### Triggers +## Triggers The only events/notification triggers that have been tested are **On Import** and **On Upgrade** -### Batch Mode +## Batch Mode Batch mode allows the script to be executed independently of Radarr or Sonarr. It converts the file specified on the command-line and ignores any environment variables that are normally expected to be set by the video management program. Using this function, you can easily process all of your video files in any subdirectory at once. See the [Batch Example](./README.md#batch-example) below. -#### Script Execution Differences in Batch Mode +### Script Execution Differences in Batch Mode Because the script is not called from within Radarr or Sonarr, expect the following behavior while in Batch Mode: * *The filename must be specified on the command-line.*
(The `-f` option places the script in Batch Mode) * *No audio or subtitles language detection occurs.*
Both the audio and subtitles languages must be specified on the command-line. -* *The `:org` language code is meaningless.*
The original video language cannot be determined without the Radarr database. +* *The `:org` language code is meaningless.*
The original video language cannot be determined without the Radarr/Sonarr database. * *The resultant MKV embedded title attribute is set to the basename of the file minus the extension.*
The canonical name of the movie/TV show cannot otherwise be determined. * *Radarr or Sonarr APIs are not called and their database is not updated.*
This may require a manual rescan of converted videos. * *Original video files are deleted.*
The Recycle Bin function is not available. -#### Batch Example +### Batch Example To keep English and Unknown audio and English subtitles on all video files ending in .MKV, .AVI, or .MP4 in the `/movies` directory, enter the following at the Linux command-line: ```shell find /movies/ -type f \( -name "*.mkv" -o -name "*.avi" -o -name "*.mp4" \) | while read file; do /usr/local/bin/striptracks.sh -f "$file" -a :eng:und -s :eng; done ``` -### Logs +## Logs By default, a log file is created for the script activity called: `/config/logs/striptracks.txt` @@ -260,7 +298,7 @@ Log rotation is performed with 5 log files of 512KB each being kept. To completely remove the mod: 1. Delete the custom script from Radarr's or Sonarr's *Settings* > *Connect* screen that you created in the [Installation](./README.md#installation) section above. 2. Stop and delete the Radarr/Sonarr container. -3. Exclude the **DOCKER_MODS** environment variable from your `compose.yaml` file or the `docker run` command when re-creating the Radarr/Sonarr container. +3. Remove the **DOCKER_MODS** environment variable from your `compose.yaml` file or exclude it from the `docker run` command when re-creating the Radarr/Sonarr container. ___ diff --git a/SECURITY.md b/SECURITY.md index e7c48ab..94d33bc 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -6,8 +6,8 @@ Only the latest major and minor version are supported. | Version | Supported | | ------- | ------------------ | -| 2.4.x | :heavy_check_mark: | -| < 2.4 | :x: | +| 2.5.x | :heavy_check_mark: | +| < 2.5 | :x: | ## Reporting a Vulnerability diff --git a/root/usr/local/bin/striptracks.sh b/root/usr/local/bin/striptracks.sh index e04daea..833f4c6 100755 --- a/root/usr/local/bin/striptracks.sh +++ b/root/usr/local/bin/striptracks.sh @@ -1,7 +1,7 @@ #!/bin/bash # Video remuxing script designed for use with Radarr and Sonarr -# Automatically strips out unwanted audio and subtitles streams, keeping only the desired languages. +# Automatically strips out unwanted audio and subtitles tracks, keeping only the desired languages. # Prod: https://github.com/linuxserver/docker-mods/tree/radarr-striptracks # Dev/test: https://github.com/TheCaptain989/radarr-striptracks # @@ -15,6 +15,7 @@ # Dependencies: # mkvmerge # mkvpropedit +# sed # awk # curl # jq @@ -107,9 +108,8 @@ Examples: # Radarr/Sonarr $striptracks_script -a :eng:und -s :eng # keep English and Unknown audio and # English subtitles - $striptracks_script -a :eng:org -s :eng # keep English and Original* audio and + $striptracks_script -a :eng:org -s :eng # keep English and Original audio and # English subtitles - # *Only supported in Radarr! $striptracks_script :eng \"\" # keep English audio and no subtitles $striptracks_script -d :eng:kor:jpn :eng:spa # Enable debugging level 1, keeping # English, Korean, and Japanese @@ -120,7 +120,7 @@ Examples: # Keep English and Unknown audio and # English subtitles, converting video # specified - $striptracks_script -a :any -s \"\" # Keep all audio and no subtitles + $striptracks_script -a :any -s \"\" # Keep all audio and no subtitles " echo "$usage" >&2 } @@ -241,11 +241,9 @@ elif [[ "${striptracks_type,,}" = "radarr" ]]; then export striptracks_rescan_id="${radarr_movie_id}" export striptracks_json_quality_root="movieFile" export striptracks_video_type="movie" - export striptracks_profile_type="quality" - export striptracks_profile_jq=".qualityProfileId" + export striptracks_video_rootNode="" # shellcheck disable=SC2154 export striptracks_title="${radarr_movie_title:-UNKNOWN} (${radarr_movie_year:-UNKNOWN})" - export striptracks_language_api="language" export striptracks_language_jq=".language" # export striptracks_language_node="languages" elif [[ "${striptracks_type,,}" = "sonarr" ]]; then @@ -264,18 +262,15 @@ elif [[ "${striptracks_type,,}" = "sonarr" ]]; then export striptracks_rescan_id="${sonarr_series_id}" export striptracks_json_quality_root="episodeFile" export striptracks_video_type="series" - export striptracks_profile_type="language" - export striptracks_profile_jq=".series.languageProfileId" + export striptracks_video_rootNode=".series" # shellcheck disable=SC2154 export striptracks_title="${sonarr_series_title:-UNKNOWN} $(numfmt --format "%02f" ${sonarr_episodefile_seasonnumber:-0})x$(numfmt --format "%02f" ${sonarr_episodefile_episodenumbers:-0}) - ${sonarr_episodefile_episodetitles:-UNKNOWN}" - export striptracks_language_api="languageprofile" - export striptracks_language_jq=".languages[] | select(.allowed).language" # export striptracks_language_node="language" # # Sonarr requires the episodeIds array # export striptracks_sonarr_json=" \"episodeIds\":[.episodes[].id]," else # Called in an unexpected way - echo -e "Error|Unknown or missing '*_eventtype' environment variable: ${striptracks_type}\nNot called from Radarr/Sonarr.\nTry using Batch Mode option: -f " + echo -e "Error|Unknown or missing '*_eventtype' environment variable: ${striptracks_type}\nNot called from Radarr/Sonarr.\nTry using Batch Mode option: -f " >&2 exit 7 fi export striptracks_rescan_api="Rescan${striptracks_video_type^}" @@ -325,7 +320,7 @@ function get_version { echo "$striptracks_message" >&2 } [ $striptracks_debug -ge 2 ] && echo "API returned: $striptracks_result" | awk '{print "Debug|"$0}' | log - if [ "$(echo $striptracks_result | jq -crM '.version?')" != "null" ]; then + if [ "$(echo $striptracks_result | jq -crM '.version?')" != "null" ] && [ "$(echo $striptracks_result | jq -crM '.version?')" != "" ]; then local striptracks_return=0 else local striptracks_return=1 @@ -382,7 +377,7 @@ function rescan { local data="{\"name\":\"$striptracks_rescan_api\",\"${striptracks_video_type}Id\":$striptracks_rescan_id}" echo "Info|Calling ${striptracks_type^} API to rescan ${striptracks_video_type}" | log local i=0 - for ((i=1; i <= 2; i++)); do + for ((i=1; i <= 5; i++)); do [ $striptracks_debug -ge 1 ] && echo "Debug|Forcing rescan of $striptracks_video_type '$striptracks_rescan_id'. Calling ${striptracks_type^} API using POST and URL '$url' with data $data" | log unset striptracks_result striptracks_result=$(curl -s --fail-with-body -H "X-Api-Key: $striptracks_apikey" \ @@ -400,7 +395,7 @@ function rescan { if [[ ! "$(echo $striptracks_result | jq -jcrM .message?)" =~ database\ is\ locked ]]; then break else - [ $striptracks_debug -ge 1 ] && echo "Debug|Database is locked. Waiting 1 minute." | log + echo "Warn|Database is locked; system is likely overloaded. Sleeping 1 minute." | log sleep 60 fi done @@ -459,10 +454,10 @@ function check_job { done return $striptracks_return } -# Get language/quality profiles +# Get profiles function get_profiles { - local url="$striptracks_api_url/${striptracks_profile_type}Profile" - [ $striptracks_debug -ge 1 ] && echo "Debug|Getting list of $striptracks_profile_type profiles. Calling ${striptracks_type^} API using GET and URL '$url'" | log + local url="$striptracks_api_url/${1}profile" + [ $striptracks_debug -ge 1 ] && echo "Debug|Getting list of $1 profiles. Calling ${striptracks_type^} API using GET and URL '$url'" | log unset striptracks_result striptracks_result=$(curl -s --fail-with-body -H "X-Api-Key: $striptracks_apikey" \ -H "Content-Type: application/json" \ @@ -473,7 +468,8 @@ function get_profiles { echo "$striptracks_message" | log echo "$striptracks_message" >&2 } - # This returns A LOT of data, and it is normally not needed + # This returns A LOT of data, and it is normally not needed for debugging + [ $striptracks_debug -ge 2 ] && echo "Debug|API returned ${#striptracks_result} bytes." | log [ $striptracks_debug -ge 3 ] && echo "API returned: $striptracks_result" | awk '{print "Debug|"$0}' | log if [ $striptracks_curlret -eq 0 -a "$(echo $striptracks_result | jq -crM '.message?')" != "NotFound" ]; then local striptracks_return=0 @@ -484,7 +480,10 @@ function get_profiles { } # Get language codes function get_language_codes { - local url="$striptracks_api_url/${striptracks_language_api}" + local url="$striptracks_api_url/language" + if check_compat languageprofile; then + local url="$striptracks_api_url/languageprofile" + fi [ $striptracks_debug -ge 1 ] && echo "Debug|Getting list of language codes. Calling ${striptracks_type^} API using GET and URL '$url'" | log unset striptracks_result striptracks_result=$(curl -s --fail-with-body -H "X-Api-Key: $striptracks_apikey" \ @@ -496,6 +495,32 @@ function get_language_codes { echo "$striptracks_message" | log echo "$striptracks_message" >&2 } + # This returns more data than is normally needed for debugging + [ $striptracks_debug -ge 2 ] && echo "Debug|API returned ${#striptracks_result} bytes." | log + [ $striptracks_debug -ge 3 ] && echo "API returned: $striptracks_result" | awk '{print "Debug|"$0}' | log + if [ $striptracks_curlret -eq 0 -a "$(echo $striptracks_result | jq -crM '.[] | .name')" != "null" ]; then + local striptracks_return=0 + else + local striptracks_return=1 + fi + return $striptracks_return +} +# Get custom formats +function get_custom_formats { + local url="$striptracks_api_url/customformat" + [ $striptracks_debug -ge 1 ] && echo "Debug|Getting list of Custom Formats. Calling ${striptracks_type^} API using GET and URL '$url'" | log + unset striptracks_result + striptracks_result=$(curl -s --fail-with-body -H "X-Api-Key: $striptracks_apikey" \ + -H "Content-Type: application/json" \ + -H "Accept: application/json" \ + --get "$url") + local striptracks_curlret=$?; [ $striptracks_curlret -ne 0 ] && { + local striptracks_message=$(echo -e "[$striptracks_curlret] curl error when calling: \"$url\"\nWeb server returned: $(echo $striptracks_result | jq -jcrM .message?)" | awk '{print "Error|"$0}') + echo "$striptracks_message" | log + echo "$striptracks_message" >&2 + } + # This returns more data than is normally needed for debugging + [ $striptracks_debug -ge 2 ] && echo "Debug|API returned ${#striptracks_result} bytes." | log [ $striptracks_debug -ge 3 ] && echo "API returned: $striptracks_result" | awk '{print "Debug|"$0}' | log if [ $striptracks_curlret -eq 0 -a "$(echo $striptracks_result | jq -crM '.[] | .name')" != "null" ]; then local striptracks_return=0 @@ -508,7 +533,7 @@ function get_language_codes { function delete_video { local url="$striptracks_api_url/$striptracks_videofile_api/$1" local i=0 - for ((i=1; i <= 2; i++)); do + for ((i=1; i <= 5; i++)); do [ $striptracks_debug -ge 1 ] && echo "Debug|Deleting or recycling \"$striptracks_video\". Calling ${striptracks_type^} API using DELETE and URL '$url'" | log unset striptracks_result striptracks_result=$(curl -s --fail-with-body -H "X-Api-Key: $striptracks_apikey" \ @@ -525,7 +550,7 @@ function delete_video { if [[ ! "$(echo $striptracks_result | jq -jcrM .message?)" =~ database\ is\ locked ]]; then break else - [ $striptracks_debug -ge 1 ] && echo "Debug|Database is locked. Waiting 1 minute." | log + echo "Warn|Database is locked; system is likely overloaded. Sleeping 1 minute." | log sleep 60 fi done @@ -557,6 +582,7 @@ function delete_video { # echo "$striptracks_message" | log # echo "$striptracks_message" >&2 # } + # [ $striptracks_debug -ge 2 ] && echo "Debug|API returned ${#striptracks_result} bytes." | log # [ $striptracks_debug -ge 3 ] && echo "API returned: $striptracks_result" | awk '{print "Debug|"$0}' | log # if [ $striptracks_curlret -eq 0 -a "${#striptracks_result}" != 0 ]; then # local striptracks_return=0 @@ -570,7 +596,7 @@ function set_metadata { local url="$striptracks_api_url/$striptracks_videofile_api/editor" local data="$(echo $striptracks_original_metadata | jq -crM "{${striptracks_videofile_api}Ids: [${striptracks_videofile_id}], quality, releaseGroup}")" local i=0 - for ((i=1; i <= 2; i++)); do + for ((i=1; i <= 5; i++)); do [ $striptracks_debug -ge 1 ] && echo "Debug|Updating from quality '$(echo $striptracks_videofile_info | jq -crM .quality.quality.name)' to '$(echo $striptracks_original_metadata | jq -crM .quality.quality.name)' and release group '$(echo $striptracks_videofile_info | jq -crM '.releaseGroup | select(. != null)')' to '$(echo $striptracks_original_metadata | jq -crM '.releaseGroup | select(. != null)')'. Calling ${striptracks_type^} API using PUT and URL '$url' with data $data" | log unset striptracks_result striptracks_result=$(curl -s --fail-with-body -H "X-Api-Key: $striptracks_apikey" \ @@ -583,12 +609,13 @@ function set_metadata { echo "$striptracks_message" | log echo "$striptracks_message" >&2 } + [ $striptracks_debug -ge 2 ] && echo "Debug|API returned ${#striptracks_result} bytes." | log [ $striptracks_debug -ge 3 ] && echo "API returned: $striptracks_result" | awk '{print "Debug|"$0}' | log # Exit loop if database is not locked, else wait 1 minute if [[ ! "$(echo $striptracks_result | jq -jcrM .message?)" =~ database\ is\ locked ]]; then break else - [ $striptracks_debug -ge 1 ] && echo "Debug|Database is locked. Waiting 1 minute." | log + echo "Warn|Database is locked; system is likely overloaded. Sleeping 1 minute." | log sleep 60 fi done @@ -697,7 +724,7 @@ function set_radarr_language { local data="{\"${striptracks_videofile_api}Ids\":[${striptracks_videofile_id}],\"languages\":${striptracks_json_languages}}" [ $striptracks_debug -ge 1 ] && echo "Debug|Updating from language(s) '$(echo $striptracks_videofile_info | jq -crM "[.languages[].name] | join(\",\")")' to '$(echo $striptracks_json_languages | jq -crM "[.[].name] | join(\",\")")'. Calling ${striptracks_type^} API using PUT and URL '$url' with data $data" | log unset striptracks_result - striptracks_result=$(curl -s -H "X-Api-Key: $striptracks_apikey" \ + striptracks_result=$(curl -s --fail-with-body -H "X-Api-Key: $striptracks_apikey" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d "$data" \ @@ -721,7 +748,7 @@ function set_sonarr_language { local data="{\"${striptracks_videofile_api}Ids\":[${striptracks_videofile_id}],\"language\":$(echo $striptracks_json_languages | jq -crM ".[0]")}" [ $striptracks_debug -ge 1 ] && echo "Debug|Updating from language '$(echo $striptracks_videofile_info | jq -crM ".language.name")' to '$(echo $striptracks_json_languages | jq -crM ".[0].name")'. Calling ${striptracks_type^} API using PUT and URL '$url' with data $data" | log unset striptracks_result - striptracks_result=$(curl -s -H "X-Api-Key: $striptracks_apikey" \ + striptracks_result=$(curl -s --fail-with-body -H "X-Api-Key: $striptracks_apikey" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -d "$data" \ @@ -739,6 +766,34 @@ function set_sonarr_language { fi return $striptracks_return } +# Compatibility checker +function check_compat { + # return of 1 = the feature is incompatible + local striptracks_return=1 + case "$1" in + apiv3) + [ ${striptracks_arr_version/.*/} -ge 3 ] && local striptracks_return=0 + ;; + languageprofile) + [ "${striptracks_type,,}" = "sonarr" ] && [ ${striptracks_arr_version/.*/} -eq 3 ] && local striptracks_return=0 + ;; + customformat) + [ "${striptracks_type,,}" = "radarr" ] && [ ${striptracks_arr_version/.*/} -ge 3 ] && local striptracks_return=0 + [ "${striptracks_type,,}" = "sonarr" ] && [ ${striptracks_arr_version/.*/} -ge 4 ] && local striptracks_return=0 + ;; + originallanguage) + [ "${striptracks_type,,}" = "radarr" ] && [ ${striptracks_arr_version/.*/} -ge 3 ] && local striptracks_return=0 + [ "${striptracks_type,,}" = "sonarr" ] && [ ${striptracks_arr_version/.*/} -ge 4 ] && local striptracks_return=0 + ;; + *) # Unknown feature + local striptracks_message="Error|Unknown feature $1 in ${striptracks_type^}" + echo "$striptracks_message" | log + echo "$striptracks_message" >&2 + ;; + esac + [ $striptracks_debug -ge 1 ] && echo "Debug|Feature $1 is $([ $striptracks_return -eq 1 ] && echo "not ")compatible with ${striptracks_type^} v${striptracks_arr_version}." | log + return $striptracks_return +} # Exit program function end_script { # Cool bash feature @@ -785,7 +840,7 @@ fi # Log Debug state if [ $striptracks_debug -ge 1 ]; then - striptracks_message="Debug|Enabling debug logging level ${striptracks_debug}. Starting ${striptracks_type^} run for: $striptracks_title" + striptracks_message="Debug|Enabling debug logging level ${striptracks_debug}. Starting run for: $striptracks_title" echo "$striptracks_message" | log echo "$striptracks_message" >&2 fi @@ -802,6 +857,12 @@ if [[ "${!striptracks_eventtype}" = "Test" ]]; then end_script 0 fi +# First normal log entry (when there are no errors) +# shellcheck disable=SC2046 +striptracks_filesize=$(stat -c %s "${striptracks_video}" | numfmt --to iec --format "%.3f") +striptracks_message="Info|${striptracks_type^} event: ${!striptracks_eventtype}, Video: $striptracks_video, Size: $striptracks_filesize" +echo "$striptracks_message" | log + # Log Batch mode if [ "$striptracks_type" = "batch" ]; then [ $striptracks_debug -ge 1 ] && echo "Debug|Switching to batch mode. Input filename: ${striptracks_video}" | log @@ -823,18 +884,27 @@ elif [ -f "$striptracks_arr_config" ]; then # Check for localhost [[ $striptracks_bindaddress = "*" ]] && striptracks_bindaddress=localhost + # Strip leading and trailing forward slashes from URL base + striptracks_urlbase="$(echo "$striptracks_urlbase" | sed -re 's/^\/+//; s/\/+$//')" + # Build URL to Radarr/Sonarr API striptracks_api_url="http://$striptracks_bindaddress:$striptracks_port${striptracks_urlbase:+/$striptracks_urlbase}/api/v3" # Check Radarr/Sonarr version - if get_version; then - striptracks_arr_version="$(echo $striptracks_result | jq -crM .version)" - [ $striptracks_debug -ge 1 ] && echo "Debug|Detected ${striptracks_type^} version $striptracks_arr_version" | log - fi + get_version + striptracks_return=$?; [ $striptracks_return -ne 0 ] && { + # curl errored out. API calls are really broken at this point. + striptracks_message="Error|Unable to get ${striptracks_type^} version information. It is not safe to continue." + echo "$striptracks_message" | log + echo "$striptracks_message" >&2 + end_script 17 + } + striptracks_arr_version="$(echo $striptracks_result | jq -crM .version)" + [ $striptracks_debug -ge 1 ] && echo "Debug|Detected ${striptracks_type^} version $striptracks_arr_version" | log # Requires API v3 - if [ "${striptracks_arr_version/.*/}" = "2" ]; then - # Radarr/Sonarr version 2 + if ! check_compat apiv3; then + # Radarr/Sonarr version 3 required striptracks_message="Error|This script does not support ${striptracks_type^} version ${striptracks_arr_version}. Please upgrade." echo "$striptracks_message" | log echo "$striptracks_message" >&2 @@ -876,75 +946,156 @@ if [ "$striptracks_type" = "batch" ]; then [ $striptracks_debug -ge 1 ] && echo "Debug|Cannot detect languages in batch mode." | log # Check for URL elif [ -n "$striptracks_api_url" ]; then - # Get language codes + # Get list of all language IDs if get_language_codes; then striptracks_lang_codes="$striptracks_result" - # Fix for Sonarr code formatting - if [ "${striptracks_type,,}" = "sonarr" ]; then - striptracks_lang_codes="$(echo $striptracks_lang_codes | jq -crM '[.[0].languages[].language]')" - fi - # Get quality/language profile info - if get_profiles; then - striptracks_profiles="$striptracks_result" - # Get video profile - if get_video_info; then - # This is not necessary, as this is normally set in the environment. However, this is needed for testing. - striptracks_videofile_id="$(echo $striptracks_result | jq -crM .${striptracks_json_quality_root}.id)" - # Get language name(s) from video profile ID - striptracks_profileId="$(echo $striptracks_result | jq -crM $striptracks_profile_jq)" - striptracks_languages="$(echo $striptracks_profiles | jq -cM "[.[] | select(.id == $striptracks_profileId) | $striptracks_language_jq]")" - striptracks_profileName="$(echo $striptracks_profiles | jq -crM ".[] | select(.id == $striptracks_profileId).name")" - striptracks_proflangNames="$(echo $striptracks_languages | jq -crM '[.[].name]')" - # Get originalLanguage of video from Radarr (returns null for Sonarr) - striptracks_orglangName="$(echo $striptracks_result | jq -crM .originalLanguage.name)" - # Get video file info. Needed to save the original quality. - get_videofile_info - striptracks_return=$?; [ $striptracks_return -ne 0 ] && { - # No '.path' in returned JSON - striptracks_message="Warn|The '$striptracks_videofile_api' API with id $striptracks_videofile_id returned no path." + + # Get video profile + if get_video_info; then + striptracks_videoinfo="$striptracks_result" + # This is not strictly necessary as this is normally set in the environment. However, this is needed for testing scripts and it doesn't hurt to use the data returned by the API call. + striptracks_videofile_id="$(echo $striptracks_videoinfo | jq -crM .${striptracks_json_quality_root}.id)" + + # Get video file info. Needed to save the original quality, release group, and custom formats + if get_videofile_info; then + striptracks_videofile_info="$striptracks_result" + + # Get quality profile info + if get_profiles quality; then + striptracks_qualityProfiles="$striptracks_result" + + # Save original metadata + striptracks_original_metadata="$(echo $striptracks_videofile_info | jq -crM '{quality, releaseGroup}')" + [ $striptracks_debug -ge 1 ] && echo "Debug|Detected video file quality '$(echo $striptracks_original_metadata | jq -crM .quality.quality.name)' and release group '$(echo $striptracks_original_metadata | jq -crM '.releaseGroup | select(. != null)')'" | log + + # Get language name(s) from quality profile used by video + striptracks_profileId="$(echo $striptracks_videoinfo | jq -crM ${striptracks_video_rootNode}.qualityProfileId)" + striptracks_profileName="$(echo $striptracks_qualityProfiles | jq -crM ".[] | select(.id == $striptracks_profileId).name")" + striptracks_profileLanguages="$(echo $striptracks_qualityProfiles | jq -cM "[.[] | select(.id == $striptracks_profileId) | .language]")" + striptracks_languageSource="quality profile" + [ $striptracks_debug -ge 1 ] && echo "Debug|Detected quality profile '(${striptracks_profileId}) ${striptracks_profileName}' with language '$(echo $striptracks_profileLanguages | jq -crM '[.[] | "(\(.id | tostring)) \(.name)"] | join(",")')'" | log + + # Query custom formats if returned language from quality profile is null or -1 (Any) + if [ -z "$striptracks_profileLanguages" -o "$striptracks_profileLanguages" = "[null]" -o "$(echo $striptracks_profileLanguages | jq -crM '.[].id')" = "-1" ] && check_compat customformat; then + [ $striptracks_debug -ge 1 -a "$(echo $striptracks_profileLanguages | jq -crM '.[].id')" = "-1" ] && echo "Debug|Language selection of 'Any' in quality profile. Deferring to Custom Format language selection if it exists." | log + # Get list of Custom Formats, and hopefully languages + get_custom_formats + striptracks_customFormats="$striptracks_result" + [ $striptracks_debug -ge 1 ] && echo "Debug|Processing custom format(s) '$(echo "$striptracks_customFormats" | jq -crM '[.[] | select(.specifications[].implementation == "LanguageSpecification") | .name] | unique | join(",")')'" | log + + # Pick our languages by combining data from quality profile and custom format configuration. + # I'm open to suggestions if there's a better way to get this list or selected languages. + # Did I mention that JQ is crazy hard? + striptracks_qcf_langcodes=$(echo "$striptracks_qualityProfiles $striptracks_customFormats" | jq -s -crM " + [ + # This combines the custom formats [1] with the quality profiles [0], iterating over custom formats that + # specify languages and evaluating the scoring from the selected quality profile. + ( + .[1] | .[] | + {id, specs: [.specifications[] | select(.implementation == \"LanguageSpecification\") | {langCode: .fields[].value, negate}]} + ) as \$cf | + .[0] | .[] | + select(.id == $striptracks_profileId) | .formatItems[] | select(.format == \$cf.id) | + {format, name, score, specs: \$cf.specs} + ] | + [ + # Only count languages with positive scores plus languages with negative scores that are negated. + .[] | + (select(.score > 0) | .specs[] | select(.negate == false)), (select(.score < 0) | .specs[] | select(.negate == true)) | + .langCode + ] | + unique | + join(\",\") + ") + [ $striptracks_debug -ge 2 ] && echo "Debug|Custom format language code(s) '$striptracks_qcf_langcodes' were selected based on quality profile scores." | log + + if [ -n "$striptracks_qcf_langcodes" ]; then + # Convert the language codes into language code/name pairs + striptracks_profileLanguages="$(echo $striptracks_lang_codes | jq -crM "map(select(.id | inside($striptracks_qcf_langcodes)) | {id, name})")" + striptracks_languageSource="custom format" + [ $striptracks_debug -ge 1 ] && echo "Debug|Detected custom format language(s) '$(echo $striptracks_profileLanguages | jq -crM '[.[] | "(\(.id | tostring)) \(.name)"] | join(",")')'" | log + else + [ $striptracks_debug -ge 1 ] && echo "Debug|None of the applied custom formats have language conditions with usable scores." | log + fi + fi + + # Check if the languageprofile API is supported (only in legacy Sonarr; but it was *way* better than Custom Formats ) + if [ -z "$striptracks_profileLanguages" -o "$striptracks_profileLanguages" = "[null]" ] && check_compat languageprofile; then + [ $striptracks_debug -ge 1 ] && echo "Debug|No language found in quality profile or in custom formats. This is normal in legacy versions of Sonarr." | log + if get_profiles language; then + striptracks_languageProfiles="$striptracks_result" + + # Get language name(s) from language profile used by video + striptracks_profileId="$(echo $striptracks_videoinfo | jq -crM .series.languageProfileId)" + striptracks_profileName="$(echo $striptracks_languageProfiles | jq -crM ".[] | select(.id == $striptracks_profileId).name")" + striptracks_profileLanguages="$(echo $striptracks_languageProfiles | jq -cM "[.[] | select(.id == $striptracks_profileId) | .languages[] | select(.allowed).language]")" + striptracks_languageSource="language profile" + [ $striptracks_debug -ge 1 ] && echo "Debug|Detected language profile '(${striptracks_profileId}) ${striptracks_profileName}' with language(s) '$(echo $striptracks_profileLanguages | jq -crM '[.[].name] | join(",")')'" | log + else + # languageProfile API failed + striptracks_message="Warn|The 'languageprofile' API returned an error." + echo "$striptracks_message" | log + echo "$striptracks_message" >&2 + striptracks_exitstatus=17 + fi + fi + + # Check if after all of the above we still couldn't get any languages + if [ -z "$striptracks_profileLanguages" -o "$striptracks_profileLanguages" = "[null]" ]; then + striptracks_message="Warn|No languages found in any profile or custom format. Unable to use automatic language detection." + echo "$striptracks_message" | log + echo "$striptracks_message" >&2 + striptracks_exitstatus=20 + else + # Final determination of configured languages in profiles or custom formats + striptracks_profileLangNames="$(echo $striptracks_profileLanguages | jq -crM '[.[].name]')" + [ $striptracks_debug -ge 1 ] && echo "Debug|Determined ${striptracks_type^} configured language(s) of '$(echo $striptracks_profileLanguages | jq -crM '[.[] | "(\(.id | tostring)) \(.name)"] | join(",")')' from $striptracks_languageSource" | log + fi + + # Get originalLanguage of video + if check_compat originallanguage; then + striptracks_originalLangName="$(echo $striptracks_videoinfo | jq -crM ${striptracks_video_rootNode}.originalLanguage.name)" + + # shellcheck disable=SC2090 + striptracks_originalLangCode="$(echo $striptracks_isocodemap | jq -jcrM ".languages[] | select(.language.name == \"$striptracks_originalLangName\") | .language | \":\(.\"iso639-2\"[])\"")" + [ $striptracks_debug -ge 1 ] && echo "Debug|Detected original video language of '$striptracks_originalLangName ($striptracks_originalLangCode)' from $striptracks_video_type '$striptracks_rescan_id'" | log + fi + + # Map language names to ISO code(s) used by mkvmerge + unset striptracks_profileLangCodes + for striptracks_templang in $(echo $striptracks_profileLangNames | jq -crM '.[]'); do + # Convert 'Original' language selection to specific video language + if [ "$striptracks_templang" = "Original" ]; then + striptracks_templang="$striptracks_originalLangName" + fi + # shellcheck disable=SC2090 + striptracks_profileLangCodes+="$(echo $striptracks_isocodemap | jq -jcrM ".languages[] | select(.language.name == \"$striptracks_templang\") | .language | \":\(.\"iso639-2\"[])\"")" + done + [ $striptracks_debug -ge 1 ] && echo "Debug|Mapped $striptracks_languageSource language(s) '$(echo $striptracks_profileLangNames | jq -crM "join(\",\")")' to ISO639-2 code list '$striptracks_profileLangCodes'" | log + else + # Get qualityprofile API failed + striptracks_message="Warn|Unable to retrieve quality profiles from ${striptracks_type^} API" echo "$striptracks_message" | log echo "$striptracks_message" >&2 - striptracks_exitstatus=20 - } - # Save original metadata - striptracks_original_metadata="$(echo $striptracks_result | jq -crM '{quality, releaseGroup}')" - [ $striptracks_debug -ge 1 ] && echo "Debug|Detected quality '$(echo $striptracks_original_metadata | jq -crM .quality.quality.name)'" | log - [ $striptracks_debug -ge 1 ] && echo "Debug|Detected release group '$(echo $striptracks_original_metadata | jq -crM '.releaseGroup | select(. != null)')'" | log - [ $striptracks_debug -ge 1 ] && echo "Debug|Detected $striptracks_profile_type profile '(${striptracks_profileId}) ${striptracks_profileName}'" | log - [ $striptracks_debug -ge 1 ] && echo "Debug|Detected $striptracks_profile_type profile language(s) '$(echo $striptracks_languages | jq -crM '[.[] | "(\(.id | tostring)) \(.name)"] | join(",")')'" | log - if [ -n "$striptracks_orglangName" -a "$striptracks_orglangName" != "null" ]; then - # shellcheck disable=SC2090 - striptracks_orglangCode="$(echo $striptracks_isocodemap | jq -jcrM ".languages[] | select(.language.name == \"$striptracks_orglangName\") | .language | \":\(.\"iso639-2\"[])\"")" - [ $striptracks_debug -ge 1 ] && echo "Debug|Detected original video language of '$striptracks_orglangName ($striptracks_orglangCode)' from $striptracks_video_type '$striptracks_rescan_id'" | log + striptracks_exitstatus=17 fi - # Map language names to ISO code(s) used by mkvmerge - unset striptracks_proflangCodes - for striptracks_templang in $(echo $striptracks_proflangNames | jq -crM '.[]'); do - # Convert 'Original' profile selection to specific video language (Radarr only) - if [[ "$striptracks_templang" = "Original" ]]; then - striptracks_templang="$striptracks_orglangName" - fi - # shellcheck disable=SC2090 - striptracks_proflangCodes+="$(echo $striptracks_isocodemap | jq -jcrM ".languages[] | select(.language.name == \"$striptracks_templang\") | .language | \":\(.\"iso639-2\"[])\"")" - done - [ $striptracks_debug -ge 1 ] && echo "Debug|Mapped profile language(s) '$(echo $striptracks_proflangNames | jq -crM "join(\",\")")' to ISO639-2 code string '$striptracks_proflangCodes'" | log else - # 'hasFile' is False in returned JSON. - striptracks_message="Warn|The '$striptracks_video_api' API with id $striptracks_video_id returned a false hasFile." + # No '.path' in returned JSON + striptracks_message="Warn|The '$striptracks_videofile_api' API with id $striptracks_videofile_id returned no path." echo "$striptracks_message" | log echo "$striptracks_message" >&2 - striptracks_exitstatus=17 + striptracks_exitstatus=20 fi else - # Get Profiles API failed - striptracks_message="Warn|Unable to retrieve $striptracks_profile_type profiles from ${striptracks_type^} API" + # 'hasFile' is False in returned JSON. + striptracks_message="Warn|Could not find a video file for $striptracks_video_api id '$striptracks_video_id'" echo "$striptracks_message" | log echo "$striptracks_message" >&2 striptracks_exitstatus=17 fi else # Get language codes API failed - striptracks_message="Warn|Unable to retrieve language codes from '$striptracks_language_api' API (curl error or returned a null name)." + striptracks_message="Warn|Unable to retrieve language codes from 'language' API (curl error or returned a null name)." echo "$striptracks_message" | log echo "$striptracks_message" >&2 striptracks_exitstatus=17 @@ -957,29 +1108,29 @@ else striptracks_exitstatus=20 fi -# Special handling for ':org' code from command line. This is only valid in Radarr! +# Special handling for ':org' code from command line. if [[ "$striptracks_audiokeep" =~ :org ]]; then - [ $striptracks_debug -ge 1 ] && echo "Debug|Command line ':org' code specified for audio. Changing '${striptracks_audiokeep}' to '${striptracks_audiokeep//:org/${striptracks_orglangCode}}'" | log - striptracks_audiokeep="${striptracks_audiokeep//:org/${striptracks_orglangCode}}" - if [ "${striptracks_type,,}" = "sonarr" -o "${striptracks_type,,}" = "batch" ]; then - striptracks_message="Warn|:org code specified for audio, but this is undefined for Sonarr and Batch mode! Unexpected behavior may result." + [ $striptracks_debug -ge 1 ] && echo "Debug|Command line ':org' code specified for audio. Changing '${striptracks_audiokeep}' to '${striptracks_audiokeep//:org/${striptracks_originalLangCode}}'" | log + striptracks_audiokeep="${striptracks_audiokeep//:org/${striptracks_originalLangCode}}" + if ! check_compat originallanguage; then + striptracks_message="Warn|:org code specified for audio, but this is undefined and not compatible with this mode/version! Unexpected behavior may result." echo "$striptracks_message" | log echo "$striptracks_message" >&2 fi fi if [[ "$striptracks_subskeep" =~ :org ]]; then - [ $striptracks_debug -ge 1 ] && echo "Debug|Command line ':org' specified for subtitles. Changing '${striptracks_subskeep}' to '${striptracks_subskeep//:org/${striptracks_orglangCode}}'" | log - striptracks_subskeep="${striptracks_subskeep//:org/${striptracks_orglangCode}}" - if [ "${striptracks_type,,}" = "sonarr" -o "${striptracks_type,,}" = "batch" ]; then - striptracks_message="Warn|:org code specified for subtitles, but this is undefined for Sonarr and Batch mode! Unexpected behavior may result." + [ $striptracks_debug -ge 1 ] && echo "Debug|Command line ':org' specified for subtitles. Changing '${striptracks_subskeep}' to '${striptracks_subskeep//:org/${striptracks_originalLangCode}}'" | log + striptracks_subskeep="${striptracks_subskeep//:org/${striptracks_originalLangCode}}" + if [ "${striptracks_type,,}" = "batch" ]; then + striptracks_message="Warn|:org code specified for subtitles, but this is undefined for Batch mode! Unexpected behavior may result." echo "$striptracks_message" | log echo "$striptracks_message" >&2 fi fi -# Final assignment of audio and subtitles options +# Final assignment of audio and subtitles selection ## Guard clause -if [ -z "$striptracks_audiokeep" -a -z "$striptracks_proflangCodes" ]; then +if [ -z "$striptracks_audiokeep" -a -z "$striptracks_profileLangCodes" ]; then striptracks_message="Error|No audio languages specified or detected!" echo "$striptracks_message" | log echo "$striptracks_message" >&2 @@ -987,27 +1138,32 @@ if [ -z "$striptracks_audiokeep" -a -z "$striptracks_proflangCodes" ]; then end_script 2 fi ## Allows command line argument to override detected languages -if [ -z "$striptracks_audiokeep" -a -n "$striptracks_proflangCodes" ]; then - striptracks_audiokeep="$striptracks_proflangCodes" +if [ -z "$striptracks_audiokeep" -a -n "$striptracks_profileLangCodes" ]; then + [ $striptracks_debug -ge 1 ] && echo "Debug|No command line audio languages specified. Using code list '$striptracks_profileLangCodes'" | log + striptracks_audiokeep="$striptracks_profileLangCodes" +else + [ $striptracks_debug -ge 1 ] && echo "Debug|Using command line audio languages '$striptracks_audiokeep'" | log fi ## Guard clause -if [ -z "$striptracks_subskeep" -a -z "$striptracks_proflangCodes" ]; then +if [ -z "$striptracks_subskeep" -a -z "$striptracks_profileLangCodes" ]; then striptracks_message="Info|No subtitles languages specified or detected. Removing all subtitles found." echo "$striptracks_message" | log striptracks_subskeep="null" fi ## Allows command line argument to override detected languages -if [ -z "$striptracks_subskeep" -a -n "$striptracks_proflangCodes" ]; then - striptracks_subskeep="$striptracks_proflangCodes" +if [ -z "$striptracks_subskeep" -a -n "$striptracks_profileLangCodes" ]; then + [ $striptracks_debug -ge 1 ] && echo "Debug|No command line subtitle languages specified. Using code list '$striptracks_profileLangCodes'" | log + striptracks_subskeep="$striptracks_profileLangCodes" +else + [ $striptracks_debug -ge 1 ] && echo "Debug|Using command line subtitle languages '$striptracks_subskeep'" | log fi -#### BEGIN MAIN -# shellcheck disable=SC2046 -striptracks_filesize=$(stat -c %s "${striptracks_video}" | numfmt --to iec --format "%.3f") -striptracks_message="Info|${striptracks_type^} event: ${!striptracks_eventtype}, Video: $striptracks_video, Size: $striptracks_filesize, AudioKeep: $striptracks_audiokeep, SubsKeep: $striptracks_subskeep" +# Display what we're doing +striptracks_message="Info|Keeping audio tracks with codes '$(echo $striptracks_audiokeep | sed -e 's/^://; s/:/,/g')' and subtitle tracks with codes '$(echo $striptracks_subskeep | sed -e 's/^://; s/:/,/g')'" echo "$striptracks_message" | log +#### BEGIN MAIN # Read in the output of mkvmerge info extraction if get_mediainfo "$striptracks_video"; then # This and the modified AWK script are a hack, and I know it. JQ is crazy hard to learn, BTW. @@ -1100,7 +1256,7 @@ END { print "Info|Original tracks: "NoTr" (audio: "AudCnt", subtitles: "SubsCnt")" if (Chapters) print "Info|Chapters: "Chapters for (i = 1; i <= NoTr; i++) { - if (Debug >= 2) print "Debug|i:"i,"Track ID:"Track[i,"id"],"Type:"Track[i,"typ"],"Lang:"Track[i, "lang"],"Codec:"Track[i, "codec"] + if (Debug >= 2) print "Debug|Parsed: Track ID:"Track[i,"id"],"Type:"Track[i,"typ"],"Lang:"Track[i, "lang"],"Codec:"Track[i, "codec"] if (Track[i, "typ"] == "audio") { # Keep track if it matches command line selection, or if it is matches pseudo code ":any" if (AudioKeep ~ Track[i, "lang"] || AudioKeep ~ ":any") { @@ -1222,7 +1378,7 @@ if [ ! -f "$striptracks_tempvideo" ]; then fi # Rename the temporary video file to MKV -[ $striptracks_debug -ge 1 ] && echo "Debug|Renaming: \"$striptracks_tempvideo\" to \"$striptracks_newvideo\"" | log +[ $striptracks_debug -ge 1 ] && echo "Debug|Renaming \"$striptracks_tempvideo\" to \"$striptracks_newvideo\"" | log mv -f "$striptracks_tempvideo" "$striptracks_newvideo" 2>&1 | log striptracks_return=$?; [ $striptracks_return -ne 0 ] && { striptracks_message="Error|[$striptracks_return] Unable to rename temp video: \"$striptracks_tempvideo\" to: \"$striptracks_newvideo\". Halting." @@ -1295,43 +1451,50 @@ elif [ -n "$striptracks_api_url" ]; then # Get new video file id if get_video_info; then striptracks_videofile_id="$(echo $striptracks_result | jq -crM .${striptracks_json_quality_root}.id)" - [ $striptracks_debug -ge 1 ] && echo "Debug|Set new video file id '$striptracks_videofile_id'." | log + [ $striptracks_debug -ge 1 ] && echo "Debug|Using new video file id '$striptracks_videofile_id'" | log # Get new video file info if get_videofile_info; then striptracks_videofile_info="$striptracks_result" - # Check that the file didn't get lost in the Rescan. - # TODO: In Radarr, losing customFormats and customFormatScore - # Put back the missing metadata - set_metadata - # Check that the returned result shows the updates - if [ "$(echo $striptracks_result | jq -crM .[].quality.quality.name)" = "$(echo $striptracks_original_metadata | jq -crM .quality.quality.name)" ]; then - # Updated successfully - [ $striptracks_debug -ge 1 ] && echo "Debug|Successfully updated quality to '$(echo $striptracks_result | jq -crM .[].quality.quality.name)'." | log - [ $striptracks_debug -ge 1 ] && echo "Debug|Successfully updated release group to '$(echo $striptracks_result | jq -crM '.[].releaseGroup | select(. != null)')'." | log + # Check that the metadata didn't get lost in the rescan. + if [ "$(echo $striptracks_videofile_info | jq -crM .quality.quality.name)" != "$(echo $striptracks_original_metadata | jq -crM .quality.quality.name)" -o "$(echo $striptracks_videofile_info | jq -crM '.releaseGroup | select(. != null)')" != "$(echo $striptracks_original_metadata | jq -crM '.releaseGroup | select(. != null)')" ]; then + # Put back the missing metadata + set_metadata + # Check that the returned result shows the updates + if [ "$(echo $striptracks_result | jq -crM .[].quality.quality.name)" = "$(echo $striptracks_original_metadata | jq -crM .quality.quality.name)" ]; then + # Updated successfully + echo "Info|Successfully updated quality to '$(echo $striptracks_result | jq -crM .[].quality.quality.name)' and release group to '$(echo $striptracks_result | jq -crM '.[].releaseGroup | select(. != null)')'" | log + else + striptracks_message="Warn|Unable to update ${striptracks_type^} $striptracks_video_api '$striptracks_title' to quality '$(echo $striptracks_original_metadata | jq -crM .quality.quality.name)' or release group to '$(echo $striptracks_original_metadata | jq -crM '.releaseGroup | select(. != null)')'" + echo "$striptracks_message" | log + echo "$striptracks_message" >&2 + striptracks_exitstatus=17 + fi else - striptracks_message="Warn|Unable to update ${striptracks_type^} $striptracks_video_api '$striptracks_title' to quality '$(echo $striptracks_original_metadata | jq -crM .quality.quality.name)' or release group to '$(echo $striptracks_original_metadata | jq -crM '.releaseGroup | select(. != null)')'" - echo "$striptracks_message" | log - echo "$striptracks_message" >&2 - striptracks_exitstatus=17 + # The metadata was already set correctly + [ $striptracks_debug -ge 1 ] && echo "Debug|Metadata quality '$(echo $striptracks_videofile_info | jq -crM .quality.quality.name)' and release group '$(echo $striptracks_videofile_info | jq -crM '.releaseGroup | select(. != null)')' remained unchanged." | log fi # Check the languages returned - # If we stripped out other languages, remove them from Radarr - # Only works in Radarr (no per-episode edit function in Sonarr) + # If we stripped out other languages, remove them + # Only works in Radarr and Sonarr v4 (no per-episode edit function in Sonarr v3) + [ $striptracks_debug -ge 1 ] && echo "Debug|Getting languages in new video file \"$striptracks_newvideo\"" | log if get_mediainfo "$striptracks_newvideo"; then # Build array of full name languages striptracks_newvideo_langcodes="$(echo $striptracks_json | jq -crM '.tracks[] | select(.type == "audio") | .properties.language')" unset striptracks_newvideo_languages for i in $striptracks_newvideo_langcodes; do # shellcheck disable=SC2090 - striptracks_newvideo_languages+="$(echo $striptracks_isocodemap | jq -crM ".languages[] | .language | select((.\"iso639-2\"[]) == \"$i\") | select(.name != \"Any\" and .name != \"Original\").name")" + # Exclude Any, Original, and Unknown + striptracks_newvideo_languages+="$(echo $striptracks_isocodemap | jq -crM ".languages[] | .language | select((.\"iso639-2\"[]) == \"$i\") | select(.name != \"Any\" and .name != \"Original\" and .name != \"Unknown\").name")" done if [ -n "$striptracks_newvideo_languages" ]; then # Covert to standard JSON striptracks_json_languages="$(echo $striptracks_lang_codes | jq -crM "map(select(.name | inside(\"$striptracks_newvideo_languages\")) | {id, name})")" - # Check languages for Radarr + + # Check languages for Radarr and Sonarr v4 + # Sooooo glad I did it this way if [ "$(echo $striptracks_videofile_info | jq -crM .languages)" != "null" ]; then - if [ "$(echo $striptracks_videofile_info | jq -crM ".languages")" != "$striptracks_json_languages" ]; then + if [ "$(echo $striptracks_videofile_info | jq -crM .languages)" != "$striptracks_json_languages" ]; then if set_radarr_language; then striptracks_exitstatus=0 else @@ -1344,9 +1507,9 @@ elif [ -n "$striptracks_api_url" ]; then # The languages are already correct [ $striptracks_debug -ge 1 ] && echo "Debug|Language(s) '$(echo $striptracks_json_languages | jq -crM "[.[].name] | join(\",\")")' remained unchanged." | log fi - # Check languages for Sonarr + # Check languages for Sonarr v3 and earlier elif [ "$(echo $striptracks_videofile_info | jq -crM .language)" != "null" ]; then - if [ "$(echo $striptracks_videofile_info | jq -crM ".language")" != "$(echo $striptracks_json_languages | jq -crM ".[0]")" ]; then + if [ "$(echo $striptracks_videofile_info | jq -crM .language)" != "$(echo $striptracks_json_languages | jq -crM '.[0]')" ]; then if set_sonarr_language; then striptracks_exitstatus=0 else @@ -1366,6 +1529,9 @@ elif [ -n "$striptracks_api_url" ]; then echo "$striptracks_message" >&2 striptracks_exitstatus=20 fi + elif [ "$striptracks_newvideo_langcodes" = "und" ]; then + # Only language detected is Unknown + echo "Warn|The only language in the video file was Unknown (und). Not updating ${striptracks_type^} database." | log else # Video language not in striptracks_isocodemap striptracks_message="Warn|Video language code(s) '${striptracks_newvideo_langcodes//$'\n'/,}' not found in the ISO Codemap. Cannot evaluate." @@ -1380,6 +1546,7 @@ elif [ -n "$striptracks_api_url" ]; then echo "$striptracks_message" >&2 striptracks_exitstatus=9 fi + # Get list of videos that could be renamed get_rename striptracks_return=$?; [ $striptracks_return -ne 0 ] && { @@ -1400,7 +1567,13 @@ elif [ -n "$striptracks_api_url" ]; then echo "$striptracks_message" >&2 striptracks_exitstatus=17 } + else + # This file doesn't need to be + [ $striptracks_debug -ge 1 ] && echo "Debug|This video file doesn't need to be renamed." | log fi + else + # Nothing to rename + [ $striptracks_debug -ge 1 ] && echo "Debug|No video files need to be renamed." | log fi else # No '.path' in returned JSON @@ -1411,7 +1584,7 @@ elif [ -n "$striptracks_api_url" ]; then 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'." + striptracks_message="Warn|Could not find a video file for $striptracks_video_api id '$striptracks_video_id'" echo "$striptracks_message" | log echo "$striptracks_message" >&2 striptracks_exitstatus=17