Fix delete tracks
This commit is contained in:
@@ -102,6 +102,47 @@ class PatternDetailsScreen(Screen):
|
||||
s.close()
|
||||
|
||||
|
||||
def updateAudioTracks(self):
|
||||
|
||||
self.audioStreamsTable.clear()
|
||||
|
||||
trackIds = self.__tc.findAllTracks(self.pattern_obj['id'])
|
||||
|
||||
for audioTrackId in trackIds['audio']:
|
||||
|
||||
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')
|
||||
|
||||
self.audioStreamsTable.add_row(*map(str, row))
|
||||
|
||||
def updateSubtitleTracks(self):
|
||||
|
||||
self.audioStreamsTable.clear()
|
||||
|
||||
trackIds = self.__tc.findAllTracks(self.pattern_obj['id'])
|
||||
|
||||
for audioTrackId in trackIds['audio']:
|
||||
|
||||
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')
|
||||
|
||||
self.audioStreamsTable.add_row(*map(str, row))
|
||||
|
||||
|
||||
def on_mount(self):
|
||||
|
||||
if self.pattern_obj:
|
||||
@@ -113,36 +154,8 @@ class PatternDetailsScreen(Screen):
|
||||
|
||||
if self.pattern_obj:
|
||||
|
||||
trackIds = self.__tc.findAllTracks(self.pattern_obj['id'])
|
||||
|
||||
for audioTrackId in trackIds['audio']:
|
||||
|
||||
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')
|
||||
|
||||
self.audioStreamsTable.add_row(*map(str, row))
|
||||
|
||||
for subtitleTrackId in trackIds['subtitle']:
|
||||
|
||||
sd = self.__tc.getTrackDescriptor(subtitleTrackId)
|
||||
dispoList = sd['disposition_list']
|
||||
|
||||
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.subtitleStreamsTable.add_row(*map(str, row))
|
||||
|
||||
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 self.__tc.updateTrack(trackId, trackDescriptor):
|
||||
self.dismiss(trackDescriptor)
|
||||
|
||||
else:
|
||||
self.app.pop_screen()
|
||||
|
||||
|
||||
if event.button.id == "cancel_button":
|
||||
self.app.pop_screen()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user