Don't use row metadat for next/current track
Get them from musicmuster.
This commit is contained in:
parent
daf8069de2
commit
5e75659c48
@ -114,7 +114,6 @@ class Music:
|
||||
self.player = self.VLC.media_player_new(path)
|
||||
if self.player:
|
||||
self.player.audio_set_volume(self.max_volume)
|
||||
self.current_track_start_time = datetime.now()
|
||||
status = self.player.play()
|
||||
if position:
|
||||
self.player.set_position(position)
|
||||
|
||||
@ -611,9 +611,9 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
# doesn't see player=None and kick off end-of-track actions
|
||||
self.playing = False
|
||||
|
||||
# Tell playlist_tab track has finished
|
||||
if self.current_track.playlist_tab:
|
||||
self.current_track.playlist_tab.play_stopped()
|
||||
# Repaint playlist to remove currently playing track colour
|
||||
with Session() as session:
|
||||
self.current_track.playlist_tab.update_display(session)
|
||||
|
||||
# Reset PlaylistTrack objects
|
||||
if self.current_track.track_id:
|
||||
@ -1321,29 +1321,15 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
"""
|
||||
|
||||
# Clear next track if on another tab
|
||||
if self.next_track.playlist_tab != playlist_tab:
|
||||
# We need to reset the ex-next-track playlist
|
||||
if self.next_track.playlist_tab:
|
||||
self.next_track.playlist_tab.clear_next(session)
|
||||
if self.next_track.playlist_tab and (
|
||||
self.next_track.playlist_tab != playlist_tab):
|
||||
# Repaint ex-next track playlist to remove highlighting
|
||||
self.next_track.playlist_tab.update_display(session)
|
||||
# Discard now-incorrect next_track PlaylistTrack
|
||||
self.next_track = PlaylistTrack()
|
||||
|
||||
# Reset tab colour if on other tab
|
||||
if (self.next_track.playlist_tab !=
|
||||
self.current.track_playlist_tab):
|
||||
self.set_tab_colour(
|
||||
self.next_track.playlist_tab,
|
||||
QColor(Config.COLOUR_NORMAL_TAB))
|
||||
|
||||
# Note next playlist tab
|
||||
self.next_track = PlaylistTrack()
|
||||
self.next_track.set_plr(session, plr, playlist_tab)
|
||||
|
||||
# Set next playlist_tab tab colour if it isn't the
|
||||
# currently-playing tab
|
||||
if (self.next_track.playlist_tab !=
|
||||
self.current_track.playlist_tab):
|
||||
self.set_tab_colour(
|
||||
self.next_track.playlist_tab,
|
||||
QColor(Config.COLOUR_NEXT_TAB))
|
||||
self.next_track.playlist_tab.update_display(session)
|
||||
|
||||
# Populate footer if we're not currently playing
|
||||
if not self.playing and self.next_track.track_id:
|
||||
|
||||
137
app/playlists.py
137
app/playlists.py
@ -62,13 +62,6 @@ start_time_re = re.compile(r"@\d\d:\d\d:\d\d")
|
||||
HEADER_NOTES_COLUMN = 2
|
||||
MINIMUM_ROW_HEIGHT = 30
|
||||
|
||||
|
||||
class RowMeta:
|
||||
UNREADABLE = 2
|
||||
NEXT = 3
|
||||
CURRENT = 4
|
||||
|
||||
|
||||
# Columns
|
||||
Column = namedtuple("Column", ['idx', 'heading'])
|
||||
columns = {}
|
||||
@ -140,7 +133,6 @@ class PlaylistTab(QTableWidget):
|
||||
self.playlist_id = playlist_id
|
||||
|
||||
self.menu: Optional[QMenu] = None
|
||||
self.current_track_start_time: Optional[datetime] = None
|
||||
|
||||
# Don't select text on edit
|
||||
self.setItemDelegate(NoSelectDelegate(self))
|
||||
@ -269,8 +261,10 @@ class PlaylistTab(QTableWidget):
|
||||
track_row = track_id > 0
|
||||
header_row = not track_row
|
||||
if track_row:
|
||||
current = row_number == self._get_current_track_row()
|
||||
next_row = row_number == self._get_next_track_row()
|
||||
current = (
|
||||
row_number == self._get_current_track_row_number()
|
||||
)
|
||||
next_row = row_number == self._get_next_track_row_number()
|
||||
else:
|
||||
current = next_row = False
|
||||
|
||||
@ -536,12 +530,6 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
# # ########## Externally called functions ##########
|
||||
|
||||
def clear_next(self, session) -> None:
|
||||
"""Clear next track marker"""
|
||||
|
||||
self._meta_clear_next()
|
||||
self.update_display(session)
|
||||
|
||||
def clear_selection(self) -> None:
|
||||
"""Unselect all tracks and reset drag mode"""
|
||||
|
||||
@ -653,10 +641,6 @@ class PlaylistTab(QTableWidget):
|
||||
last_played_item = QTableWidgetItem(last_played_str)
|
||||
self.setItem(row, LASTPLAYED, last_played_item)
|
||||
|
||||
# Mark track if file is unreadable
|
||||
if not file_is_readable(plr.track.path):
|
||||
self._set_unreadable_row(row)
|
||||
|
||||
else:
|
||||
# This is a section header so it must have note text
|
||||
if plr.note is None:
|
||||
@ -734,40 +718,14 @@ class PlaylistTab(QTableWidget):
|
||||
- Update display
|
||||
"""
|
||||
|
||||
# Note start time
|
||||
self.current_track_start_time = datetime.now()
|
||||
|
||||
# Mark next-track row as current
|
||||
current_row = self._get_next_track_row()
|
||||
if current_row is None:
|
||||
return
|
||||
self._set_current_track_row(current_row)
|
||||
|
||||
# Mark current row as played
|
||||
self._set_played_row(session, current_row)
|
||||
|
||||
# Set next track
|
||||
search_from = current_row + 1
|
||||
search_from = self._get_current_track_row_number() + 1
|
||||
next_row = self._find_next_track_row(session, search_from)
|
||||
if next_row:
|
||||
self._set_next(session, next_row)
|
||||
self._scroll_to_top(next_row)
|
||||
|
||||
# Update display
|
||||
self.update_display(session)
|
||||
|
||||
def play_stopped(self) -> None:
|
||||
"""
|
||||
Notification from musicmuster that track has ended.
|
||||
|
||||
Actions required:
|
||||
- Remove current track marker
|
||||
- Reset current track start time
|
||||
"""
|
||||
|
||||
self._clear_current_track_row()
|
||||
self.current_track_start_time = None
|
||||
|
||||
def populate_display(self, session: Session, playlist_id: int,
|
||||
scroll_to_top: bool = True) -> None:
|
||||
"""
|
||||
@ -856,13 +814,13 @@ class PlaylistTab(QTableWidget):
|
||||
def scroll_current_to_top(self) -> None:
|
||||
"""Scroll currently-playing row to top"""
|
||||
|
||||
current_row = self._get_current_track_row()
|
||||
current_row = self._get_current_track_row_number()
|
||||
self._scroll_to_top(current_row)
|
||||
|
||||
def scroll_next_to_top(self) -> None:
|
||||
"""Scroll nextly-playing row to top"""
|
||||
|
||||
next_row = self._get_next_track_row()
|
||||
next_row = self._get_next_track_row_number()
|
||||
self._scroll_to_top(next_row)
|
||||
|
||||
def set_search(self, text: str) -> None:
|
||||
@ -992,8 +950,8 @@ class PlaylistTab(QTableWidget):
|
||||
- Show unplayed tracks in bold
|
||||
"""
|
||||
|
||||
current_row: Optional[int] = self._get_current_track_row()
|
||||
next_row: Optional[int] = self._get_next_track_row()
|
||||
current_row: Optional[int] = self._get_current_track_row_number()
|
||||
next_row: Optional[int] = self._get_next_track_row_number()
|
||||
played = [
|
||||
p.row_number for p in PlaylistRows.get_played_rows(
|
||||
session, self.playlist_id)
|
||||
@ -1074,14 +1032,13 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
# Render playing track
|
||||
if row == current_row:
|
||||
# Set start time
|
||||
self._set_row_start_time(
|
||||
row, self.current_track_start_time)
|
||||
# Set last played time to "Today"
|
||||
self.item(row, LASTPLAYED).setText("Today")
|
||||
# Calculate next_start_time
|
||||
next_start_time = self._calculate_end_time(
|
||||
self.current_track_start_time, track.duration)
|
||||
self.musicmuster.current_track.start_time,
|
||||
track.duration
|
||||
)
|
||||
# Set end time
|
||||
self._set_row_end_time(row, next_start_time)
|
||||
# Set colour
|
||||
@ -1221,20 +1178,6 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
return start + timedelta(milliseconds=duration)
|
||||
|
||||
def _clear_current_track_row(self) -> None:
|
||||
"""
|
||||
Clear current row if there is one.
|
||||
"""
|
||||
|
||||
current_row = self._get_current_track_row()
|
||||
|
||||
if current_row is None:
|
||||
return
|
||||
|
||||
self._meta_clear_attribute(current_row, RowMeta.CURRENT)
|
||||
# Reset colour
|
||||
self._set_row_colour(current_row, None)
|
||||
|
||||
def _column_resize(self, idx: int, old: int, new: int) -> None:
|
||||
"""
|
||||
Called when column widths are changed.
|
||||
@ -1348,23 +1291,15 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
return None
|
||||
|
||||
def _get_current_track_row(self) -> Optional[int]:
|
||||
"""Return row marked as current, or None"""
|
||||
def _get_current_track_row_number(self) -> Optional[int]:
|
||||
"""Return current track row or None"""
|
||||
|
||||
row = self._meta_search(RowMeta.CURRENT)
|
||||
if len(row) > 0:
|
||||
return row[0]
|
||||
else:
|
||||
return None
|
||||
return self.musicmuster.current_track.row_number
|
||||
|
||||
def _get_next_track_row(self) -> Optional[int]:
|
||||
"""Return row marked as next, or None"""
|
||||
def _get_next_track_row_number(self) -> Optional[int]:
|
||||
"""Return next track row or None"""
|
||||
|
||||
row = self._meta_search(RowMeta.NEXT)
|
||||
if len(row) > 0:
|
||||
return row[0]
|
||||
else:
|
||||
return None
|
||||
return self.musicmuster.next_track.row_number
|
||||
|
||||
@staticmethod
|
||||
def _get_note_text_time(text: str) -> Optional[datetime]:
|
||||
@ -1522,15 +1457,6 @@ class PlaylistTab(QTableWidget):
|
||||
new_metadata: int = self._meta_get(row) & ~(1 << attribute)
|
||||
self.item(row, USERDATA).setData(self.ROW_FLAGS, new_metadata)
|
||||
|
||||
def _meta_clear_next(self) -> None:
|
||||
"""
|
||||
Clear next row if there is one.
|
||||
"""
|
||||
|
||||
next_row: Optional[int] = self._get_next_track_row()
|
||||
if next_row is not None:
|
||||
self._meta_clear_attribute(next_row, RowMeta.NEXT)
|
||||
|
||||
def _meta_get(self, row: int) -> int:
|
||||
"""Return row metadata"""
|
||||
|
||||
@ -1804,12 +1730,6 @@ class PlaylistTab(QTableWidget):
|
||||
else:
|
||||
self.setColumnWidth(idx, Config.DEFAULT_COLUMN_WIDTH)
|
||||
|
||||
def _set_current_track_row(self, row: int) -> None:
|
||||
"""Mark this row as current track"""
|
||||
|
||||
self._clear_current_track_row()
|
||||
self._meta_set_attribute(row, RowMeta.CURRENT)
|
||||
|
||||
def _set_next(self, session: Session, row_number: int) -> None:
|
||||
"""
|
||||
Set passed row as next playlist row to play.
|
||||
@ -1817,9 +1737,8 @@ class PlaylistTab(QTableWidget):
|
||||
Actions required:
|
||||
- Check row has a track
|
||||
- Check track is readable
|
||||
- Mark as next track
|
||||
- Update display
|
||||
- Notify musicmuster
|
||||
- Update display
|
||||
"""
|
||||
|
||||
track_id = self._get_row_track_id(row_number)
|
||||
@ -1839,21 +1758,12 @@ class PlaylistTab(QTableWidget):
|
||||
self._set_unreadable_row(row_number)
|
||||
return None
|
||||
|
||||
# Mark as next track
|
||||
self._set_next_track_row(row_number)
|
||||
|
||||
# Update display
|
||||
self.update_display(session)
|
||||
|
||||
# Notify musicmuster
|
||||
plr = session.get(PlaylistRows, self._get_playlistrow_id(row_number))
|
||||
self.musicmuster.this_is_the_next_playlist_row(session, plr, self)
|
||||
|
||||
def _set_next_track_row(self, row: int) -> None:
|
||||
"""Mark this row as next track"""
|
||||
|
||||
self._meta_clear_next()
|
||||
self._meta_set_attribute(row, RowMeta.NEXT)
|
||||
# Update display
|
||||
self.update_display(session)
|
||||
|
||||
def _set_played_row(self, session: Session, row: int) -> None:
|
||||
"""Mark this row as played"""
|
||||
@ -1927,11 +1837,6 @@ class PlaylistTab(QTableWidget):
|
||||
item = QTableWidgetItem(time_str)
|
||||
self.setItem(row, START_TIME, item)
|
||||
|
||||
def _set_unreadable_row(self, row: int) -> None:
|
||||
"""Mark this row as unreadable"""
|
||||
|
||||
self._meta_set_attribute(row, RowMeta.UNREADABLE)
|
||||
|
||||
def _get_section_timing_string(self, ms: int,
|
||||
no_end: bool = False) -> None:
|
||||
"""Return string describing section duration"""
|
||||
|
||||
Loading…
Reference in New Issue
Block a user