inc delete tracks

click-textual
Maveno 1 year ago
parent b492ebdab9
commit 9df5973676

@ -153,8 +153,8 @@ class PatternDetailsScreen(Screen):
self.column_key_audio_layout = self.audioStreamsTable.add_column("Layout", width=20)
self.column_key_audio_language = self.audioStreamsTable.add_column("Language", width=20)
self.column_key_audio_title = self.audioStreamsTable.add_column("Title", width=30)
self.column_key_subtitle_default = self.audioStreamsTable.add_column("Default", width=10)
self.column_key_subtitle_forced = self.audioStreamsTable.add_column("Forced", width=10)
self.column_key_audio_default = self.audioStreamsTable.add_column("Default", width=10)
self.column_key_audio_forced = self.audioStreamsTable.add_column("Forced", width=10)
self.audioStreamsTable.cursor_type = 'row'
@ -357,7 +357,42 @@ class PatternDetailsScreen(Screen):
self.subtitleStreamsTable.add_row(*map(str, row))
def handle_edit_stream(self):
def handle_edit_stream(self, trackDescriptor):
try:
if trackDescriptor['type'] == TrackType.AUDIO:
row_key, col_key = self.audioStreamsTable.coordinate_to_cell_key(self.audioStreamsTable.cursor_coordinate)
self.audioStreamsTable.update_cell(row_key, self.column_key_audio_language, trackDescriptor['language'].label())
self.audioStreamsTable.update_cell(row_key, self.column_key_audio_title, trackDescriptor['title'])
self.audioStreamsTable.update_cell(row_key, self.column_key_audio_default, 'Yes' if TrackDisposition.DEFAULT in trackDescriptor['disposition_list'] else 'No')
self.audioStreamsTable.update_cell(row_key, self.column_key_audio_forced, 'Yes' if TrackDisposition.FORCED in trackDescriptor['disposition_list'] else 'No')
if trackDescriptor['type'] == 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['language'].label())
self.subtitleStreamsTable.update_cell(row_key, self.column_key_subtitle_title, trackDescriptor['title'])
self.subtitleStreamsTable.update_cell(row_key, self.column_key_subtitle_default, 'Yes' if TrackDisposition.DEFAULT in trackDescriptor['disposition_list'] else 'No')
self.subtitleStreamsTable.update_cell(row_key, self.column_key_subtitle_forced, 'Yes' if TrackDisposition.FORCED in trackDescriptor['disposition_list'] else 'No')
except CellDoesNotExist:
pass
def handle_delete_stream(self):
def handle_delete_stream(self, trackDescriptor):
try:
if trackDescriptor['type'] == TrackType.AUDIO:
row_key, col_key = self.audioStreamsTable.coordinate_to_cell_key(self.audioStreamsTable.cursor_coordinate)
self.audioStreamsTable.remove_row(row_key)
if trackDescriptor['type'] == TrackType.SUBTITLE:
row_key, col_key = self.subtitleStreamsTable.coordinate_to_cell_key(self.subtitleStreamsTable.cursor_coordinate)
self.subtitleStreamsTable.remove_row(row_key)
except CellDoesNotExist:
pass

@ -35,8 +35,6 @@ class TrackController():
s.add(track)
s.commit()
return True
except Exception as ex:
raise click.ClickException(f"TrackController.addTrack(): {repr(ex)}")
@ -44,29 +42,32 @@ class TrackController():
s.close()
# def updateTrack(self, trackDescriptor):
#
# try:
# s = self.Session()
# q = s.query(Track).filter(Track.id == int(trackId))
#
# if not q.count():
# track = Track(pattern_id = int(trackDescriptor['pattern_id']),
# track_type = TrackType(trackDescriptor['type']),
# sub_index = int(trackDescriptor['sub_index']),
# language = IsoLanguage(trackDescriptor['language']),
# title = str(trackDescriptor['title']),
# disposition_flags = TrackDisposition.toFlags(trackDescriptor['disposition_list']))
# s.add(track)
# s.commit()
# return True
# else:
# return False
#
# except Exception as ex:
# raise click.ClickException(f"TrackController.updateTrack(): {repr(ex)}")
# finally:
# s.close()
def updateTrack(self, trackId, trackDescriptor):
try:
s = self.Session()
q = s.query(Track).filter(Track.id == int(trackId))
if q.count():
track = q.first()
track.sub_index = int(trackDescriptor['sub_index'])
track.language = str(trackDescriptor['language'].threeLetter())
track.title = str(trackDescriptor['title'])
track.disposition_flags = int(TrackDisposition.toFlags(trackDescriptor['disposition_list']))
s.commit()
return True
else:
return False
except Exception as ex:
raise click.ClickException(f"TrackController.addTrack(): {repr(ex)}")
finally:
s.close()
def findAllTracks(self, patternId):

@ -20,9 +20,9 @@ class TrackDeleteScreen(Screen):
CSS = """
Grid {
grid-size: 2;
grid-rows: 2 auto;
grid-columns: 30 330;
grid-size: 4 9;
grid-rows: 2 2 2 2 2 2 2 2 2;
grid-columns: 30 30 30 30;
height: 100%;
width: 100%;
padding: 1;
@ -41,6 +41,12 @@ class TrackDeleteScreen(Screen):
.two {
column-span: 2;
}
.three {
column-span: 3;
}
.four {
column-span: 4;
}
.box {
height: 100%;
@ -48,29 +54,26 @@ class TrackDeleteScreen(Screen):
}
"""
def __init__(self, trackType : TrackType, trackId = None):
def __init__(self, trackId = None):
super().__init__()
self.context = self.app.getContext()
self.Session = self.context['database_session'] # convenience
self.__tc = TrackController(context = self.context)
# self.__pc = PatternController(context = self.context)
# self.__sc = ShowController(context = self.context)
if trackId is None:
raise click.ClickException('TrackDeleteScreen.init(): trackId is required to be set')
# self.pattern_obj = self.__pc.getPatternDescriptor(patternId) if patternId is not None else {}
# self.show_obj = self.__sc.getShowDesciptor(showId) if showId is not None else {}
self.__tc = TrackController(context = self.context)
self.trackType = trackType
self.track_obj = {}
self.track_obj = self.__tc.getTrackDescriptor(trackId)
def on_mount(self):
pass
# if self.show_obj:
# self.query_one("#showlabel", Static).update(f"{self.show_obj['id']} - {self.show_obj['name']} ({self.show_obj['year']})")
# if self.pattern_obj:
# self.query_one("#patternlabel", Static).update(str(self.pattern_obj['pattern']))
self.query_one("#subindexlabel", Static).update(str(self.track_obj['sub_index']))
self.query_one("#patternlabel", Static).update(str(self.track_obj['pattern_id']))
self.query_one("#languagelabel", Static).update(str(self.track_obj['language'].label()))
self.query_one("#titlelabel", Static).update(str(str(self.track_obj['title'])))
def compose(self):
@ -79,20 +82,35 @@ class TrackDeleteScreen(Screen):
with Grid():
yield Static(f"Are you sure to delete the following {self.trackType.label()} stream?", id="toplabel", classes="two")
#1
yield Static(f"Are you sure to delete the following {self.track_obj['type'].label()} track?", id="toplabel", classes="four")
#2
yield Static("sub index")
yield Static(" ", id="subindexlabel", classes="three")
#3
yield Static("from pattern")
yield Static(" ", id="patternlabel", classes="three")
#4
yield Static(" ", classes="four")
# yield Static("", classes="two")
#
# yield Static("Pattern")
# yield Static("", id="patternlabel")
#
# yield Static("", classes="two")
#
# yield Static("from show")
# yield Static("", id="showlabel")
#5
yield Static("Language")
yield Static(" ", id="languagelabel", classes="three")
yield Static("", classes="two")
#6
yield Static("Title")
yield Static(" ", id="titlelabel", classes="three")
#7
yield Static(" ", classes="four")
#8
yield Static(" ", classes="four")
#9
yield Button("Delete", id="delete_button")
yield Button("Cancel", id="cancel_button")
@ -102,20 +120,19 @@ class TrackDeleteScreen(Screen):
# Event handler for button press
def on_button_pressed(self, event: Button.Pressed) -> None:
# if event.button.id == "delete_button":
#
# if self.__pc.deletePattern(self.pattern_obj['id']):
#
# screenResult = {}
# screenResult['show_id'] = self.show_obj['id']
# screenResult['pattern'] = self.pattern_obj['pattern']
#
# self.dismiss(screenResult)
#
# else:
# #TODO: Meldung
# self.app.pop_screen()
#
if event.button.id == "delete_button":
trackId = self.__tc.findTrack(self.track_obj['pattern_id'], self.track_obj['type'], self.track_obj['sub_index'])
if trackId is not None:
if self.__tc.deleteTrack(trackId):
self.dismiss(self.track_obj)
else:
#TODO: Meldung
self.app.pop_screen()
if event.button.id == "cancel_button":
self.app.pop_screen()

@ -90,10 +90,12 @@ class TrackDetailsScreen(Screen):
self.trackType = self.track_obj['type']
self.subIndex = self.track_obj['sub_index']
self.pattern_obj = self.__pc.getPatternDescriptor(self.track_obj['pattern_id'])
self.track_obj['is_new'] = False
else:
self.trackType = trackType
self.subIndex = subIndex
self.pattern_obj = self.__pc.getPatternDescriptor(patternId) if patternId is not None else {}
self.track_obj['is_new'] = True
if self.trackType is None:
raise click.ClickException('Track type is required to be set')
@ -113,13 +115,20 @@ class TrackDetailsScreen(Screen):
if self.subIndex is not None:
self.query_one("#subindexlabel", Static).update(str(self.subIndex))
for d in TrackDisposition:
dispositionIsSet = self.track_obj and d in self.track_obj['disposition_list']
dispositionIsSet = (self.track_obj
and 'disposition_list' in self.track_obj.keys()
and d in self.track_obj['disposition_list'])
disposition = (d.label(), d.index(), dispositionIsSet)
self.query_one("#dispositions_selection_list", SelectionList).add_option(disposition)
if self.track_obj:
if 'language' in self.track_obj.keys():
self.query_one("#language_select", Select).value = self.track_obj['language'].label()
if 'title' in self.track_obj.keys():
self.query_one("#title_input", Input).value = str(self.track_obj['title'])
@ -158,7 +167,7 @@ class TrackDetailsScreen(Screen):
with Grid():
# 1
yield Static(f"Edit {self.trackType.label()} stream" if self.track_obj else f"New {self.trackType.label()} stream", id="toplabel", classes="five")
yield Static(f"New {self.trackType.label()} stream" if self.track_obj['is_new'] else f"Edit {self.trackType.label()} stream", id="toplabel", classes="five")
# 2
yield Static("for pattern")
@ -249,12 +258,23 @@ class TrackDetailsScreen(Screen):
trackDescriptor = self.getTrackDescriptorFromInput()
if self.__tc.addTrack(trackDescriptor): #!
if self.track_obj['is_new']:
self.__tc.addTrack(trackDescriptor)
self.dismiss(trackDescriptor)
else:
trackId = self.__tc.findTrack(self.track_obj['pattern_id'], self.track_obj['type'], self.track_obj['sub_index'])
if self.__tc.updateTrack(trackId, trackDescriptor):
self.dismiss(trackDescriptor)
else:
#TODO: Meldung
self.app.pop_screen()
if event.button.id == "cancel_button":
self.app.pop_screen()

Loading…
Cancel
Save