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 (
ApplicationError,
Filter,
InsertTrack,
MusicMusterSignals,
PlaylistDTO,
QueryDTO,
@ -1402,8 +1403,13 @@ class Window(QMainWindow):
new_row_number, existing_prd, note=""
)
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
# # # # # # # # # # Playlist management functions # # # # # # # # # #
@ -1903,7 +1909,13 @@ class Window(QMainWindow):
dlg.resize(500, 100)
ok = dlg.exec()
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:
"""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_begin_insert_rows.connect(self.begin_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_set_next_row.connect(self.set_next_row)
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
if self.track_sequence.previous and self.track_sequence.previous.row_number:
# 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
self.update_track_times()
@ -678,7 +681,7 @@ class PlaylistModel(QAbstractTableModel):
self.invalidate_row(row_number, roles)
# @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.
"""
@ -690,8 +693,8 @@ class PlaylistModel(QAbstractTableModel):
_ = ds.playlist_insert_row(
playlist_id=self.playlist_id,
row_number=new_row_number,
track_id=track_id,
note=note,
track_id=row_data.track_id,
note=row_data.note,
)
# Need to refresh self.playlist_rows because row numbers will have
# changed
@ -797,14 +800,16 @@ class PlaylistModel(QAbstractTableModel):
if self.track_sequence.current:
current_row = self.track_sequence.current.row_number
if current_row in from_rows:
log.debug(
"move_rows: Removing {current_row=} from {from_rows=}"
)
log.debug("move_rows: Removing {current_row=} from {from_rows=}")
from_rows.remove(self.track_sequence.current.row_number)
from_rows = sorted(set(from_rows))
if (min(from_rows) < 0 or max(from_rows) >= self.rowCount()
or to_row_number < 0 or to_row_number > self.rowCount()):
if (
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")
return False
@ -862,15 +867,16 @@ class PlaylistModel(QAbstractTableModel):
# Prepare source model
super().beginRemoveRows(QModelIndex(), min(row_group), max(row_group))
# Prepare destination model
insert_rows = InsertRows(to_playlist_id,
to_row_number,
to_row_number + len(row_group)
)
insert_rows = InsertRows(
to_playlist_id, to_row_number, to_row_number + len(row_group)
)
self.signals.signal_begin_insert_rows.emit(insert_rows)
ds.playlist_move_rows(from_rows=row_group,
from_playlist_id=self.playlist_id,
to_row=to_row_number,
to_playlist_id=to_playlist_id)
ds.playlist_move_rows(
from_rows=row_group,
from_playlist_id=self.playlist_id,
to_row=to_row_number,
to_playlist_id=to_playlist_id,
)
self.signals.signal_end_insert_rows.emit(to_playlist_id)
super().endRemoveRows()
@ -1014,7 +1020,9 @@ class PlaylistModel(QAbstractTableModel):
plrid = self.playlist_rows[row_number].playlistrow_id
refreshed_row = ds.playlistrow_by_id(plrid)
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)
@ -1451,7 +1459,9 @@ class PlaylistModel(QAbstractTableModel):
]
self.invalidate_rows(track_rows, roles)
else:
self.insert_row(track_id=track_id)
self.insert_row(
InsertTrack(playlist_id=self.playlist_id, track_id=track_id, note="")
)
# @log_call
def update_track_times(self) -> None:
@ -1477,7 +1487,10 @@ class PlaylistModel(QAbstractTableModel):
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
for row_number in range(row_count):
@ -1582,14 +1595,21 @@ class PlaylistProxyModel(QSortFilterProxyModel):
):
# This row isn't our previous track: hide it
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
# until HIDE_AFTER_PLAYING_OFFSET milliseconds
# after current track has started
if self.track_sequence.current.start_time and dt.datetime.now() > (
if (
self.track_sequence.current.start_time
+ dt.timedelta(
milliseconds=Config.HIDE_AFTER_PLAYING_OFFSET
and dt.datetime.now()
> (
self.track_sequence.current.start_time
+ dt.timedelta(
milliseconds=Config.HIDE_AFTER_PLAYING_OFFSET
)
)
):
return False