From a0ded4b73de63ae9cc14b0f36d009c12b22cd1c2 Mon Sep 17 00:00:00 2001 From: Keith Edmunds Date: Tue, 15 Apr 2025 10:21:26 +0100 Subject: [PATCH] Handle signal_insert_track better. --- app/playlistmodel.py | 11 +++-- tests/test_playlistmodel.py | 89 ++++++++++++++++++++++++++++++++----- tests/test_ui.py | 2 +- 3 files changed, 86 insertions(+), 16 deletions(-) diff --git a/app/playlistmodel.py b/app/playlistmodel.py index 50746c4..a6b754b 100644 --- a/app/playlistmodel.py +++ b/app/playlistmodel.py @@ -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="") ) diff --git a/tests/test_playlistmodel.py b/tests/test_playlistmodel.py index bb1ecc2..1d39d5d 100644 --- a/tests/test_playlistmodel.py +++ b/tests/test_playlistmodel.py @@ -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) diff --git a/tests/test_ui.py b/tests/test_ui.py index 131f886..c26abce 100644 --- a/tests/test_ui.py +++ b/tests/test_ui.py @@ -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()