Fix delete tracks

click-textual
Maveno 1 year ago
parent 84baeb2d87
commit 74dfbe30d7

@ -102,47 +102,60 @@ class PatternDetailsScreen(Screen):
s.close()
def on_mount(self):
def updateAudioTracks(self):
if self.pattern_obj:
self.query_one("#pattern_input", Input).value = str(self.pattern_obj['pattern'])
self.audioStreamsTable.clear()
if self.show_obj:
self.query_one("#showlabel", Static).update(f"{self.show_obj['id']} - {self.show_obj['name']} ({self.show_obj['year']})")
trackIds = self.__tc.findAllTracks(self.pattern_obj['id'])
for audioTrackId in trackIds['audio']:
if self.pattern_obj:
ad = self.__tc.getTrackDescriptor(audioTrackId)
dispoList = ad['disposition_list']
row = (ad['sub_index'],
" ",
ad['language'].label(),
ad['title'],
'Yes' if TrackDisposition.DEFAULT in dispoList else 'No',
'Yes' if TrackDisposition.FORCED in dispoList else 'No')
trackIds = self.__tc.findAllTracks(self.pattern_obj['id'])
self.audioStreamsTable.add_row(*map(str, row))
for audioTrackId in trackIds['audio']:
def updateSubtitleTracks(self):
ad = self.__tc.getTrackDescriptor(audioTrackId)
dispoList = ad['disposition_list']
self.audioStreamsTable.clear()
row = (ad['sub_index'],
" ",
ad['language'].label(),
ad['title'],
'Yes' if TrackDisposition.DEFAULT in dispoList else 'No',
'Yes' if TrackDisposition.FORCED in dispoList else 'No')
trackIds = self.__tc.findAllTracks(self.pattern_obj['id'])
self.audioStreamsTable.add_row(*map(str, row))
for audioTrackId in trackIds['audio']:
for subtitleTrackId in trackIds['subtitle']:
ad = self.__tc.getTrackDescriptor(audioTrackId)
dispoList = ad['disposition_list']
sd = self.__tc.getTrackDescriptor(subtitleTrackId)
dispoList = sd['disposition_list']
row = (ad['sub_index'],
" ",
ad['language'].label(),
ad['title'],
'Yes' if TrackDisposition.DEFAULT in dispoList else 'No',
'Yes' if TrackDisposition.FORCED in dispoList else 'No')
row = (sd['sub_index'],
" ",
sd['language'].label(),
sd['title'],
'Yes' if TrackDisposition.DEFAULT in dispoList else 'No',
'Yes' if TrackDisposition.FORCED in dispoList else 'No')
self.audioStreamsTable.add_row(*map(str, row))
self.subtitleStreamsTable.add_row(*map(str, row))
def on_mount(self):
if self.pattern_obj:
self.query_one("#pattern_input", Input).value = str(self.pattern_obj['pattern'])
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.updateAudioTracks()
self.updateSubtitleTracks()
def compose(self):
@ -319,15 +332,21 @@ class PatternDetailsScreen(Screen):
self.app.push_screen(TrackDetailsScreen(trackType = TrackType.AUDIO, patternId = self.pattern_obj['id'], subIndex = len(self.audioStreamsTable.rows)), self.handle_add_stream)
if event.button.id == "button_edit_audio_stream":
self.app.push_screen(TrackDetailsScreen(trackId = self.getSelectedAudioTrackId()), self.handle_edit_stream)
if event.button.id == "button_delete_audio_stream":
self.app.push_screen(TrackDeleteScreen(trackId = self.getSelectedAudioTrackId()), self.handle_delete_stream)
selectedAudioTrackId = self.getSelectedAudioTrackId()
if selectedAudioTrackId is not None:
if event.button.id == "button_delete_audio_stream":
self.app.push_screen(TrackDeleteScreen(trackId = selectedAudioTrackId), self.handle_delete_stream)
if event.button.id == "button_add_subtitle_stream":
self.app.push_screen(TrackDetailsScreen(trackType = TrackType.SUBTITLE, patternId = self.pattern_obj['id'], subIndex = len(self.subtitleStreamsTable.rows)), self.handle_add_stream)
if event.button.id == "button_edit_subtitle_stream":
self.app.push_screen(TrackDetailsScreen(trackId = self.getSelectedSubtitleTrackId()), self.handle_edit_stream)
if event.button.id == "button_delete_subtitle_stream":
self.app.push_screen(TrackDeleteScreen(trackId = self.getSelectedSubtitleTrackId()), self.handle_delete_stream)
selectedSubtitleTrackId = self.getSelectedSubtitleTrackId()
if selectedSubtitleTrackId is not None:
if event.button.id == "button_delete_subtitle_stream":
self.app.push_screen(TrackDeleteScreen(trackId = selectedSubtitleTrackId), self.handle_delete_stream)
def handle_add_stream(self, trackDescriptor):
@ -386,13 +405,10 @@ class PatternDetailsScreen(Screen):
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)
self.updateAudioTracks()
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)
self.updateSubtitleTracks()
except CellDoesNotExist:
pass

@ -7,6 +7,8 @@ from .track_type import TrackType
from .track_disposition import TrackDisposition
from .iso_language import IsoLanguage
from .track_type import TrackType
class TrackController():
@ -76,17 +78,17 @@ class TrackController():
s = self.Session()
trackDescriptors = {}
trackDescriptors['audio'] = []
trackDescriptors['subtitle'] = []
trackDescriptors[TrackType.AUDIO.label()] = []
trackDescriptors[TrackType.SUBTITLE.label()] = []
q_audio = s.query(Track).filter(Track.pattern_id == int(patternId), Track.track_type == TrackType.AUDIO.value)
for audioTrack in q_audio.all():
trackDescriptors['audio'].append(audioTrack.id)
trackDescriptors[TrackType.AUDIO.label()].append(audioTrack.id)
q_subtitle = s.query(Track).filter(Track.pattern_id == int(patternId), Track.track_type == TrackType.SUBTITLE.value)
for subtitleTrack in q_subtitle.all():
trackDescriptors['subtitle'].append(subtitleTrack.id)
trackDescriptors[TrackType.SUBTITLE.label()].append(subtitleTrack.id)
return trackDescriptors
@ -152,15 +154,27 @@ class TrackController():
if q.count():
#DAFUQ: https://stackoverflow.com/a/19245058
# q.delete()
pattern = q.first()
s.delete(pattern)
trackDescriptor = self.getTrackDict(q.first())
q_siblings = s.query(Track).filter(Track.pattern_id == int(trackDescriptor['pattern_id']), Track.track_type == trackDescriptor['type'].value).order_by(Track.sub_index)
subIndex = 0
for track in q_siblings.all():
if track.sub_index == trackDescriptor['sub_index']:
s.delete(track)
else:
track.sub_index = subIndex
subIndex += 1
s.commit()
return True
return False
except Exception as ex:
raise click.ClickException(f"TrackController.deleteTrack(): {repr(ex)}")
finally:

@ -26,9 +26,9 @@ class TrackDetailsScreen(Screen):
CSS = """
Grid {
grid-size: 5 18;
grid-rows: 2 2 2 2 2 3 2 2 2 2 2 6 2 2 6 2 2 2;
grid-columns: 25 25 25 25 25;
grid-size: 5 20;
grid-rows: 2 2 2 2 2 3 2 2 2 2 2 6 2 2 6 2 2 2 2 6;
grid-columns: 25 25 25 25 225;
height: 100%;
width: 100%;
padding: 1;
@ -103,15 +103,12 @@ class TrackDetailsScreen(Screen):
raise click.ClickException('Sub index for track is required to be set')
def on_mount(self):
if self.pattern_obj:
self.query_one("#patternlabel", Static).update(str(self.pattern_obj['pattern']))
if self.subIndex is not None:
self.query_one("#subindexlabel", Static).update(str(self.subIndex))
@ -132,22 +129,6 @@ class TrackDetailsScreen(Screen):
self.query_one("#title_input", Input).value = str(self.track_obj['title'])
# if self.show_obj:
# self.query_one("#showlabel", Static).update(f"{self.show_obj['id']} - {self.show_obj['name']} ({self.show_obj['year']})")
# for pattern in self.loadPatterns(int(self.show_obj['id'])):
# row = (pattern['pattern'],)
# self.patternTable.add_row(*map(str, row))
# for subIndex in range(3):
#
# row4 = (str(subIndex),str(subIndex),str(subIndex),str(subIndex),)
# self.audioStreamsTable.add_row(*map(str, row4))
#
# row5 = (str(subIndex),str(subIndex),str(subIndex),str(subIndex),str(subIndex),)
# self.subtitleStreamsTable.add_row(*map(str, row5))
def compose(self):
@ -227,7 +208,14 @@ class TrackDetailsScreen(Screen):
yield Button("Save", id="save_button")
yield Button("Cancel", id="cancel_button")
yield Footer()
# 19
yield Static(" ", classes="five")
# 20
yield Static(" ", classes="five", id="messagestatic")
yield Footer(id="footer")
def getTrackDescriptorFromInput(self):
@ -259,23 +247,45 @@ class TrackDetailsScreen(Screen):
trackDescriptor = self.getTrackDescriptorFromInput()
if self.track_obj['is_new']:
# Check for multiple default/forced disposition flags
self.__tc.addTrack(trackDescriptor)
self.dismiss(trackDescriptor)
trackIdList = self.__tc.findAllTracks(self.pattern_obj['id'])[self.trackType.label()]
descriptorList = [d for d in (self.__tc.getTrackDescriptor(t) for t in trackIdList)
if d['type'] == self.trackType
and d['sub_index'] != self.subIndex]
numDefaultTracks = [d for d in descriptorList if TrackDisposition.DEFAULT in d['disposition_list']]
numForcedTracks = [d for d in descriptorList if TrackDisposition.FORCED in d['disposition_list']]
doubleDefaultOrForced = ((TrackDisposition.DEFAULT in trackDescriptor['disposition_list'] and numDefaultTracks)
or (TrackDisposition.FORCED in trackDescriptor['disposition_list'] and numForcedTracks))
if doubleDefaultOrForced:
self.query_one("#messagestatic", Static).update("Cannot add another stream with disposition flag 'debug' or 'forced' set")
else:
trackId = self.__tc.findTrack(self.track_obj['pattern_id'], self.track_obj['type'], self.track_obj['sub_index'])
self.query_one("#messagestatic", Static).update(" ")
if self.__tc.updateTrack(trackId, trackDescriptor):
if self.track_obj['is_new']:
self.__tc.addTrack(trackDescriptor)
self.dismiss(trackDescriptor)
else:
self.app.pop_screen()
trackId = self.__tc.findTrack(self.pattern_obj['id'], self.trackType, self.subIndex)
if event.button.id == "cancel_button":
self.app.pop_screen()
if self.__tc.updateTrack(trackId, trackDescriptor):
self.dismiss(trackDescriptor)
else:
self.app.pop_screen()
if event.button.id == "cancel_button":
self.app.pop_screen()

Loading…
Cancel
Save