Make row number a playlist-only concept
Solves problem of rows being moved in playlist and musicmuster not knowing which row the current/next track is (but it doesn't need to know; it only needs to know the PlaylistRows id).
This commit is contained in:
parent
087139f4de
commit
7584ad2090
@ -120,6 +120,10 @@ class PlaylistTrack:
|
||||
def __init__(self) -> None:
|
||||
"""
|
||||
Only initialises data structure. Call set_plr to populate.
|
||||
|
||||
Do NOT store row_number here - that changes if tracks are reordered
|
||||
in playlist (add, remove, drag/drop) and we shouldn't care about row
|
||||
number: that's the playlist's problem.
|
||||
"""
|
||||
|
||||
self.artist = None
|
||||
@ -131,7 +135,6 @@ class PlaylistTrack:
|
||||
self.playlist_id = None
|
||||
self.playlist_tab = None
|
||||
self.plr_id = None
|
||||
self.row_number = None
|
||||
self.silence_at = None
|
||||
self.start_gap = None
|
||||
self.start_time = None
|
||||
@ -163,7 +166,6 @@ class PlaylistTrack:
|
||||
self.path = track.path
|
||||
self.playlist_id = plr.playlist_id
|
||||
self.plr_id = plr.id
|
||||
self.row_number = plr.row_number
|
||||
self.silence_at = track.silence_at
|
||||
self.start_gap = track.start_gap
|
||||
self.start_time = None
|
||||
|
||||
@ -720,6 +720,11 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
current_row = self._get_current_track_row_number()
|
||||
if not current_row:
|
||||
send_mail(Config.ERRORS_TO,
|
||||
Config.ERRORS_FROM,
|
||||
"MusicMuster unexpected failure",
|
||||
stackprinter.format()
|
||||
)
|
||||
return
|
||||
|
||||
search_from = current_row + 1
|
||||
@ -749,6 +754,11 @@ class PlaylistTab(QTableWidget):
|
||||
# Add the rows
|
||||
playlist = session.get(Playlists, playlist_id)
|
||||
if not playlist:
|
||||
send_mail(Config.ERRORS_TO,
|
||||
Config.ERRORS_FROM,
|
||||
"MusicMuster unexpected failure",
|
||||
stackprinter.format()
|
||||
)
|
||||
return
|
||||
|
||||
for plr in playlist.rows:
|
||||
@ -963,8 +973,8 @@ class PlaylistTab(QTableWidget):
|
||||
- Show unplayed tracks in bold
|
||||
"""
|
||||
|
||||
current_row: Optional[int] = self._get_current_track_row_number()
|
||||
next_row: Optional[int] = self._get_next_track_row_number()
|
||||
current_row = self._get_current_track_row_number()
|
||||
next_row = self._get_next_track_row_number()
|
||||
played = [
|
||||
p.row_number for p in PlaylistRows.get_played_rows(
|
||||
session, self.playlist_id)
|
||||
@ -1313,23 +1323,13 @@ class PlaylistTab(QTableWidget):
|
||||
"""Return current track row or None"""
|
||||
|
||||
current_track = self.musicmuster.current_track
|
||||
if not current_track.track_id:
|
||||
return None
|
||||
if current_track.playlist_tab == self:
|
||||
return current_track.row_number
|
||||
else:
|
||||
return None
|
||||
return self._plrid_to_row_number(current_track.plr_id)
|
||||
|
||||
def _get_next_track_row_number(self) -> Optional[int]:
|
||||
"""Return next track row or None"""
|
||||
|
||||
next_track = self.musicmuster.next_track
|
||||
if not next_track.track_id:
|
||||
return None
|
||||
if next_track.playlist_tab == self:
|
||||
return next_track.row_number
|
||||
else:
|
||||
return None
|
||||
return self._plrid_to_row_number(next_track.plr_id)
|
||||
|
||||
@staticmethod
|
||||
def _get_note_text_time(text: str) -> Optional[datetime]:
|
||||
@ -1571,6 +1571,17 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
open_in_audacity(track.path)
|
||||
|
||||
def _plrid_to_row_number(self, plrid: int) -> Optional[int]:
|
||||
"""
|
||||
Return row number of passed plrid, or None if not found
|
||||
"""
|
||||
|
||||
for row_number in range(self.rowCount()):
|
||||
if self._get_playlistrow_id(row_number) == plrid:
|
||||
return row_number
|
||||
|
||||
return None
|
||||
|
||||
def _remove_track(self, row: int) -> None:
|
||||
"""Remove track from row, making it a section header"""
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user