diff --git a/bin/ffx.py b/bin/ffx.py index 3cbc36d..f31a954 100755 --- a/bin/ffx.py +++ b/bin/ffx.py @@ -238,7 +238,7 @@ def convert(ctx, cTokens = crop.split(',') if cTokens and len(cTokens) == 2: context['crop_start'] = int(cTokens[0]) - context['crop_lenght'] = int(cTokens[1]) + context['crop_length'] = int(cTokens[1]) click.echo(f"Crop start={context['crop_start']} length={context['crop_length']}") @@ -337,6 +337,9 @@ def convert(ctx, tmdbEpisodeResult = tc.queryEpisode(currentShowDescriptor.getId(), mediaFileProperties.getSeason(), mediaFileProperties.getEpisode()) # click.echo(f"{tmdbEpisodeResult}") + + #print(type(tmdbEpisodeResult['name'])) + #quit() if tmdbEpisodeResult: fileBasename = tc.getEpisodeFileBasename(currentShowDescriptor.getFilenamePrefix(), @@ -359,7 +362,7 @@ def convert(ctx, targetMediaDescriptor.setJellyfinOrder(context['jellyfin']) - click.echo(f"Input mapping tokens: {targetMediaDescriptor.getInputMappingTokens()}") + click.echo(f"Input mapping tokens (2nd pass): {targetMediaDescriptor.getInputMappingTokens()}") fc = FfxController(context, targetMediaDescriptor, sourceMediaDescriptor) diff --git a/bin/ffx/ffx_controller.py b/bin/ffx/ffx_controller.py index 68926c3..6db1b2e 100644 --- a/bin/ffx/ffx_controller.py +++ b/bin/ffx/ffx_controller.py @@ -107,7 +107,8 @@ class FfxController(): def generateOutputTokens(self, filepath, format, ext): - return ['-f', format, f"{filepath}.{ext}"] + outputFilePath = f"{filepath}.{ext}" + return ['-f', format, outputFilePath] def generateAudioEncodingTokens(self): @@ -199,155 +200,193 @@ class FfxController(): return dispositionTokens - def generateMetadataTokens(self): - """Source media descriptor is mandatory""" - - metadataTokens = [] - - # click.echo(f"source media descriptor: track indices={[d.getIndex() for d in sourceMediaDescriptor.getAllTrackDescriptors()]}") - # click.echo(f"target media descriptor: track indices={[d.getIndex() for d in targetMediaDescriptor.getAllTrackDescriptors()]}") +# def generateMetadataTokens(self): +# """Source media descriptor is mandatory""" +# +# metadataTokens = [] +# +# # click.echo(f"source media descriptor: track indices={[d.getIndex() for d in sourceMediaDescriptor.getAllTrackDescriptors()]}") +# # click.echo(f"target media descriptor: track indices={[d.getIndex() for d in targetMediaDescriptor.getAllTrackDescriptors()]}") +# +# # +jellyfin -jellyfin +# mediaDifferences = self.__targetMediaDescriptor.compare(self.__sourceMediaDescriptor) +# +# # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}} +# +# click.echo(f"media diff {mediaDifferences}") +# +# if MediaDescriptor.TAGS_KEY in mediaDifferences.keys(): +# +# sourceTags = self.__sourceMediaDescriptor.getTags() +# targetTags = self.__targetMediaDescriptor.getTags() +# +# #TODO: Warum erscheint nur -1 im output? +# if DIFF_REMOVED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys(): +# # for removedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_REMOVED_KEY]: +# # row = (f"removed media tag: key='{removedTagKey}' value='{sourceTags[removedTagKey]}'",) +# # self.differencesTable.add_row(*map(str, row)) +# pass +# #metadataTokens += [f"-map_metadata:g", "-1"] +# +# #for targetMediaTagKey in targetTags: +# #metadataTokens += [f"-metadata:g", f"{targetMediaTagKey}={targetTags[targetMediaTagKey]}"] +# +# else: +# +# if DIFF_ADDED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys(): +# for addedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY]: +# # row = (f"added media tag: key='{addedTagKey}' value='{targetTags[addedTagKey]}'",) +# click.echo(f"added metadata key='{addedTagKey}' value='{targetTags[addedTagKey]}'->'{targetTags[addedTagKey]}'") +# # self.differencesTable.add_row(*map(str, row)) +# #pass +# metadataTokens += [f"-metadata:g", f"{addedTagKey}={targetTags[addedTagKey]}"] +# +# +# +# if DIFF_CHANGED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys(): +# for changedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_CHANGED_KEY]: +# #row = (f"changed media tag: key='{changedTagKey}' value='{sourceTags[changedTagKey]}'->'{targetTags[changedTagKey]}'",) +# click.echo(f"changed metadata key='{changedTagKey}' value='{sourceTags[changedTagKey]}'->'{targetTags[changedTagKey]}'") +# # self.differencesTable.add_row(*map(str, row)) +# #pass +# metadataTokens += [f"-metadata:g", f"{changedTagKey}={targetTags[changedTagKey]}"] +# +# if MediaDescriptor.TRACKS_KEY in mediaDifferences.keys(): +# +# sourceTrackDescriptors = self.__sourceMediaDescriptor.getAllTrackDescriptors() +# targetTrackDescriptors = self.__targetMediaDescriptor.getReorderedTrackDescriptors() +# +# if DIFF_ADDED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys(): +# addedTracksIndices = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY] +# raise click.ClickException(f"FfxController.generateMetadataTokens(): Adding tracks is not supported. Track indices {addedTracksIndices}") +# +# #raise click.ClickException(f"add track {mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY]}") +# #for addedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY]: +# #addedTrack : Track = targetTrackDescriptors[addedTrackIndex] +# # row = (f"added {addedTrack.getType().label()} track: index={addedTrackIndex} lang={addedTrack.getLanguage().threeLetter()}",) +# # self.differencesTable.add_row(*map(str, row)) +# +# if DIFF_REMOVED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys(): +# removedTracksIndices = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY].keys() +# raise click.ClickException(f"FfxController.generateMetadataTokens(): Removing tracks is not supported. Track indices {removedTracksIndices}") +# #for removedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_REMOVED_KEY]: +# # row = (f"removed track: index={removedTrackIndex}",) +# # self.differencesTable.add_row(*map(str, row)) +# +# # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}} +# if DIFF_CHANGED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys(): +# for changedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_CHANGED_KEY].keys(): +# +# changedTargetTrackDescriptor : TrackDescriptor = targetTrackDescriptors[changedTrackIndex] +# changedTargetTrackSourceIndex = changedTargetTrackDescriptor.getSourceIndex() +# changedTargetSourceSubIndex = sourceTrackDescriptors[changedTargetTrackSourceIndex].getSubIndex() +# # changedSourceTrackDescriptor : TrackDescriptor = sourceTrackDescriptors[changedTargetTrackSourceIndex] +# # changedSourceTrackSubIndex = changedSourceTrackDescriptor.getSubIndex() +# +# changedTrackDiff : dict = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_CHANGED_KEY][changedTrackIndex] +# +# if MediaDescriptor.TAGS_KEY in changedTrackDiff.keys(): +# +# +# if DIFF_REMOVED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]: +# #for removedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_REMOVED_KEY]: +# # row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} removed key={removedTagKey}",) +# # self.differencesTable.add_row(*map(str, row)) +# +# #addedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[addedTagKey] +# +# metadataTokens += [f"-map_metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}", "-1"] +# +# for targetTrackTagKey, targetTrackTagValue in changedTargetTrackDescriptor.getTags(): +# metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}", +# f"{targetTrackTagKey}={targetTrackTagValue}"] +# +# else: +# +# # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}} +# if DIFF_ADDED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]: +# for addedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY]: +# +# addedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[addedTagKey] +# +# # addedTagValue = changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY][addedTagKey] +# +# # click.echo(f"addedTagValue={addedTagValue}") +# # click.echo(f"sourceTrackDescriptors: subindex={[s.getSubIndex() for s in sourceTrackDescriptors]} sourceindex={[s.getSourceIndex() for s in sourceTrackDescriptors]} tags={[s.getTags() for s in sourceTrackDescriptors]}") +# # click.echo(f"targetTrackDescriptors: subindex={[t.getSubIndex() for t in targetTrackDescriptors]} sourceindex={[t.getSourceIndex() for t in targetTrackDescriptors]} tags={[t.getTags() for t in targetTrackDescriptors]}") +# # click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}") +# +# metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}", +# f"{addedTagKey}={addedTagValue}"] +# +# # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}} +# if DIFF_CHANGED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]: +# for changedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_CHANGED_KEY]: +# +# changedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[changedTagKey] +# # sourceSubIndex = sourceTrackDescriptors[changedTargetTrackSourceIndex].getSubIndex() +# # addedTagValue = changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY][addedTagKey] +# +# # click.echo(f"addedTagValue={addedTagValue}") +# # click.echo(f"sourceTrackDescriptors: subindex={[s.getSubIndex() for s in sourceTrackDescriptors]} sourceindex={[s.getSourceIndex() for s in sourceTrackDescriptors]} tags={[s.getTags() for s in sourceTrackDescriptors]}") +# # click.echo(f"targetTrackDescriptors: subindex={[t.getSubIndex() for t in targetTrackDescriptors]} sourceindex={[t.getSourceIndex() for t in targetTrackDescriptors]} tags={[t.getTags() for t in targetTrackDescriptors]}") +# # click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}") +# +# metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}", +# f"{changedTagKey}={changedTagValue}"] +# +# # if TrackDescriptor.DISPOSITION_SET_KEY in changedTrackDiff.keys(): +# +# # if DIFF_ADDED_KEY in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY]: +# # for addedDisposition in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY][DIFF_ADDED_KEY]: +# # # row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} added disposition={addedDisposition.label()}",) +# # # self.differencesTable.add_row(*map(str, row)) +# # pass +# +# # if DIFF_REMOVED_KEY in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY]: +# # for removedDisposition in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY][DIFF_REMOVED_KEY]: +# # # row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} removed disposition={removedDisposition.label()}",) +# # # self.differencesTable.add_row(*map(str, row)) +# # pass + +# return metadataTokens - # +jellyfin -jellyfin - mediaDifferences = self.__targetMediaDescriptor.compare(self.__sourceMediaDescriptor) - # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}} - click.echo(f"media diff {mediaDifferences}") - - if MediaDescriptor.TAGS_KEY in mediaDifferences.keys(): - - sourceTags = self.__sourceMediaDescriptor.getTags() - targetTags = self.__targetMediaDescriptor.getTags() - - #TODO: Warum erscheint nur -1 im output? - if DIFF_REMOVED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys(): - # for removedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_REMOVED_KEY]: - # row = (f"removed media tag: key='{removedTagKey}' value='{sourceTags[removedTagKey]}'",) - # self.differencesTable.add_row(*map(str, row)) - metadataTokens += [f"-map_metadata:g", "-1"] - - for targetMediaTagKey in targetTags: - metadataTokens += [f"-metadata:g", f"{targetMediaTagKey}={targetTags[targetMediaTagKey]}"] + def generateMetadataTokens(self): - else: + metadataTokens = [] - if DIFF_ADDED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys(): - for addedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY]: - # row = (f"added media tag: key='{addedTagKey}' value='{targetTags[addedTagKey]}'",) - click.echo(f"added metadata key='{addedTagKey}' value='{targetTags[addedTagKey]}'->'{targetTags[addedTagKey]}'") - # self.differencesTable.add_row(*map(str, row)) - #pass - metadataTokens += [f"-metadata:g", f"{addedTagKey}={targetTags[addedTagKey]}"] + for tagKey, tagValue in self.__targetMediaDescriptor.getTags().items(): + + metadataTokens += [f"-metadata:g", + f"{tagKey}={tagValue}"] + #NOTE: With current version track metadata tags are not passed to the outfile + targetTrackDescriptors = self.__targetMediaDescriptor.getReorderedTrackDescriptors() - if DIFF_CHANGED_KEY in mediaDifferences[MediaDescriptor.TAGS_KEY].keys(): - for changedTagKey in mediaDifferences[MediaDescriptor.TAGS_KEY][DIFF_CHANGED_KEY]: - #row = (f"changed media tag: key='{changedTagKey}' value='{sourceTags[changedTagKey]}'->'{targetTags[changedTagKey]}'",) - click.echo(f"changed metadata key='{changedTagKey}' value='{sourceTags[changedTagKey]}'->'{targetTags[changedTagKey]}'") - # self.differencesTable.add_row(*map(str, row)) - #pass - metadataTokens += [f"-metadata:g", f"{changedTagKey}={targetTags[changedTagKey]}"] - if MediaDescriptor.TRACKS_KEY in mediaDifferences.keys(): + for d in targetTrackDescriptors: - sourceTrackDescriptors = self.__sourceMediaDescriptor.getAllTrackDescriptors() - targetTrackDescriptors = self.__targetMediaDescriptor.getReorderedTrackDescriptors() + # changedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[changedTagKey] + # sourceSubIndex = sourceTrackDescriptors[changedTargetTrackSourceIndex].getSubIndex() + # addedTagValue = changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY][addedTagKey] - if DIFF_ADDED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys(): - addedTracksIndices = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY] - raise click.ClickException(f"FfxController.generateMetadataTokens(): Adding tracks is not supported. Track indices {addedTracksIndices}") + # click.echo(f"addedTagValue={addedTagValue}") + # click.echo(f"sourceTrackDescriptors: subindex={[s.getSubIndex() for s in sourceTrackDescriptors]} sourceindex={[s.getSourceIndex() for s in sourceTrackDescriptors]} tags={[s.getTags() for s in sourceTrackDescriptors]}") + # click.echo(f"targetTrackDescriptors: subindex={[t.getSubIndex() for t in targetTrackDescriptors]} sourceindex={[t.getSourceIndex() for t in targetTrackDescriptors]} tags={[t.getTags() for t in targetTrackDescriptors]}") + # click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}") + for tagKey, tagValue in d.getTags().items(): + + metadataTokens += [f"-metadata:s:{d.getType().indicator()}:{d.getSubIndex()}", + f"{tagKey}={tagValue}"] - #raise click.ClickException(f"add track {mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY]}") - #for addedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY]: - #addedTrack : Track = targetTrackDescriptors[addedTrackIndex] - # row = (f"added {addedTrack.getType().label()} track: index={addedTrackIndex} lang={addedTrack.getLanguage().threeLetter()}",) - # self.differencesTable.add_row(*map(str, row)) + return metadataTokens - if DIFF_REMOVED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys(): - removedTracksIndices = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_ADDED_KEY].keys() - raise click.ClickException(f"FfxController.generateMetadataTokens(): Removing tracks is not supported. Track indices {removedTracksIndices}") - #for removedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_REMOVED_KEY]: - # row = (f"removed track: index={removedTrackIndex}",) - # self.differencesTable.add_row(*map(str, row)) - # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}} - if DIFF_CHANGED_KEY in mediaDifferences[MediaDescriptor.TRACKS_KEY].keys(): - for changedTrackIndex in mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_CHANGED_KEY].keys(): - changedTargetTrackDescriptor : TrackDescriptor = targetTrackDescriptors[changedTrackIndex] - changedTargetTrackSourceIndex = changedTargetTrackDescriptor.getSourceIndex() - changedTargetSourceSubIndex = sourceTrackDescriptors[changedTargetTrackSourceIndex].getSubIndex() - # changedSourceTrackDescriptor : TrackDescriptor = sourceTrackDescriptors[changedTargetTrackSourceIndex] - # changedSourceTrackSubIndex = changedSourceTrackDescriptor.getSubIndex() - - changedTrackDiff : dict = mediaDifferences[MediaDescriptor.TRACKS_KEY][DIFF_CHANGED_KEY][changedTrackIndex] - - if MediaDescriptor.TAGS_KEY in changedTrackDiff.keys(): - - - if DIFF_REMOVED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]: - #for removedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_REMOVED_KEY]: - # row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} removed key={removedTagKey}",) - # self.differencesTable.add_row(*map(str, row)) - - #addedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[addedTagKey] - - metadataTokens += [f"-map_metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}", "-1"] - - for targetTrackTagKey, targetTrackTagValue in changedTargetTrackDescriptor.getTags(): - metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}", - f"{targetTrackTagKey}={targetTrackTagValue}"] - - else: - - # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}} - if DIFF_ADDED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]: - for addedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY]: - - addedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[addedTagKey] - - # addedTagValue = changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY][addedTagKey] - - # click.echo(f"addedTagValue={addedTagValue}") - # click.echo(f"sourceTrackDescriptors: subindex={[s.getSubIndex() for s in sourceTrackDescriptors]} sourceindex={[s.getSourceIndex() for s in sourceTrackDescriptors]} tags={[s.getTags() for s in sourceTrackDescriptors]}") - # click.echo(f"targetTrackDescriptors: subindex={[t.getSubIndex() for t in targetTrackDescriptors]} sourceindex={[t.getSourceIndex() for t in targetTrackDescriptors]} tags={[t.getTags() for t in targetTrackDescriptors]}") - # click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}") - - metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}", - f"{addedTagKey}={addedTagValue}"] - - # media diff {'tracks': {'changed': {4: {'tags': {'added': {'Yolo'}}}}}} - if DIFF_CHANGED_KEY in changedTrackDiff[MediaDescriptor.TAGS_KEY]: - for changedTagKey in changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_CHANGED_KEY]: - - changedTagValue = targetTrackDescriptors[changedTargetTrackSourceIndex].getTags()[changedTagKey] - # sourceSubIndex = sourceTrackDescriptors[changedTargetTrackSourceIndex].getSubIndex() - # addedTagValue = changedTrackDiff[MediaDescriptor.TAGS_KEY][DIFF_ADDED_KEY][addedTagKey] - - # click.echo(f"addedTagValue={addedTagValue}") - # click.echo(f"sourceTrackDescriptors: subindex={[s.getSubIndex() for s in sourceTrackDescriptors]} sourceindex={[s.getSourceIndex() for s in sourceTrackDescriptors]} tags={[s.getTags() for s in sourceTrackDescriptors]}") - # click.echo(f"targetTrackDescriptors: subindex={[t.getSubIndex() for t in targetTrackDescriptors]} sourceindex={[t.getSourceIndex() for t in targetTrackDescriptors]} tags={[t.getTags() for t in targetTrackDescriptors]}") - # click.echo(f"changed track_index={changedTrackIndex} indicator={changedTargetTrackDescriptor.getType().indicator()} key={addedTagKey} value={addedTagValue} source_index={changedSourceTrackIndex}") - - metadataTokens += [f"-metadata:s:{changedTargetTrackDescriptor.getType().indicator()}:{changedTargetSourceSubIndex}", - f"{changedTagKey}={changedTagValue}"] - - # if TrackDescriptor.DISPOSITION_SET_KEY in changedTrackDiff.keys(): - - # if DIFF_ADDED_KEY in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY]: - # for addedDisposition in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY][DIFF_ADDED_KEY]: - # # row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} added disposition={addedDisposition.label()}",) - # # self.differencesTable.add_row(*map(str, row)) - # pass - - # if DIFF_REMOVED_KEY in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY]: - # for removedDisposition in changedTrackDiff[TrackDescriptor.DISPOSITION_SET_KEY][DIFF_REMOVED_KEY]: - # # row = (f"changed {changedTargetTrackDescriptor.getType().label()} track index={changedTrackIndex} removed disposition={removedDisposition.label()}",) - # # self.differencesTable.add_row(*map(str, row)) - # pass - return metadataTokens def runJob(self, diff --git a/bin/ffx/media_descriptor.py b/bin/ffx/media_descriptor.py index 44809f0..747a813 100644 --- a/bin/ffx/media_descriptor.py +++ b/bin/ffx/media_descriptor.py @@ -165,44 +165,37 @@ class MediaDescriptor: TrackDisposition.FORCED, t.getSubIndex() == int(subIndex) ) + def checkDefaultAndForcedDispositions(self): - try: - self.getDefaultVideoTrack() - self.getForcedVideoTrack() - self.getDefaultAudioTrack() - self.getForcedAudioTrack() - self.getDefaultSubtitleTrack() - self.getForcedSubtitleTrack() - return True - except ValueError: - return False + + videoTracks = self.getVideoTracks() + audioTracks = self.getAudioTracks() + subtitleTracks = self.getSubtitleTracks() + + if len([v for v in videoTracks if v.getDispositionFlag(TrackDisposition.DEFAULT)]) > 1: + raise ValueError('More than one default video track') + if len([a for a in audioTracks if a.getDispositionFlag(TrackDisposition.DEFAULT)]) > 1: + raise ValueError('More than one default audio track') + if len([s for s in subtitleTracks if s.getDispositionFlag(TrackDisposition.DEFAULT)]) > 1: + raise ValueError('More than one default subtitle track') + + if len([v for v in videoTracks if v.getDispositionFlag(TrackDisposition.FORCED)]) > 1: + raise ValueError('More than one forced video track') + if len([a for a in audioTracks if a.getDispositionFlag(TrackDisposition.FORCED)]) > 1: + raise ValueError('More than one forced audio track') + if len([s for s in subtitleTracks if s.getDispositionFlag(TrackDisposition.FORCED)]) > 1: + raise ValueError('More than one forced subtitle track') + + trackDescriptors = videoTracks + audioTracks + subtitleTracks + sourceIndices = [ + t.getSourceIndex() for t in trackDescriptors + ] + if len(set(sourceIndices)) < len(trackDescriptors): + raise ValueError('Multiple streams originating from the same source stream') def getReorderedTrackDescriptors(self): - videoTracks = self.sortSubIndices(self.getVideoTracks()) - audioTracks = self.sortSubIndices(self.getAudioTracks()) - subtitleTracks = self.sortSubIndices(self.getSubtitleTracks()) - - videoDefaultTrack = self.getDefaultVideoTrack() - self.getForcedVideoTrack() - audioDefaultTrack = self.getDefaultAudioTrack() - self.getForcedAudioTrack() - subtitleDefaultTrack = self.getDefaultSubtitleTrack() - self.getForcedSubtitleTrack() - - if self.__jellyfinOrder: - if not videoDefaultTrack is None: - videoTracks.append( - videoTracks.pop(videoTracks.index(videoDefaultTrack)) - ) - if not audioDefaultTrack is None: - audioTracks.append( - audioTracks.pop(audioTracks.index(audioDefaultTrack)) - ) - if not subtitleDefaultTrack is None: - subtitleTracks.append( - subtitleTracks.pop(subtitleTracks.index(subtitleDefaultTrack)) - ) + reorderedTrackDescriptors = videoTracks + audioTracks + subtitleTracks orderedSourceTrackSequence = [ @@ -216,6 +209,28 @@ class MediaDescriptor: return reorderedTrackDescriptors + def applyJellyfinOrder(self): + + # videoTracks = self.sortSubIndices(self.getVideoTracks()) + # audioTracks = self.sortSubIndices(self.getAudioTracks()) + # subtitleTracks = self.sortSubIndices(self.getSubtitleTracks()) + + videoTracks = self.getVideoTracks() + audioTracks = self.getAudioTracks() + subtitleTracks = self.getSubtitleTracks() + + if len([v for v in videoTracks if v.getDispositionFlag(TrackDisposition.DEFAULT)]) > 1: + pass + if len([a for a in audioTracks if a.getDispositionFlag(TrackDisposition.DEFAULT)]) > 1: + pass + if len([s for s in subtitleTracks if s.getDispositionFlag(TrackDisposition.DEFAULT)]): + pass + + videoTracks.append(videoTracks.pop(videoTracks.index(videoTracks))) + audioTracks.append(audioTracks.pop(audioTracks.index(audioTracks))) + subtitleTracks.append(subtitleTracks.pop(subtitleTracks.index(subtitleTracks))) + + @classmethod def fromFfprobe(cls, formatData, streamData): @@ -282,11 +297,11 @@ class MediaDescriptor: if s.getType() == TrackType.SUBTITLE ] - def getJellyfin(self): - return self.__jellyfinOrder - - def setJellyfinOrder(self, state): - self.__jellyfinOrder = state + # def getJellyfin(self): + # return self.__jellyfinOrder +# + # def setJellyfinOrder(self, state): + # self.__jellyfinOrder = state def getClearTags(self): return self.__clearTags diff --git a/bin/ffx/process.py b/bin/ffx/process.py index ad484b7..e78588e 100644 --- a/bin/ffx/process.py +++ b/bin/ffx/process.py @@ -1,6 +1,9 @@ import subprocess +from typing import List -def executeProcess(commandSequence): - process = subprocess.Popen(commandSequence, stdout=subprocess.PIPE, stderr=subprocess.PIPE) +def executeProcess(commandSequence: List[str]): + # process = subprocess.Popen([t.encode('utf-8') for t in commandSequence], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + process = subprocess.Popen(commandSequence, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8') output, error = process.communicate() - return output.decode('utf-8'), error.decode('utf-8'), process.returncode + # return output.decode('utf-8'), error.decode('utf-8'), process.returncode + return output, error, process.returncode diff --git a/bin/ffx/tmdb_controller.py b/bin/ffx/tmdb_controller.py index 493c227..cc9348b 100644 --- a/bin/ffx/tmdb_controller.py +++ b/bin/ffx/tmdb_controller.py @@ -1,4 +1,4 @@ -import os, click, requests +import os, click, requests, json class TmdbController(): @@ -57,6 +57,17 @@ class TmdbController(): #TODO Check for result try: + #TODO: Content Type aware processing + # response = requests.get(tmdbUrl) + # response.encoding = 'utf-8' + # return response.json() + # response = requests.get(tmdbUrl) + + # contentType = response.headers.get('Content-Type') + # print(content_type) # Example: 'application/json; charset=UTF-8' + + # decoded_content = response.content.decode('utf-8') + # return json.loads(decoded_content) return requests.get(tmdbUrl).json() except: return {}