click-textual
Maveno 1 year ago
parent 6b99091a55
commit a280248f6a

@ -211,13 +211,8 @@ class FileProperties():
def getMediaDescriptor(self): def getMediaDescriptor(self):
return MediaDescriptor.fromFfprobe(self.getFormatData(), self.getStreamData()) return MediaDescriptor.fromFfprobe(self.getFormatData(), self.getStreamData())
# formatData = self.getFormatData()
# streamData = self.getStreamData()
def getShowId(self) -> int: def getShowId(self) -> int:
return self.__pattern.getShowId() if self.__pattern is not None else -1 return self.__pattern.getShowId() if self.__pattern is not None else -1

@ -1,3 +1,5 @@
from typing import List
from ffx.track_type import TrackType from ffx.track_type import TrackType
from ffx.track_descriptor import TrackDescriptor from ffx.track_descriptor import TrackDescriptor
@ -5,39 +7,75 @@ from ffx.track_descriptor import TrackDescriptor
class MediaDescriptor(): class MediaDescriptor():
"""This class represents the structural content of a media file including streams and metadata""" """This class represents the structural content of a media file including streams and metadata"""
TAGS_KEY = 'tags'
TRACK_DESCRIPTORS_KEY = 'track_descriptors'
CLEAR_TAGS_KEY = 'clear_tags'
FFPROBE_DISPOSITION_KEY = 'disposition'
FFPROBE_TAGS_KEY = 'tags'
FFPROBE_CODEC_TYPE_KEY = 'codec_type'
def __init__(self, **kwargs): def __init__(self, **kwargs):
self.__mediaTags = kwargs['tags'] if 'tags' in kwargs.keys() else {} if MediaDescriptor.TAGS_KEY in kwargs.keys():
self.__trackDescriptors = kwargs['trackDescriptors'] if 'trackDescriptors' in kwargs.keys() else {} if type(kwargs[MediaDescriptor.TAGS_KEY]) is not dict:
self.__clearTags = kwargs['clearTags'] if 'clearTags' in kwargs.keys() else False raise TypeError(f"MediaDescriptor.__init__(): Argument {MediaDescriptor.TAGS_KEY} is required to be of type dict")
self.__mediaTags = kwargs[MediaDescriptor.TAGS_KEY]
else:
self.__mediaTags = {}
if MediaDescriptor.TRACK_DESCRIPTORS_KEY in kwargs.keys():
# if type(kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY]) is not List[TrackDescriptor]: # Use List typehint for TrackDescriptor as well if it works
# raise TypeError(f"MediaDescriptor.__init__(): Argument {MediaDescriptor.TRACK_DESCRIPTORS_KEY} is required to be of type list containing only elements of type TrackDescriptor")
if type(kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY]) is not dict: # Use List typehint for TrackDescriptor as well if it works
raise TypeError(f"MediaDescriptor.__init__(): Argument {MediaDescriptor.TRACK_DESCRIPTORS_KEY} is required to be of type dict")
# for d in kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY]:
# if type(d) is not TrackDescriptor:
# raise TypeError(f"TrackDesciptor.__init__(): All elements of argument set {MediaDescriptor.TRACK_DESCRIPTORS_KEY} is required to be of type TrackDescriptor")
self.__trackDescriptors = kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY]
else:
self.__trackDescriptors = set()
if MediaDescriptor.CLEAR_TAGS_KEY in kwargs.keys():
if type(kwargs[MediaDescriptor.CLEAR_TAGS_KEY]) is not bool:
raise TypeError(f"MediaDescriptor.__init__(): Argument {MediaDescriptor.CLEAR_TAGS_KEY} is required to be of type bool")
self.__clearTags = kwargs[MediaDescriptor.CLEAR_TAGS_KEY]
else:
self.__clearTags = False
@classmethod @classmethod
def fromFfprobe(cls, formatData, streamData): def fromFfprobe(cls, formatData, streamData):
descriptors = {} trackDescriptors = {}
for streamObj in streamData: for streamObj in streamData:
trackType = TrackType.fromLabel(streamObj['codec_type']) trackType = TrackType.fromLabel(streamObj[MediaDescriptor.FFPROBE_CODEC_TYPE_KEY])
if trackType != TrackType.UNKNOWN: if trackType != TrackType.UNKNOWN:
if trackType.label() not in descriptors.keys(): if trackType.label() not in trackDescriptors.keys():
descriptors[trackType.label()] = [] trackDescriptors[trackType.label()] = []
trackDescriptors[trackType.label()].append(TrackDescriptor.fromFfprobe(streamObj))
descriptors[trackType.label()].append(TrackDescriptor.fromFfprobe(streamObj)) kwargs = {}
if MediaDescriptor.FFPROBE_TAGS_KEY in formatData.keys():
kwargs[MediaDescriptor.TAGS_KEY] = formatData[MediaDescriptor.FFPROBE_TAGS_KEY]
kwargs[MediaDescriptor.TRACK_DESCRIPTORS_KEY] = trackDescriptors
return cls(tags=formatData['tags'] if 'tags' in formatData.keys() else {}, return cls(**kwargs)
trackDescriptors = descriptors)
def getTags(self): def getTags(self):
return self.__mediaTags return self.__mediaTags
def getAudioTracks(self): def getAudioTracks(self) -> List[TrackDescriptor]:
return self.__trackDescriptors[TrackType.AUDIO.label()] if TrackType.AUDIO.label() in self.__trackDescriptors.keys() else [] return self.__trackDescriptors[TrackType.AUDIO.label()] if TrackType.AUDIO.label() in self.__trackDescriptors.keys() else []
def getSubtitleTracks(self): def getSubtitleTracks(self) -> List[TrackDescriptor]:
return self.__trackDescriptors[TrackType.SUBTITLE.label()] if TrackType.SUBTITLE.label() in self.__trackDescriptors.keys() else [] return self.__trackDescriptors[TrackType.SUBTITLE.label()] if TrackType.SUBTITLE.label() in self.__trackDescriptors.keys() else []

@ -134,8 +134,6 @@ class PatternController():
finally: finally:
s.close() s.close()
return result
def getMediaDescriptor(self, patternId): def getMediaDescriptor(self, patternId):

Loading…
Cancel
Save