Handle signal_insert_track better.

This commit is contained in:
Keith Edmunds 2025-04-15 10:21:26 +01:00
parent 6496ea2ac4
commit a0ded4b73d
3 changed files with 86 additions and 16 deletions

View File

@ -96,7 +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_insert_track.connect(self.insert_row_signal_handler)
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)
@ -682,11 +682,14 @@ class PlaylistModel(QAbstractTableModel):
self.invalidate_row(row_number, roles)
# @log_call
def insert_row(self, row_data: InsertTrack) -> None:
def insert_row_signal_handler(self, row_data: InsertTrack) -> None:
"""
Insert a row.
Handle the signal_insert_track signal
"""
if row_data.playlist_id != self.playlist_id:
return
new_row_number = self._get_new_row_number()
super().beginInsertRows(QModelIndex(), new_row_number, new_row_number)
@ -1464,7 +1467,7 @@ class PlaylistModel(QAbstractTableModel):
]
self.invalidate_rows(track_rows, roles)
else:
self.insert_row(
self.insert_row_signal_handler(
InsertTrack(playlist_id=self.playlist_id, track_id=track_id, note="")
)

View File

@ -11,6 +11,7 @@ from app.helpers import get_all_track_metadata
from app import ds, playlistmodel
from app.models import db
from classes import (
InsertTrack,
TrackAndPlaylist,
)
@ -39,7 +40,13 @@ class TestMMMiscTracks(unittest.TestCase):
track_path = self.test_tracks[row % len(self.test_tracks)]
metadata = get_all_track_metadata(track_path)
track = ds.track_create(metadata)
self.model.insert_row(track_id=track.track_id, note=f"{row=}")
self.model.insert_row_signal_handler(
InsertTrack(
playlist_id=self.playlist.playlist_id,
track_id=track.track_id,
note=f"{row=}",
)
)
def tearDown(self):
db.drop_all()
@ -59,9 +66,21 @@ class TestMMMiscTracks(unittest.TestCase):
# Fake selected row in model
self.model.selected_rows = [self.model.playlist_rows[START_ROW]]
self.model.insert_row(note="start+")
self.model.insert_row_signal_handler(
InsertTrack(
playlist_id=self.playlist.playlist_id,
track_id=None,
note="start+"
)
)
self.model.selected_rows = [self.model.playlist_rows[END_ROW]]
self.model.insert_row(note="-")
self.model.insert_row_signal_handler(
InsertTrack(
playlist_id=self.playlist.playlist_id,
track_id=None,
note="-+"
)
)
prd = self.model.playlist_rows[START_ROW]
qv_value = self.model._display_role(
@ -99,7 +118,13 @@ class TestMMMiscNoPlaylist(unittest.TestCase):
track_path = self.test_tracks[0]
metadata = get_all_track_metadata(track_path)
track = ds.track_create(metadata)
model.insert_row(track_id=track.track_id)
model.insert_row_signal_handler(
InsertTrack(
playlist_id=playlist.playlist_id,
track_id=track.track_id,
note="",
)
)
prd = model.playlist_rows[model.rowCount() - 1]
# test repr
@ -121,7 +146,13 @@ class TestMMMiscRowMove(unittest.TestCase):
self.playlist = ds.playlist_create(self.PLAYLIST_NAME, template_id=0)
self.model = playlistmodel.PlaylistModel(self.playlist.playlist_id, is_template=False)
for row in range(self.ROWS_TO_CREATE):
self.model.insert_row(note=str(row))
self.model.insert_row_signal_handler(
InsertTrack(
playlist_id=self.playlist.playlist_id,
track_id=None,
note=str(row),
)
)
def tearDown(self):
db.drop_all()
@ -132,7 +163,13 @@ class TestMMMiscRowMove(unittest.TestCase):
note_text = "test text"
assert self.model.rowCount() == self.ROWS_TO_CREATE
self.model.insert_row(note=note_text)
self.model.insert_row_signal_handler(
InsertTrack(
playlist_id=self.playlist.playlist_id,
track_id=None,
note=note_text
)
)
assert self.model.rowCount() == self.ROWS_TO_CREATE + 1
prd = self.model.playlist_rows[self.model.rowCount() - 1]
# Test against edit_role because display_role for headers is
@ -153,7 +190,13 @@ class TestMMMiscRowMove(unittest.TestCase):
# Fake selected row in model
self.model.selected_rows = [self.model.playlist_rows[insert_row]]
self.model.insert_row(note=note_text)
self.model.insert_row_signal_handler(
InsertTrack(
playlist_id=self.playlist.playlist_id,
track_id=None,
note=note_text
)
)
assert self.model.rowCount() == self.ROWS_TO_CREATE + 1
prd = self.model.playlist_rows[insert_row]
# Test against edit_role because display_role for headers is
@ -169,7 +212,13 @@ class TestMMMiscRowMove(unittest.TestCase):
note_text = "test text"
insert_row = 6
self.model.insert_row(note=note_text)
self.model.insert_row_signal_handler(
InsertTrack(
playlist_id=self.playlist.playlist_id,
track_id=None,
note=note_text
)
)
assert self.model.rowCount() == self.ROWS_TO_CREATE + 1
# Fake selected row in model
@ -206,7 +255,13 @@ class TestMMMiscRowMove(unittest.TestCase):
playlist_dst.playlist_id, is_template=False
)
for row in range(self.ROWS_TO_CREATE):
model_dst.insert_row(note=str(row))
model_dst.insert_row_signal_handler(
InsertTrack(
playlist_id=playlist_dst.playlist_id,
track_id=None,
note=str(row)
)
)
model_src.move_rows_between_playlists(from_rows, to_row, playlist_dst.playlist_id)
@ -227,7 +282,13 @@ class TestMMMiscRowMove(unittest.TestCase):
playlist_dst.playlist_id, is_template=False
)
for row in range(self.ROWS_TO_CREATE):
model_dst.insert_row(note=str(row))
model_dst.insert_row_signal_handler(
InsertTrack(
playlist_id=playlist_dst.playlist_id,
track_id=None,
note=str(row)
)
)
model_src.move_rows_between_playlists(from_rows, to_row, playlist_dst.playlist_id)
@ -255,7 +316,13 @@ class TestMMMiscRowMove(unittest.TestCase):
playlist_dst.playlist_id, is_template=False
)
for row in range(self.ROWS_TO_CREATE):
model_dst.insert_row(note=str(row))
model_dst.insert_row_signal_handler(
InsertTrack(
playlist_id=playlist_dst.playlist_id,
track_id=None,
note=str(row)
)
)
model_src.move_rows_between_playlists(from_rows, to_row, playlist_dst.playlist_id)

View File

@ -99,7 +99,7 @@ class MyTestCase(unittest.TestCase):
model = playlistmodel.PlaylistModel(playlist.playlist_id, is_template=False)
# Add a track with a note
model.insert_row(track_id=self.track1.track_id, note=note_text)
model.insert_row_signal_handler(track_id=self.track1.track_id, note=note_text)
# Retrieve playlist
all_playlists = ds.playlists_all()