diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f79d73af9..cc1727ce0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -182,6 +182,7 @@ set(SOURCES covermanager/coverexportrunnable.cpp covermanager/currentalbumcoverloader.cpp covermanager/coverfromurldialog.cpp + covermanager/jsoncoverprovider.cpp covermanager/lastfmcoverprovider.cpp covermanager/musicbrainzcoverprovider.cpp covermanager/discogscoverprovider.cpp @@ -377,6 +378,7 @@ set(HEADERS covermanager/coverexportrunnable.h covermanager/currentalbumcoverloader.h covermanager/coverfromurldialog.h + covermanager/jsoncoverprovider.h covermanager/lastfmcoverprovider.h covermanager/musicbrainzcoverprovider.h covermanager/discogscoverprovider.h diff --git a/src/covermanager/coverprovider.h b/src/covermanager/coverprovider.h index 5eae85f98..32e70e22d 100644 --- a/src/covermanager/coverprovider.h +++ b/src/covermanager/coverprovider.h @@ -26,6 +26,7 @@ #include #include +#include #include #include @@ -63,6 +64,8 @@ class CoverProvider : public QObject { virtual bool StartSearch(const QString &artist, const QString &album, const QString &title, const int id) = 0; virtual void CancelSearch(const int id) { Q_UNUSED(id); } + virtual void Error(const QString &error, const QVariant &debug = QVariant()) = 0; + signals: void AuthenticationComplete(bool, QStringList = QStringList()); void AuthenticationSuccess(); diff --git a/src/covermanager/deezercoverprovider.cpp b/src/covermanager/deezercoverprovider.cpp index 22ba04d77..d712ce7e4 100644 --- a/src/covermanager/deezercoverprovider.cpp +++ b/src/covermanager/deezercoverprovider.cpp @@ -45,13 +45,13 @@ #include "core/logging.h" #include "core/song.h" #include "albumcoverfetcher.h" -#include "coverprovider.h" +#include "jsoncoverprovider.h" #include "deezercoverprovider.h" const char *DeezerCoverProvider::kApiUrl = "https://api.deezer.com"; const int DeezerCoverProvider::kLimit = 10; -DeezerCoverProvider::DeezerCoverProvider(Application *app, QObject *parent): CoverProvider("Deezer", true, false, 2.0, true, true, app, parent), network_(new NetworkAccessManager(this)) {} +DeezerCoverProvider::DeezerCoverProvider(Application *app, QObject *parent): JsonCoverProvider("Deezer", true, false, 2.0, true, true, app, parent), network_(new NetworkAccessManager(this)) {} bool DeezerCoverProvider::StartSearch(const QString &artist, const QString &album, const QString &title, const int id) { @@ -139,36 +139,6 @@ QByteArray DeezerCoverProvider::GetReplyData(QNetworkReply *reply) { return data; } - -QJsonObject DeezerCoverProvider::ExtractJsonObj(const QByteArray &data) { - - QJsonParseError error; - QJsonDocument json_doc = QJsonDocument::fromJson(data, &error); - - if (error.error != QJsonParseError::NoError) { - Error("Reply from server missing Json data.", data); - return QJsonObject(); - } - - if (json_doc.isEmpty()) { - Error("Received empty Json document.", json_doc); - return QJsonObject(); - } - - if (!json_doc.isObject()) { - Error("Json document is not an object.", json_doc); - return QJsonObject(); - } - - QJsonObject json_obj = json_doc.object(); - if (json_obj.isEmpty()) { - Error("Received empty Json object.", json_doc); - return QJsonObject(); - } - - return json_obj; - -} QJsonValue DeezerCoverProvider::ExtractData(const QByteArray &data) { diff --git a/src/covermanager/deezercoverprovider.h b/src/covermanager/deezercoverprovider.h index b8bb9b022..5af5f929a 100644 --- a/src/covermanager/deezercoverprovider.h +++ b/src/covermanager/deezercoverprovider.h @@ -29,13 +29,13 @@ #include #include -#include "coverprovider.h" +#include "jsoncoverprovider.h" class QNetworkAccessManager; class QNetworkReply; class Application; -class DeezerCoverProvider : public CoverProvider { +class DeezerCoverProvider : public JsonCoverProvider { Q_OBJECT public: @@ -48,7 +48,6 @@ class DeezerCoverProvider : public CoverProvider { private: QByteArray GetReplyData(QNetworkReply *reply); - QJsonObject ExtractJsonObj(const QByteArray &data); QJsonValue ExtractData(const QByteArray &data); void Error(const QString &error, const QVariant &debug = QVariant()); diff --git a/src/covermanager/discogscoverprovider.cpp b/src/covermanager/discogscoverprovider.cpp index fd04af387..f9e7b58d1 100644 --- a/src/covermanager/discogscoverprovider.cpp +++ b/src/covermanager/discogscoverprovider.cpp @@ -50,15 +50,15 @@ #include "core/logging.h" #include "core/network.h" #include "core/utilities.h" -#include "coverprovider.h" #include "albumcoverfetcher.h" +#include "jsoncoverprovider.h" #include "discogscoverprovider.h" const char *DiscogsCoverProvider::kUrlSearch = "https://api.discogs.com/database/search"; const char *DiscogsCoverProvider::kAccessKeyB64 = "dGh6ZnljUGJlZ1NEeXBuSFFxSVk="; const char *DiscogsCoverProvider::kSecretKeyB64 = "ZkFIcmlaSER4aHhRSlF2U3d0bm5ZVmdxeXFLWUl0UXI="; -DiscogsCoverProvider::DiscogsCoverProvider(Application *app, QObject *parent) : CoverProvider("Discogs", false, false, 0.0, false, false, app, parent), network_(new NetworkAccessManager(this)) {} +DiscogsCoverProvider::DiscogsCoverProvider(Application *app, QObject *parent) : JsonCoverProvider("Discogs", false, false, 0.0, false, false, app, parent), network_(new NetworkAccessManager(this)) {} DiscogsCoverProvider::~DiscogsCoverProvider() { requests_search_.clear(); @@ -171,33 +171,6 @@ QByteArray DiscogsCoverProvider::GetReplyData(QNetworkReply *reply) { } -QJsonObject DiscogsCoverProvider::ExtractJsonObj(const QByteArray &data) { - - QJsonParseError error; - QJsonDocument json_doc = QJsonDocument::fromJson(data, &error); - - if (error.error != QJsonParseError::NoError) { - Error("Reply from server missing Json data.", data); - return QJsonObject(); - } - if (json_doc.isEmpty()) { - Error("Received empty Json document.", json_doc); - return QJsonObject(); - } - if (!json_doc.isObject()) { - Error("Json document is not an object.", json_doc); - return QJsonObject(); - } - QJsonObject json_obj = json_doc.object(); - if (json_obj.isEmpty()) { - Error("Received empty Json object.", json_doc); - return QJsonObject(); - } - - return json_obj; - -} - void DiscogsCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { reply->deleteLater(); diff --git a/src/covermanager/discogscoverprovider.h b/src/covermanager/discogscoverprovider.h index c1c5d979d..5ab6e3cd7 100644 --- a/src/covermanager/discogscoverprovider.h +++ b/src/covermanager/discogscoverprovider.h @@ -34,14 +34,14 @@ #include #include -#include "coverprovider.h" +#include "jsoncoverprovider.h" #include "albumcoverfetcher.h" class QNetworkAccessManager; class QNetworkReply; class Application; -class DiscogsCoverProvider : public CoverProvider { +class DiscogsCoverProvider : public JsonCoverProvider { Q_OBJECT public: @@ -77,7 +77,6 @@ class DiscogsCoverProvider : public CoverProvider { QNetworkReply *CreateRequest(QUrl url, const ParamList ¶ms_provided = ParamList()); QByteArray GetReplyData(QNetworkReply *reply); - QJsonObject ExtractJsonObj(const QByteArray &data); void StartRelease(std::shared_ptr search, const quint64 release_id, const QUrl &url); void EndSearch(std::shared_ptr search, const DiscogsCoverReleaseContext &release = DiscogsCoverReleaseContext()); void Error(const QString &error, const QVariant &debug = QVariant()); diff --git a/src/covermanager/jsoncoverprovider.cpp b/src/covermanager/jsoncoverprovider.cpp new file mode 100644 index 000000000..c82765e1f --- /dev/null +++ b/src/covermanager/jsoncoverprovider.cpp @@ -0,0 +1,64 @@ +/* + * Strawberry Music Player + * Copyright 2018, Jonas Kvinge + * + * Strawberry is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Strawberry is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Strawberry. If not, see . + * + */ + +#include "config.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "core/application.h" +#include "coverprovider.h" +#include "jsoncoverprovider.h" + +JsonCoverProvider::JsonCoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool fetchall, const bool allow_missing_album, Application *app, QObject *parent) : CoverProvider(name, enabled, authentication_required, quality, fetchall, allow_missing_album, app, parent) {} + +QJsonObject JsonCoverProvider::ExtractJsonObj(const QByteArray &data) { + + QJsonParseError json_error; + QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); + + if (json_error.error != QJsonParseError::NoError) { + Error(QString("Failed to parse json data: %1").arg(json_error.errorString())); + return QJsonObject(); + } + + if (json_doc.isEmpty()) { + Error("Received empty Json document.", data); + return QJsonObject(); + } + + if (!json_doc.isObject()) { + Error("Json document is not an object.", json_doc); + return QJsonObject(); + } + + QJsonObject json_obj = json_doc.object(); + if (json_obj.isEmpty()) { + Error("Received empty Json object.", json_doc); + return QJsonObject(); + } + + return json_obj; + +} diff --git a/src/covermanager/jsoncoverprovider.h b/src/covermanager/jsoncoverprovider.h new file mode 100644 index 000000000..0f3dc6800 --- /dev/null +++ b/src/covermanager/jsoncoverprovider.h @@ -0,0 +1,46 @@ +/* + * Strawberry Music Player + * Copyright 2018, Jonas Kvinge + * + * Strawberry is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Strawberry is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Strawberry. If not, see . + * + */ + +#ifndef JSONCOVERPROVIDER_H +#define JSONCOVERPROVIDER_H + +#include "config.h" + +#include +#include +#include +#include + +#include "coverprovider.h" + +class QNetworkAccessManager; +class QNetworkReply; +class Application; + +class JsonCoverProvider : public CoverProvider { + Q_OBJECT + + public: + explicit JsonCoverProvider(const QString &name, const bool enabled, const bool authentication_required, const float quality, const bool fetchall, const bool allow_missing_album, Application *app, QObject *parent); + + QJsonObject ExtractJsonObj(const QByteArray &data); + +}; + +#endif // JSONCOVERPROVIDER_H diff --git a/src/covermanager/lastfmcoverprovider.cpp b/src/covermanager/lastfmcoverprovider.cpp index 286c9410d..c249f8e64 100644 --- a/src/covermanager/lastfmcoverprovider.cpp +++ b/src/covermanager/lastfmcoverprovider.cpp @@ -45,7 +45,7 @@ #include "core/network.h" #include "core/logging.h" -#include "coverprovider.h" +#include "jsoncoverprovider.h" #include "albumcoverfetcher.h" #include "lastfmcoverprovider.h" @@ -53,7 +53,7 @@ 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) : CoverProvider("Last.fm", true, false, 1.0, true, false, app, parent), network_(new NetworkAccessManager(this)) {} +LastFmCoverProvider::LastFmCoverProvider(Application *app, QObject *parent) : JsonCoverProvider("Last.fm", true, false, 1.0, true, false, app, parent), network_(new NetworkAccessManager(this)) {} bool LastFmCoverProvider::StartSearch(const QString &artist, const QString &album, const QString &title, const int id) { @@ -303,33 +303,6 @@ QByteArray LastFmCoverProvider::GetReplyData(QNetworkReply *reply) { } -QJsonObject LastFmCoverProvider::ExtractJsonObj(const QByteArray &data) { - - QJsonParseError error; - QJsonDocument json_doc = QJsonDocument::fromJson(data, &error); - - if (error.error != QJsonParseError::NoError) { - Error("Reply from server missing Json data.", data); - return QJsonObject(); - } - if (json_doc.isEmpty()) { - Error("Received empty Json document.", json_doc); - return QJsonObject(); - } - if (!json_doc.isObject()) { - Error("Json document is not an object.", json_doc); - return QJsonObject(); - } - QJsonObject json_obj = json_doc.object(); - if (json_obj.isEmpty()) { - Error("Received empty Json object.", json_doc); - return QJsonObject(); - } - - return json_obj; - -} - void LastFmCoverProvider::Error(const QString &error, const QVariant &debug) { qLog(Error) << "LastFm:" << error; diff --git a/src/covermanager/lastfmcoverprovider.h b/src/covermanager/lastfmcoverprovider.h index 818ae733c..4581c6e87 100644 --- a/src/covermanager/lastfmcoverprovider.h +++ b/src/covermanager/lastfmcoverprovider.h @@ -28,13 +28,13 @@ #include #include -#include "coverprovider.h" +#include "jsoncoverprovider.h" class QNetworkAccessManager; class QNetworkReply; class Application; -class LastFmCoverProvider : public CoverProvider { +class LastFmCoverProvider : public JsonCoverProvider { Q_OBJECT public: @@ -54,7 +54,6 @@ class LastFmCoverProvider : public CoverProvider { }; QByteArray GetReplyData(QNetworkReply *reply); - QJsonObject ExtractJsonObj(const QByteArray &data); LastFmImageSize ImageSizeFromString(const QString &size); void Error(const QString &error, const QVariant &debug = QVariant()); diff --git a/src/covermanager/musicbrainzcoverprovider.cpp b/src/covermanager/musicbrainzcoverprovider.cpp index 29fc73554..9b83d61bd 100644 --- a/src/covermanager/musicbrainzcoverprovider.cpp +++ b/src/covermanager/musicbrainzcoverprovider.cpp @@ -41,14 +41,14 @@ #include "core/network.h" #include "core/logging.h" #include "albumcoverfetcher.h" -#include "coverprovider.h" +#include "jsoncoverprovider.h" #include "musicbrainzcoverprovider.h" const char *MusicbrainzCoverProvider::kReleaseSearchUrl = "https://musicbrainz.org/ws/2/release/"; const char *MusicbrainzCoverProvider::kAlbumCoverUrl = "https://coverartarchive.org/release/%1/front"; const int MusicbrainzCoverProvider::kLimit = 8; -MusicbrainzCoverProvider::MusicbrainzCoverProvider(Application *app, QObject *parent): CoverProvider("MusicBrainz", true, false, 1.5, true, false, app, parent), network_(new NetworkAccessManager(this)) {} +MusicbrainzCoverProvider::MusicbrainzCoverProvider(Application *app, QObject *parent): JsonCoverProvider("MusicBrainz", true, false, 1.5, true, false, app, parent), network_(new NetworkAccessManager(this)) {} bool MusicbrainzCoverProvider::StartSearch(const QString &artist, const QString &album, const QString &title, const int id) { @@ -218,33 +218,6 @@ QByteArray MusicbrainzCoverProvider::GetReplyData(QNetworkReply *reply) { } -QJsonObject MusicbrainzCoverProvider::ExtractJsonObj(const QByteArray &data) { - - QJsonParseError error; - QJsonDocument json_doc = QJsonDocument::fromJson(data, &error); - - if (error.error != QJsonParseError::NoError) { - Error("Reply from server is missing Json data.", data); - return QJsonObject(); - } - if (json_doc.isEmpty()) { - Error("Received empty Json document.", json_doc); - return QJsonObject(); - } - if (!json_doc.isObject()) { - Error("Json document is not an object.", json_doc); - return QJsonObject(); - } - QJsonObject json_obj = json_doc.object(); - if (json_obj.isEmpty()) { - Error("Received empty Json object.", json_doc); - return QJsonObject(); - } - - return json_obj; - -} - void MusicbrainzCoverProvider::Error(const QString &error, const QVariant &debug) { qLog(Error) << "Musicbrainz:" << error; diff --git a/src/covermanager/musicbrainzcoverprovider.h b/src/covermanager/musicbrainzcoverprovider.h index 35245281e..4d76c9afd 100644 --- a/src/covermanager/musicbrainzcoverprovider.h +++ b/src/covermanager/musicbrainzcoverprovider.h @@ -28,13 +28,13 @@ #include #include -#include "coverprovider.h" +#include "jsoncoverprovider.h" class QNetworkAccessManager; class QNetworkReply; class Application; -class MusicbrainzCoverProvider : public CoverProvider { +class MusicbrainzCoverProvider : public JsonCoverProvider { Q_OBJECT public: explicit MusicbrainzCoverProvider(Application *app, QObject *parent = nullptr); @@ -46,7 +46,6 @@ class MusicbrainzCoverProvider : public CoverProvider { private: QByteArray GetReplyData(QNetworkReply *reply); - QJsonObject ExtractJsonObj(const QByteArray &data); void Error(const QString &error, const QVariant &debug = QVariant()); private: diff --git a/src/covermanager/musixmatchcoverprovider.cpp b/src/covermanager/musixmatchcoverprovider.cpp index cb41cf38f..7a8a7a6f9 100644 --- a/src/covermanager/musixmatchcoverprovider.cpp +++ b/src/covermanager/musixmatchcoverprovider.cpp @@ -37,10 +37,10 @@ #include "core/logging.h" #include "core/network.h" #include "albumcoverfetcher.h" -#include "coverprovider.h" +#include "jsoncoverprovider.h" #include "musixmatchcoverprovider.h" -MusixmatchCoverProvider::MusixmatchCoverProvider(Application *app, QObject *parent): CoverProvider("Musixmatch", true, false, 1.0, true, false, app, parent), network_(new NetworkAccessManager(this)) {} +MusixmatchCoverProvider::MusixmatchCoverProvider(Application *app, QObject *parent): JsonCoverProvider("Musixmatch", true, false, 1.0, true, false, app, parent), network_(new NetworkAccessManager(this)) {} bool MusixmatchCoverProvider::StartSearch(const QString &artist, const QString &album, const QString &title, const int id) { diff --git a/src/covermanager/musixmatchcoverprovider.h b/src/covermanager/musixmatchcoverprovider.h index e34c85e55..ab0321896 100644 --- a/src/covermanager/musixmatchcoverprovider.h +++ b/src/covermanager/musixmatchcoverprovider.h @@ -27,12 +27,12 @@ #include #include -#include "coverprovider.h" +#include "jsoncoverprovider.h" class QNetworkAccessManager; class QNetworkReply; -class MusixmatchCoverProvider : public CoverProvider { +class MusixmatchCoverProvider : public JsonCoverProvider { Q_OBJECT public: diff --git a/src/covermanager/qobuzcoverprovider.cpp b/src/covermanager/qobuzcoverprovider.cpp index 23ffc6b09..91786352e 100644 --- a/src/covermanager/qobuzcoverprovider.cpp +++ b/src/covermanager/qobuzcoverprovider.cpp @@ -44,13 +44,14 @@ #include "core/logging.h" #include "core/song.h" #include "albumcoverfetcher.h" +#include "jsoncoverprovider.h" #include "qobuzcoverprovider.h" const char *QobuzCoverProvider::kApiUrl = "https://www.qobuz.com/api.json/0.2"; const char *QobuzCoverProvider::kAppID = "OTQyODUyNTY3"; const int QobuzCoverProvider::kLimit = 10; -QobuzCoverProvider::QobuzCoverProvider(Application *app, QObject *parent) : CoverProvider("Qobuz", true, false, 2.0, true, true, app, parent), network_(new NetworkAccessManager(this)) {} +QobuzCoverProvider::QobuzCoverProvider(Application *app, QObject *parent) : JsonCoverProvider("Qobuz", true, false, 2.0, true, true, app, parent), network_(new NetworkAccessManager(this)) {} bool QobuzCoverProvider::StartSearch(const QString &artist, const QString &album, const QString &title, const int id) { @@ -139,36 +140,6 @@ QByteArray QobuzCoverProvider::GetReplyData(QNetworkReply *reply) { } -QJsonObject QobuzCoverProvider::ExtractJsonObj(const QByteArray &data) { - - QJsonParseError json_error; - QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); - - if (json_error.error != QJsonParseError::NoError) { - Error("Reply from server missing Json data.", data); - return QJsonObject(); - } - - if (json_doc.isEmpty()) { - Error("Received empty Json document.", data); - return QJsonObject(); - } - - if (!json_doc.isObject()) { - Error("Json document is not an object.", json_doc); - return QJsonObject(); - } - - QJsonObject json_obj = json_doc.object(); - if (json_obj.isEmpty()) { - Error("Received empty Json object.", json_doc); - return QJsonObject(); - } - - return json_obj; - -} - void QobuzCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { reply->deleteLater(); diff --git a/src/covermanager/qobuzcoverprovider.h b/src/covermanager/qobuzcoverprovider.h index 3541e0788..e6f8325b3 100644 --- a/src/covermanager/qobuzcoverprovider.h +++ b/src/covermanager/qobuzcoverprovider.h @@ -28,13 +28,13 @@ #include #include -#include "coverprovider.h" +#include "jsoncoverprovider.h" class QNetworkAccessManager; class QNetworkReply; class Application; -class QobuzCoverProvider : public CoverProvider { +class QobuzCoverProvider : public JsonCoverProvider { Q_OBJECT public: @@ -47,7 +47,6 @@ class QobuzCoverProvider : public CoverProvider { private: QByteArray GetReplyData(QNetworkReply *reply); - QJsonObject ExtractJsonObj(const QByteArray &data); void Error(const QString &error, const QVariant &debug = QVariant()); private: diff --git a/src/covermanager/spotifycoverprovider.cpp b/src/covermanager/spotifycoverprovider.cpp index e15790500..bb6b27f38 100644 --- a/src/covermanager/spotifycoverprovider.cpp +++ b/src/covermanager/spotifycoverprovider.cpp @@ -49,7 +49,7 @@ #include "core/utilities.h" #include "internet/localredirectserver.h" #include "albumcoverfetcher.h" -#include "coverprovider.h" +#include "jsoncoverprovider.h" #include "spotifycoverprovider.h" const char *SpotifyCoverProvider::kSettingsGroup = "Spotify"; @@ -61,7 +61,7 @@ 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) : CoverProvider("Spotify", true, true, 2.5, true, true, app, parent), network_(new NetworkAccessManager(this)), server_(nullptr) { +SpotifyCoverProvider::SpotifyCoverProvider(Application *app, QObject *parent) : JsonCoverProvider("Spotify", true, true, 2.5, true, true, app, parent), network_(new NetworkAccessManager(this)), server_(nullptr) { QSettings s; s.beginGroup(kSettingsGroup); @@ -266,7 +266,7 @@ void SpotifyCoverProvider::AccessTokenRequestFinished(QNetworkReply *reply) { QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); if (json_error.error != QJsonParseError::NoError) { - AuthError("Authentication reply from server missing Json data."); + Error(QString("Failed to parse Json data in authentication reply: %1").arg(json_error.errorString())); return; } @@ -394,36 +394,6 @@ QByteArray SpotifyCoverProvider::GetReplyData(QNetworkReply *reply) { } -QJsonObject SpotifyCoverProvider::ExtractJsonObj(const QByteArray &data) { - - QJsonParseError json_error; - QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); - - if (json_error.error != QJsonParseError::NoError) { - Error(QString("Failed to parse json data: %1").arg(json_error.errorString())); - return QJsonObject(); - } - - if (json_doc.isEmpty()) { - Error("Received empty Json document.", data); - return QJsonObject(); - } - - if (!json_doc.isObject()) { - Error("Json document is not an object.", json_doc); - return QJsonObject(); - } - - QJsonObject json_obj = json_doc.object(); - if (json_obj.isEmpty()) { - Error("Received empty Json object.", json_doc); - return QJsonObject(); - } - - return json_obj; - -} - void SpotifyCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id, const QString &extract) { reply->deleteLater(); diff --git a/src/covermanager/spotifycoverprovider.h b/src/covermanager/spotifycoverprovider.h index 3ae3bab12..0339661f7 100644 --- a/src/covermanager/spotifycoverprovider.h +++ b/src/covermanager/spotifycoverprovider.h @@ -33,14 +33,14 @@ #include #include -#include "coverprovider.h" +#include "jsoncoverprovider.h" class QNetworkAccessManager; class QNetworkReply; class Application; class LocalRedirectServer; -class SpotifyCoverProvider : public CoverProvider { +class SpotifyCoverProvider : public JsonCoverProvider { Q_OBJECT public: @@ -61,7 +61,6 @@ class SpotifyCoverProvider : public CoverProvider { private: void RequestAccessToken(const QUrl &url, const QUrl &redirect_url); QByteArray GetReplyData(QNetworkReply *reply); - QJsonObject ExtractJsonObj(const QByteArray &data); void AuthError(const QString &error = QString(), const QVariant &debug = QVariant()); void Error(const QString &error, const QVariant &debug = QVariant()); diff --git a/src/covermanager/tidalcoverprovider.cpp b/src/covermanager/tidalcoverprovider.cpp index ccfd7c82f..8eb436f4b 100644 --- a/src/covermanager/tidalcoverprovider.cpp +++ b/src/covermanager/tidalcoverprovider.cpp @@ -45,7 +45,7 @@ #include "internet/internetservices.h" #include "tidal/tidalservice.h" #include "albumcoverfetcher.h" -#include "coverprovider.h" +#include "jsoncoverprovider.h" #include "tidalcoverprovider.h" const char *TidalCoverProvider::kApiUrl = "https://api.tidalhifi.com/v1"; @@ -53,7 +53,7 @@ const char *TidalCoverProvider::kResourcesUrl = "https://resources.tidal.com"; const int TidalCoverProvider::kLimit = 10; TidalCoverProvider::TidalCoverProvider(Application *app, QObject *parent) : - CoverProvider("Tidal", true, true, 2.5, true, true, app, parent), + JsonCoverProvider("Tidal", true, true, 2.5, true, true, app, parent), service_(app->internet_services()->Service()), network_(new NetworkAccessManager(this)) { @@ -152,36 +152,6 @@ QByteArray TidalCoverProvider::GetReplyData(QNetworkReply *reply) { } -QJsonObject TidalCoverProvider::ExtractJsonObj(const QByteArray &data) { - - QJsonParseError json_error; - QJsonDocument json_doc = QJsonDocument::fromJson(data, &json_error); - - if (json_error.error != QJsonParseError::NoError) { - Error("Reply from server missing Json data.", data); - return QJsonObject(); - } - - if (json_doc.isEmpty()) { - Error("Received empty Json document.", data); - return QJsonObject(); - } - - if (!json_doc.isObject()) { - Error("Json document is not an object.", json_doc); - return QJsonObject(); - } - - QJsonObject json_obj = json_doc.object(); - if (json_obj.isEmpty()) { - Error("Received empty Json object.", json_doc); - return QJsonObject(); - } - - return json_obj; - -} - void TidalCoverProvider::HandleSearchReply(QNetworkReply *reply, const int id) { reply->deleteLater(); diff --git a/src/covermanager/tidalcoverprovider.h b/src/covermanager/tidalcoverprovider.h index 2b691b397..bc8297cd5 100644 --- a/src/covermanager/tidalcoverprovider.h +++ b/src/covermanager/tidalcoverprovider.h @@ -32,14 +32,14 @@ #include #include -#include "coverprovider.h" +#include "jsoncoverprovider.h" #include "tidal/tidalservice.h" class QNetworkAccessManager; class QNetworkReply; class Application; -class TidalCoverProvider : public CoverProvider { +class TidalCoverProvider : public JsonCoverProvider { Q_OBJECT public: @@ -55,7 +55,6 @@ class TidalCoverProvider : public CoverProvider { private: QByteArray GetReplyData(QNetworkReply *reply); - QJsonObject ExtractJsonObj(const QByteArray &data); void Error(const QString &error, const QVariant &debug = QVariant()); private: