Refactor playlist items

Fix a bug where playlist items cover is not updated
This commit is contained in:
Jonas Kvinge
2025-04-27 03:03:58 +02:00
parent baec45f742
commit 04c6c862c4
28 changed files with 310 additions and 289 deletions

View File

@@ -36,16 +36,14 @@ class MockPlaylistItem : public PlaylistItem {
public:
MockPlaylistItem();
MOCK_CONST_METHOD0(options, Options());
MOCK_CONST_METHOD0(OriginalMetadata, Song());
MOCK_CONST_METHOD0(OriginalUrl, QUrl());
MOCK_METHOD1(SetStreamMetadata, void(const Song &song));
MOCK_METHOD0(ClearStreamMetadata, void());
MOCK_METHOD1(SetArtManual, void(const QUrl &cover_url));
MOCK_METHOD1(InitFromQuery, bool(const SqlRow &settings));
MOCK_METHOD0(Reload, void());
MOCK_CONST_METHOD0(Metadata, Song());
MOCK_CONST_METHOD0(OriginalMetadata, Song());
MOCK_CONST_METHOD0(Url, QUrl());
MOCK_METHOD1(SetTemporaryMetadata, void(const Song &metadata));
MOCK_METHOD0(ClearTemporaryMetadata, void());
MOCK_METHOD1(SetArtManual, void(const QUrl &cover_url));
MOCK_CONST_METHOD1(DatabaseValue, QVariant(DatabaseColumn));
};
#endif // MOCK_PLAYLISTITEM_H

View File

@@ -56,7 +56,7 @@ class PlaylistTest : public ::testing::Test {
metadata.Init(title, artist, album, length);
MockPlaylistItem *ret = new MockPlaylistItem;
EXPECT_CALL(*ret, Metadata()).WillRepeatedly(Return(metadata));
EXPECT_CALL(*ret, OriginalMetadata()).WillRepeatedly(Return(metadata));
return ret;
}
@@ -100,7 +100,7 @@ TEST_F(PlaylistTest, Indexes) {
// Start "playing" track 1
playlist_.set_current_row(0);
EXPECT_EQ(0, playlist_.current_row());
EXPECT_EQ(u"One"_s, playlist_.current_item()->Metadata().title());
EXPECT_EQ(u"One"_s, playlist_.current_item()->EffectiveMetadata().title());
EXPECT_EQ(-1, playlist_.previous_row());
EXPECT_EQ(1, playlist_.next_row());
@@ -113,14 +113,14 @@ TEST_F(PlaylistTest, Indexes) {
// Play track 2
playlist_.set_current_row(1);
EXPECT_EQ(1, playlist_.current_row());
EXPECT_EQ(u"Two"_s, playlist_.current_item()->Metadata().title());
EXPECT_EQ(u"Two"_s, playlist_.current_item()->EffectiveMetadata().title());
EXPECT_EQ(0, playlist_.previous_row());
EXPECT_EQ(2, playlist_.next_row());
// Play track 3
playlist_.set_current_row(2);
EXPECT_EQ(2, playlist_.current_row());
EXPECT_EQ(u"Three"_s, playlist_.current_item()->Metadata().title());
EXPECT_EQ(u"Three"_s, playlist_.current_item()->EffectiveMetadata().title());
EXPECT_EQ(1, playlist_.previous_row());
EXPECT_EQ(-1, playlist_.next_row());
@@ -453,7 +453,7 @@ TEST_F(PlaylistTest, ShuffleThenNext) {
}
int index = playlist_.current_row();
EXPECT_EQ(u"Item 0"_s, playlist_.current_item()->Metadata().title());
EXPECT_EQ(u"Item 0"_s, playlist_.current_item()->EffectiveMetadata().title());
EXPECT_EQ(u"Item 0"_s, playlist_.data(playlist_.index(index, static_cast<int>(Playlist::Column::Title))));
EXPECT_EQ(index, playlist_.last_played_row());
//EXPECT_EQ(index + 1, playlist_.next_row());
@@ -466,7 +466,7 @@ TEST_F(PlaylistTest, ShuffleThenNext) {
//}
index = playlist_.current_row();
EXPECT_EQ(u"Item 0"_s, playlist_.current_item()->Metadata().title());
EXPECT_EQ(u"Item 0"_s, playlist_.current_item()->EffectiveMetadata().title());
EXPECT_EQ(u"Item 0"_s, playlist_.data(playlist_.index(index, static_cast<int>(Playlist::Column::Title))));
EXPECT_EQ(index, playlist_.last_played_row());
//EXPECT_EQ(-1, playlist_.next_row());
@@ -487,7 +487,7 @@ TEST_F(PlaylistTest, CollectionIdMapSingle) {
EXPECT_EQ(0, playlist_.collection_items(Song::Source::Collection, 0).count());
EXPECT_EQ(0, playlist_.collection_items(Song::Source::Collection, 2).count());
ASSERT_EQ(1, playlist_.collection_items(Song::Source::Collection, 1).count());
EXPECT_EQ(song.title(), playlist_.collection_items(Song::Source::Collection, 1)[0]->Metadata().title()); // clazy:exclude=detaching-temporary
EXPECT_EQ(song.title(), playlist_.collection_items(Song::Source::Collection, 1)[0]->EffectiveMetadata().title()); // clazy:exclude=detaching-temporary
playlist_.Clear();

View File

@@ -78,7 +78,7 @@ TEST_P(SongPlaylistItemTest, Url) {
expected.setScheme(u"file"_s);
expected.setPath(absolute_file_name_);
EXPECT_EQ(expected, item_->Url());
EXPECT_EQ(expected, item_->OriginalUrl());
}