Initial support for multi library, still WIP

This commit is contained in:
emeric
2024-01-25 00:01:11 +01:00
parent f5f577af52
commit 0ed3f1ba79
85 changed files with 3076 additions and 1445 deletions
@@ -35,6 +35,26 @@ namespace Scrobbling
{
using namespace Database;
namespace
{
Database::Listen::StatsFindParameters convertToListenFindParameters(const ScrobblingService::FindParameters& params)
{
Database::Listen::StatsFindParameters listenFindParams;
listenFindParams.setUser(params.user);
listenFindParams.setClusters(params.clusters);
listenFindParams.setRange(params.range);
listenFindParams.setMediaLibrary(params.library);
listenFindParams.setArtist(params.artist);
return listenFindParams;
}
Database::Listen::ArtistStatsFindParameters convertToListenFindParameters(const ScrobblingService::ArtistFindParameters& params)
{
return Database::Listen::ArtistStatsFindParameters{ convertToListenFindParameters(static_cast<const ScrobblingService::FindParameters&>(params)), params.linkType };
}
}
std::unique_ptr<IScrobblingService> createScrobblingService(boost::asio::io_context& ioContext, Db& db)
{
return std::make_unique<ScrobblingService>(ioContext, db);
@@ -84,48 +104,57 @@ namespace Scrobbling
return backend;
}
ScrobblingService::ArtistContainer ScrobblingService::getRecentArtists(UserId userId, const std::vector<ClusterId>& clusterIds, std::optional<TrackArtistLinkType> linkType, Range range)
ScrobblingService::ArtistContainer ScrobblingService::getRecentArtists(const ArtistFindParameters& params)
{
ArtistContainer res;
const auto backend{ getUserBackend(userId) };
const auto backend{ getUserBackend(params.user) };
if (!backend)
return res;
Database::Listen::ArtistStatsFindParameters listenFindParams{ convertToListenFindParameters(params) };
listenFindParams.setScrobblingBackend(backend);
Session& session{ _db.getTLSSession() };
auto transaction{ session.createReadTransaction() };
res = Database::Listen::getRecentArtists(session, userId, *backend, clusterIds, linkType, range);
res = Database::Listen::getRecentArtists(session, listenFindParams);
return res;
}
ScrobblingService::ReleaseContainer ScrobblingService::getRecentReleases(UserId userId, const std::vector<ClusterId>& clusterIds, Range range)
ScrobblingService::ReleaseContainer ScrobblingService::getRecentReleases(const FindParameters& params)
{
ReleaseContainer res;
const auto backend{ getUserBackend(userId) };
const auto backend{ getUserBackend(params.user) };
if (!backend)
return res;
Database::Listen::StatsFindParameters listenFindParams{ convertToListenFindParameters(params) };
listenFindParams.setScrobblingBackend(backend);
Session& session{ _db.getTLSSession() };
auto transaction{ session.createReadTransaction() };
res = Database::Listen::getRecentReleases(session, userId, *backend, clusterIds, range);
res = Database::Listen::getRecentReleases(session, listenFindParams);
return res;
}
ScrobblingService::TrackContainer ScrobblingService::getRecentTracks(UserId userId, const std::vector<ClusterId>& clusterIds, Range range)
ScrobblingService::TrackContainer ScrobblingService::getRecentTracks(const FindParameters& params)
{
TrackContainer res;
const auto backend{ getUserBackend(userId) };
const auto backend{ getUserBackend(params.user) };
if (!backend)
return res;
Database::Listen::StatsFindParameters listenFindParams{ convertToListenFindParameters(params) };
listenFindParams.setScrobblingBackend(backend);
Session& session{ _db.getTLSSession() };
auto transaction{ session.createReadTransaction() };
res = Database::Listen::getRecentTracks(session, userId, *backend, clusterIds, range);
res = Database::Listen::getRecentTracks(session, listenFindParams);
return res;
}
@@ -170,63 +199,57 @@ namespace Scrobbling
}
// Top
ScrobblingService::ArtistContainer ScrobblingService::getTopArtists(UserId userId, const std::vector<ClusterId>& clusterIds, std::optional<TrackArtistLinkType> linkType, Range range)
ScrobblingService::ArtistContainer ScrobblingService::getTopArtists(const ArtistFindParameters& params)
{
ArtistContainer res;
const auto backend{ getUserBackend(userId) };
const auto backend{ getUserBackend(params.user) };
if (!backend)
return res;
Database::Listen::ArtistStatsFindParameters listenFindParams{ convertToListenFindParameters(params) };
listenFindParams.setScrobblingBackend(backend);
Session& session{ _db.getTLSSession() };
auto transaction{ session.createReadTransaction() };
res = Database::Listen::getTopArtists(session, userId, *backend, clusterIds, linkType, range);
res = Database::Listen::getTopArtists(session, listenFindParams);
return res;
}
ScrobblingService::ReleaseContainer ScrobblingService::getTopReleases(UserId userId, const std::vector<ClusterId>& clusterIds, Range range)
ScrobblingService::ReleaseContainer ScrobblingService::getTopReleases(const FindParameters& params)
{
ReleaseContainer res;
const auto backend{ getUserBackend(userId) };
const auto backend{ getUserBackend(params.user) };
if (!backend)
return res;
Database::Listen::StatsFindParameters listenFindParams{ convertToListenFindParameters(params) };
listenFindParams.setScrobblingBackend(backend);
Session& session{ _db.getTLSSession() };
auto transaction{ session.createReadTransaction() };
res = Database::Listen::getTopReleases(session, userId, *backend, clusterIds, range);
res = Database::Listen::getTopReleases(session, listenFindParams);
return res;
}
ScrobblingService::TrackContainer ScrobblingService::getTopTracks(UserId userId, const std::vector<ClusterId>& clusterIds, Range range)
ScrobblingService::TrackContainer ScrobblingService::getTopTracks(const FindParameters& params)
{
TrackContainer res;
const auto backend{ getUserBackend(userId) };
const auto backend{ getUserBackend(params.user) };
if (!backend)
return res;
Database::Listen::StatsFindParameters listenFindParams{ convertToListenFindParameters(params) };
listenFindParams.setScrobblingBackend(backend);
Session& session{ _db.getTLSSession() };
auto transaction{ session.createReadTransaction() };
res = Database::Listen::getTopTracks(session, userId, *backend, clusterIds, range);
return res;
}
ScrobblingService::TrackContainer ScrobblingService::getTopTracks(UserId userId, Database::ArtistId artistId, const std::vector<ClusterId>& clusterIds, Range range)
{
TrackContainer res;
const auto backend{ getUserBackend(userId) };
if (!backend)
return res;
Session& session{ _db.getTLSSession() };
auto transaction{ session.createReadTransaction() };
res = Database::Listen::getTopTracks(session, userId, artistId, *backend, clusterIds, range);
res = Database::Listen::getTopTracks(session, listenFindParams);
return res;
}
} // ns Scrobbling