Connect up signal_insert_track

This commit is contained in:
Keith Edmunds 2025-04-14 09:45:06 +01:00
parent b34e0a014a
commit 498923c3b3
2 changed files with 59 additions and 27 deletions

View File

@ -65,6 +65,7 @@ import stackprinter # type: ignore
from classes import ( from classes import (
ApplicationError, ApplicationError,
Filter, Filter,
InsertTrack,
MusicMusterSignals, MusicMusterSignals,
PlaylistDTO, PlaylistDTO,
QueryDTO, QueryDTO,
@ -1402,8 +1403,13 @@ class Window(QMainWindow):
new_row_number, existing_prd, note="" new_row_number, existing_prd, note=""
) )
else: else:
base_model.insert_row(track_id) self.signals.signal_insert_track.emit(
InsertTrack(
playlist_id=base_model.playlist_id,
track_id=track_id,
note="",
)
)
new_row_number += 1 new_row_number += 1
# # # # # # # # # # Playlist management functions # # # # # # # # # # # # # # # # # # # # Playlist management functions # # # # # # # # # #
@ -1903,7 +1909,13 @@ class Window(QMainWindow):
dlg.resize(500, 100) dlg.resize(500, 100)
ok = dlg.exec() ok = dlg.exec()
if ok: if ok:
self.current.base_model.insert_row(note=dlg.textValue()) self.signals.signal_insert_track.emit(
InsertTrack(
playlist_id=self.current.base_model.playlist_id,
track_id=None,
note=dlg.textValue()
)
)
def insert_track(self, checked: bool = False) -> None: def insert_track(self, checked: bool = False) -> None:
"""Show dialog box to select and add track from database""" """Show dialog box to select and add track from database"""

View File

@ -96,6 +96,7 @@ class PlaylistModel(QAbstractTableModel):
self.signals.signal_add_track_to_header.connect(self.add_track_to_header) self.signals.signal_add_track_to_header.connect(self.add_track_to_header)
self.signals.signal_begin_insert_rows.connect(self.begin_insert_rows) self.signals.signal_begin_insert_rows.connect(self.begin_insert_rows)
self.signals.signal_end_insert_rows.connect(self.end_insert_rows) self.signals.signal_end_insert_rows.connect(self.end_insert_rows)
self.signals.signal_insert_track.connect(self.insert_row)
self.signals.signal_playlist_selected_rows.connect(self.set_selected_rows) self.signals.signal_playlist_selected_rows.connect(self.set_selected_rows)
self.signals.signal_set_next_row.connect(self.set_next_row) self.signals.signal_set_next_row.connect(self.set_next_row)
self.signals.signal_track_started.connect(self.track_started) self.signals.signal_track_started.connect(self.track_started)
@ -295,7 +296,9 @@ class PlaylistModel(QAbstractTableModel):
# Update previous row in case we're hiding played rows # Update previous row in case we're hiding played rows
if self.track_sequence.previous and self.track_sequence.previous.row_number: if self.track_sequence.previous and self.track_sequence.previous.row_number:
# only invalidate required roles # only invalidate required roles
self.invalidate_row(self.track_sequence.previous.row_number, roles_to_invalidate) self.invalidate_row(
self.track_sequence.previous.row_number, roles_to_invalidate
)
# Update all other track times # Update all other track times
self.update_track_times() self.update_track_times()
@ -678,7 +681,7 @@ class PlaylistModel(QAbstractTableModel):
self.invalidate_row(row_number, roles) self.invalidate_row(row_number, roles)
# @log_call # @log_call
def insert_row(self, track_id: Optional[int] = None, note: str = "",) -> None: def insert_row(self, row_data: InsertTrack) -> None:
""" """
Insert a row. Insert a row.
""" """
@ -690,8 +693,8 @@ class PlaylistModel(QAbstractTableModel):
_ = ds.playlist_insert_row( _ = ds.playlist_insert_row(
playlist_id=self.playlist_id, playlist_id=self.playlist_id,
row_number=new_row_number, row_number=new_row_number,
track_id=track_id, track_id=row_data.track_id,
note=note, note=row_data.note,
) )
# Need to refresh self.playlist_rows because row numbers will have # Need to refresh self.playlist_rows because row numbers will have
# changed # changed
@ -797,14 +800,16 @@ class PlaylistModel(QAbstractTableModel):
if self.track_sequence.current: if self.track_sequence.current:
current_row = self.track_sequence.current.row_number current_row = self.track_sequence.current.row_number
if current_row in from_rows: if current_row in from_rows:
log.debug( log.debug("move_rows: Removing {current_row=} from {from_rows=}")
"move_rows: Removing {current_row=} from {from_rows=}"
)
from_rows.remove(self.track_sequence.current.row_number) from_rows.remove(self.track_sequence.current.row_number)
from_rows = sorted(set(from_rows)) from_rows = sorted(set(from_rows))
if (min(from_rows) < 0 or max(from_rows) >= self.rowCount() if (
or to_row_number < 0 or to_row_number > self.rowCount()): min(from_rows) < 0
or max(from_rows) >= self.rowCount()
or to_row_number < 0
or to_row_number > self.rowCount()
):
log.debug("move_rows: invalid indexes") log.debug("move_rows: invalid indexes")
return False return False
@ -862,15 +867,16 @@ class PlaylistModel(QAbstractTableModel):
# Prepare source model # Prepare source model
super().beginRemoveRows(QModelIndex(), min(row_group), max(row_group)) super().beginRemoveRows(QModelIndex(), min(row_group), max(row_group))
# Prepare destination model # Prepare destination model
insert_rows = InsertRows(to_playlist_id, insert_rows = InsertRows(
to_row_number, to_playlist_id, to_row_number, to_row_number + len(row_group)
to_row_number + len(row_group) )
)
self.signals.signal_begin_insert_rows.emit(insert_rows) self.signals.signal_begin_insert_rows.emit(insert_rows)
ds.playlist_move_rows(from_rows=row_group, ds.playlist_move_rows(
from_playlist_id=self.playlist_id, from_rows=row_group,
to_row=to_row_number, from_playlist_id=self.playlist_id,
to_playlist_id=to_playlist_id) to_row=to_row_number,
to_playlist_id=to_playlist_id,
)
self.signals.signal_end_insert_rows.emit(to_playlist_id) self.signals.signal_end_insert_rows.emit(to_playlist_id)
super().endRemoveRows() super().endRemoveRows()
@ -1014,7 +1020,9 @@ class PlaylistModel(QAbstractTableModel):
plrid = self.playlist_rows[row_number].playlistrow_id plrid = self.playlist_rows[row_number].playlistrow_id
refreshed_row = ds.playlistrow_by_id(plrid) refreshed_row = ds.playlistrow_by_id(plrid)
if not refreshed_row: if not refreshed_row:
raise ApplicationError(f"Failed to retrieve row {self.playlist_id=}, {row_number=}") raise ApplicationError(
f"Failed to retrieve row {self.playlist_id=}, {row_number=}"
)
self.playlist_rows[row_number] = PlaylistRow(refreshed_row) self.playlist_rows[row_number] = PlaylistRow(refreshed_row)
@ -1451,7 +1459,9 @@ class PlaylistModel(QAbstractTableModel):
] ]
self.invalidate_rows(track_rows, roles) self.invalidate_rows(track_rows, roles)
else: else:
self.insert_row(track_id=track_id) self.insert_row(
InsertTrack(playlist_id=self.playlist_id, track_id=track_id, note="")
)
# @log_call # @log_call
def update_track_times(self) -> None: def update_track_times(self) -> None:
@ -1477,7 +1487,10 @@ class PlaylistModel(QAbstractTableModel):
update_rows, self.track_sequence.current.start_time update_rows, self.track_sequence.current.start_time
) )
if self.track_sequence.next and self.track_sequence.next.playlist_id == self.playlist_id: if (
self.track_sequence.next
and self.track_sequence.next.playlist_id == self.playlist_id
):
next_track_row = self.track_sequence.next.row_number next_track_row = self.track_sequence.next.row_number
for row_number in range(row_count): for row_number in range(row_count):
@ -1582,14 +1595,21 @@ class PlaylistProxyModel(QSortFilterProxyModel):
): ):
# This row isn't our previous track: hide it # This row isn't our previous track: hide it
return False return False
if self.track_sequence.current and self.track_sequence.current.start_time: if (
self.track_sequence.current
and self.track_sequence.current.start_time
):
# This row is our previous track. Don't hide it # This row is our previous track. Don't hide it
# until HIDE_AFTER_PLAYING_OFFSET milliseconds # until HIDE_AFTER_PLAYING_OFFSET milliseconds
# after current track has started # after current track has started
if self.track_sequence.current.start_time and dt.datetime.now() > ( if (
self.track_sequence.current.start_time self.track_sequence.current.start_time
+ dt.timedelta( and dt.datetime.now()
milliseconds=Config.HIDE_AFTER_PLAYING_OFFSET > (
self.track_sequence.current.start_time
+ dt.timedelta(
milliseconds=Config.HIDE_AFTER_PLAYING_OFFSET
)
) )
): ):
return False return False