From e6858719c9abb175d549f96a23de41f79b6e0876 Mon Sep 17 00:00:00 2001 From: Jonas Kvinge Date: Thu, 12 Aug 2021 23:00:10 +0200 Subject: [PATCH] Reduce network access managers --- src/core/application.cpp | 28 +++++++++---------- src/covermanager/coverprovider.cpp | 2 +- src/covermanager/coverprovider.h | 6 ++-- src/covermanager/coverproviders.cpp | 3 +- src/covermanager/coverproviders.h | 5 ++++ src/covermanager/deezercoverprovider.cpp | 6 ++-- src/covermanager/deezercoverprovider.h | 3 +- src/covermanager/discogscoverprovider.cpp | 6 ++-- src/covermanager/discogscoverprovider.h | 3 +- src/covermanager/jsoncoverprovider.cpp | 5 ++-- src/covermanager/jsoncoverprovider.h | 5 ++-- src/covermanager/lastfmcoverprovider.cpp | 6 ++-- src/covermanager/lastfmcoverprovider.h | 3 +- src/covermanager/musicbrainzcoverprovider.cpp | 6 ++-- src/covermanager/musicbrainzcoverprovider.h | 3 +- src/covermanager/musixmatchcoverprovider.cpp | 6 ++-- src/covermanager/musixmatchcoverprovider.h | 3 +- src/covermanager/qobuzcoverprovider.cpp | 8 ++---- src/covermanager/qobuzcoverprovider.h | 3 +- src/covermanager/spotifycoverprovider.cpp | 6 ++-- src/covermanager/spotifycoverprovider.h | 3 +- src/covermanager/tidalcoverprovider.cpp | 8 ++---- src/covermanager/tidalcoverprovider.h | 3 +- src/lyrics/auddlyricsprovider.cpp | 3 +- src/lyrics/auddlyricsprovider.h | 3 +- src/lyrics/chartlyricsprovider.cpp | 3 +- src/lyrics/chartlyricsprovider.h | 4 +-- src/lyrics/geniuslyricsprovider.cpp | 3 +- src/lyrics/geniuslyricsprovider.h | 3 +- src/lyrics/jsonlyricsprovider.cpp | 3 +- src/lyrics/jsonlyricsprovider.h | 4 ++- src/lyrics/lololyricsprovider.cpp | 3 +- src/lyrics/lololyricsprovider.h | 3 +- src/lyrics/lyricsprovider.cpp | 5 ++-- src/lyrics/lyricsprovider.h | 7 +++-- src/lyrics/lyricsproviders.cpp | 4 ++- src/lyrics/lyricsproviders.h | 5 ++++ src/lyrics/musixmatchlyricsprovider.cpp | 3 +- src/lyrics/musixmatchlyricsprovider.h | 3 +- src/lyrics/ovhlyricsprovider.cpp | 3 +- src/lyrics/ovhlyricsprovider.h | 3 +- 41 files changed, 91 insertions(+), 104 deletions(-) diff --git a/src/core/application.cpp b/src/core/application.cpp index 7f1cc6e97..bc57721ae 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -128,17 +128,17 @@ class ApplicationImpl { cover_providers_([=]() { CoverProviders *cover_providers = new CoverProviders(app); // Initialize the repository of cover providers. - cover_providers->AddProvider(new LastFmCoverProvider(app, app)); - cover_providers->AddProvider(new MusicbrainzCoverProvider(app, app)); - cover_providers->AddProvider(new DiscogsCoverProvider(app, app)); - cover_providers->AddProvider(new DeezerCoverProvider(app, app)); - cover_providers->AddProvider(new MusixmatchCoverProvider(app, app)); - cover_providers->AddProvider(new SpotifyCoverProvider(app, app)); + cover_providers->AddProvider(new LastFmCoverProvider(app, cover_providers->network(), app)); + cover_providers->AddProvider(new MusicbrainzCoverProvider(app, cover_providers->network(), app)); + cover_providers->AddProvider(new DiscogsCoverProvider(app, cover_providers->network(), app)); + cover_providers->AddProvider(new DeezerCoverProvider(app, cover_providers->network(), app)); + cover_providers->AddProvider(new MusixmatchCoverProvider(app, cover_providers->network(), app)); + cover_providers->AddProvider(new SpotifyCoverProvider(app, cover_providers->network(), app)); #ifdef HAVE_TIDAL - cover_providers->AddProvider(new TidalCoverProvider(app, app)); + cover_providers->AddProvider(new TidalCoverProvider(app, cover_providers->network(), app)); #endif #ifdef HAVE_QOBUZ - cover_providers->AddProvider(new QobuzCoverProvider(app, app)); + cover_providers->AddProvider(new QobuzCoverProvider(app, cover_providers->network(), app)); #endif cover_providers->ReloadSettings(); return cover_providers; @@ -152,12 +152,12 @@ class ApplicationImpl { lyrics_providers_([=]() { LyricsProviders *lyrics_providers = new LyricsProviders(app); // Initialize the repository of lyrics providers. - lyrics_providers->AddProvider(new AuddLyricsProvider(app)); - lyrics_providers->AddProvider(new GeniusLyricsProvider(app)); - lyrics_providers->AddProvider(new OVHLyricsProvider(app)); - lyrics_providers->AddProvider(new LoloLyricsProvider(app)); - lyrics_providers->AddProvider(new MusixmatchLyricsProvider(app)); - lyrics_providers->AddProvider(new ChartLyricsProvider(app)); + lyrics_providers->AddProvider(new AuddLyricsProvider(lyrics_providers->network(), app)); + lyrics_providers->AddProvider(new GeniusLyricsProvider(lyrics_providers->network(), app)); + lyrics_providers->AddProvider(new OVHLyricsProvider(lyrics_providers->network(), app)); + lyrics_providers->AddProvider(new LoloLyricsProvider(lyrics_providers->network(), app)); + lyrics_providers->AddProvider(new MusixmatchLyricsProvider(lyrics_providers->network(), app)); + lyrics_providers->AddProvider(new ChartLyricsProvider(lyrics_providers->network(), app)); lyrics_providers->ReloadSettings(); return lyrics_providers; }), diff --git a/src/covermanager/coverprovider.cpp b/src/covermanager/coverprovider.cpp index 5e6931f6f..e94841470 100644 --- a/src/covermanager/coverprovider.cpp +++ b/src/covermanager/coverprovider.cpp @@ -27,4 +27,4 @@ #include "core/application.h" #include "coverprovider.h" -CoverProvider::CoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool batch, const bool allow_missing_album, Application *app, QObject *parent) : QObject(parent), app_(app), name_(name), enabled_(enabled), order_(0), authentication_required_(authentication_required), quality_(quality), batch_(batch), allow_missing_album_(allow_missing_album) {} +CoverProvider::CoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool batch, const bool allow_missing_album, Application *app, NetworkAccessManager *network, QObject *parent) : QObject(parent), app_(app), network_(network), name_(name), enabled_(enabled), order_(0), authentication_required_(authentication_required), quality_(quality), batch_(batch), allow_missing_album_(allow_missing_album) {} diff --git a/src/covermanager/coverprovider.h b/src/covermanager/coverprovider.h index 3c421acc2..3b50b1f19 100644 --- a/src/covermanager/coverprovider.h +++ b/src/covermanager/coverprovider.h @@ -33,6 +33,7 @@ #include "albumcoverfetcher.h" class Application; +class NetworkAccessManager; // Each implementation of this interface downloads covers from one online service. // There are no limitations on what this service might be - last.fm, Amazon, Google Images - you name it. @@ -40,7 +41,7 @@ class CoverProvider : public QObject { Q_OBJECT public: - explicit CoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool batch, const bool allow_missing_album, Application *app, QObject *parent); + explicit CoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool batch, const bool allow_missing_album, Application *app, NetworkAccessManager *network, QObject *parent); // A name (very short description) of this provider, like "last.fm". QString name() const { return name_; } @@ -73,8 +74,9 @@ class CoverProvider : public QObject { void SearchResults(int, CoverProviderSearchResults); void SearchFinished(int, CoverProviderSearchResults); - private: + protected: Application *app_; + NetworkAccessManager *network_; QString name_; bool enabled_; int order_; diff --git a/src/covermanager/coverproviders.cpp b/src/covermanager/coverproviders.cpp index 71eb1ed48..2500fcfc7 100644 --- a/src/covermanager/coverproviders.cpp +++ b/src/covermanager/coverproviders.cpp @@ -33,6 +33,7 @@ #include #include "core/logging.h" +#include "core/networkaccessmanager.h" #include "coverprovider.h" #include "coverproviders.h" @@ -40,7 +41,7 @@ int CoverProviders::NextOrderId = 0; -CoverProviders::CoverProviders(QObject *parent) : QObject(parent) {} +CoverProviders::CoverProviders(QObject *parent) : QObject(parent), network_(new NetworkAccessManager(this)) {} CoverProviders::~CoverProviders() { diff --git a/src/covermanager/coverproviders.h b/src/covermanager/coverproviders.h index 56b106910..294cbc281 100644 --- a/src/covermanager/coverproviders.h +++ b/src/covermanager/coverproviders.h @@ -32,6 +32,7 @@ #include #include +class NetworkAccessManager; class CoverProvider; // This is a repository for cover providers. @@ -59,6 +60,8 @@ class CoverProviders : public QObject { int NextId(); + NetworkAccessManager *network() const { return network_; } + private slots: void ProviderDestroyed(); @@ -67,6 +70,8 @@ class CoverProviders : public QObject { static int NextOrderId; + NetworkAccessManager *network_; + QMap cover_providers_; QMutex mutex_; diff --git a/src/covermanager/deezercoverprovider.cpp b/src/covermanager/deezercoverprovider.cpp index 53c9374a2..fed8c156d 100644 --- a/src/covermanager/deezercoverprovider.cpp +++ b/src/covermanager/deezercoverprovider.cpp @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -53,9 +52,8 @@ const char *DeezerCoverProvider::kApiUrl = "https://api.deezer.com"; const int DeezerCoverProvider::kLimit = 10; -DeezerCoverProvider::DeezerCoverProvider(Application *app, QObject *parent) - : JsonCoverProvider("Deezer", true, false, 2.0, true, true, app, parent), - network_(new NetworkAccessManager(this)) {} +DeezerCoverProvider::DeezerCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent) + : JsonCoverProvider("Deezer", true, false, 2.0, true, true, app, network, parent) {} DeezerCoverProvider::~DeezerCoverProvider() { diff --git a/src/covermanager/deezercoverprovider.h b/src/covermanager/deezercoverprovider.h index 9acdb639d..ab85b0645 100644 --- a/src/covermanager/deezercoverprovider.h +++ b/src/covermanager/deezercoverprovider.h @@ -40,7 +40,7 @@ class DeezerCoverProvider : public JsonCoverProvider { Q_OBJECT public: - explicit DeezerCoverProvider(Application *app, QObject *parent = nullptr); + explicit DeezerCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent = nullptr); ~DeezerCoverProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const int id) override; @@ -58,7 +58,6 @@ class DeezerCoverProvider : public JsonCoverProvider { static const char *kApiUrl; static const int kLimit; - NetworkAccessManager *network_; QList replies_; }; diff --git a/src/covermanager/discogscoverprovider.cpp b/src/covermanager/discogscoverprovider.cpp index 0d52a15ce..2f3a7a3e9 100644 --- a/src/covermanager/discogscoverprovider.cpp +++ b/src/covermanager/discogscoverprovider.cpp @@ -39,7 +39,6 @@ #include #include #include -#include #include #include #include @@ -61,9 +60,8 @@ const char *DiscogsCoverProvider::kAccessKeyB64 = "dGh6ZnljUGJlZ1NEeXBuSFFxSVk=" const char *DiscogsCoverProvider::kSecretKeyB64 = "ZkFIcmlaSER4aHhRSlF2U3d0bm5ZVmdxeXFLWUl0UXI="; const int DiscogsCoverProvider::kRequestsDelay = 1000; -DiscogsCoverProvider::DiscogsCoverProvider(Application *app, QObject *parent) - : JsonCoverProvider("Discogs", false, false, 0.0, false, false, app, parent), - network_(new NetworkAccessManager(this)), +DiscogsCoverProvider::DiscogsCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent) + : JsonCoverProvider("Discogs", false, false, 0.0, false, false, app, network, parent), timer_flush_requests_(new QTimer(this)) { timer_flush_requests_->setInterval(kRequestsDelay); diff --git a/src/covermanager/discogscoverprovider.h b/src/covermanager/discogscoverprovider.h index ea0db1e63..d4ea84ce9 100644 --- a/src/covermanager/discogscoverprovider.h +++ b/src/covermanager/discogscoverprovider.h @@ -49,7 +49,7 @@ class DiscogsCoverProvider : public JsonCoverProvider { Q_OBJECT public: - explicit DiscogsCoverProvider(Application *app, QObject *parent = nullptr); + explicit DiscogsCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent = nullptr); ~DiscogsCoverProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const int id) override; @@ -99,7 +99,6 @@ class DiscogsCoverProvider : public JsonCoverProvider { static const char *kSecretKeyB64; static const int kRequestsDelay; - NetworkAccessManager *network_; QTimer *timer_flush_requests_; QQueue> queue_search_requests_; QQueue queue_release_requests_; diff --git a/src/covermanager/jsoncoverprovider.cpp b/src/covermanager/jsoncoverprovider.cpp index 1c0e4546e..cd89bb9a0 100644 --- a/src/covermanager/jsoncoverprovider.cpp +++ b/src/covermanager/jsoncoverprovider.cpp @@ -28,11 +28,12 @@ #include #include "core/application.h" +#include "core/networkaccessmanager.h" #include "coverprovider.h" #include "jsoncoverprovider.h" -JsonCoverProvider::JsonCoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool batch, const bool allow_missing_album, Application *app, QObject *parent) - : CoverProvider(name, enabled, authentication_required, quality, batch, allow_missing_album, app, parent) {} +JsonCoverProvider::JsonCoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool batch, const bool allow_missing_album, Application *app, NetworkAccessManager *network, QObject *parent) + : CoverProvider(name, enabled, authentication_required, quality, batch, allow_missing_album, app, network, parent) {} QJsonObject JsonCoverProvider::ExtractJsonObj(const QByteArray &data) { diff --git a/src/covermanager/jsoncoverprovider.h b/src/covermanager/jsoncoverprovider.h index 7f8bf91c0..92f547c91 100644 --- a/src/covermanager/jsoncoverprovider.h +++ b/src/covermanager/jsoncoverprovider.h @@ -30,15 +30,16 @@ #include "coverprovider.h" class Application; +class NetworkAccessManager; class JsonCoverProvider : public CoverProvider { Q_OBJECT public: - explicit JsonCoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool batch, const bool allow_missing_album, Application *app, QObject *parent); + explicit JsonCoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool batch, const bool allow_missing_album, Application *app, NetworkAccessManager *network, QObject *parent); + protected: QJsonObject ExtractJsonObj(const QByteArray &data); - }; #endif // JSONCOVERPROVIDER_H diff --git a/src/covermanager/lastfmcoverprovider.cpp b/src/covermanager/lastfmcoverprovider.cpp index 09f03bfd9..597ad0c77 100644 --- a/src/covermanager/lastfmcoverprovider.cpp +++ b/src/covermanager/lastfmcoverprovider.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -53,9 +52,8 @@ const char *LastFmCoverProvider::kUrl = "https://ws.audioscrobbler.com/2.0/"; const char *LastFmCoverProvider::kApiKey = "211990b4c96782c05d1536e7219eb56e"; const char *LastFmCoverProvider::kSecret = "80fd738f49596e9709b1bf9319c444a8"; -LastFmCoverProvider::LastFmCoverProvider(Application *app, QObject *parent) - : JsonCoverProvider("Last.fm", true, false, 1.0, true, false, app, parent), - network_(new NetworkAccessManager(this)) {} +LastFmCoverProvider::LastFmCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent) + : JsonCoverProvider("Last.fm", true, false, 1.0, true, false, app, network, parent) {} LastFmCoverProvider::~LastFmCoverProvider() { diff --git a/src/covermanager/lastfmcoverprovider.h b/src/covermanager/lastfmcoverprovider.h index 67f06c52d..8bca391c1 100644 --- a/src/covermanager/lastfmcoverprovider.h +++ b/src/covermanager/lastfmcoverprovider.h @@ -39,7 +39,7 @@ class LastFmCoverProvider : public JsonCoverProvider { Q_OBJECT public: - explicit LastFmCoverProvider(Application *app, QObject *parent = nullptr); + explicit LastFmCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent = nullptr); ~LastFmCoverProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const int id) override; @@ -65,7 +65,6 @@ class LastFmCoverProvider : public JsonCoverProvider { static const char *kApiKey; static const char *kSecret; - NetworkAccessManager *network_; QList replies_; }; diff --git a/src/covermanager/musicbrainzcoverprovider.cpp b/src/covermanager/musicbrainzcoverprovider.cpp index 452981661..309a76edf 100644 --- a/src/covermanager/musicbrainzcoverprovider.cpp +++ b/src/covermanager/musicbrainzcoverprovider.cpp @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -51,9 +50,8 @@ const char *MusicbrainzCoverProvider::kAlbumCoverUrl = "https://coverartarchive. const int MusicbrainzCoverProvider::kLimit = 8; const int MusicbrainzCoverProvider::kRequestsDelay = 1000; -MusicbrainzCoverProvider::MusicbrainzCoverProvider(Application *app, QObject *parent) - : JsonCoverProvider("MusicBrainz", true, false, 1.5, true, false, app, parent), - network_(new NetworkAccessManager(this)), +MusicbrainzCoverProvider::MusicbrainzCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent) + : JsonCoverProvider("MusicBrainz", true, false, 1.5, true, false, app, network, parent), timer_flush_requests_(new QTimer(this)) { timer_flush_requests_->setInterval(kRequestsDelay); diff --git a/src/covermanager/musicbrainzcoverprovider.h b/src/covermanager/musicbrainzcoverprovider.h index 329b602db..659d55084 100644 --- a/src/covermanager/musicbrainzcoverprovider.h +++ b/src/covermanager/musicbrainzcoverprovider.h @@ -41,7 +41,7 @@ class MusicbrainzCoverProvider : public JsonCoverProvider { Q_OBJECT public: - explicit MusicbrainzCoverProvider(Application *app, QObject *parent = nullptr); + explicit MusicbrainzCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent = nullptr); ~MusicbrainzCoverProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const int id) override; @@ -68,7 +68,6 @@ class MusicbrainzCoverProvider : public JsonCoverProvider { static const int kLimit; static const int kRequestsDelay; - NetworkAccessManager *network_; QTimer *timer_flush_requests_; QQueue queue_search_requests_; QList replies_; diff --git a/src/covermanager/musixmatchcoverprovider.cpp b/src/covermanager/musixmatchcoverprovider.cpp index 2dbd07806..bd5a1a671 100644 --- a/src/covermanager/musixmatchcoverprovider.cpp +++ b/src/covermanager/musixmatchcoverprovider.cpp @@ -26,7 +26,6 @@ #include #include #include -#include #include #include #include @@ -40,9 +39,8 @@ #include "jsoncoverprovider.h" #include "musixmatchcoverprovider.h" -MusixmatchCoverProvider::MusixmatchCoverProvider(Application *app, QObject *parent) - : JsonCoverProvider("Musixmatch", true, false, 1.0, true, false, app, parent), - network_(new NetworkAccessManager(this)) {} +MusixmatchCoverProvider::MusixmatchCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent) + : JsonCoverProvider("Musixmatch", true, false, 1.0, true, false, app, network, parent) {} MusixmatchCoverProvider::~MusixmatchCoverProvider() { diff --git a/src/covermanager/musixmatchcoverprovider.h b/src/covermanager/musixmatchcoverprovider.h index f535ccd3b..ccd3bb12e 100644 --- a/src/covermanager/musixmatchcoverprovider.h +++ b/src/covermanager/musixmatchcoverprovider.h @@ -37,7 +37,7 @@ class MusixmatchCoverProvider : public JsonCoverProvider { Q_OBJECT public: - explicit MusixmatchCoverProvider(Application *app, QObject *parent = nullptr); + explicit MusixmatchCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent = nullptr); ~MusixmatchCoverProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const int id) override; @@ -50,7 +50,6 @@ class MusixmatchCoverProvider : public JsonCoverProvider { void HandleSearchReply(QNetworkReply *reply, const int id, const QString &artist, const QString &album); private: - NetworkAccessManager *network_; QList replies_; }; diff --git a/src/covermanager/qobuzcoverprovider.cpp b/src/covermanager/qobuzcoverprovider.cpp index a4d785662..b2b3aa4d5 100644 --- a/src/covermanager/qobuzcoverprovider.cpp +++ b/src/covermanager/qobuzcoverprovider.cpp @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -52,10 +51,9 @@ const int QobuzCoverProvider::kLimit = 10; -QobuzCoverProvider::QobuzCoverProvider(Application *app, QObject *parent) - : JsonCoverProvider("Qobuz", true, true, 2.0, true, true, app, parent), - service_(app->internet_services()->Service()), - network_(new NetworkAccessManager(this)) {} +QobuzCoverProvider::QobuzCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent) + : JsonCoverProvider("Qobuz", true, true, 2.0, true, true, app, network, parent), + service_(app->internet_services()->Service()) {} QobuzCoverProvider::~QobuzCoverProvider() { diff --git a/src/covermanager/qobuzcoverprovider.h b/src/covermanager/qobuzcoverprovider.h index 20918b4bc..1fbb70b7c 100644 --- a/src/covermanager/qobuzcoverprovider.h +++ b/src/covermanager/qobuzcoverprovider.h @@ -42,7 +42,7 @@ class QobuzCoverProvider : public JsonCoverProvider { Q_OBJECT public: - explicit QobuzCoverProvider(Application *app, QObject *parent = nullptr); + explicit QobuzCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent = nullptr); ~QobuzCoverProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const int id) override; @@ -65,7 +65,6 @@ class QobuzCoverProvider : public JsonCoverProvider { static const int kLimit; QobuzService *service_; - NetworkAccessManager *network_; QList replies_; }; diff --git a/src/covermanager/spotifycoverprovider.cpp b/src/covermanager/spotifycoverprovider.cpp index 71d5e6982..5212ff11e 100644 --- a/src/covermanager/spotifycoverprovider.cpp +++ b/src/covermanager/spotifycoverprovider.cpp @@ -30,7 +30,6 @@ #include #include #include -#include #include #include #include @@ -63,9 +62,8 @@ const char *SpotifyCoverProvider::kClientSecretB64 = "N2ZlMDMxODk1NTBlNDE3ZGI1ZW const char *SpotifyCoverProvider::kApiUrl = "https://api.spotify.com/v1"; const int SpotifyCoverProvider::kLimit = 10; -SpotifyCoverProvider::SpotifyCoverProvider(Application *app, QObject *parent) - : JsonCoverProvider("Spotify", true, true, 2.5, true, true, app, parent), - network_(new NetworkAccessManager(this)), +SpotifyCoverProvider::SpotifyCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent) + : JsonCoverProvider("Spotify", true, true, 2.5, true, true, app, network, parent), server_(nullptr), expires_in_(0), login_time_(0) { diff --git a/src/covermanager/spotifycoverprovider.h b/src/covermanager/spotifycoverprovider.h index cc3030fde..98782be21 100644 --- a/src/covermanager/spotifycoverprovider.h +++ b/src/covermanager/spotifycoverprovider.h @@ -45,7 +45,7 @@ class SpotifyCoverProvider : public JsonCoverProvider { Q_OBJECT public: - explicit SpotifyCoverProvider(Application *app, QObject *parent = nullptr); + explicit SpotifyCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent = nullptr); ~SpotifyCoverProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const int id) override; @@ -81,7 +81,6 @@ class SpotifyCoverProvider : public JsonCoverProvider { static const char *kApiUrl; static const int kLimit; - NetworkAccessManager *network_; LocalRedirectServer *server_; QStringList login_errors_; QString code_verifier_; diff --git a/src/covermanager/tidalcoverprovider.cpp b/src/covermanager/tidalcoverprovider.cpp index cd40a3288..c199f43fe 100644 --- a/src/covermanager/tidalcoverprovider.cpp +++ b/src/covermanager/tidalcoverprovider.cpp @@ -29,7 +29,6 @@ #include #include #include -#include #include #include #include @@ -50,10 +49,9 @@ const int TidalCoverProvider::kLimit = 10; -TidalCoverProvider::TidalCoverProvider(Application *app, QObject *parent) - : JsonCoverProvider("Tidal", true, true, 2.5, true, true, app, parent), - service_(app->internet_services()->Service()), - network_(new NetworkAccessManager(this)) {} +TidalCoverProvider::TidalCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent) + : JsonCoverProvider("Tidal", true, true, 2.5, true, true, app, network, parent), + service_(app->internet_services()->Service()) {} TidalCoverProvider::~TidalCoverProvider() { diff --git a/src/covermanager/tidalcoverprovider.h b/src/covermanager/tidalcoverprovider.h index 3bd12e7a5..0f62c9bde 100644 --- a/src/covermanager/tidalcoverprovider.h +++ b/src/covermanager/tidalcoverprovider.h @@ -43,7 +43,7 @@ class TidalCoverProvider : public JsonCoverProvider { Q_OBJECT public: - explicit TidalCoverProvider(Application *app, QObject *parent = nullptr); + explicit TidalCoverProvider(Application *app, NetworkAccessManager *network, QObject *parent = nullptr); ~TidalCoverProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const int id) override; @@ -63,7 +63,6 @@ class TidalCoverProvider : public JsonCoverProvider { static const int kLimit; TidalService *service_; - NetworkAccessManager *network_; QList replies_; }; diff --git a/src/lyrics/auddlyricsprovider.cpp b/src/lyrics/auddlyricsprovider.cpp index bb0d4e89e..84fb078b5 100644 --- a/src/lyrics/auddlyricsprovider.cpp +++ b/src/lyrics/auddlyricsprovider.cpp @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -47,7 +46,7 @@ const char *AuddLyricsProvider::kUrlSearch = "https://api.audd.io/findLyrics/"; const char *AuddLyricsProvider::kAPITokenB64 = "ZjA0NjQ4YjgyNDM3ZTc1MjY3YjJlZDI5ZDBlMzQxZjk="; const int AuddLyricsProvider::kMaxLength = 6000; -AuddLyricsProvider::AuddLyricsProvider(QObject *parent) : JsonLyricsProvider("AudD", true, false, parent), network_(new NetworkAccessManager(this)) {} +AuddLyricsProvider::AuddLyricsProvider(NetworkAccessManager *network, QObject *parent) : JsonLyricsProvider("AudD", true, false, network, parent) {} AuddLyricsProvider::~AuddLyricsProvider() { diff --git a/src/lyrics/auddlyricsprovider.h b/src/lyrics/auddlyricsprovider.h index 7e8ea34a5..befbd327f 100644 --- a/src/lyrics/auddlyricsprovider.h +++ b/src/lyrics/auddlyricsprovider.h @@ -39,7 +39,7 @@ class AuddLyricsProvider : public JsonLyricsProvider { Q_OBJECT public: - explicit AuddLyricsProvider(QObject *parent = nullptr); + explicit AuddLyricsProvider(NetworkAccessManager *network, QObject *parent = nullptr); ~AuddLyricsProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, quint64 id) override; @@ -56,7 +56,6 @@ class AuddLyricsProvider : public JsonLyricsProvider { static const char *kUrlSearch; static const char *kAPITokenB64; static const int kMaxLength; - NetworkAccessManager *network_; QList replies_; }; diff --git a/src/lyrics/chartlyricsprovider.cpp b/src/lyrics/chartlyricsprovider.cpp index 332e0d027..4253d6c54 100644 --- a/src/lyrics/chartlyricsprovider.cpp +++ b/src/lyrics/chartlyricsprovider.cpp @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -41,7 +40,7 @@ const char *ChartLyricsProvider::kUrlSearch = "http://api.chartlyrics.com/apiv1.asmx/SearchLyricDirect"; -ChartLyricsProvider::ChartLyricsProvider(QObject *parent) : LyricsProvider("ChartLyrics", false, false, parent), network_(new NetworkAccessManager(this)) {} +ChartLyricsProvider::ChartLyricsProvider(NetworkAccessManager *network, QObject *parent) : LyricsProvider("ChartLyrics", false, false, network, parent) {} ChartLyricsProvider::~ChartLyricsProvider() { diff --git a/src/lyrics/chartlyricsprovider.h b/src/lyrics/chartlyricsprovider.h index b2a3796c1..500e49a36 100644 --- a/src/lyrics/chartlyricsprovider.h +++ b/src/lyrics/chartlyricsprovider.h @@ -37,7 +37,7 @@ class ChartLyricsProvider : public LyricsProvider { Q_OBJECT public: - explicit ChartLyricsProvider(QObject *parent = nullptr); + explicit ChartLyricsProvider(NetworkAccessManager *network, QObject *parent = nullptr); ~ChartLyricsProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const quint64 id) override; @@ -51,8 +51,6 @@ class ChartLyricsProvider : public LyricsProvider { private: static const char *kUrlSearch; - - NetworkAccessManager *network_; QList replies_; }; diff --git a/src/lyrics/geniuslyricsprovider.cpp b/src/lyrics/geniuslyricsprovider.cpp index 729a10bfe..135d208bc 100644 --- a/src/lyrics/geniuslyricsprovider.cpp +++ b/src/lyrics/geniuslyricsprovider.cpp @@ -29,7 +29,6 @@ #include #include #include -#include #include #include #include @@ -62,7 +61,7 @@ const char *GeniusLyricsProvider::kUrlSearch = "https://api.genius.com/search/"; const char *GeniusLyricsProvider::kClientIDB64 = "RUNTNXU4U1VyMU1KUU5hdTZySEZteUxXY2hkanFiY3lfc2JjdXBpNG5WMU9SNUg4dTBZelEtZTZCdFg2dl91SQ=="; const char *GeniusLyricsProvider::kClientSecretB64 = "VE9pMU9vUjNtTXZ3eFR3YVN0QVRyUjVoUlhVWDI1Ylp5X240eEt1M0ZkYlNwRG5JUnd0LXFFbHdGZkZkRWY2VzJ1S011UnQzM3c2Y3hqY0tVZ3NGN2c="; -GeniusLyricsProvider::GeniusLyricsProvider(QObject *parent) : JsonLyricsProvider("Genius", true, true, parent), network_(new NetworkAccessManager(this)), server_(nullptr) { +GeniusLyricsProvider::GeniusLyricsProvider(NetworkAccessManager *network, QObject *parent) : JsonLyricsProvider("Genius", true, true, network, parent), server_(nullptr) { QSettings s; s.beginGroup(kSettingsGroup); diff --git a/src/lyrics/geniuslyricsprovider.h b/src/lyrics/geniuslyricsprovider.h index 0b842188e..50f3c4ab6 100644 --- a/src/lyrics/geniuslyricsprovider.h +++ b/src/lyrics/geniuslyricsprovider.h @@ -46,7 +46,7 @@ class GeniusLyricsProvider : public JsonLyricsProvider { Q_OBJECT public: - explicit GeniusLyricsProvider(QObject *parent = nullptr); + explicit GeniusLyricsProvider(NetworkAccessManager *network, QObject *parent = nullptr); ~GeniusLyricsProvider() override; bool IsAuthenticated() const override { return !access_token_.isEmpty(); } @@ -95,7 +95,6 @@ class GeniusLyricsProvider : public JsonLyricsProvider { static const char *kUrlSearch; private: - NetworkAccessManager *network_; LocalRedirectServer *server_; QString code_verifier_; QString code_challenge_; diff --git a/src/lyrics/jsonlyricsprovider.cpp b/src/lyrics/jsonlyricsprovider.cpp index aee3aca7d..530febcda 100644 --- a/src/lyrics/jsonlyricsprovider.cpp +++ b/src/lyrics/jsonlyricsprovider.cpp @@ -27,10 +27,11 @@ #include #include +#include "core/networkaccessmanager.h" #include "lyricsprovider.h" #include "jsonlyricsprovider.h" -JsonLyricsProvider::JsonLyricsProvider(const QString &name, const bool enabled, const bool authentication_required, QObject *parent) : LyricsProvider(name, enabled, authentication_required, parent) {} +JsonLyricsProvider::JsonLyricsProvider(const QString &name, const bool enabled, const bool authentication_required, NetworkAccessManager *network, QObject *parent) : LyricsProvider(name, enabled, authentication_required, network, parent) {} QByteArray JsonLyricsProvider::ExtractData(QNetworkReply *reply) { diff --git a/src/lyrics/jsonlyricsprovider.h b/src/lyrics/jsonlyricsprovider.h index 7ec5ad515..cecc003b7 100644 --- a/src/lyrics/jsonlyricsprovider.h +++ b/src/lyrics/jsonlyricsprovider.h @@ -31,14 +31,16 @@ #include "lyricsprovider.h" +class NetworkAccessManager; class QNetworkReply; class JsonLyricsProvider : public LyricsProvider { Q_OBJECT public: - explicit JsonLyricsProvider(const QString &name, const bool enabled = true, const bool authentication_required = false, QObject *parent = nullptr); + explicit JsonLyricsProvider(const QString &name, const bool enabled, const bool authentication_required, NetworkAccessManager *network, QObject *parent = nullptr); + protected: QByteArray ExtractData(QNetworkReply *reply); QJsonObject ExtractJsonObj(const QByteArray &data); QJsonObject ExtractJsonObj(QNetworkReply *reply); diff --git a/src/lyrics/lololyricsprovider.cpp b/src/lyrics/lololyricsprovider.cpp index 7b7f33a28..9973f0ee5 100644 --- a/src/lyrics/lololyricsprovider.cpp +++ b/src/lyrics/lololyricsprovider.cpp @@ -27,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -42,7 +41,7 @@ const char *LoloLyricsProvider::kUrlSearch = "http://api.lololyrics.com/0.5/getLyric"; -LoloLyricsProvider::LoloLyricsProvider(QObject *parent) : LyricsProvider("LoloLyrics", true, false, parent), network_(new NetworkAccessManager(this)) {} +LoloLyricsProvider::LoloLyricsProvider(NetworkAccessManager *network, QObject *parent) : LyricsProvider("LoloLyrics", true, false, network, parent) {} LoloLyricsProvider::~LoloLyricsProvider() { diff --git a/src/lyrics/lololyricsprovider.h b/src/lyrics/lololyricsprovider.h index 26936d564..e76a4bdc2 100644 --- a/src/lyrics/lololyricsprovider.h +++ b/src/lyrics/lololyricsprovider.h @@ -37,7 +37,7 @@ class LoloLyricsProvider : public LyricsProvider { Q_OBJECT public: - explicit LoloLyricsProvider(QObject *parent = nullptr); + explicit LoloLyricsProvider(NetworkAccessManager *network, QObject *parent = nullptr); ~LoloLyricsProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const quint64 id) override; @@ -51,7 +51,6 @@ class LoloLyricsProvider : public LyricsProvider { private: static const char *kUrlSearch; - NetworkAccessManager *network_; QList replies_; }; diff --git a/src/lyrics/lyricsprovider.cpp b/src/lyrics/lyricsprovider.cpp index b1b01f5c1..24f7ec115 100644 --- a/src/lyrics/lyricsprovider.cpp +++ b/src/lyrics/lyricsprovider.cpp @@ -22,7 +22,8 @@ #include #include +#include "core/networkaccessmanager.h" #include "lyricsprovider.h" -LyricsProvider::LyricsProvider(const QString &name, const bool enabled, const bool authentication_required, QObject *parent) - : QObject(parent), name_(name), enabled_(enabled), order_(0), authentication_required_(authentication_required) {} +LyricsProvider::LyricsProvider(const QString &name, const bool enabled, const bool authentication_required, NetworkAccessManager *network, QObject *parent) + : QObject(parent), network_(network), name_(name), enabled_(enabled), order_(0), authentication_required_(authentication_required) {} diff --git a/src/lyrics/lyricsprovider.h b/src/lyrics/lyricsprovider.h index 6561b7463..769621b82 100644 --- a/src/lyrics/lyricsprovider.h +++ b/src/lyrics/lyricsprovider.h @@ -31,11 +31,13 @@ #include "lyricsfetcher.h" +class NetworkAccessManager; + class LyricsProvider : public QObject { Q_OBJECT public: - explicit LyricsProvider(const QString &name, const bool enabled, const bool authentication_required, QObject *parent); + explicit LyricsProvider(const QString &name, const bool enabled, const bool authentication_required, NetworkAccessManager *network, QObject *parent); typedef QPair Param; typedef QList ParamList; @@ -62,7 +64,8 @@ class LyricsProvider : public QObject { void AuthenticationFailure(QStringList); void SearchFinished(quint64 id, LyricsSearchResults results); - private: + protected: + NetworkAccessManager *network_; QString name_; bool enabled_; int order_; diff --git a/src/lyrics/lyricsproviders.cpp b/src/lyrics/lyricsproviders.cpp index e0f302956..cdb9d7b8f 100644 --- a/src/lyrics/lyricsproviders.cpp +++ b/src/lyrics/lyricsproviders.cpp @@ -31,6 +31,8 @@ #include #include "core/logging.h" +#include "core/networkaccessmanager.h" + #include "lyricsprovider.h" #include "lyricsproviders.h" @@ -38,7 +40,7 @@ int LyricsProviders::NextOrderId = 0; -LyricsProviders::LyricsProviders(QObject *parent) : QObject(parent) {} +LyricsProviders::LyricsProviders(QObject *parent) : QObject(parent), network_(new NetworkAccessManager(this)) {} LyricsProviders::~LyricsProviders() { diff --git a/src/lyrics/lyricsproviders.h b/src/lyrics/lyricsproviders.h index 6ab2adb5d..789f49651 100644 --- a/src/lyrics/lyricsproviders.h +++ b/src/lyrics/lyricsproviders.h @@ -30,6 +30,7 @@ #include #include +class NetworkAccessManager; class LyricsProvider; class LyricsProviders : public QObject { @@ -48,6 +49,8 @@ class LyricsProviders : public QObject { bool HasAnyProviders() const { return !lyrics_providers_.isEmpty(); } int NextId(); + NetworkAccessManager *network() const { return network_; } + private slots: void ProviderDestroyed(); @@ -56,6 +59,8 @@ class LyricsProviders : public QObject { static int NextOrderId; + NetworkAccessManager *network_; + QMap lyrics_providers_; QList ordered_providers_; QMutex mutex_; diff --git a/src/lyrics/musixmatchlyricsprovider.cpp b/src/lyrics/musixmatchlyricsprovider.cpp index 9824ea420..efd585474 100644 --- a/src/lyrics/musixmatchlyricsprovider.cpp +++ b/src/lyrics/musixmatchlyricsprovider.cpp @@ -26,7 +26,6 @@ #include #include #include -#include #include #include #include @@ -40,7 +39,7 @@ #include "lyricsprovider.h" #include "musixmatchlyricsprovider.h" -MusixmatchLyricsProvider::MusixmatchLyricsProvider(QObject *parent) : JsonLyricsProvider("Musixmatch", true, false, parent), network_(new NetworkAccessManager(this)) {} +MusixmatchLyricsProvider::MusixmatchLyricsProvider(NetworkAccessManager *network, QObject *parent) : JsonLyricsProvider("Musixmatch", true, false, network, parent) {} MusixmatchLyricsProvider::~MusixmatchLyricsProvider() { diff --git a/src/lyrics/musixmatchlyricsprovider.h b/src/lyrics/musixmatchlyricsprovider.h index 108967e18..c8bf20e6d 100644 --- a/src/lyrics/musixmatchlyricsprovider.h +++ b/src/lyrics/musixmatchlyricsprovider.h @@ -38,7 +38,7 @@ class MusixmatchLyricsProvider : public JsonLyricsProvider { Q_OBJECT public: - explicit MusixmatchLyricsProvider(QObject *parent = nullptr); + explicit MusixmatchLyricsProvider(NetworkAccessManager *network, QObject *parent = nullptr); ~MusixmatchLyricsProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const quint64 id) override; @@ -51,7 +51,6 @@ class MusixmatchLyricsProvider : public JsonLyricsProvider { void HandleSearchReply(QNetworkReply *reply, const quint64 id, const QString &artist, const QString &album, const QString &title); private: - NetworkAccessManager *network_; QList replies_; }; diff --git a/src/lyrics/ovhlyricsprovider.cpp b/src/lyrics/ovhlyricsprovider.cpp index 14f3aae7d..863a84ff1 100644 --- a/src/lyrics/ovhlyricsprovider.cpp +++ b/src/lyrics/ovhlyricsprovider.cpp @@ -23,7 +23,6 @@ #include #include #include -#include #include #include #include @@ -39,7 +38,7 @@ const char *OVHLyricsProvider::kUrlSearch = "https://api.lyrics.ovh/v1/"; -OVHLyricsProvider::OVHLyricsProvider(QObject *parent) : JsonLyricsProvider("Lyrics.ovh", true, false, parent), network_(new NetworkAccessManager(this)) {} +OVHLyricsProvider::OVHLyricsProvider(NetworkAccessManager *network, QObject *parent) : JsonLyricsProvider("Lyrics.ovh", true, false, network, parent) {} OVHLyricsProvider::~OVHLyricsProvider() { diff --git a/src/lyrics/ovhlyricsprovider.h b/src/lyrics/ovhlyricsprovider.h index 4cd44f4fb..c1329d486 100644 --- a/src/lyrics/ovhlyricsprovider.h +++ b/src/lyrics/ovhlyricsprovider.h @@ -37,7 +37,7 @@ class OVHLyricsProvider : public JsonLyricsProvider { Q_OBJECT public: - explicit OVHLyricsProvider(QObject *parent = nullptr); + explicit OVHLyricsProvider(NetworkAccessManager *network, QObject *parent = nullptr); ~OVHLyricsProvider() override; bool StartSearch(const QString &artist, const QString &album, const QString &title, const quint64 id) override; @@ -51,7 +51,6 @@ class OVHLyricsProvider : public JsonLyricsProvider { private: static const char *kUrlSearch; - NetworkAccessManager *network_; QList replies_; };