Fixed regression in album grouping, ref #616
This commit is contained in:
@@ -1386,4 +1386,34 @@ namespace lms::db::tests
|
|||||||
EXPECT_EQ(releases.results[0]->getId(), release->getId());
|
EXPECT_EQ(releases.results[0]->getId(), release->getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(DatabaseFixture, Release_sortName)
|
||||||
|
{
|
||||||
|
ScopedRelease release1{ session, "MyRelease1" };
|
||||||
|
ScopedRelease release2{ session, "MyRelease2" };
|
||||||
|
|
||||||
|
{
|
||||||
|
auto transaction{ session.createWriteTransaction() };
|
||||||
|
release1.get().modify()->setSortName("BB");
|
||||||
|
release2.get().modify()->setSortName("AA");
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
|
const auto releases{ Release::find(session, Release::FindParameters{}.setSortMethod(ReleaseSortMethod::Name)) };
|
||||||
|
ASSERT_EQ(releases.results.size(), 2);
|
||||||
|
EXPECT_EQ(releases.results[0]->getId(), release1->getId());
|
||||||
|
EXPECT_EQ(releases.results[1]->getId(), release2->getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
auto transaction{ session.createReadTransaction() };
|
||||||
|
|
||||||
|
const auto releases{ Release::find(session, Release::FindParameters{}.setSortMethod(ReleaseSortMethod::SortName)) };
|
||||||
|
ASSERT_EQ(releases.results.size(), 2);
|
||||||
|
EXPECT_EQ(releases.results[0]->getId(), release2->getId());
|
||||||
|
EXPECT_EQ(releases.results[1]->getId(), release1->getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
} // namespace lms::db::tests
|
} // namespace lms::db::tests
|
||||||
@@ -511,7 +511,7 @@ namespace lms::metadata
|
|||||||
|
|
||||||
release.emplace();
|
release.emplace();
|
||||||
release->name = std::move(*releaseName);
|
release->name = std::move(*releaseName);
|
||||||
release->sortName = getTagValueAs<std::string>(tagReader, TagType::AlbumSortOrder).value_or("");
|
release->sortName = getTagValueAs<std::string>(tagReader, TagType::AlbumSortOrder).value_or(release->name);
|
||||||
release->artists = getArtists(tagReader, { TagType::AlbumArtists, TagType::AlbumArtist }, { TagType::AlbumArtistsSortOrder, TagType::AlbumArtistSortOrder }, { TagType::MusicBrainzReleaseArtistID }, _artistTagDelimiters, _defaultTagDelimiters);
|
release->artists = getArtists(tagReader, { TagType::AlbumArtists, TagType::AlbumArtist }, { TagType::AlbumArtistsSortOrder, TagType::AlbumArtistSortOrder }, { TagType::MusicBrainzReleaseArtistID }, _artistTagDelimiters, _defaultTagDelimiters);
|
||||||
release->artistDisplayName = computeArtistDisplayName(release->artists, getTagValueAs<std::string>(tagReader, TagType::AlbumArtist), _artistTagDelimiters);
|
release->artistDisplayName = computeArtistDisplayName(release->artists, getTagValueAs<std::string>(tagReader, TagType::AlbumArtist), _artistTagDelimiters);
|
||||||
release->mbid = getTagValueAs<core::UUID>(tagReader, TagType::MusicBrainzReleaseID);
|
release->mbid = getTagValueAs<core::UUID>(tagReader, TagType::MusicBrainzReleaseID);
|
||||||
|
|||||||
@@ -716,6 +716,21 @@ namespace lms::metadata
|
|||||||
EXPECT_EQ(track->composerArtists[0].mbid.value(), core::UUID::fromString("6643f584-5edc-45ce-927d-0a4ab25c2673"));
|
EXPECT_EQ(track->composerArtists[0].mbid.value(), core::UUID::fromString("6643f584-5edc-45ce-927d-0a4ab25c2673"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Parser, release_sortNameFallback)
|
||||||
|
{
|
||||||
|
const TestTagReader testTags{
|
||||||
|
{
|
||||||
|
{ TagType::Album, { "MyAlbum" } },
|
||||||
|
// No AlbumSortOrder
|
||||||
|
}
|
||||||
|
};
|
||||||
|
std::unique_ptr<Track> track{ Parser{}.parse(testTags) };
|
||||||
|
|
||||||
|
ASSERT_TRUE(track->medium.has_value());
|
||||||
|
ASSERT_TRUE(track->medium->release.has_value());
|
||||||
|
EXPECT_EQ(track->medium->release->sortName, "MyAlbum");
|
||||||
|
}
|
||||||
|
|
||||||
TEST(Parser, advisory)
|
TEST(Parser, advisory)
|
||||||
{
|
{
|
||||||
auto doTest = [](std::string_view value, std::optional<Track::Advisory> expectedValue) {
|
auto doTest = [](std::string_view value, std::optional<Track::Advisory> expectedValue) {
|
||||||
|
|||||||
@@ -163,11 +163,8 @@ namespace lms::scanner
|
|||||||
{
|
{
|
||||||
if (release->getName() != releaseInfo.name)
|
if (release->getName() != releaseInfo.name)
|
||||||
release.modify()->setName(releaseInfo.name);
|
release.modify()->setName(releaseInfo.name);
|
||||||
{
|
if (release->getSortName() != releaseInfo.sortName)
|
||||||
std::string_view sortName{ !releaseInfo.sortName.empty() ? releaseInfo.sortName : releaseInfo.name };
|
release.modify()->setSortName(releaseInfo.sortName);
|
||||||
if (release->getSortName() != sortName)
|
|
||||||
release.modify()->setSortName(sortName);
|
|
||||||
}
|
|
||||||
if (release->getGroupMBID() != releaseInfo.groupMBID)
|
if (release->getGroupMBID() != releaseInfo.groupMBID)
|
||||||
release.modify()->setGroupMBID(releaseInfo.groupMBID);
|
release.modify()->setGroupMBID(releaseInfo.groupMBID);
|
||||||
if (release->getTotalDisc() != releaseInfo.mediumCount)
|
if (release->getTotalDisc() != releaseInfo.mediumCount)
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ namespace lms::metadata
|
|||||||
std::ostream& operator<<(std::ostream& os, const Release& release)
|
std::ostream& operator<<(std::ostream& os, const Release& release)
|
||||||
{
|
{
|
||||||
os << release.name;
|
os << release.name;
|
||||||
if (!release.sortName.empty())
|
if (release.sortName != release.name)
|
||||||
os << " '" << release.sortName << "'";
|
os << " '" << release.sortName << "'";
|
||||||
os << std::endl;
|
os << std::endl;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user