From 74a39a8f9add75a59ffe7020c11eea6694a9da19 Mon Sep 17 00:00:00 2001 From: Maveno Date: Sun, 24 Nov 2024 14:01:55 +0100 Subject: [PATCH] #433 Descriptor Pattern Checks --- src/ffx/ffx.py | 51 +++++++++++++++++++++++--------------------------- 1 file changed, 23 insertions(+), 28 deletions(-) diff --git a/src/ffx/ffx.py b/src/ffx/ffx.py index a14a2f7..4319ab3 100755 --- a/src/ffx/ffx.py +++ b/src/ffx/ffx.py @@ -548,10 +548,8 @@ def convert(ctx, targetSuffices = {} - mediaFileProperties = FileProperties(context, sourcePath) - ssc = ShiftedSeasonController(context) showId = mediaFileProperties.getShowId() @@ -598,9 +596,29 @@ def convert(ctx, targetMediaDescriptor = currentPattern.getMediaDescriptor(ctx.obj) checkUniqueDispositions(context, targetMediaDescriptor) currentShowDescriptor = currentPattern.getShowDescriptor(ctx.obj) - - if len(sourceMediaDescriptor.getTrackDescriptors()) != len(targetMediaDescriptor.getTrackDescriptors()): - raise click.ClickException(f"Number of source streams differs from stored media descriptor") + + + # Check if source and target track descriptors match + sourceTrackDescriptorList = sourceMediaDescriptor.getTrackDescriptors() + targetTrackDescriptorList = targetMediaDescriptor.getTrackDescriptors() + + for ttd in targetTrackDescriptorList: + + tti = ttd.getIndex() + ttsi = ttd.getSourceIndex() + + stList = [st for st in sourceTrackDescriptorList if st.getIndex() == ttsi] + std = stList[0] if stList else None + + if std is None: + raise click.ClickException(f"Target track #{tti} refering to non-existent source track #{ttsi}") + + ttType = ttd.getType() + stType = std.getType() + + if ttType != stType: + raise click.ClickException(f"Target track #{tti} type ({ttType.label()}) not matching source track #{ttsi} type ({stType.label()})") + if context['import_subtitles']: targetMediaDescriptor.importSubtitles(context['subtitle_directory'], @@ -681,12 +699,8 @@ def convert(ctx, for chainIteration in chainYield: - ctx.obj['logger'].debug(f"\nchain iteration: {chainIteration}\n") - # if len(q_list) > 1: - # targetSuffices['q'] = f"q{q}" - chainVariant = '-'.join([fy['variant'] for fy in chainIteration]) ctx.obj['logger'].debug(f"\nRunning job {jobIndex} file={sourcePath} variant={chainVariant}") @@ -695,37 +709,20 @@ def convert(ctx, ctx.obj['logger'].debug(f"label={label if label else 'Falsy'}") ctx.obj['logger'].debug(f"sourceFileBasename={sourceFileBasename}") - # targetFileBasename = mediaFileProperties.assembleTargetFileBasename(label, - # q if len(q_list) > 1 else -1, - # targetFileBasename = sourceFileBasename if context['use_tmdb'] and not label else label - targetFilenameTokens = [targetFileBasename] if 'se' in targetSuffices.keys(): targetFilenameTokens += [targetSuffices['se']] - # if 'q' in targetSuffices.keys(): - # targetFilenameTokens += [targetSuffices['q']] for filterYield in chainIteration: - - # filterIdentifier = filterYield['identifier'] - # filterParameters = filterYield['parameters'] - # filterSuffices = filterYield['suffices'] - targetFilenameTokens += filterYield['suffices'] - #TODO #387 - # targetFilename = ((f"{sourceFileBasename}_q{q}" if len(q_list) > 1 else sourceFileBasename) - # if context['use_tmdb'] else targetFileBasename) - targetFilename = f"{'_'.join(targetFilenameTokens)}.{targetExtension}" - # targetPath = os.path.join(output_directory if output_directory else sourceDirectory, targetFilename) targetPath = os.path.join(output_directory, targetFilename) if output_directory else targetFilename - #TODO: target extension anpassen ctx.obj['logger'].info(f"Creating file {targetFilename}") fc.runJob(sourcePath, @@ -734,8 +731,6 @@ def convert(ctx, context['video_encoder'], chainIteration) - #TODO: click.confirm('Warning! This file is not compliant to the defined source schema! Do you want to continue?', abort=True) - endTime = time.perf_counter() ctx.obj['logger'].info(f"\nDONE\nTime elapsed {endTime - startTime}")