Changed http client to be instanciated by services
This commit is contained in:
@@ -30,6 +30,7 @@
|
||||
#include "services/database/StarredTrack.hpp"
|
||||
#include "services/database/Track.hpp"
|
||||
#include "services/database/User.hpp"
|
||||
#include "utils/Logger.hpp"
|
||||
|
||||
#include "internal/InternalScrobbler.hpp"
|
||||
#include "listenbrainz/ListenBrainzScrobbler.hpp"
|
||||
@@ -47,8 +48,15 @@ namespace Scrobbling
|
||||
ScrobblingService::ScrobblingService(boost::asio::io_context& ioContext, Db& db)
|
||||
: _db {db}
|
||||
{
|
||||
LMS_LOG(SCROBBLING, INFO) << "Starting service...";
|
||||
_scrobblers.emplace(Scrobbler::Internal, std::make_unique<InternalScrobbler>(_db));
|
||||
_scrobblers.emplace(Scrobbler::ListenBrainz, std::make_unique<ListenBrainz::Scrobbler>(ioContext, _db));
|
||||
LMS_LOG(SCROBBLING, INFO) << "Service started!";
|
||||
}
|
||||
|
||||
ScrobblingService::~ScrobblingService()
|
||||
{
|
||||
LMS_LOG(SCROBBLING, INFO) << "Service stopped!";
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -32,6 +32,7 @@ namespace Scrobbling
|
||||
{
|
||||
public:
|
||||
ScrobblingService(boost::asio::io_context& ioContext, Database::Db& db);
|
||||
~ScrobblingService();
|
||||
|
||||
private:
|
||||
void listenStarted(const Listen& listen) override;
|
||||
|
||||
@@ -144,7 +144,8 @@ namespace Scrobbling::ListenBrainz
|
||||
: _ioContext {ioContext}
|
||||
, _db {db}
|
||||
, _baseAPIUrl {Service<IConfig>::get()->getString("listenbrainz-api-base-url", "https://api.listenbrainz.org")}
|
||||
, _listensSynchronizer {_ioContext, db, _baseAPIUrl}
|
||||
, _client {Http::createClient(_ioContext, _baseAPIUrl)}
|
||||
, _listensSynchronizer {_ioContext, db, *_client}
|
||||
{
|
||||
LOG(INFO) << "Starting ListenBrainz scrobbler... API endpoint = '" << _baseAPIUrl;
|
||||
}
|
||||
@@ -183,7 +184,7 @@ namespace Scrobbling::ListenBrainz
|
||||
Scrobbler::enqueListen(const Listen& listen, const Wt::WDateTime& timePoint)
|
||||
{
|
||||
Http::ClientPOSTRequestParameters request;
|
||||
request.url = _baseAPIUrl + "/1/submit-listens";
|
||||
request.relativeUrl = "/1/submit-listens";
|
||||
|
||||
if (timePoint.isValid())
|
||||
{
|
||||
@@ -213,7 +214,7 @@ namespace Scrobbling::ListenBrainz
|
||||
request.message.addBodyText(bodyText);
|
||||
request.message.addHeader("Authorization", "Token " + std::string {listenBrainzToken->getAsString()});
|
||||
request.message.addHeader("Content-Type", "application/json");
|
||||
Service<Http::IClient>::get()->sendPOSTRequest(std::move(request));
|
||||
_client->sendPOSTRequest(std::move(request));
|
||||
}
|
||||
} // namespace Scrobbling::ListenBrainz
|
||||
|
||||
|
||||
@@ -53,10 +53,11 @@ namespace Scrobbling::ListenBrainz
|
||||
// Submit listens
|
||||
void enqueListen(const Listen& listen, const Wt::WDateTime& timePoint);
|
||||
|
||||
boost::asio::io_context& _ioContext;
|
||||
Database::Db& _db;
|
||||
std::string _baseAPIUrl;
|
||||
ListensSynchronizer _listensSynchronizer;
|
||||
boost::asio::io_context& _ioContext;
|
||||
Database::Db& _db;
|
||||
std::string _baseAPIUrl;
|
||||
std::unique_ptr<Http::IClient> _client;
|
||||
ListensSynchronizer _listensSynchronizer;
|
||||
};
|
||||
} // Scrobbling::ListenBrainz
|
||||
|
||||
|
||||
@@ -213,10 +213,10 @@ namespace
|
||||
|
||||
namespace Scrobbling::ListenBrainz
|
||||
{
|
||||
ListensSynchronizer::ListensSynchronizer(boost::asio::io_context& ioContext, Database::Db& db, std::string_view baseAPIUrl)
|
||||
ListensSynchronizer::ListensSynchronizer(boost::asio::io_context& ioContext, Database::Db& db, Http::IClient& client)
|
||||
: _ioContext {ioContext}
|
||||
, _db {db}
|
||||
, _baseAPIUrl {baseAPIUrl}
|
||||
, _client {client}
|
||||
, _maxSyncListenCount {Service<IConfig>::get()->getULong("listenbrainz-max-sync-listen-count", 1000)}
|
||||
, _syncListensPeriod {Service<IConfig>::get()->getULong("listenbrainz-sync-listens-period-hours", 1)}
|
||||
{
|
||||
@@ -364,7 +364,7 @@ namespace Scrobbling::ListenBrainz
|
||||
|
||||
Http::ClientGETRequestParameters request;
|
||||
request.priority = Http::ClientRequestParameters::Priority::Low;
|
||||
request.url = _baseAPIUrl + "/1/validate-token";
|
||||
request.relativeUrl = "/1/validate-token";
|
||||
request.headers = { {"Authorization", "Token " + std::string {listenBrainzToken->getAsString()}} };
|
||||
request.onSuccessFunc = [this, &context] (std::string_view msgBody)
|
||||
{
|
||||
@@ -381,7 +381,7 @@ namespace Scrobbling::ListenBrainz
|
||||
onGetListensEnded(context);
|
||||
};
|
||||
|
||||
Service<Http::IClient>::get()->sendGETRequest(std::move(request));
|
||||
_client.sendGETRequest(std::move(request));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -390,7 +390,7 @@ namespace Scrobbling::ListenBrainz
|
||||
assert(!context.listenBrainzUserName.empty());
|
||||
|
||||
Http::ClientGETRequestParameters request;
|
||||
request.url = _baseAPIUrl + "/1/user/" + std::string {context.listenBrainzUserName} + "/listen-count";
|
||||
request.relativeUrl = "/1/user/" + std::string {context.listenBrainzUserName} + "/listen-count";
|
||||
request.priority = Http::ClientRequestParameters::Priority::Low;
|
||||
request.onSuccessFunc = [=, &context] (std::string_view msgBody)
|
||||
{
|
||||
@@ -415,7 +415,7 @@ namespace Scrobbling::ListenBrainz
|
||||
onGetListensEnded(context);
|
||||
};
|
||||
|
||||
Service<Http::IClient>::get()->sendGETRequest(std::move(request));
|
||||
_client.sendGETRequest(std::move(request));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -424,7 +424,7 @@ namespace Scrobbling::ListenBrainz
|
||||
assert(!context.listenBrainzUserName.empty());
|
||||
|
||||
Http::ClientGETRequestParameters request;
|
||||
request.url = _baseAPIUrl + "/1/user/" + context.listenBrainzUserName + "/listens?max_ts=" + std::to_string(context.maxDateTime.toTime_t());
|
||||
request.relativeUrl = "/1/user/" + context.listenBrainzUserName + "/listens?max_ts=" + std::to_string(context.maxDateTime.toTime_t());
|
||||
request.priority = Http::ClientRequestParameters::Priority::Low;
|
||||
request.onSuccessFunc = [=, &context] (std::string_view msgBody)
|
||||
{
|
||||
@@ -442,7 +442,7 @@ namespace Scrobbling::ListenBrainz
|
||||
onGetListensEnded(context);
|
||||
};
|
||||
|
||||
Service<Http::IClient>::get()->sendGETRequest(std::move(request));
|
||||
_client.sendGETRequest(std::move(request));
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -36,12 +36,17 @@ namespace Database
|
||||
class User;
|
||||
}
|
||||
|
||||
namespace Http
|
||||
{
|
||||
class IClient;
|
||||
}
|
||||
|
||||
namespace Scrobbling::ListenBrainz
|
||||
{
|
||||
class ListensSynchronizer
|
||||
{
|
||||
public:
|
||||
ListensSynchronizer(boost::asio::io_context& ioContext, Database::Db& db, std::string_view baseAPIUrl);
|
||||
ListensSynchronizer(boost::asio::io_context& ioContext, Database::Db& db, Http::IClient& client);
|
||||
|
||||
void saveListen(const TimedListen& listen);
|
||||
|
||||
@@ -81,8 +86,8 @@ namespace Scrobbling::ListenBrainz
|
||||
boost::asio::io_context& _ioContext;
|
||||
boost::asio::io_context::strand _strand {_ioContext};
|
||||
Database::Db& _db;
|
||||
std::string _baseAPIUrl;
|
||||
boost::asio::steady_timer _getListensTimer {_ioContext};
|
||||
Http::IClient& _client;
|
||||
|
||||
std::unordered_map<Database::UserId, UserContext> _userContexts;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user