First consider album artists when multiple names are used for the same artist mbid and no artist info is present, ref #731
This commit is contained in:
@@ -23,6 +23,37 @@
|
||||
|
||||
namespace lms::db
|
||||
{
|
||||
core::LiteralString trackArtistLinkTypeToString(TrackArtistLinkType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case TrackArtistLinkType::Arranger:
|
||||
return "arranger";
|
||||
case TrackArtistLinkType::Artist:
|
||||
return "artist";
|
||||
case TrackArtistLinkType::Composer:
|
||||
return "composer";
|
||||
case TrackArtistLinkType::Conductor:
|
||||
return "conductor";
|
||||
case TrackArtistLinkType::Lyricist:
|
||||
return "lyricist";
|
||||
case TrackArtistLinkType::Mixer:
|
||||
return "mixer";
|
||||
case TrackArtistLinkType::Performer:
|
||||
return "performer";
|
||||
case TrackArtistLinkType::Producer:
|
||||
return "producer";
|
||||
case TrackArtistLinkType::ReleaseArtist:
|
||||
return "albumartist";
|
||||
case TrackArtistLinkType::Remixer:
|
||||
return "remixer";
|
||||
case TrackArtistLinkType::Writer:
|
||||
return "writer";
|
||||
}
|
||||
|
||||
return "unknown";
|
||||
}
|
||||
|
||||
static const std::set<Bitrate> allowedAudioBitrates{
|
||||
64000,
|
||||
96000,
|
||||
@@ -41,4 +72,5 @@ namespace lms::db
|
||||
{
|
||||
return allowedAudioBitrates.find(bitrate) != std::cend(allowedAudioBitrates);
|
||||
}
|
||||
|
||||
} // namespace lms::db
|
||||
|
||||
@@ -59,6 +59,9 @@ namespace lms::db
|
||||
query.where("t.release_id = ?").bind(params.release);
|
||||
}
|
||||
|
||||
if (params.mbidMatched)
|
||||
query.where("t_a_l.artist_mbid_matched = ?").bind(*params.mbidMatched);
|
||||
|
||||
switch (params.sortMethod)
|
||||
{
|
||||
case TrackArtistLinkSortMethod::None:
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <Wt/WDate.h>
|
||||
|
||||
#include "core/Exception.hpp"
|
||||
#include "core/LiteralString.hpp"
|
||||
#include "core/TaggedType.hpp"
|
||||
|
||||
namespace lms::db
|
||||
@@ -280,6 +281,8 @@ namespace lms::db
|
||||
Writer = 10,
|
||||
};
|
||||
|
||||
core::LiteralString trackArtistLinkTypeToString(TrackArtistLinkType type);
|
||||
|
||||
// User selectable transcoding output formats
|
||||
enum class TranscodingOutputFormat
|
||||
{
|
||||
|
||||
@@ -51,6 +51,7 @@ namespace lms::db
|
||||
ArtistId artist; // if set, links involved with this artist
|
||||
ReleaseId release; // if set, artists involved in this release
|
||||
TrackId track; // if set, artists involved in this track
|
||||
std::optional<bool> mbidMatched;
|
||||
TrackArtistLinkSortMethod sortMethod{ TrackArtistLinkSortMethod::None };
|
||||
|
||||
FindParameters& setRange(std::optional<Range> _range)
|
||||
@@ -78,6 +79,11 @@ namespace lms::db
|
||||
track = _track;
|
||||
return *this;
|
||||
}
|
||||
FindParameters& setMBIDMatched(std::optional<bool> _mbidMatched)
|
||||
{
|
||||
mbidMatched = _mbidMatched;
|
||||
return *this;
|
||||
}
|
||||
FindParameters& setSortMethod(TrackArtistLinkSortMethod _method)
|
||||
{
|
||||
sortMethod = _method;
|
||||
|
||||
@@ -222,4 +222,57 @@ namespace lms::db::tests
|
||||
EXPECT_EQ(links[1]->getArtistName(), "MyArtistOldName");
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, TrackArtistLink_findWithMBIDMatched)
|
||||
{
|
||||
ScopedArtist artist{ session, "MyArtist", core::UUID::fromString("97d1fb6f-db09-4760-b0b3-816559bcb632") };
|
||||
ScopedTrack track1{ session };
|
||||
ScopedTrack track2{ session };
|
||||
|
||||
{
|
||||
auto transaction{ session.createWriteTransaction() };
|
||||
auto link1{ session.create<TrackArtistLink>(track1.get(), artist.get(), TrackArtistLinkType::Artist, false) };
|
||||
auto link2{ session.create<TrackArtistLink>(track2.get(), artist.get(), TrackArtistLinkType::Artist, true) };
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
TrackArtistLink::FindParameters params;
|
||||
|
||||
std::vector<TrackArtistLink::pointer> links;
|
||||
TrackArtistLink::find(session, params, [&](const TrackArtistLink::pointer& link) {
|
||||
links.push_back(link);
|
||||
});
|
||||
ASSERT_EQ(links.size(), 2);
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
TrackArtistLink::FindParameters params;
|
||||
params.setMBIDMatched(false);
|
||||
|
||||
std::vector<TrackArtistLink::pointer> links;
|
||||
TrackArtistLink::find(session, params, [&](const TrackArtistLink::pointer& link) {
|
||||
links.push_back(link);
|
||||
});
|
||||
ASSERT_EQ(links.size(), 1);
|
||||
EXPECT_EQ(links[0]->getTrack()->getId(), track1.getId());
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
TrackArtistLink::FindParameters params;
|
||||
params.setMBIDMatched(true);
|
||||
|
||||
std::vector<TrackArtistLink::pointer> links;
|
||||
TrackArtistLink::find(session, params, [&](const TrackArtistLink::pointer& link) {
|
||||
links.push_back(link);
|
||||
});
|
||||
ASSERT_EQ(links.size(), 1);
|
||||
EXPECT_EQ(links[0]->getTrack()->getId(), track2.getId());
|
||||
}
|
||||
}
|
||||
} // namespace lms::db::tests
|
||||
Reference in New Issue
Block a user