Compare commits

...

3 Commits

Author SHA1 Message Date
Keith Edmunds
2a6dfc8b63 Fix can't add track to header row 2023-02-10 08:43:04 +00:00
Keith Edmunds
424709ca74 Fix startup issues after refactor 2023-02-10 08:42:41 +00:00
Keith Edmunds
4b104798b8 Add unmark as next, played to context menu
Fixes #166
Fixex #138
2023-02-08 20:52:42 +00:00
2 changed files with 146 additions and 93 deletions

View File

@ -427,6 +427,13 @@ class Window(QMainWindow, Ui_MainWindow):
btn.setStyleSheet("background-color: " + colour + ";\n") btn.setStyleSheet("background-color: " + colour + ";\n")
btn.pgb.setValue(0) btn.pgb.setValue(0)
def clear_next(self) -> None:
"""
Clear next track
"""
self.next_track = PlaylistTrack()
def clear_selection(self) -> None: def clear_selection(self) -> None:
""" Clear selected row""" """ Clear selected row"""
@ -1183,7 +1190,7 @@ class Window(QMainWindow, Ui_MainWindow):
# stop_playing() above has called end_of_track_actions() # stop_playing() above has called end_of_track_actions()
# which will have populated self.previous_track # which will have populated self.previous_track
self.current_track = self.next_track self.current_track = self.next_track
self.next_track = PlaylistTrack() self.clear_next()
if not self.current_track.track_id: if not self.current_track.track_id:
log.debug("musicmuster.play_next(): no id for next track") log.debug("musicmuster.play_next(): no id for next track")
@ -1490,7 +1497,7 @@ class Window(QMainWindow, Ui_MainWindow):
QColor(Config.COLOUR_NORMAL_TAB)) QColor(Config.COLOUR_NORMAL_TAB))
# Discard now-incorrect next_track PlaylistTrack # Discard now-incorrect next_track PlaylistTrack
self.next_track = PlaylistTrack() self.clear_next()
self.next_track.set_plr(session, plr, playlist_tab) self.next_track.set_plr(session, plr, playlist_tab)
if self.next_track.playlist_tab: if self.next_track.playlist_tab:
@ -1819,7 +1826,7 @@ class DbDialog(QDialog):
class DownloadCSV(QDialog): class DownloadCSV(QDialog):
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(*args, **kwargs) super().__init__()
self.ui = Ui_DateSelect() self.ui = Ui_DateSelect()
self.ui.setupUi(self) self.ui.setupUi(self)
@ -1831,7 +1838,7 @@ class DownloadCSV(QDialog):
class SelectPlaylistDialog(QDialog): class SelectPlaylistDialog(QDialog):
def __init__(self, parent=None, playlists=None, session=None): def __init__(self, parent=None, playlists=None, session=None):
super().__init__(*args, **kwargs) super().__init__()
if playlists is None: if playlists is None:
return return

View File

@ -265,18 +265,38 @@ class PlaylistTab(QTableWidget):
self.menu = QMenu(self) self.menu = QMenu(self)
item = self.itemAt(event.pos()) item = self.itemAt(event.pos())
if item is not None: if item is not None:
with Session() as session:
row_number = item.row() row_number = item.row()
track_id = self._get_row_track_id(row_number) plr_id = self._get_playlistrow_id(row_number)
track_row = track_id > 0 plr = session.get(PlaylistRows, plr_id)
track_id = plr.track_id
track_row = track_id is not None
header_row = not track_row header_row = not track_row
if track_row: if track_row:
current = ( current = (
row_number == self._get_current_track_row_number() row_number == self._get_current_track_row_number()
) )
next_row = row_number == self._get_next_track_row_number() next_row = (
row_number == self._get_next_track_row_number())
else: else:
current = next_row = False current = next_row = False
# Mark unplayed / un-next
sep = False
if plr.played:
sep = True
act_unplay = self.menu.addAction("Mark unplayed")
act_unplay.triggered.connect(
lambda: self._mark_unplayed(plr))
if next_row:
sep = True
act_unnext = self.menu.addAction(
"Unmark as next track")
act_unnext.triggered.connect(
lambda: self._mark_unnext(row_number))
if sep:
self.menu.addSeparator()
# Cut/paste # Cut/paste
act_cut = self.menu.addAction( act_cut = self.menu.addAction(
"Mark for moving") "Mark for moving")
@ -313,7 +333,6 @@ class PlaylistTab(QTableWidget):
# Set next # Set next
if not current and not next_row: if not current and not next_row:
act_setnext = self.menu.addAction("Set next") act_setnext = self.menu.addAction("Set next")
with Session() as session:
act_setnext.triggered.connect( act_setnext.triggered.connect(
lambda: self._set_next(session, row_number)) lambda: self._set_next(session, row_number))
@ -347,7 +366,8 @@ class PlaylistTab(QTableWidget):
self.menu.addSeparator() self.menu.addSeparator()
# Remove track # Remove track
act_remove_track = self.menu.addAction('Remove track') act_remove_track = self.menu.addAction(
'Remove track')
act_remove_track.triggered.connect( act_remove_track.triggered.connect(
lambda: self._remove_track(row_number) lambda: self._remove_track(row_number)
) )
@ -367,7 +387,8 @@ class PlaylistTab(QTableWidget):
if not current and not next_row: if not current and not next_row:
act_move = self.menu.addAction('Move to playlist...') act_move = self.menu.addAction('Move to playlist...')
act_move.triggered.connect(self.musicmuster.move_selected) act_move.triggered.connect(
self.musicmuster.move_selected)
self.menu.addSeparator() self.menu.addSeparator()
return super(PlaylistTab, self).eventFilter(source, event) return super(PlaylistTab, self).eventFilter(source, event)
@ -534,8 +555,12 @@ class PlaylistTab(QTableWidget):
plr_id = self._get_playlistrow_id(row) plr_id = self._get_playlistrow_id(row)
plr_item = session.get(PlaylistRows, plr_id) plr_item = session.get(PlaylistRows, plr_id)
item = self.item(row, note_column) item = self.item(row, note_column)
if not plr_item or not plr_item.note or not item: if not item:
return False return False
if not plr_item:
return False
if not plr_item.note:
plr_item.note = ''
item.setText(plr_item.note) item.setText(plr_item.note)
# Connect signal so we know when cell has changed. # Connect signal so we know when cell has changed.
@ -1233,7 +1258,7 @@ class PlaylistTab(QTableWidget):
_ = self._set_item_text(row, ROW_NOTES, plr.note) _ = self._set_item_text(row, ROW_NOTES, plr.note)
start_gap_item = self._set_item_text(row, START_GAP, start_gap_item = self._set_item_text(row, START_GAP,
track.start_gap) str(track.start_gap))
if track.start_gap and track.start_gap >= 500: if track.start_gap and track.start_gap >= 500:
start_gap_item.setBackground(QColor(Config.COLOUR_LONG_START)) start_gap_item.setBackground(QColor(Config.COLOUR_LONG_START))
@ -1569,6 +1594,27 @@ class PlaylistTab(QTableWidget):
and pos.y() >= rect.center().y() # noqa W503 and pos.y() >= rect.center().y() # noqa W503
) )
def _mark_unnext(self, row: int) -> None:
"""
Unmark passed row as next track
"""
self.musicmuster.clear_next()
with Session() as session:
self.update_display(session)
self.musicmuster.update_headers()
def _mark_unplayed(self, plr: PlaylistRows) -> None:
"""
Mark passed row as unplayed in this playlist
"""
with Session() as session:
session.add(plr)
plr.played = False
session.flush()
self.update_display(session)
def _move_row(self, session: scoped_session, plr: PlaylistRows, def _move_row(self, session: scoped_session, plr: PlaylistRows,
new_row_number: int) -> None: new_row_number: int) -> None:
"""Move playlist row to new_row_number using parent copy/paste""" """Move playlist row to new_row_number using parent copy/paste"""
@ -2001,8 +2047,8 @@ class PlaylistTab(QTableWidget):
_ = self._set_item_text(row, TITLE, track.title) _ = self._set_item_text(row, TITLE, track.title)
_ = self._set_item_text(row, ARTIST, track.artist) _ = self._set_item_text(row, ARTIST, track.artist)
_ = self._set_item_text(row, DURATION, track.duration) _ = self._set_item_text(row, DURATION, ms_to_mmss(track.duration))
_ = self._set_item_text(row, BITRATE, track.bitrate) _ = self._set_item_text(row, BITRATE, str(track.bitrate))
self.update_display(session) self.update_display(session)