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:
|
def __init__(self) -> None:
|
||||||
"""
|
"""
|
||||||
Only initialises data structure. Call set_plr to populate.
|
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
|
self.artist = None
|
||||||
@ -131,7 +135,6 @@ class PlaylistTrack:
|
|||||||
self.playlist_id = None
|
self.playlist_id = None
|
||||||
self.playlist_tab = None
|
self.playlist_tab = None
|
||||||
self.plr_id = None
|
self.plr_id = None
|
||||||
self.row_number = None
|
|
||||||
self.silence_at = None
|
self.silence_at = None
|
||||||
self.start_gap = None
|
self.start_gap = None
|
||||||
self.start_time = None
|
self.start_time = None
|
||||||
@ -163,7 +166,6 @@ class PlaylistTrack:
|
|||||||
self.path = track.path
|
self.path = track.path
|
||||||
self.playlist_id = plr.playlist_id
|
self.playlist_id = plr.playlist_id
|
||||||
self.plr_id = plr.id
|
self.plr_id = plr.id
|
||||||
self.row_number = plr.row_number
|
|
||||||
self.silence_at = track.silence_at
|
self.silence_at = track.silence_at
|
||||||
self.start_gap = track.start_gap
|
self.start_gap = track.start_gap
|
||||||
self.start_time = None
|
self.start_time = None
|
||||||
|
|||||||
@ -720,6 +720,11 @@ class PlaylistTab(QTableWidget):
|
|||||||
|
|
||||||
current_row = self._get_current_track_row_number()
|
current_row = self._get_current_track_row_number()
|
||||||
if not current_row:
|
if not current_row:
|
||||||
|
send_mail(Config.ERRORS_TO,
|
||||||
|
Config.ERRORS_FROM,
|
||||||
|
"MusicMuster unexpected failure",
|
||||||
|
stackprinter.format()
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
search_from = current_row + 1
|
search_from = current_row + 1
|
||||||
@ -749,6 +754,11 @@ class PlaylistTab(QTableWidget):
|
|||||||
# Add the rows
|
# Add the rows
|
||||||
playlist = session.get(Playlists, playlist_id)
|
playlist = session.get(Playlists, playlist_id)
|
||||||
if not playlist:
|
if not playlist:
|
||||||
|
send_mail(Config.ERRORS_TO,
|
||||||
|
Config.ERRORS_FROM,
|
||||||
|
"MusicMuster unexpected failure",
|
||||||
|
stackprinter.format()
|
||||||
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
for plr in playlist.rows:
|
for plr in playlist.rows:
|
||||||
@ -963,8 +973,8 @@ class PlaylistTab(QTableWidget):
|
|||||||
- Show unplayed tracks in bold
|
- Show unplayed tracks in bold
|
||||||
"""
|
"""
|
||||||
|
|
||||||
current_row: Optional[int] = self._get_current_track_row_number()
|
current_row = self._get_current_track_row_number()
|
||||||
next_row: Optional[int] = self._get_next_track_row_number()
|
next_row = self._get_next_track_row_number()
|
||||||
played = [
|
played = [
|
||||||
p.row_number for p in PlaylistRows.get_played_rows(
|
p.row_number for p in PlaylistRows.get_played_rows(
|
||||||
session, self.playlist_id)
|
session, self.playlist_id)
|
||||||
@ -1313,23 +1323,13 @@ class PlaylistTab(QTableWidget):
|
|||||||
"""Return current track row or None"""
|
"""Return current track row or None"""
|
||||||
|
|
||||||
current_track = self.musicmuster.current_track
|
current_track = self.musicmuster.current_track
|
||||||
if not current_track.track_id:
|
return self._plrid_to_row_number(current_track.plr_id)
|
||||||
return None
|
|
||||||
if current_track.playlist_tab == self:
|
|
||||||
return current_track.row_number
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
def _get_next_track_row_number(self) -> Optional[int]:
|
def _get_next_track_row_number(self) -> Optional[int]:
|
||||||
"""Return next track row or None"""
|
"""Return next track row or None"""
|
||||||
|
|
||||||
next_track = self.musicmuster.next_track
|
next_track = self.musicmuster.next_track
|
||||||
if not next_track.track_id:
|
return self._plrid_to_row_number(next_track.plr_id)
|
||||||
return None
|
|
||||||
if next_track.playlist_tab == self:
|
|
||||||
return next_track.row_number
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_note_text_time(text: str) -> Optional[datetime]:
|
def _get_note_text_time(text: str) -> Optional[datetime]:
|
||||||
@ -1571,6 +1571,17 @@ class PlaylistTab(QTableWidget):
|
|||||||
|
|
||||||
open_in_audacity(track.path)
|
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:
|
def _remove_track(self, row: int) -> None:
|
||||||
"""Remove track from row, making it a section header"""
|
"""Remove track from row, making it a section header"""
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user