diff --git a/src/ffx/media_details_screen.py b/src/ffx/media_details_screen.py index 287ea36..11c8484 100644 --- a/src/ffx/media_details_screen.py +++ b/src/ffx/media_details_screen.py @@ -15,6 +15,7 @@ from .show_details_screen import ShowDetailsScreen from .pattern_details_screen import PatternDetailsScreen from ffx.track_type import TrackType +from ffx.track_codec import TrackCodec from ffx.model.track import Track from ffx.track_disposition import TrackDisposition @@ -36,7 +37,7 @@ class MediaDetailsScreen(Screen): Grid { grid-size: 5 8; - grid-rows: 8 2 2 2 8 2 2 8; + grid-rows: 8 2 2 2 2 8 2 2 8; grid-columns: 25 25 120 10 75; height: 100%; width: 100%; @@ -90,6 +91,10 @@ class MediaDetailsScreen(Screen): border: solid green; } + .purple { + tint: purple 40%; + } + .yellow { tint: yellow 40%; } @@ -137,7 +142,25 @@ class MediaDetailsScreen(Screen): self.loadProperties() - def getRowIndexFromShowId(self, showId : int) -> int: + def removeShow(self, showId : int = -1): + """Remove show entry from DataTable. + Removes the entry if showId is not set""" + + for rowKey, row in self.showsTable.rows.items(): # dict[RowKey, Row] + + rowData = self.showsTable.get_row(rowKey) + + try: + if (showId == -1 and rowData[0] == ' ' + or showId == int(rowData[0])): + self.showsTable.remove_row(rowKey) + return + except: + continue + + + + def getRowIndexFromShowId(self, showId : int = -1) -> int: """Find the index of the row where the value in the specified column matches the target_value.""" for rowKey, row in self.showsTable.rows.items(): # dict[RowKey, Row] @@ -145,7 +168,8 @@ class MediaDetailsScreen(Screen): rowData = self.showsTable.get_row(rowKey) try: - if showId == int(rowData[0]): + if ((showId == -1 and rowData[0] == ' ') + or showId == int(rowData[0])): return int(self.showsTable.get_row_index(rowKey)) except: continue @@ -376,35 +400,38 @@ class MediaDetailsScreen(Screen): yield self.showsTable yield Static(" ") yield self.differencesTable - + # 2 + yield Static(" ", classes="four") + + # 3 yield Static(" ") yield Button("Substitute", id="pattern_button") yield Static(" ", classes="two") - # 3 + # 4 yield Static("Pattern") yield Input(type="text", id='pattern_input', classes="two") yield Static(" ") - # 4 + # 5 yield Static(" ", classes="four") - # 5 + # 6 yield Static("Media Tags") yield self.mediaTagsTable yield Static(" ") - # 6 + # 7 yield Static(" ", classes="four") - # 7 + # 8 yield Static(" ") yield Button("Set Default", id="select_default_button") yield Button("Set Forced", id="select_forced_button") yield Static(" ") - # 8 + # 9 yield Static("Streams") yield self.tracksTable yield Static(" ") @@ -462,7 +489,7 @@ class MediaDetailsScreen(Screen): kwargs[TrackDescriptor.INDEX_KEY] = int(selected_track_data[0]) kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.fromLabel(selected_track_data[1]) kwargs[TrackDescriptor.SUB_INDEX_KEY] = int(selected_track_data[2]) - kwargs[TrackDescriptor.CODEC_NAME_KEY] = int(selected_track_data[3]) + kwargs[TrackDescriptor.CODEC_KEY] = TrackCodec.fromLabel(selected_track_data[3]) kwargs[TrackDescriptor.AUDIO_LAYOUT_KEY] = AudioLayout.fromLabel(selected_track_data[4]) return TrackDescriptor(**kwargs) @@ -473,11 +500,10 @@ class MediaDetailsScreen(Screen): return None - def getSelectedShowDescriptor(self): - + def getSelectedShowDescriptor(self) -> ShowDescriptor: + try: - # Fetch the currently selected row when 'Enter' is pressed - #selected_row_index = self.table.cursor_row + row_key, col_key = self.showsTable.coordinate_to_cell_key(self.showsTable.cursor_coordinate) if row_key is not None: @@ -501,13 +527,20 @@ class MediaDetailsScreen(Screen): def handle_new_pattern(self, showDescriptor: ShowDescriptor): - show = (showDescriptor.getId(), showDescriptor.getName(), showDescriptor.getYear()) - self.showsTable.add_row(*map(str, show)) + if type(showDescriptor) is not ShowDescriptor: + raise TypeError("MediaDetailsScreen.handle_new_pattern(): Argument 'showDescriptor' has to be of type ShowDescriptor") showRowIndex = self.getRowIndexFromShowId(showDescriptor.getId()) + if showRowIndex is None: + show = (showDescriptor.getId(), showDescriptor.getName(), showDescriptor.getYear()) + self.showsTable.add_row(*map(str, show)) + + showRowIndex = self.getRowIndexFromShowId(showDescriptor.getId()) if showRowIndex is not None: self.showsTable.move_cursor(row=showRowIndex) + self.removeShow() + patternDescriptor = self.getPatternDescriptorFromInput() if patternDescriptor: @@ -524,10 +557,11 @@ class MediaDetailsScreen(Screen): def action_new_pattern(self): - try: - self.__currentMediaDescriptor.checkConfiguration() - except ValueError: - return + #TODO #427: Fehlermeldung in TUI + # try: + # self.__currentMediaDescriptor.checkConfiguration() + # except ValueError: + # return selectedShowDescriptor = self.getSelectedShowDescriptor() diff --git a/src/ffx/pattern_details_screen.py b/src/ffx/pattern_details_screen.py index b513b11..681026a 100644 --- a/src/ffx/pattern_details_screen.py +++ b/src/ffx/pattern_details_screen.py @@ -491,13 +491,14 @@ class PatternDetailsScreen(Screen): trackType = trackDescriptor.getType() index = trackDescriptor.getIndex() subIndex = trackDescriptor.getSubIndex() + codec = trackDescriptor.getCodec() language = trackDescriptor.getLanguage() title = trackDescriptor.getTitle() row = (index, trackType.label(), subIndex, - " ", + codec.label(), language.label(), title, 'Yes' if TrackDisposition.DEFAULT in dispoSet else 'No', @@ -512,7 +513,10 @@ class PatternDetailsScreen(Screen): row_key, col_key = self.tracksTable.coordinate_to_cell_key(self.tracksTable.cursor_coordinate) - self.tracksTable.update_cell(row_key, self.column_key_track_audio_layout, trackDescriptor.getAudioLayout().label()) + self.tracksTable.update_cell(row_key, self.column_key_track_audio_layout, + trackDescriptor.getAudioLayout().label() + if trackDescriptor.getType() == TrackType.AUDIO else ' ') + 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') diff --git a/src/ffx/show_details_screen.py b/src/ffx/show_details_screen.py index 6f0e827..f732286 100644 --- a/src/ffx/show_details_screen.py +++ b/src/ffx/show_details_screen.py @@ -400,7 +400,7 @@ class ShowDetailsScreen(Screen): yield Footer() - def getShowDescriptorFromInput(self): + def getShowDescriptorFromInput(self) -> ShowDescriptor: kwargs = {} diff --git a/src/ffx/track_controller.py b/src/ffx/track_controller.py index 620445d..d7a3898 100644 --- a/src/ffx/track_controller.py +++ b/src/ffx/track_controller.py @@ -29,7 +29,7 @@ class TrackController(): s = self.Session() track = Track(pattern_id = patId, track_type = int(trackDescriptor.getType().index()), - codec_name = str(trackDescriptor.getCodec().label()), + codec_name = str(trackDescriptor.getCodec().identifier()), index = int(trackDescriptor.getIndex()), source_index = int(trackDescriptor.getSourceIndex()), disposition_flags = int(TrackDisposition.toFlags(trackDescriptor.getDispositionSet())), diff --git a/src/ffx/track_details_screen.py b/src/ffx/track_details_screen.py index 904f0fd..10e6e64 100644 --- a/src/ffx/track_details_screen.py +++ b/src/ffx/track_details_screen.py @@ -292,7 +292,11 @@ class TrackDetailsScreen(Screen): kwargs[TrackDescriptor.TRACK_TYPE_KEY] = TrackType.fromLabel(self.query_one("#type_select", Select).value) kwargs[TrackDescriptor.CODEC_KEY] = self.__trackCodec - kwargs[TrackDescriptor.AUDIO_LAYOUT_KEY] = AudioLayout.fromLabel(self.query_one("#audio_layout_select", Select).value) + + if self.__trackType == TrackType.AUDIO: + kwargs[TrackDescriptor.AUDIO_LAYOUT_KEY] = AudioLayout.fromLabel(self.query_one("#audio_layout_select", Select).value) + else: + kwargs[TrackDescriptor.AUDIO_LAYOUT_KEY] = AudioLayout.LAYOUT_UNDEFINED trackTags = {} language = self.query_one("#language_select", Select).value