From 99050314e0e4e45e26c691a8e4e96839cb0f39d0 Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Mon, 6 May 2024 06:04:35 +0100 Subject: [PATCH 1/9] Make case insensitive --- .../file/checkFileExtension/1.0.0/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FlowPluginsTs/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.ts b/FlowPluginsTs/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.ts index 7d6361f05..7265ac6b8 100644 --- a/FlowPluginsTs/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.ts +++ b/FlowPluginsTs/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.ts @@ -49,9 +49,9 @@ const plugin = (args: IpluginInputArgs): IpluginOutputArgs => { args.inputs = lib.loadDefaultValues(args.inputs, details); const extensions = String(args.inputs.extensions); - const extensionArray = extensions.trim().split(','); + const extensionArray = extensions.trim().split(',').map((row) => row.toLowerCase()); - const extension = getContainer(args.inputFileObj._id); + const extension = getContainer(args.inputFileObj._id).toLowerCase(); let extensionMatch = false; From 6e5fdd7bb0cacdad4f6428d0e18c6baf60575b8d Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Mon, 6 May 2024 06:12:49 +0100 Subject: [PATCH 2/9] Update Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js test --- tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js b/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js index 7b0e8e997..94d337e51 100644 --- a/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js +++ b/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js @@ -145,7 +145,7 @@ const tests = [ output: { linux: { processFile: true, - preset: '-fflags +genpts -hwaccel_output_format qsv -init_hw_device qsv:hw,child_device_type=vaapi -c:v h264 -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -pix_fmt p010le ', + preset: '-fflags +genpts -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264 -map 0 -c:v hevc_qsv -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -pix_fmt p010le ', handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, From 3ded90649804864e2bbf07954dd9db73a5c0da2f Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Mon, 6 May 2024 06:14:50 +0100 Subject: [PATCH 3/9] Update Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js test --- tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js b/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js index 94d337e51..8363de24d 100644 --- a/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js +++ b/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js @@ -221,6 +221,7 @@ const tests = [ linux: { processFile: true, preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v hevc_qsv -map 0 -c:v hevc_qsv -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ', + handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, infoLog: '☑ It looks like the current video bitrate is 12000kbps.\n' From 5e41a230d8e285254bd9ddc33c9c193d6d12bf58 Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Mon, 6 May 2024 06:16:31 +0100 Subject: [PATCH 4/9] Add handBrakeMode: false, --- tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js b/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js index 8363de24d..e138235d1 100644 --- a/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js +++ b/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js @@ -527,6 +527,7 @@ const tests = [ linux: { processFile: true, preset: '-fflags +genpts -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v vc1 -map 0 -c:v hevc_qsv -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v main10 -pix_fmt p010le ', + handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n' From 71c4e2de2f2d7f5b9c76ed40bb3112929788a198 Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Mon, 6 May 2024 06:18:16 +0100 Subject: [PATCH 5/9] Further test fixes for linux env --- tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js b/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js index e138235d1..6b10a31b2 100644 --- a/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js +++ b/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js @@ -604,6 +604,7 @@ const tests = [ linux: { processFile: true, preset: '-fflags +genpts -hwaccel qsv -hwaccel_output_format qsv -init_hw_device qsv:hw_any,child_device_type=vaapi -c:v h264_qsv -map 0 -c:v hevc_qsv -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -f matroska -profile:v main10 -vf scale_qsv=format=p010le,hwupload=extra_hw_frames=64,format=qsv ', + handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, infoLog: '☑ It looks like the current video bitrate is 12000kbps.\n' From 33f2e337dd5e6d03680680f35364ea2ca5d1c3d7 Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Mon, 6 May 2024 06:29:30 +0100 Subject: [PATCH 6/9] Update test logic to display all test errors --- tests/helpers/run.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/tests/helpers/run.js b/tests/helpers/run.js index 2aba038da..cfe67ba3e 100644 --- a/tests/helpers/run.js +++ b/tests/helpers/run.js @@ -16,8 +16,10 @@ const stackLog = (err) => { }; const run = async (tests) => { - try { - for (let i = 0; i < tests.length; i += 1) { + let errorsEncountered = false; + + for (let i = 0; i < tests.length; i += 1) { + try { // eslint-disable-next-line no-console console.log(`[${os.platform()}] ${scriptName}: test ${i}`); const test = tests[i]; @@ -69,10 +71,14 @@ const run = async (tests) => { chai.assert.deepEqual(testOutput, expectedOutput); } } + } catch (err) { + // eslint-disable-next-line no-console + stackLog(err); + errorsEncountered = true; } - } catch (err) { - // eslint-disable-next-line no-console - stackLog(err); + } + + if (errorsEncountered) { process.exit(1); } }; From c13d029aa9fe90c184ab7a30822b9335c3dd0d78 Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Mon, 6 May 2024 06:35:54 +0100 Subject: [PATCH 7/9] Update Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js darwin tests --- ...Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js | 43 +++++++++++-------- 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js b/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js index 6b10a31b2..37da81f0a 100644 --- a/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js +++ b/tests/Community/Tdarr_Plugin_bsh1_Boosh_FFMPEG_QSV_HEVC.js @@ -44,11 +44,12 @@ const tests = [ }, darwin: { processFile: true, - preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset slow -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska ', + preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset slow -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v 2 -pix_fmt yuv420p10le ', handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n' + + '10 bit encode enabled. Setting VideoToolBox Profile v2 & 10 bit pixel format\n' + 'Container for output selected as mkv.\n' + 'Encode variable bitrate settings:\n' + 'Target = 603k\n' @@ -108,13 +109,12 @@ const tests = [ }, darwin: { processFile: true, - preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f mp4 -profile:v main10 -vf scale_qsv=format=p010le ', + preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f mp4 -profile:v 2 -pix_fmt yuv420p10le ', handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, - infoLog: 'Input file is not MKV so cannot use mkvpropedit to get new file stats. Continuing but file stats will likely be inaccurate...\n' - + '☑ It looks like the current video bitrate is 1206kbps.\n' - + '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n' + infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n' + + '10 bit encode enabled. Setting VideoToolBox Profile v2 & 10 bit pixel format\n' + 'Container for output selected as mp4.\n' + 'Encode variable bitrate settings:\n' + 'Target = 603k\n' @@ -179,13 +179,13 @@ const tests = [ }, darwin: { processFile: true, - preset: '-fflags +genpts -c:v h264 -map 0 -c:v hevc_videotoolbox -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -f matroska -profile:v main10 -pix_fmt p010le ', + preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v 2 -pix_fmt yuv420p10le ', handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n' - + 'Input file is 10bit using High10. Disabling hardware decoding to avoid problems.\n' - + '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n' + + 'Input file is h264 High10. Hardware Decode not supported.\n' + + '10 bit encode enabled. Setting VideoToolBox Profile v2 & 10 bit pixel format\n' + 'Container for output selected as mkv.\n' + 'Encode variable bitrate settings:\n' + 'Target = 3227k\n' @@ -256,14 +256,14 @@ const tests = [ }, darwin: { processFile: true, - preset: '-fflags +genpts -map 0 -c:v hevc_videotoolbox -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -profile:v main10 -f matroska -profile:v main10 -vf scale_qsv=format=p010le', + preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v 2 -pix_fmt yuv420p10le ', handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, infoLog: '☑ It looks like the current video bitrate is 12000kbps.\n' + 'Reconvert_hevc is true & the file is already HEVC, VP9 or AV1. Using HEVC specific cutoff of 6000kbps.\n' + '☒ The file is still above this new cutoff! Reconverting.\n' - + '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n' + + '10 bit encode enabled. Setting VideoToolBox Profile v2 & 10 bit pixel format\n' + 'Container for output selected as mkv.\n' + 'Encode variable bitrate settings:\n' + 'Target = 6000k\n' @@ -360,16 +360,19 @@ const tests = [ }, darwin: { processFile: true, - preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -map 0 -c:v hevc_qsv -load_plugin hevc_hw -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:3 -map -0:4 -map -0:5 -map -0:6 -f mp4', + preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:3 -map -0:4 -map -0:5 -map -0:6 -f mp4 -profile:v 2 -pix_fmt yuv420p10le ', handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n' + + '10 bit encode enabled. Setting VideoToolBox Profile v2 & 10 bit pixel format\n' + 'Container for output selected as mp4.\n' + 'Encode variable bitrate settings:\n' + 'Target = 3227k\n' + 'Minimum = 2420k\n' + 'Maximum = 4034k\n' + + '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n' + + 'cmds set in extra_qsv_options will be IGNORED!\n' + 'File Transcoding...\n', container: '.mp4', }, @@ -426,16 +429,19 @@ const tests = [ }, darwin: { processFile: true, - preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -map 0 -c:v hevc_qsv -load_plugin hevc_hw -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:d -map -0:3 -map -0:4 -map -0:5 -f matroska ', + preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 3227k -minrate 2420k -maxrate 4034k -bufsize 6454k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -map -0:d -map -0:3 -map -0:4 -map -0:5 -f matroska -profile:v 2 -pix_fmt yuv420p10le ', handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, infoLog: '☑ It looks like the current video bitrate is 6454kbps.\n' + + '10 bit encode enabled. Setting VideoToolBox Profile v2 & 10 bit pixel format\n' + 'Container for output selected as mkv.\n' + 'Encode variable bitrate settings:\n' + 'Target = 3227k\n' + 'Minimum = 2420k\n' + 'Maximum = 4034k\n' + + '==ALERT== OS detected as MAC - This will use VIDEOTOOLBOX to encode which is NOT QSV\n' + + 'cmds set in extra_qsv_options will be IGNORED!\n' + 'File Transcoding...\n', container: '.mkv', }, @@ -489,12 +495,12 @@ const tests = [ }, darwin: { processFile: true, - preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset slow -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska ', + preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v 2 -pix_fmt yuv420p10le ', handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n' - + '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n' + + '10 bit encode enabled. Setting VideoToolBox Profile v2 & 10 bit pixel format\n' + 'Container for output selected as mkv.\n' + 'Encode variable bitrate settings:\n' + 'Target = 603k\n' @@ -560,12 +566,13 @@ const tests = [ }, darwin: { processFile: true, - preset: '-fflags +genpts -c:v vc1 -map 0 -c:v hevc_videotoolbox -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset slow -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska ', + preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 603k -minrate 452k -maxrate 754k -bufsize 1206k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -f matroska -profile:v 2 -pix_fmt yuv420p10le ', handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, infoLog: '☑ It looks like the current video bitrate is 1206kbps.\n' - + '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n' + + 'Input file is vc1. Hardware Decode not supported.\n' + + '10 bit encode enabled. Setting VideoToolBox Profile v2 & 10 bit pixel format\n' + 'Container for output selected as mkv.\n' + 'Encode variable bitrate settings:\n' + 'Target = 603k\n' @@ -637,13 +644,13 @@ const tests = [ }, darwin: { processFile: true, - preset: '-fflags +genpts -map 0 -c:v hevc_videotoolbox -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -f matroska -profile:v main10 -vf scale_qsv=format=p010le', + preset: '-fflags +genpts -hwaccel videotoolbox -map 0 -c:v hevc_videotoolbox -b:v 6000k -minrate 4500k -maxrate 7500k -bufsize 12000k -preset fast -c:a copy -c:s copy -max_muxing_queue_size 9999 -color_primaries bt2020 -color_trc smpte2084 -colorspace bt2020nc -f matroska -profile:v 2 -pix_fmt yuv420p10le ', handBrakeMode: false, FFmpegMode: true, reQueueAfter: true, infoLog: '☑ It looks like the current video bitrate is 12000kbps.\n' + '==WARNING== This looks to be a HDR file. HDR is supported but correct encoding is not guaranteed.\n' - + '10 bit encode enabled. Setting Main10 Profile & 10 bit pixel format\n' + + '10 bit encode enabled. Setting VideoToolBox Profile v2 & 10 bit pixel format\n' + 'Container for output selected as mkv.\n' + 'Encode variable bitrate settings:\n' + 'Target = 6000k\n' From 97e92c8b982a8beeb93d47cdd9a310e9eef46273 Mon Sep 17 00:00:00 2001 From: HaveAGitGat Date: Mon, 6 May 2024 05:38:04 +0000 Subject: [PATCH 8/9] Apply auto-build changes --- .../file/checkFileExtension/1.0.0/index.js | 4 +- .../file/copyMoveFolderContent/1.0.0/index.js | 50 +- .../FlowHelpers/1.0.0/fileMoveOrCopy.js | 468 +++++++------- FlowPlugins/FlowHelpers/1.0.0/fileUtils.js | 136 ++-- .../FlowHelpers/1.0.0/hardwareUtils.js | 582 +++++++++--------- 5 files changed, 610 insertions(+), 630 deletions(-) diff --git a/FlowPlugins/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.js index c38a7e654..c0adfb2fa 100644 --- a/FlowPlugins/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.js +++ b/FlowPlugins/CommunityFlowPlugins/file/checkFileExtension/1.0.0/index.js @@ -45,8 +45,8 @@ var plugin = function (args) { // eslint-disable-next-line @typescript-eslint/no-unused-vars,no-param-reassign args.inputs = lib.loadDefaultValues(args.inputs, details); var extensions = String(args.inputs.extensions); - var extensionArray = extensions.trim().split(','); - var extension = (0, fileUtils_1.getContainer)(args.inputFileObj._id); + var extensionArray = extensions.trim().split(',').map(function (row) { return row.toLowerCase(); }); + var extension = (0, fileUtils_1.getContainer)(args.inputFileObj._id).toLowerCase(); var extensionMatch = false; if (extensionArray.includes(extension)) { extensionMatch = true; diff --git a/FlowPlugins/CommunityFlowPlugins/file/copyMoveFolderContent/1.0.0/index.js b/FlowPlugins/CommunityFlowPlugins/file/copyMoveFolderContent/1.0.0/index.js index e734badd2..4ac05b361 100644 --- a/FlowPlugins/CommunityFlowPlugins/file/copyMoveFolderContent/1.0.0/index.js +++ b/FlowPlugins/CommunityFlowPlugins/file/copyMoveFolderContent/1.0.0/index.js @@ -150,33 +150,31 @@ var details = function () { return ({ ], }); }; exports.details = details; -var doOperation = function (_a) { - var args = _a.args, sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, operation = _a.operation; - return __awaiter(void 0, void 0, void 0, function () { - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - args.jobLog("Input path: ".concat(sourcePath)); - args.jobLog("Output path: ".concat(destinationPath)); - if (!(sourcePath === destinationPath)) return [3 /*break*/, 1]; - args.jobLog("Input and output path are the same, skipping ".concat(operation)); - return [3 /*break*/, 3]; - case 1: - args.deps.fsextra.ensureDirSync((0, fileUtils_1.getFileAbosluteDir)(destinationPath)); - return [4 /*yield*/, (0, fileMoveOrCopy_1.default)({ - operation: operation, - sourcePath: sourcePath, - destinationPath: destinationPath, - args: args, - })]; - case 2: - _b.sent(); - _b.label = 3; - case 3: return [2 /*return*/]; - } - }); +var doOperation = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var args = _b.args, sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, operation = _b.operation; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + args.jobLog("Input path: ".concat(sourcePath)); + args.jobLog("Output path: ".concat(destinationPath)); + if (!(sourcePath === destinationPath)) return [3 /*break*/, 1]; + args.jobLog("Input and output path are the same, skipping ".concat(operation)); + return [3 /*break*/, 3]; + case 1: + args.deps.fsextra.ensureDirSync((0, fileUtils_1.getFileAbosluteDir)(destinationPath)); + return [4 /*yield*/, (0, fileMoveOrCopy_1.default)({ + operation: operation, + sourcePath: sourcePath, + destinationPath: destinationPath, + args: args, + })]; + case 2: + _c.sent(); + _c.label = 3; + case 3: return [2 /*return*/]; + } }); -}; +}); }; // eslint-disable-next-line @typescript-eslint/no-unused-vars var plugin = function (args) { return __awaiter(void 0, void 0, void 0, function () { var lib, _a, keepRelativePath, allFiles, sourceDirectory, outputDirectory, copyOrMove, fileExtensions, outputPath, subStem, sourceDir, filesInDir, i; diff --git a/FlowPlugins/FlowHelpers/1.0.0/fileMoveOrCopy.js b/FlowPlugins/FlowHelpers/1.0.0/fileMoveOrCopy.js index c6f586691..8dc2dbc57 100644 --- a/FlowPlugins/FlowHelpers/1.0.0/fileMoveOrCopy.js +++ b/FlowPlugins/FlowHelpers/1.0.0/fileMoveOrCopy.js @@ -69,260 +69,248 @@ var compareOldNew = function (_a) { + " cache file of size ".concat(sourceFileSize)); } }; -var tryMove = function (_a) { - var sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, sourceFileSize = _a.sourceFileSize, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var error, err_2, destinationSize; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - args.jobLog("Attempting move from ".concat(sourcePath, " to ").concat(destinationPath, ", method 1")); - error = false; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - return [4 /*yield*/, fs_1.promises.rename(sourcePath, destinationPath)]; - case 2: - _b.sent(); - return [3 /*break*/, 4]; - case 3: - err_2 = _b.sent(); - error = true; - args.jobLog("File move error: ".concat(JSON.stringify(err_2))); - return [3 /*break*/, 4]; - case 4: return [4 /*yield*/, getSizeBytes(destinationPath)]; - case 5: - destinationSize = _b.sent(); - compareOldNew({ - sourceFileSize: sourceFileSize, - destinationSize: destinationSize, - args: args, - }); - if (error || destinationSize !== sourceFileSize) { - return [2 /*return*/, false]; - } - return [2 /*return*/, true]; - } - }); +var tryMove = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var error, err_2, destinationSize; + var sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, sourceFileSize = _b.sourceFileSize, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + args.jobLog("Attempting move from ".concat(sourcePath, " to ").concat(destinationPath, ", method 1")); + error = false; + _c.label = 1; + case 1: + _c.trys.push([1, 3, , 4]); + return [4 /*yield*/, fs_1.promises.rename(sourcePath, destinationPath)]; + case 2: + _c.sent(); + return [3 /*break*/, 4]; + case 3: + err_2 = _c.sent(); + error = true; + args.jobLog("File move error: ".concat(JSON.stringify(err_2))); + return [3 /*break*/, 4]; + case 4: return [4 /*yield*/, getSizeBytes(destinationPath)]; + case 5: + destinationSize = _c.sent(); + compareOldNew({ + sourceFileSize: sourceFileSize, + destinationSize: destinationSize, + args: args, + }); + if (error || destinationSize !== sourceFileSize) { + return [2 /*return*/, false]; + } + return [2 /*return*/, true]; + } }); -}; +}); }; // eslint-disable-next-line @typescript-eslint/no-unused-vars -var tryMvdir = function (_a) { - var sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, sourceFileSize = _a.sourceFileSize, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var error, destinationSize; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - args.jobLog("Attempting move from ".concat(sourcePath, " to ").concat(destinationPath, ", method 2")); - error = false; - return [4 /*yield*/, new Promise(function (resolve) { - // fs-extra and move-file don't work when destination is on windows root of drive - // mvdir will try to move else fall back to copy/unlink - // potential bug on unraid - args.deps.mvdir(sourcePath, destinationPath, { overwrite: true }) - .then(function () { - resolve(true); - }).catch(function (err) { - error = true; - args.jobLog("File move error: ".concat(err)); - resolve(err); - }); - })]; - case 1: - _b.sent(); - return [4 /*yield*/, getSizeBytes(destinationPath)]; - case 2: - destinationSize = _b.sent(); - compareOldNew({ - sourceFileSize: sourceFileSize, - destinationSize: destinationSize, - args: args, - }); - if (error || destinationSize !== sourceFileSize) { - return [2 /*return*/, false]; - } - return [2 /*return*/, true]; - } - }); +var tryMvdir = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var error, destinationSize; + var sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, sourceFileSize = _b.sourceFileSize, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + args.jobLog("Attempting move from ".concat(sourcePath, " to ").concat(destinationPath, ", method 2")); + error = false; + return [4 /*yield*/, new Promise(function (resolve) { + // fs-extra and move-file don't work when destination is on windows root of drive + // mvdir will try to move else fall back to copy/unlink + // potential bug on unraid + args.deps.mvdir(sourcePath, destinationPath, { overwrite: true }) + .then(function () { + resolve(true); + }).catch(function (err) { + error = true; + args.jobLog("File move error: ".concat(err)); + resolve(err); + }); + })]; + case 1: + _c.sent(); + return [4 /*yield*/, getSizeBytes(destinationPath)]; + case 2: + destinationSize = _c.sent(); + compareOldNew({ + sourceFileSize: sourceFileSize, + destinationSize: destinationSize, + args: args, + }); + if (error || destinationSize !== sourceFileSize) { + return [2 /*return*/, false]; + } + return [2 /*return*/, true]; + } }); -}; +}); }; // Keep in e.g. https://github.com/HaveAGitGat/Tdarr/issues/858 -var tyNcp = function (_a) { - var sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, sourceFileSize = _a.sourceFileSize, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var error_1, destinationSize; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - if (!args.deps.ncp) return [3 /*break*/, 3]; - args.jobLog("Attempting copy from ".concat(sourcePath, " to ").concat(destinationPath, " , method 1")); - error_1 = false; - return [4 /*yield*/, new Promise(function (resolve) { - args.deps.ncp(sourcePath, destinationPath, function (err) { - if (err) { - error_1 = true; - args.jobLog("File copy error: ".concat(err)); - resolve(err); - } - else { - resolve(true); - } - }); - })]; - case 1: - _b.sent(); - return [4 /*yield*/, getSizeBytes(destinationPath)]; - case 2: - destinationSize = _b.sent(); - compareOldNew({ - sourceFileSize: sourceFileSize, - destinationSize: destinationSize, - args: args, - }); - if (error_1 || destinationSize !== sourceFileSize) { - return [2 /*return*/, false]; - } - return [2 /*return*/, true]; - case 3: return [2 /*return*/, false]; - } - }); +var tyNcp = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var error_1, destinationSize; + var sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, sourceFileSize = _b.sourceFileSize, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + if (!args.deps.ncp) return [3 /*break*/, 3]; + args.jobLog("Attempting copy from ".concat(sourcePath, " to ").concat(destinationPath, " , method 1")); + error_1 = false; + return [4 /*yield*/, new Promise(function (resolve) { + args.deps.ncp(sourcePath, destinationPath, function (err) { + if (err) { + error_1 = true; + args.jobLog("File copy error: ".concat(err)); + resolve(err); + } + else { + resolve(true); + } + }); + })]; + case 1: + _c.sent(); + return [4 /*yield*/, getSizeBytes(destinationPath)]; + case 2: + destinationSize = _c.sent(); + compareOldNew({ + sourceFileSize: sourceFileSize, + destinationSize: destinationSize, + args: args, + }); + if (error_1 || destinationSize !== sourceFileSize) { + return [2 /*return*/, false]; + } + return [2 /*return*/, true]; + case 3: return [2 /*return*/, false]; + } }); -}; -var tryNormalCopy = function (_a) { - var sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, sourceFileSize = _a.sourceFileSize, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var error, err_3, destinationSize; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - args.jobLog("Attempting copy from ".concat(sourcePath, " to ").concat(destinationPath, " , method 2")); - error = false; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - return [4 /*yield*/, fs_1.promises.copyFile(sourcePath, destinationPath)]; - case 2: - _b.sent(); - return [3 /*break*/, 4]; - case 3: - err_3 = _b.sent(); - error = true; - args.jobLog("File copy error: ".concat(JSON.stringify(err_3))); - return [3 /*break*/, 4]; - case 4: return [4 /*yield*/, getSizeBytes(destinationPath)]; - case 5: - destinationSize = _b.sent(); - compareOldNew({ - sourceFileSize: sourceFileSize, - destinationSize: destinationSize, - args: args, - }); - if (error || destinationSize !== sourceFileSize) { - return [2 /*return*/, false]; - } - return [2 /*return*/, true]; - } - }); +}); }; +var tryNormalCopy = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var error, err_3, destinationSize; + var sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, sourceFileSize = _b.sourceFileSize, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + args.jobLog("Attempting copy from ".concat(sourcePath, " to ").concat(destinationPath, " , method 2")); + error = false; + _c.label = 1; + case 1: + _c.trys.push([1, 3, , 4]); + return [4 /*yield*/, fs_1.promises.copyFile(sourcePath, destinationPath)]; + case 2: + _c.sent(); + return [3 /*break*/, 4]; + case 3: + err_3 = _c.sent(); + error = true; + args.jobLog("File copy error: ".concat(JSON.stringify(err_3))); + return [3 /*break*/, 4]; + case 4: return [4 /*yield*/, getSizeBytes(destinationPath)]; + case 5: + destinationSize = _c.sent(); + compareOldNew({ + sourceFileSize: sourceFileSize, + destinationSize: destinationSize, + args: args, + }); + if (error || destinationSize !== sourceFileSize) { + return [2 /*return*/, false]; + } + return [2 /*return*/, true]; + } }); -}; -var cleanSourceFile = function (_a) { - var args = _a.args, sourcePath = _a.sourcePath; - return __awaiter(void 0, void 0, void 0, function () { - var err_4; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - _b.trys.push([0, 2, , 3]); - args.jobLog("Deleting source file ".concat(sourcePath)); - return [4 /*yield*/, fs_1.promises.unlink(sourcePath)]; - case 1: - _b.sent(); - return [3 /*break*/, 3]; - case 2: - err_4 = _b.sent(); - args.jobLog("Failed to delete source file ".concat(sourcePath, ": ").concat(JSON.stringify(err_4))); - return [3 /*break*/, 3]; - case 3: return [2 /*return*/]; - } - }); +}); }; +var cleanSourceFile = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var err_4; + var args = _b.args, sourcePath = _b.sourcePath; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + _c.trys.push([0, 2, , 3]); + args.jobLog("Deleting source file ".concat(sourcePath)); + return [4 /*yield*/, fs_1.promises.unlink(sourcePath)]; + case 1: + _c.sent(); + return [3 /*break*/, 3]; + case 2: + err_4 = _c.sent(); + args.jobLog("Failed to delete source file ".concat(sourcePath, ": ").concat(JSON.stringify(err_4))); + return [3 /*break*/, 3]; + case 3: return [2 /*return*/]; + } }); -}; -var fileMoveOrCopy = function (_a) { - var operation = _a.operation, sourcePath = _a.sourcePath, destinationPath = _a.destinationPath, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var sourceFileSize, moved, ncpd, copied; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - args.jobLog('Calculating cache file size in bytes'); - return [4 /*yield*/, getSizeBytes(sourcePath)]; - case 1: - sourceFileSize = _b.sent(); - args.jobLog("".concat(sourceFileSize)); - if (!(operation === 'move')) return [3 /*break*/, 3]; - return [4 /*yield*/, tryMove({ - sourcePath: sourcePath, - destinationPath: destinationPath, - args: args, - sourceFileSize: sourceFileSize, - })]; - case 2: - moved = _b.sent(); - if (moved) { - return [2 /*return*/, true]; - } - // disable: https://github.com/HaveAGitGat/Tdarr/issues/885 - // const mvdird = await tryMvdir({ - // sourcePath, - // destinationPath, - // args, - // sourceFileSize, - // }); - // if (mvdird) { - // return true; - // } - args.jobLog('Failed to move file, trying copy'); - _b.label = 3; - case 3: return [4 /*yield*/, tyNcp({ +}); }; +var fileMoveOrCopy = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var sourceFileSize, moved, ncpd, copied; + var operation = _b.operation, sourcePath = _b.sourcePath, destinationPath = _b.destinationPath, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + args.jobLog('Calculating cache file size in bytes'); + return [4 /*yield*/, getSizeBytes(sourcePath)]; + case 1: + sourceFileSize = _c.sent(); + args.jobLog("".concat(sourceFileSize)); + if (!(operation === 'move')) return [3 /*break*/, 3]; + return [4 /*yield*/, tryMove({ sourcePath: sourcePath, destinationPath: destinationPath, args: args, sourceFileSize: sourceFileSize, })]; - case 4: - ncpd = _b.sent(); - if (!ncpd) return [3 /*break*/, 7]; - if (!(operation === 'move')) return [3 /*break*/, 6]; - return [4 /*yield*/, cleanSourceFile({ - args: args, - sourcePath: sourcePath, - })]; - case 5: - _b.sent(); - _b.label = 6; - case 6: return [2 /*return*/, true]; - case 7: return [4 /*yield*/, tryNormalCopy({ + case 2: + moved = _c.sent(); + if (moved) { + return [2 /*return*/, true]; + } + // disable: https://github.com/HaveAGitGat/Tdarr/issues/885 + // const mvdird = await tryMvdir({ + // sourcePath, + // destinationPath, + // args, + // sourceFileSize, + // }); + // if (mvdird) { + // return true; + // } + args.jobLog('Failed to move file, trying copy'); + _c.label = 3; + case 3: return [4 /*yield*/, tyNcp({ + sourcePath: sourcePath, + destinationPath: destinationPath, + args: args, + sourceFileSize: sourceFileSize, + })]; + case 4: + ncpd = _c.sent(); + if (!ncpd) return [3 /*break*/, 7]; + if (!(operation === 'move')) return [3 /*break*/, 6]; + return [4 /*yield*/, cleanSourceFile({ + args: args, sourcePath: sourcePath, - destinationPath: destinationPath, + })]; + case 5: + _c.sent(); + _c.label = 6; + case 6: return [2 /*return*/, true]; + case 7: return [4 /*yield*/, tryNormalCopy({ + sourcePath: sourcePath, + destinationPath: destinationPath, + args: args, + sourceFileSize: sourceFileSize, + })]; + case 8: + copied = _c.sent(); + if (!copied) return [3 /*break*/, 11]; + if (!(operation === 'move')) return [3 /*break*/, 10]; + return [4 /*yield*/, cleanSourceFile({ args: args, - sourceFileSize: sourceFileSize, + sourcePath: sourcePath, })]; - case 8: - copied = _b.sent(); - if (!copied) return [3 /*break*/, 11]; - if (!(operation === 'move')) return [3 /*break*/, 10]; - return [4 /*yield*/, cleanSourceFile({ - args: args, - sourcePath: sourcePath, - })]; - case 9: - _b.sent(); - _b.label = 10; - case 10: return [2 /*return*/, true]; - case 11: throw new Error("Failed to ".concat(operation, " file")); - } - }); + case 9: + _c.sent(); + _c.label = 10; + case 10: return [2 /*return*/, true]; + case 11: throw new Error("Failed to ".concat(operation, " file")); + } }); -}; +}); }; exports.default = fileMoveOrCopy; diff --git a/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js b/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js index 3f777d334..1e3604571 100644 --- a/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js +++ b/FlowPlugins/FlowHelpers/1.0.0/fileUtils.js @@ -80,80 +80,78 @@ var getFileSize = function (file) { return __awaiter(void 0, void 0, void 0, fun }); }); }; exports.getFileSize = getFileSize; -var moveFileAndValidate = function (_a) { - var inputPath = _a.inputPath, outputPath = _a.outputPath, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var inputSize, res1, outputSize, err_1, res2, errMessage; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: return [4 /*yield*/, (0, exports.getFileSize)(inputPath)]; - case 1: - inputSize = _b.sent(); - args.jobLog("Attempt 1: Moving file from ".concat(inputPath, " to ").concat(outputPath)); - return [4 /*yield*/, new Promise(function (resolve) { - args.deps.gracefulfs.rename(inputPath, outputPath, function (err) { - if (err) { - args.jobLog("Failed to move file from ".concat(inputPath, " to ").concat(outputPath)); - args.jobLog(JSON.stringify(err)); - resolve(false); - } - else { - resolve(true); - } - }); - })]; - case 2: - res1 = _b.sent(); - outputSize = 0; - _b.label = 3; - case 3: - _b.trys.push([3, 5, , 6]); - return [4 /*yield*/, (0, exports.getFileSize)(outputPath)]; - case 4: - outputSize = _b.sent(); - return [3 /*break*/, 6]; - case 5: - err_1 = _b.sent(); - args.jobLog(JSON.stringify(err_1)); - return [3 /*break*/, 6]; - case 6: - if (!(!res1 || inputSize !== outputSize)) return [3 /*break*/, 9]; - if (inputSize !== outputSize) { - args.jobLog("File sizes do not match, input: ".concat(inputSize, " ") - + "does not equal output: ".concat(outputSize)); - } - args.jobLog("Attempt 1 failed: Moving file from ".concat(inputPath, " to ").concat(outputPath)); - args.jobLog("Attempt 2: Moving file from ".concat(inputPath, " to ").concat(outputPath)); - return [4 /*yield*/, new Promise(function (resolve) { - args.deps.mvdir(inputPath, outputPath, { overwrite: true }) - .then(function () { - resolve(true); - }).catch(function (err) { +var moveFileAndValidate = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var inputSize, res1, outputSize, err_1, res2, errMessage; + var inputPath = _b.inputPath, outputPath = _b.outputPath, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: return [4 /*yield*/, (0, exports.getFileSize)(inputPath)]; + case 1: + inputSize = _c.sent(); + args.jobLog("Attempt 1: Moving file from ".concat(inputPath, " to ").concat(outputPath)); + return [4 /*yield*/, new Promise(function (resolve) { + args.deps.gracefulfs.rename(inputPath, outputPath, function (err) { + if (err) { args.jobLog("Failed to move file from ".concat(inputPath, " to ").concat(outputPath)); args.jobLog(JSON.stringify(err)); resolve(false); - }); - })]; - case 7: - res2 = _b.sent(); - return [4 /*yield*/, (0, exports.getFileSize)(outputPath)]; - case 8: - outputSize = _b.sent(); - if (!res2 || inputSize !== outputSize) { - if (inputSize !== outputSize) { - args.jobLog("File sizes do not match, input: ".concat(inputSize, " ") - + "does not equal output: ".concat(outputSize)); - } - errMessage = "Failed to move file from ".concat(inputPath, " to ").concat(outputPath, ", check errors above"); - args.jobLog(errMessage); - throw new Error(errMessage); + } + else { + resolve(true); + } + }); + })]; + case 2: + res1 = _c.sent(); + outputSize = 0; + _c.label = 3; + case 3: + _c.trys.push([3, 5, , 6]); + return [4 /*yield*/, (0, exports.getFileSize)(outputPath)]; + case 4: + outputSize = _c.sent(); + return [3 /*break*/, 6]; + case 5: + err_1 = _c.sent(); + args.jobLog(JSON.stringify(err_1)); + return [3 /*break*/, 6]; + case 6: + if (!(!res1 || inputSize !== outputSize)) return [3 /*break*/, 9]; + if (inputSize !== outputSize) { + args.jobLog("File sizes do not match, input: ".concat(inputSize, " ") + + "does not equal output: ".concat(outputSize)); + } + args.jobLog("Attempt 1 failed: Moving file from ".concat(inputPath, " to ").concat(outputPath)); + args.jobLog("Attempt 2: Moving file from ".concat(inputPath, " to ").concat(outputPath)); + return [4 /*yield*/, new Promise(function (resolve) { + args.deps.mvdir(inputPath, outputPath, { overwrite: true }) + .then(function () { + resolve(true); + }).catch(function (err) { + args.jobLog("Failed to move file from ".concat(inputPath, " to ").concat(outputPath)); + args.jobLog(JSON.stringify(err)); + resolve(false); + }); + })]; + case 7: + res2 = _c.sent(); + return [4 /*yield*/, (0, exports.getFileSize)(outputPath)]; + case 8: + outputSize = _c.sent(); + if (!res2 || inputSize !== outputSize) { + if (inputSize !== outputSize) { + args.jobLog("File sizes do not match, input: ".concat(inputSize, " ") + + "does not equal output: ".concat(outputSize)); } - _b.label = 9; - case 9: return [2 /*return*/]; - } - }); + errMessage = "Failed to move file from ".concat(inputPath, " to ").concat(outputPath, ", check errors above"); + args.jobLog(errMessage); + throw new Error(errMessage); + } + _c.label = 9; + case 9: return [2 /*return*/]; + } }); -}; +}); }; exports.moveFileAndValidate = moveFileAndValidate; var getPluginWorkDir = function (args) { var pluginWorkDir = "".concat(args.workDir, "/").concat(new Date().getTime()); diff --git a/FlowPlugins/FlowHelpers/1.0.0/hardwareUtils.js b/FlowPlugins/FlowHelpers/1.0.0/hardwareUtils.js index da276ebb5..1b188ef40 100644 --- a/FlowPlugins/FlowHelpers/1.0.0/hardwareUtils.js +++ b/FlowPlugins/FlowHelpers/1.0.0/hardwareUtils.js @@ -61,80 +61,78 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); exports.getEncoder = exports.getBestNvencDevice = exports.hasEncoder = void 0; var os_1 = __importDefault(require("os")); -var hasEncoder = function (_a) { - var ffmpegPath = _a.ffmpegPath, encoder = _a.encoder, inputArgs = _a.inputArgs, outputArgs = _a.outputArgs, filter = _a.filter, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var spawn, isEnabled, commandArr_1, err_1; - return __generator(this, function (_b) { - switch (_b.label) { - case 0: - spawn = require('child_process').spawn; - isEnabled = false; - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 4]); - commandArr_1 = __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], inputArgs, true), [ - '-f', - 'lavfi', - '-i', - 'color=c=black:s=256x256:d=1:r=30' - ], false), (filter ? filter.split(' ') : []), true), [ - '-c:v', - encoder - ], false), outputArgs, true), [ - '-f', - 'null', - '/dev/null', - ], false); - args.jobLog("Checking for encoder ".concat(encoder, " with command:")); - args.jobLog("".concat(ffmpegPath, " ").concat(commandArr_1.join(' '))); - return [4 /*yield*/, new Promise(function (resolve) { - var error = function () { - resolve(false); - }; - var stderr = ''; - try { - var thread = spawn(ffmpegPath, commandArr_1); - thread.on('error', function () { - // catches execution error (bad file) - error(); - }); - thread.stdout.on('data', function (data) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - stderr += data; - }); - thread.stderr.on('data', function (data) { - // eslint-disable-next-line @typescript-eslint/no-unused-vars - stderr += data; - }); - thread.on('close', function (code) { - if (code !== 0) { - error(); - } - else { - resolve(true); - } - }); - } - catch (err) { - // catches execution error (no file) +var hasEncoder = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var spawn, isEnabled, commandArr_1, err_1; + var ffmpegPath = _b.ffmpegPath, encoder = _b.encoder, inputArgs = _b.inputArgs, outputArgs = _b.outputArgs, filter = _b.filter, args = _b.args; + return __generator(this, function (_c) { + switch (_c.label) { + case 0: + spawn = require('child_process').spawn; + isEnabled = false; + _c.label = 1; + case 1: + _c.trys.push([1, 3, , 4]); + commandArr_1 = __spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray(__spreadArray([], inputArgs, true), [ + '-f', + 'lavfi', + '-i', + 'color=c=black:s=256x256:d=1:r=30' + ], false), (filter ? filter.split(' ') : []), true), [ + '-c:v', + encoder + ], false), outputArgs, true), [ + '-f', + 'null', + '/dev/null', + ], false); + args.jobLog("Checking for encoder ".concat(encoder, " with command:")); + args.jobLog("".concat(ffmpegPath, " ").concat(commandArr_1.join(' '))); + return [4 /*yield*/, new Promise(function (resolve) { + var error = function () { + resolve(false); + }; + var stderr = ''; + try { + var thread = spawn(ffmpegPath, commandArr_1); + thread.on('error', function () { + // catches execution error (bad file) error(); - } - })]; - case 2: - isEnabled = _b.sent(); - args.jobLog("Encoder ".concat(encoder, " is ").concat(isEnabled ? 'enabled' : 'disabled')); - return [3 /*break*/, 4]; - case 3: - err_1 = _b.sent(); - // eslint-disable-next-line no-console - console.log(err_1); - return [3 /*break*/, 4]; - case 4: return [2 /*return*/, isEnabled]; - } - }); + }); + thread.stdout.on('data', function (data) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + stderr += data; + }); + thread.stderr.on('data', function (data) { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + stderr += data; + }); + thread.on('close', function (code) { + if (code !== 0) { + error(); + } + else { + resolve(true); + } + }); + } + catch (err) { + // catches execution error (no file) + error(); + } + })]; + case 2: + isEnabled = _c.sent(); + args.jobLog("Encoder ".concat(encoder, " is ").concat(isEnabled ? 'enabled' : 'disabled')); + return [3 /*break*/, 4]; + case 3: + err_1 = _c.sent(); + // eslint-disable-next-line no-console + console.log(err_1); + return [3 /*break*/, 4]; + case 4: return [2 /*return*/, isEnabled]; + } }); -}; +}); }; exports.hasEncoder = hasEncoder; // credit to UNCode101 for this var getBestNvencDevice = function (_a) { @@ -207,236 +205,234 @@ var encoderFilter = function (encoder, targetCodec) { } return false; }; -var getEncoder = function (_a) { - var targetCodec = _a.targetCodec, hardwareEncoding = _a.hardwareEncoding, hardwareType = _a.hardwareType, args = _a.args; - return __awaiter(void 0, void 0, void 0, function () { - var supportedGpuEncoders, gpuEncoders, filteredGpuEncoders, idx, _i, filteredGpuEncoders_1, gpuEncoder, _b, enabledDevices, res; - return __generator(this, function (_c) { - switch (_c.label) { - case 0: - supportedGpuEncoders = ['hevc', 'h264', 'av1']; - if (!(args.workerType - && args.workerType.includes('gpu') - && hardwareEncoding && (supportedGpuEncoders.includes(targetCodec)))) return [3 /*break*/, 5]; - gpuEncoders = [ - { - encoder: 'hevc_nvenc', - enabled: false, - inputArgs: [ - '-hwaccel', - 'cuda', - ], - outputArgs: [], - filter: '', - }, - { - encoder: 'hevc_amf', - enabled: false, - inputArgs: [], - outputArgs: [], - filter: '', - }, - { - encoder: 'hevc_qsv', - enabled: false, - inputArgs: [ - '-hwaccel', - 'qsv', - ], - outputArgs: __spreadArray([], (os_1.default.platform() === 'win32' ? ['-load_plugin', 'hevc_hw'] : []), true), - filter: '', - }, - { - encoder: 'hevc_vaapi', - inputArgs: [ - '-hwaccel', - 'vaapi', - '-hwaccel_device', - '/dev/dri/renderD128', - '-hwaccel_output_format', - 'vaapi', - ], - outputArgs: [], - enabled: false, - filter: '-vf format=nv12,hwupload', - }, - { - encoder: 'hevc_videotoolbox', - enabled: false, - inputArgs: [ - '-hwaccel', - 'videotoolbox', - ], - outputArgs: [], - filter: '', - }, - // h264 - { - encoder: 'h264_nvenc', - enabled: false, - inputArgs: [ - '-hwaccel', - 'cuda', - ], - outputArgs: [], - filter: '', - }, - { - encoder: 'h264_amf', - enabled: false, - inputArgs: [], - outputArgs: [], - filter: '', - }, - { - encoder: 'h264_qsv', - enabled: false, - inputArgs: [ - '-hwaccel', - 'qsv', - ], - outputArgs: [], - filter: '', - }, - { - encoder: 'h264_videotoolbox', - enabled: false, - inputArgs: [ - '-hwaccel', - 'videotoolbox', - ], - outputArgs: [], - filter: '', - }, - // av1 - { - encoder: 'av1_nvenc', - enabled: false, - inputArgs: [], - outputArgs: [], - filter: '', - }, - { - encoder: 'av1_amf', - enabled: false, - inputArgs: [], - outputArgs: [], - filter: '', - }, - { - encoder: 'av1_qsv', - enabled: false, +var getEncoder = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { + var supportedGpuEncoders, gpuEncoders, filteredGpuEncoders, idx, _i, filteredGpuEncoders_1, gpuEncoder, _c, enabledDevices, res; + var targetCodec = _b.targetCodec, hardwareEncoding = _b.hardwareEncoding, hardwareType = _b.hardwareType, args = _b.args; + return __generator(this, function (_d) { + switch (_d.label) { + case 0: + supportedGpuEncoders = ['hevc', 'h264', 'av1']; + if (!(args.workerType + && args.workerType.includes('gpu') + && hardwareEncoding && (supportedGpuEncoders.includes(targetCodec)))) return [3 /*break*/, 5]; + gpuEncoders = [ + { + encoder: 'hevc_nvenc', + enabled: false, + inputArgs: [ + '-hwaccel', + 'cuda', + ], + outputArgs: [], + filter: '', + }, + { + encoder: 'hevc_amf', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + { + encoder: 'hevc_qsv', + enabled: false, + inputArgs: [ + '-hwaccel', + 'qsv', + ], + outputArgs: __spreadArray([], (os_1.default.platform() === 'win32' ? ['-load_plugin', 'hevc_hw'] : []), true), + filter: '', + }, + { + encoder: 'hevc_vaapi', + inputArgs: [ + '-hwaccel', + 'vaapi', + '-hwaccel_device', + '/dev/dri/renderD128', + '-hwaccel_output_format', + 'vaapi', + ], + outputArgs: [], + enabled: false, + filter: '-vf format=nv12,hwupload', + }, + { + encoder: 'hevc_videotoolbox', + enabled: false, + inputArgs: [ + '-hwaccel', + 'videotoolbox', + ], + outputArgs: [], + filter: '', + }, + // h264 + { + encoder: 'h264_nvenc', + enabled: false, + inputArgs: [ + '-hwaccel', + 'cuda', + ], + outputArgs: [], + filter: '', + }, + { + encoder: 'h264_amf', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + { + encoder: 'h264_qsv', + enabled: false, + inputArgs: [ + '-hwaccel', + 'qsv', + ], + outputArgs: [], + filter: '', + }, + { + encoder: 'h264_videotoolbox', + enabled: false, + inputArgs: [ + '-hwaccel', + 'videotoolbox', + ], + outputArgs: [], + filter: '', + }, + // av1 + { + encoder: 'av1_nvenc', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + { + encoder: 'av1_amf', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + { + encoder: 'av1_qsv', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + { + encoder: 'av1_vaapi', + enabled: false, + inputArgs: [], + outputArgs: [], + filter: '', + }, + ]; + filteredGpuEncoders = gpuEncoders.filter(function (device) { return encoderFilter(device.encoder, targetCodec); }); + if (hardwareEncoding && hardwareType !== 'auto') { + idx = filteredGpuEncoders.findIndex(function (device) { return device.encoder.includes(hardwareType); }); + if (idx === -1) { + throw new Error("Could not find encoder ".concat(targetCodec, " for hardware ").concat(hardwareType)); + } + return [2 /*return*/, __assign(__assign({}, filteredGpuEncoders[idx]), { isGpu: true, enabledDevices: [] })]; + } + args.jobLog(JSON.stringify({ filteredGpuEncoders: filteredGpuEncoders })); + _i = 0, filteredGpuEncoders_1 = filteredGpuEncoders; + _d.label = 1; + case 1: + if (!(_i < filteredGpuEncoders_1.length)) return [3 /*break*/, 4]; + gpuEncoder = filteredGpuEncoders_1[_i]; + // eslint-disable-next-line no-await-in-loop + _c = gpuEncoder; + return [4 /*yield*/, (0, exports.hasEncoder)({ + ffmpegPath: args.ffmpegPath, + encoder: gpuEncoder.encoder, + inputArgs: gpuEncoder.inputArgs, + outputArgs: gpuEncoder.outputArgs, + filter: gpuEncoder.filter, + args: args, + })]; + case 2: + // eslint-disable-next-line no-await-in-loop + _c.enabled = _d.sent(); + _d.label = 3; + case 3: + _i++; + return [3 /*break*/, 1]; + case 4: + enabledDevices = filteredGpuEncoders.filter(function (device) { return device.enabled === true; }); + args.jobLog(JSON.stringify({ enabledDevices: enabledDevices })); + if (enabledDevices.length > 0) { + if (enabledDevices[0].encoder.includes('nvenc')) { + res = (0, exports.getBestNvencDevice)({ + args: args, + nvencDevice: enabledDevices[0], + }); + return [2 /*return*/, __assign(__assign({}, res), { isGpu: true, enabledDevices: enabledDevices })]; + } + return [2 /*return*/, { + encoder: enabledDevices[0].encoder, + inputArgs: enabledDevices[0].inputArgs, + outputArgs: enabledDevices[0].outputArgs, + isGpu: true, + enabledDevices: enabledDevices, + }]; + } + return [3 /*break*/, 6]; + case 5: + if (!hardwareEncoding) { + args.jobLog('Hardware encoding is disabled in plugin input options'); + } + if (!args.workerType || !args.workerType.includes('gpu')) { + args.jobLog('Worker type is not GPU'); + } + if (!supportedGpuEncoders.includes(targetCodec)) { + args.jobLog("Target codec ".concat(targetCodec, " is not supported for GPU encoding")); + } + _d.label = 6; + case 6: + if (targetCodec === 'hevc') { + return [2 /*return*/, { + encoder: 'libx265', inputArgs: [], outputArgs: [], - filter: '', - }, - { - encoder: 'av1_vaapi', - enabled: false, + isGpu: false, + enabledDevices: [], + }]; + } + if (targetCodec === 'h264') { + return [2 /*return*/, { + encoder: 'libx264', inputArgs: [], outputArgs: [], - filter: '', - }, - ]; - filteredGpuEncoders = gpuEncoders.filter(function (device) { return encoderFilter(device.encoder, targetCodec); }); - if (hardwareEncoding && hardwareType !== 'auto') { - idx = filteredGpuEncoders.findIndex(function (device) { return device.encoder.includes(hardwareType); }); - if (idx === -1) { - throw new Error("Could not find encoder ".concat(targetCodec, " for hardware ").concat(hardwareType)); - } - return [2 /*return*/, __assign(__assign({}, filteredGpuEncoders[idx]), { isGpu: true, enabledDevices: [] })]; - } - args.jobLog(JSON.stringify({ filteredGpuEncoders: filteredGpuEncoders })); - _i = 0, filteredGpuEncoders_1 = filteredGpuEncoders; - _c.label = 1; - case 1: - if (!(_i < filteredGpuEncoders_1.length)) return [3 /*break*/, 4]; - gpuEncoder = filteredGpuEncoders_1[_i]; - // eslint-disable-next-line no-await-in-loop - _b = gpuEncoder; - return [4 /*yield*/, (0, exports.hasEncoder)({ - ffmpegPath: args.ffmpegPath, - encoder: gpuEncoder.encoder, - inputArgs: gpuEncoder.inputArgs, - outputArgs: gpuEncoder.outputArgs, - filter: gpuEncoder.filter, - args: args, - })]; - case 2: - // eslint-disable-next-line no-await-in-loop - _b.enabled = _c.sent(); - _c.label = 3; - case 3: - _i++; - return [3 /*break*/, 1]; - case 4: - enabledDevices = filteredGpuEncoders.filter(function (device) { return device.enabled === true; }); - args.jobLog(JSON.stringify({ enabledDevices: enabledDevices })); - if (enabledDevices.length > 0) { - if (enabledDevices[0].encoder.includes('nvenc')) { - res = (0, exports.getBestNvencDevice)({ - args: args, - nvencDevice: enabledDevices[0], - }); - return [2 /*return*/, __assign(__assign({}, res), { isGpu: true, enabledDevices: enabledDevices })]; - } - return [2 /*return*/, { - encoder: enabledDevices[0].encoder, - inputArgs: enabledDevices[0].inputArgs, - outputArgs: enabledDevices[0].outputArgs, - isGpu: true, - enabledDevices: enabledDevices, - }]; - } - return [3 /*break*/, 6]; - case 5: - if (!hardwareEncoding) { - args.jobLog('Hardware encoding is disabled in plugin input options'); - } - if (!args.workerType || !args.workerType.includes('gpu')) { - args.jobLog('Worker type is not GPU'); - } - if (!supportedGpuEncoders.includes(targetCodec)) { - args.jobLog("Target codec ".concat(targetCodec, " is not supported for GPU encoding")); - } - _c.label = 6; - case 6: - if (targetCodec === 'hevc') { - return [2 /*return*/, { - encoder: 'libx265', - inputArgs: [], - outputArgs: [], - isGpu: false, - enabledDevices: [], - }]; - } - if (targetCodec === 'h264') { - return [2 /*return*/, { - encoder: 'libx264', - inputArgs: [], - outputArgs: [], - isGpu: false, - enabledDevices: [], - }]; - } - if (targetCodec === 'av1') { - return [2 /*return*/, { - encoder: 'libsvtav1', - inputArgs: [], - outputArgs: [], - isGpu: false, - enabledDevices: [], - }]; - } + isGpu: false, + enabledDevices: [], + }]; + } + if (targetCodec === 'av1') { return [2 /*return*/, { - encoder: targetCodec, + encoder: 'libsvtav1', inputArgs: [], outputArgs: [], isGpu: false, enabledDevices: [], }]; - } - }); + } + return [2 /*return*/, { + encoder: targetCodec, + inputArgs: [], + outputArgs: [], + isGpu: false, + enabledDevices: [], + }]; + } }); -}; +}); }; exports.getEncoder = getEncoder; From 6166203ccc3a66702b7859cbb0cd145ff5db7ac3 Mon Sep 17 00:00:00 2001 From: HaveAGitGat <43864057+HaveAGitGat@users.noreply.github.com> Date: Mon, 6 May 2024 06:41:39 +0100 Subject: [PATCH 9/9] Log tsc version --- .github/workflows/lint_and_test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint_and_test.yml b/.github/workflows/lint_and_test.yml index 2747f2617..bb54dd234 100644 --- a/.github/workflows/lint_and_test.yml +++ b/.github/workflows/lint_and_test.yml @@ -54,7 +54,7 @@ jobs: with: node-version: '18.x' - - run: npm i && npm i -g typescript && rm -rdf ./FlowPlugins && tsc + - run: npm i && npm i -g typescript && rm -rdf ./FlowPlugins && tsc -v && tsc - uses: stefanzweifel/git-auto-commit-action@v5 with: