diff --git a/fileflows/flow/flow_auto_movie_pipeline.json b/fileflows/flow/flow_auto_movie_pipeline.json index 95bc959..e0acd9d 100644 --- a/fileflows/flow/flow_auto_movie_pipeline.json +++ b/fileflows/flow/flow_auto_movie_pipeline.json @@ -353,6 +353,7 @@ "UseUnmappedPath": false, "MoveMode": true, "TimeOut": 900, + "PocHoldRelease": "The.Ritual.2017.German.DL.1080p.WEB.x264.iNTERNAL-BiGiNT", "Color": "" } }, diff --git a/fileflows/scripts/Radarr_-_Trigger_Manual_Import.js b/fileflows/scripts/Radarr_-_Trigger_Manual_Import.js index 04cd807..79da0e2 100644 --- a/fileflows/scripts/Radarr_-_Trigger_Manual_Import.js +++ b/fileflows/scripts/Radarr_-_Trigger_Manual_Import.js @@ -2,7 +2,7 @@ * @name Radarr - Trigger Manual Import * @description Safely trigger Radarr ManualImport for exactly one processed file. * @author FileFlows + Sascha - * @revision 11 + * @revision 12 * @output Import erfolgreich * @output Fehler * @param {string} URL Radarr root URL and port @@ -11,11 +11,12 @@ * @param {bool} UseUnmappedPath Whether to Unmap the path * @param {bool} MoveMode Import mode: true=move, false=copy * @param {int} TimeOut Timeout in seconds (max 3600) + * @param {string} PocHoldRelease Exact release title to leave for an external native-scan proof */ import { Radarr } from 'Shared/Radarr'; -function Script(URL, ApiKey, ImportPath, UseUnmappedPath, MoveMode, TimeOut) { +function Script(URL, ApiKey, ImportPath, UseUnmappedPath, MoveMode, TimeOut, PocHoldRelease) { URL = (URL || Variables['Radarr.Url'] || Variables['Radarr.URI']).replace(/\/+$/g, ''); ApiKey = ApiKey || Variables['Radarr.ApiKey']; const currentFile = Variables['file.FullName'] || Variables.file?.FullName || ''; @@ -53,7 +54,11 @@ function Script(URL, ApiKey, ImportPath, UseUnmappedPath, MoveMode, TimeOut) { const searchPatterns = [folderPattern, filePattern] .filter(Boolean) .filter((value, index, values) => values.indexOf(value) === index); - + const pocHold = normalizeReleaseTitle(PocHoldRelease || ''); + if (pocHold && searchPatterns.some(pattern => normalizeReleaseTitle(pattern) === pocHold)) { + Logger.ILog(`PoC hold: leaving '${exactImportPath}' on NVMe for external native Arr scan.`); + return 1; + } let movieId = Variables['Radarr.movieId'] ?? null; for (const pattern of searchPatterns) { if (!movieId) { diff --git a/fileflows/tests/test_radarr_import_safety.py b/fileflows/tests/test_radarr_import_safety.py index b281ec2..7216a2f 100644 --- a/fileflows/tests/test_radarr_import_safety.py +++ b/fileflows/tests/test_radarr_import_safety.py @@ -61,7 +61,8 @@ const result = context.__exports.Script( scenario.scopeRoot, false, true, - 300 + 300, + scenario.pocHoldRelease || '' ); process.stdout.write(JSON.stringify({result, calls})); """ @@ -262,6 +263,33 @@ class RadarrImportSafetyTests(unittest.TestCase): self.assertEqual(result["result"], 1) command = next(call for call in result["calls"] if call["type"] == "command") self.assertEqual(command["body"]["files"][0]["movieId"], 7331) + def test_poc_hold_leaves_exact_release_for_external_native_scan(self): + release = "The.Ritual.2017.German.DL.1080p.WEB.x264.iNTERNAL-BiGiNT" + exact = f"/tdarr/converted/video/{release}/{release}.mkv" + result = run_script( + { + "releaseTitle": release, + "exactPath": exact, + "scopeRoot": "/tdarr/converted/video/", + "pocHoldRelease": release, + "queueResponse": {"records": [{"title": release, "movieId": 6676}]}, + "historyResponse": { + "records": [ + { + "sourceTitle": release, + "movieId": 6676, + "downloadId": "poc-nzo-id", + "eventType": "grabbed", + } + ] + }, + "candidates": [], + } + ) + + self.assertEqual(result["result"], 1) + commands = [call for call in result["calls"] if call["type"] == "command"] + self.assertEqual(commands, []) if __name__ == "__main__":