subindex into track order
This commit is contained in:
1006
bin/ffx.py
1006
bin/ffx.py
File diff suppressed because it is too large
Load Diff
@@ -35,6 +35,7 @@ class FfxController():
|
|||||||
'_STATISTICS_WRITING_DATE_UTC',
|
'_STATISTICS_WRITING_DATE_UTC',
|
||||||
'_STATISTICS_TAGS']
|
'_STATISTICS_TAGS']
|
||||||
|
|
||||||
|
INPUT_FILE_EXTENSIONS = ['mkv', 'mp4', 'avi', 'flv', 'webm']
|
||||||
|
|
||||||
|
|
||||||
# def getReorderedSubstreams(subDescriptor, last):
|
# def getReorderedSubstreams(subDescriptor, last):
|
||||||
|
|||||||
@@ -63,9 +63,9 @@ class MediaDescriptor():
|
|||||||
|
|
||||||
def getReorderedTrackDescriptors(self):
|
def getReorderedTrackDescriptors(self):
|
||||||
|
|
||||||
videoTracks = [v for v in self.__trackDescriptors.copy() if v.getType() == TrackType.VIDEO]
|
videoTracks = self.getVideoTracks()
|
||||||
audioTracks = [a for a in self.__trackDescriptors.copy() if a.getType() == TrackType.AUDIO]
|
audioTracks = self.getAudioTracks()
|
||||||
subtitleTracks = [s for s in self.__trackDescriptors.copy() if s.getType() == TrackType.SUBTITLE]
|
subtitleTracks = self.getSubtitleTracks()
|
||||||
|
|
||||||
videoDefaultTracks = [v for v in videoTracks if TrackDisposition.DEFAULT in v.getDispositionSet()]
|
videoDefaultTracks = [v for v in videoTracks if TrackDisposition.DEFAULT in v.getDispositionSet()]
|
||||||
videoForcedTracks = [v for v in videoTracks if TrackDisposition.FORCED in v.getDispositionSet()]
|
videoForcedTracks = [v for v in videoTracks if TrackDisposition.FORCED in v.getDispositionSet()]
|
||||||
@@ -139,16 +139,31 @@ class MediaDescriptor():
|
|||||||
|
|
||||||
|
|
||||||
def getAllTracks(self) -> List[TrackDescriptor]:
|
def getAllTracks(self) -> List[TrackDescriptor]:
|
||||||
return self.__trackDescriptors
|
return self.getVideoTracks() + self.getAudioTracks() + self.getSubtitleTracks()
|
||||||
|
|
||||||
def getVideoTracks(self) -> List[TrackDescriptor]:
|
def getVideoTracks(self) -> List[TrackDescriptor]:
|
||||||
return [d for d in self.__trackDescriptors if d.getType() == TrackType.VIDEO]
|
videoTracks = [v for v in self.__trackDescriptors.copy() if v.getType() == TrackType.VIDEO]
|
||||||
|
subIndex = 0
|
||||||
|
for v in videoTracks:
|
||||||
|
v.setSubIndex(subIndex)
|
||||||
|
subIndex += 1
|
||||||
|
return videoTracks
|
||||||
|
|
||||||
def getAudioTracks(self) -> List[TrackDescriptor]:
|
def getAudioTracks(self) -> List[TrackDescriptor]:
|
||||||
return [d for d in self.__trackDescriptors if d.getType() == TrackType.AUDIO]
|
audioTracks = [a for a in self.__trackDescriptors.copy() if a.getType() == TrackType.AUDIO]
|
||||||
|
subIndex = 0
|
||||||
|
for a in audioTracks:
|
||||||
|
a.setSubIndex(subIndex)
|
||||||
|
subIndex += 1
|
||||||
|
return audioTracks
|
||||||
|
|
||||||
def getSubtitleTracks(self) -> List[TrackDescriptor]:
|
def getSubtitleTracks(self) -> List[TrackDescriptor]:
|
||||||
return [d for d in self.__trackDescriptors if d.getType() == TrackType.SUBTITLE]
|
subtitleTracks = [s for s in self.__trackDescriptors.copy() if s.getType() == TrackType.SUBTITLE]
|
||||||
|
subIndex = 0
|
||||||
|
for s in subtitleTracks:
|
||||||
|
s.setSubIndex(subIndex)
|
||||||
|
subIndex += 1
|
||||||
|
return subtitleTracks
|
||||||
|
|
||||||
def getClearTags(self):
|
def getClearTags(self):
|
||||||
return self.__clearTags
|
return self.__clearTags
|
||||||
@@ -209,3 +224,27 @@ class MediaDescriptor():
|
|||||||
compareResult[MediaDescriptor.TRACKS_KEY] = trackCompareResult
|
compareResult[MediaDescriptor.TRACKS_KEY] = trackCompareResult
|
||||||
|
|
||||||
return compareResult
|
return compareResult
|
||||||
|
|
||||||
|
|
||||||
|
def getInputMappingTokens(self):
|
||||||
|
reorderedTrackDescriptors = self.getReorderedTrackDescriptors()
|
||||||
|
inputMappingTokens = []
|
||||||
|
|
||||||
|
#subIndexCounter = {}
|
||||||
|
for rtd in reorderedTrackDescriptors:
|
||||||
|
trackType = rtd.getType()
|
||||||
|
#if not trackType in subIndexCounter.keys():
|
||||||
|
# subIndexCounter[trackType] = 0
|
||||||
|
#inputMappingTokens += ['-map', f"0:{trackType.indicator()}:{subIndexCounter[trackType]}"]
|
||||||
|
inputMappingTokens += ['-map', f"0:{trackType.indicator()}:{rtd.getSubIndex()}"]
|
||||||
|
#subIndexCounter[trackType] += 1
|
||||||
|
return inputMappingTokens
|
||||||
|
|
||||||
|
# for rtd in reorderedTrackDescriptors:
|
||||||
|
# trackType = rtd.getType()
|
||||||
|
# #if not trackType in subIndexCounter.keys():
|
||||||
|
# # subIndexCounter[trackType] = 0
|
||||||
|
# #inputMappingTokens += ['-map', f"0:{trackType.indicator()}:{subIndexCounter[trackType]}"]
|
||||||
|
# inputMappingTokens += ['-map', f"0:{rtd.getIndex()}"]
|
||||||
|
# #subIndexCounter[trackType] += 1
|
||||||
|
# return inputMappingTokens
|
||||||
|
|||||||
@@ -126,7 +126,6 @@ class MediaDetailsScreen(Screen):
|
|||||||
if not os.path.isfile(self.__mediaFilename):
|
if not os.path.isfile(self.__mediaFilename):
|
||||||
raise click.ClickException(f"MediaDetailsScreen.__init__(): Media file {self.__mediaFilename} does not exist")
|
raise click.ClickException(f"MediaDetailsScreen.__init__(): Media file {self.__mediaFilename} does not exist")
|
||||||
|
|
||||||
|
|
||||||
self.loadProperties()
|
self.loadProperties()
|
||||||
|
|
||||||
|
|
||||||
@@ -160,8 +159,6 @@ class MediaDetailsScreen(Screen):
|
|||||||
# from file (=current) vs from stored in database (=target)
|
# from file (=current) vs from stored in database (=target)
|
||||||
self.__mediaDifferences = self.__targetMediaDescriptor.compare(self.__currentMediaDescriptor) if self.__currentPattern is not None else {}
|
self.__mediaDifferences = self.__targetMediaDescriptor.compare(self.__currentMediaDescriptor) if self.__currentPattern is not None else {}
|
||||||
|
|
||||||
#rtd = self.__targetMediaDescriptor.getReorderedTrackDescriptors()
|
|
||||||
#raise click.ClickException(f"getReorderedTrackDescriptors={[r.getIndex() for r in rtd]}")
|
|
||||||
|
|
||||||
def updateDifferences(self):
|
def updateDifferences(self):
|
||||||
|
|
||||||
@@ -239,7 +236,6 @@ class MediaDetailsScreen(Screen):
|
|||||||
self.differencesTable.add_row(*map(str, row))
|
self.differencesTable.add_row(*map(str, row))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def on_mount(self):
|
def on_mount(self):
|
||||||
|
|
||||||
if self.__currentPattern is None:
|
if self.__currentPattern is None:
|
||||||
@@ -273,12 +269,14 @@ class MediaDetailsScreen(Screen):
|
|||||||
self.query_one("#pattern_input", Input).value = self.__mediaFilename
|
self.query_one("#pattern_input", Input).value = self.__mediaFilename
|
||||||
self.highlightPattern(True)
|
self.highlightPattern(True)
|
||||||
|
|
||||||
|
|
||||||
def highlightPattern(self, state : bool):
|
def highlightPattern(self, state : bool):
|
||||||
if state:
|
if state:
|
||||||
self.query_one("#pattern_input", Input).styles.background = 'red'
|
self.query_one("#pattern_input", Input).styles.background = 'red'
|
||||||
else:
|
else:
|
||||||
self.query_one("#pattern_input", Input).styles.background = None
|
self.query_one("#pattern_input", Input).styles.background = None
|
||||||
|
|
||||||
|
|
||||||
def updateTracks(self):
|
def updateTracks(self):
|
||||||
|
|
||||||
self.tracksTable.clear()
|
self.tracksTable.clear()
|
||||||
@@ -311,7 +309,6 @@ class MediaDetailsScreen(Screen):
|
|||||||
|
|
||||||
def compose(self):
|
def compose(self):
|
||||||
|
|
||||||
|
|
||||||
# Create the DataTable widget
|
# Create the DataTable widget
|
||||||
self.showsTable = DataTable()
|
self.showsTable = DataTable()
|
||||||
|
|
||||||
@@ -323,7 +320,6 @@ class MediaDetailsScreen(Screen):
|
|||||||
self.showsTable.cursor_type = 'row'
|
self.showsTable.cursor_type = 'row'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
self.mediaTagsTable = DataTable()
|
self.mediaTagsTable = DataTable()
|
||||||
|
|
||||||
# Define the columns with headers
|
# Define the columns with headers
|
||||||
@@ -393,69 +389,6 @@ class MediaDetailsScreen(Screen):
|
|||||||
yield self.tracksTable
|
yield self.tracksTable
|
||||||
yield Static(" ")
|
yield Static(" ")
|
||||||
|
|
||||||
# # 8
|
|
||||||
# yield Static(" ", classes="three")
|
|
||||||
#
|
|
||||||
# # 9
|
|
||||||
# yield Static("Subtitle Streams")
|
|
||||||
# yield self.subtitleStreamsTable
|
|
||||||
# yield Static(" ")
|
|
||||||
|
|
||||||
|
|
||||||
# 1
|
|
||||||
# yield Static("Edit filename pattern" if self.__pattern is not None else "New filename pattern", id="toplabel")
|
|
||||||
# yield Input(type="text", id="pattern_input", classes="four")
|
|
||||||
#
|
|
||||||
# # 2
|
|
||||||
# yield Static("from show")
|
|
||||||
# yield Static("", id="showlabel", classes="three")
|
|
||||||
# yield Button("Substitute pattern", id="patternbutton")
|
|
||||||
#
|
|
||||||
# # 3
|
|
||||||
# yield Static(" ", classes="five")
|
|
||||||
# # 4
|
|
||||||
# yield Static(" ", classes="five")
|
|
||||||
#
|
|
||||||
# # 5
|
|
||||||
# yield Static("Audio streams")
|
|
||||||
# yield Static(" ")
|
|
||||||
#
|
|
||||||
# if self.__pattern is not None:
|
|
||||||
# yield Button("Add", id="button_add_audio_stream")
|
|
||||||
# yield Button("Edit", id="button_edit_audio_stream")
|
|
||||||
# yield Button("Delete", id="button_delete_audio_stream")
|
|
||||||
# else:
|
|
||||||
# yield Static("")
|
|
||||||
# yield Static("")
|
|
||||||
# yield Static("")
|
|
||||||
# # 6
|
|
||||||
# yield self.tracksTable
|
|
||||||
#
|
|
||||||
# # 7
|
|
||||||
# yield Static(" ", classes="five")
|
|
||||||
#
|
|
||||||
# # 8
|
|
||||||
# yield Static("Subtitle streams")
|
|
||||||
# yield Static(" ")
|
|
||||||
#
|
|
||||||
# if self.__pattern is not None:
|
|
||||||
# yield Button("Add", id="button_add_subtitle_stream")
|
|
||||||
# yield Button("Edit", id="button_edit_subtitle_stream")
|
|
||||||
# yield Button("Delete", id="button_delete_subtitle_stream")
|
|
||||||
# else:
|
|
||||||
# yield Static("")
|
|
||||||
# yield Static("")
|
|
||||||
# yield Static("")
|
|
||||||
# # 9
|
|
||||||
# yield self.subtitleStreamsTable
|
|
||||||
#
|
|
||||||
# # 10
|
|
||||||
# yield Static(" ", classes="five")
|
|
||||||
#
|
|
||||||
# # 11
|
|
||||||
# yield Button("Save", id="save_button")
|
|
||||||
# yield Button("Cancel", id="cancel_button")
|
|
||||||
|
|
||||||
yield Footer()
|
yield Footer()
|
||||||
|
|
||||||
|
|
||||||
@@ -463,113 +396,8 @@ class MediaDetailsScreen(Screen):
|
|||||||
return str(self.query_one("#pattern_input", Input).value)
|
return str(self.query_one("#pattern_input", Input).value)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# def getSelectedAudioTrackDescriptor(self):
|
|
||||||
#
|
|
||||||
# if not self.__pattern:
|
|
||||||
# return None
|
|
||||||
#
|
|
||||||
# try:
|
|
||||||
#
|
|
||||||
# # Fetch the currently selected row when 'Enter' is pressed
|
|
||||||
# #selected_row_index = self.table.cursor_row
|
|
||||||
# row_key, col_key = self.tracksTable.coordinate_to_cell_key(self.tracksTable.cursor_coordinate)
|
|
||||||
#
|
|
||||||
# if row_key is not None:
|
|
||||||
# selected_track_data = self.tracksTable.get_row(row_key)
|
|
||||||
#
|
|
||||||
# subIndex = int(selected_track_data[0])
|
|
||||||
#
|
|
||||||
# return self.__tc.findTrack(self.__pattern.getId(), TrackType.AUDIO, subIndex).getDescriptor()
|
|
||||||
#
|
|
||||||
# else:
|
|
||||||
# return None
|
|
||||||
#
|
|
||||||
# except CellDoesNotExist:
|
|
||||||
# return None
|
|
||||||
#
|
|
||||||
|
|
||||||
# def getSelectedSubtitleTrackDescriptor(self) -> TrackDescriptor:
|
|
||||||
#
|
|
||||||
# if not self.__pattern is None:
|
|
||||||
# return None
|
|
||||||
#
|
|
||||||
# try:
|
|
||||||
#
|
|
||||||
# # Fetch the currently selected row when 'Enter' is pressed
|
|
||||||
# #selected_row_index = self.table.cursor_row
|
|
||||||
# row_key, col_key = self.subtitleStreamsTable.coordinate_to_cell_key(self.subtitleStreamsTable.cursor_coordinate)
|
|
||||||
#
|
|
||||||
# if row_key is not None:
|
|
||||||
#
|
|
||||||
# selected_track_data = self.subtitleStreamsTable.get_row(row_key)
|
|
||||||
# subIndex = int(selected_track_data[0])
|
|
||||||
#
|
|
||||||
# return self.__tc.findTrack(self.__pattern.getId(), TrackType.SUBTITLE, subIndex).getDescriptor()
|
|
||||||
#
|
|
||||||
# else:
|
|
||||||
# return None
|
|
||||||
#
|
|
||||||
# except CellDoesNotExist:
|
|
||||||
# return None
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Event handler for button press
|
|
||||||
def on_button_pressed(self, event: Button.Pressed) -> None:
|
def on_button_pressed(self, event: Button.Pressed) -> None:
|
||||||
|
|
||||||
# # Check if the button pressed is the one we are interested in
|
|
||||||
# if event.button.id == "save_button":
|
|
||||||
#
|
|
||||||
# patternDescriptor = {}
|
|
||||||
# patternDescriptor['show_id'] = self.show_obj['id']
|
|
||||||
# patternDescriptor['pattern'] = self.getPatternFromInput()
|
|
||||||
#
|
|
||||||
# if self.__pattern is not None:
|
|
||||||
#
|
|
||||||
# if self.__pc.updatePattern(self.__pattern.getId(), patternDescriptor):
|
|
||||||
# self.dismiss(patternDescriptor)
|
|
||||||
# else:
|
|
||||||
# #TODO: Meldung
|
|
||||||
# self.app.pop_screen()
|
|
||||||
#
|
|
||||||
# else:
|
|
||||||
# if self.__pc.addPattern(patternDescriptor):
|
|
||||||
# self.dismiss(patternDescriptor)
|
|
||||||
# else:
|
|
||||||
# #TODO: Meldung
|
|
||||||
# self.app.pop_screen()
|
|
||||||
#
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# if event.button.id == "cancel_button":
|
|
||||||
# self.app.pop_screen()
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# # Save pattern when just created before adding streams
|
|
||||||
# if self.__pattern is not None:
|
|
||||||
#
|
|
||||||
# if event.button.id == "button_add_audio_stream":
|
|
||||||
# self.app.push_screen(TrackDetailsScreen(trackType = TrackType.AUDIO, patternId = self.__pattern.getId(), subIndex = len(self.tracksTable.rows)), self.handle_add_track)
|
|
||||||
#
|
|
||||||
# selectedAudioTrack = self.getSelectedAudioTrackDescriptor()
|
|
||||||
# if selectedAudioTrack is not None:
|
|
||||||
# if event.button.id == "button_edit_audio_stream":
|
|
||||||
#
|
|
||||||
# self.app.push_screen(TrackDetailsScreen(trackDescriptor = selectedAudioTrack), self.handle_edit_track)
|
|
||||||
# if event.button.id == "button_delete_audio_stream":
|
|
||||||
# self.app.push_screen(TrackDeleteScreen(trackDescriptor = selectedAudioTrack), self.handle_delete_track)
|
|
||||||
#
|
|
||||||
# if event.button.id == "button_add_subtitle_stream":
|
|
||||||
# self.app.push_screen(TrackDetailsScreen(trackType = TrackType.SUBTITLE, patternId = self.__pattern.getId(), subIndex = len(self.subtitleStreamsTable.rows)), self.handle_add_track)
|
|
||||||
#
|
|
||||||
# selectedSubtitleTrack = self.getSelectedSubtitleTrackDescriptor()
|
|
||||||
# if selectedSubtitleTrack is not None:
|
|
||||||
# if event.button.id == "button_edit_subtitle_stream":
|
|
||||||
# self.app.push_screen(TrackDetailsScreen(trackDescriptor = selectedSubtitleTrack), self.handle_edit_track)
|
|
||||||
# if event.button.id == "button_delete_subtitle_stream":
|
|
||||||
# self.app.push_screen(TrackDeleteScreen(trackDescriptor = selectedSubtitleTrack), self.handle_delete_track)
|
|
||||||
|
|
||||||
if event.button.id == "pattern_button":
|
if event.button.id == "pattern_button":
|
||||||
|
|
||||||
INDICATOR_PATTERN = '([sS][0-9]+[eE][0-9]+)'
|
INDICATOR_PATTERN = '([sS][0-9]+[eE][0-9]+)'
|
||||||
@@ -582,75 +410,6 @@ class MediaDetailsScreen(Screen):
|
|||||||
self.query_one("#pattern_input", Input).value = pattern.replace(patternMatch.group(1), INDICATOR_PATTERN)
|
self.query_one("#pattern_input", Input).value = pattern.replace(patternMatch.group(1), INDICATOR_PATTERN)
|
||||||
|
|
||||||
|
|
||||||
# def handle_add_track(self, trackDescriptor):
|
|
||||||
#
|
|
||||||
# dispoSet = trackDescriptor.getDispositionSet()
|
|
||||||
# trackType = trackDescriptor.getType()
|
|
||||||
# subIndex = trackDescriptor.getSubIndex()
|
|
||||||
# language = trackDescriptor.getLanguage()
|
|
||||||
# title = trackDescriptor.getTitle()
|
|
||||||
#
|
|
||||||
# if trackType == TrackType.AUDIO:
|
|
||||||
#
|
|
||||||
# row = (subIndex,
|
|
||||||
# " ",
|
|
||||||
# language.label(),
|
|
||||||
# title,
|
|
||||||
# 'Yes' if TrackDisposition.DEFAULT in dispoSet else 'No',
|
|
||||||
# 'Yes' if TrackDisposition.FORCED in dispoSet else 'No')
|
|
||||||
#
|
|
||||||
# self.tracksTable.add_row(*map(str, row))
|
|
||||||
#
|
|
||||||
# if trackType == TrackType.SUBTITLE:
|
|
||||||
#
|
|
||||||
# row = (subIndex,
|
|
||||||
# " ",
|
|
||||||
# language.label(),
|
|
||||||
# title,
|
|
||||||
# 'Yes' if TrackDisposition.DEFAULT in dispoSet else 'No',
|
|
||||||
# 'Yes' if TrackDisposition.FORCED in dispoSet else 'No')
|
|
||||||
#
|
|
||||||
# self.subtitleStreamsTable.add_row(*map(str, row))
|
|
||||||
|
|
||||||
|
|
||||||
# def handle_edit_track(self, trackDescriptor : TrackDescriptor):
|
|
||||||
#
|
|
||||||
# try:
|
|
||||||
# if trackDescriptor.getType() == TrackType.AUDIO:
|
|
||||||
#
|
|
||||||
# row_key, col_key = self.tracksTable.coordinate_to_cell_key(self.tracksTable.cursor_coordinate)
|
|
||||||
#
|
|
||||||
# self.tracksTable.update_cell(row_key, self.column_key_track_language, trackDescriptor.getLanguage().label())
|
|
||||||
# self.tracksTable.update_cell(row_key, self.column_key_track_title, trackDescriptor.getTitle())
|
|
||||||
# self.tracksTable.update_cell(row_key, self.column_key_track_default, 'Yes' if TrackDisposition.DEFAULT in trackDescriptor.getDispositionSet() else 'No')
|
|
||||||
# self.tracksTable.update_cell(row_key, self.column_key_track_forced, 'Yes' if TrackDisposition.FORCED in trackDescriptor.getDispositionSet() else 'No')
|
|
||||||
#
|
|
||||||
# if trackDescriptor.getType() == TrackType.SUBTITLE:
|
|
||||||
#
|
|
||||||
# row_key, col_key = self.subtitleStreamsTable.coordinate_to_cell_key(self.subtitleStreamsTable.cursor_coordinate)
|
|
||||||
#
|
|
||||||
# self.subtitleStreamsTable.update_cell(row_key, self.column_key_subtitle_language, trackDescriptor.getLanguage().label())
|
|
||||||
# self.subtitleStreamsTable.update_cell(row_key, self.column_key_subtitle_title, trackDescriptor.getTitle())
|
|
||||||
# self.subtitleStreamsTable.update_cell(row_key, self.column_key_subtitle_default, 'Yes' if TrackDisposition.DEFAULT in trackDescriptor.getDispositionSet() else 'No')
|
|
||||||
# self.subtitleStreamsTable.update_cell(row_key, self.column_key_subtitle_forced, 'Yes' if TrackDisposition.FORCED in trackDescriptor.getDispositionSet() else 'No')
|
|
||||||
#
|
|
||||||
# except CellDoesNotExist:
|
|
||||||
# pass
|
|
||||||
|
|
||||||
|
|
||||||
# def handle_delete_track(self, trackDescriptor : TrackDescriptor):
|
|
||||||
#
|
|
||||||
# try:
|
|
||||||
# if trackDescriptor.getType() == TrackType.AUDIO:
|
|
||||||
# self.updateAudioTracks()
|
|
||||||
#
|
|
||||||
# if trackDescriptor.getType() == TrackType.SUBTITLE:
|
|
||||||
# self.updateSubtitleTracks()
|
|
||||||
#
|
|
||||||
# except CellDoesNotExist:
|
|
||||||
# pass
|
|
||||||
|
|
||||||
|
|
||||||
def getSelectedShow(self):
|
def getSelectedShow(self):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -172,6 +172,8 @@ class TrackDescriptor():
|
|||||||
def getSubIndex(self):
|
def getSubIndex(self):
|
||||||
return self.__subIndex
|
return self.__subIndex
|
||||||
|
|
||||||
|
def setSubIndex(self, subIndex):
|
||||||
|
self.__subIndex = subIndex
|
||||||
|
|
||||||
def getType(self):
|
def getType(self):
|
||||||
return self.__trackType
|
return self.__trackType
|
||||||
|
|||||||
@@ -13,6 +13,10 @@ class TrackType(Enum):
|
|||||||
"""Returns the stream type as string"""
|
"""Returns the stream type as string"""
|
||||||
return str(self.value['label'])
|
return str(self.value['label'])
|
||||||
|
|
||||||
|
def indicator(self):
|
||||||
|
"""Returns the stream type as single letter"""
|
||||||
|
return self.label()[0]
|
||||||
|
|
||||||
def index(self):
|
def index(self):
|
||||||
"""Returns the stream type index"""
|
"""Returns the stream type index"""
|
||||||
return int(self.value['index'])
|
return int(self.value['index'])
|
||||||
|
|||||||
Reference in New Issue
Block a user