From a8a0f2e4fdd3d4b2fd23b8628a3abc27c290d01d Mon Sep 17 00:00:00 2001 From: John Maguire Date: Mon, 27 Jun 2016 14:45:40 +0100 Subject: [PATCH] Remove echonest and update songkick concert fetcher. #5416 --- CMakeLists.txt | 3 - src/CMakeLists.txt | 8 -- src/main.cpp | 10 +- src/songinfo/artistinfoview.cpp | 11 --- src/songinfo/echonestbiographies.cpp | 123 ------------------------ src/songinfo/echonestbiographies.h | 48 --------- src/songinfo/echonestsimilarartists.cpp | 76 --------------- src/songinfo/echonestsimilarartists.h | 38 -------- src/songinfo/echonesttags.cpp | 80 --------------- src/songinfo/echonesttags.h | 43 --------- src/songinfo/songkickconcerts.cpp | 84 +++++++--------- src/songinfo/songkickconcerts.h | 3 - 12 files changed, 36 insertions(+), 491 deletions(-) delete mode 100644 src/songinfo/echonestbiographies.cpp delete mode 100644 src/songinfo/echonestbiographies.h delete mode 100644 src/songinfo/echonestsimilarartists.cpp delete mode 100644 src/songinfo/echonestsimilarartists.h delete mode 100644 src/songinfo/echonesttags.cpp delete mode 100644 src/songinfo/echonesttags.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 6f21ce11a..6d8a0903a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -364,9 +364,6 @@ else (USE_SYSTEM_QXT) endif (NOT APPLE) endif (USE_SYSTEM_QXT) -find_path(ECHONEST_INCLUDE_DIRS echonest/echonest_export.h) -find_library(ECHONEST_LIBRARIES echonest) - # Use system gmock if it's available # We need to look for both gmock and gtest find_path(GMOCK_INCLUDE_DIRS gmock/gmock.h) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8cb0706fa..99d1a3155 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -35,7 +35,6 @@ include_directories(${LIBPROJECTM_INCLUDE_DIRS}) include_directories(${QTSINGLEAPPLICATION_INCLUDE_DIRS}) include_directories(${QTIOCOMPRESSOR_INCLUDE_DIRS}) include_directories(${QXT_INCLUDE_DIRS}) -include_directories(${ECHONEST_INCLUDE_DIRS}) include_directories(${SHA2_INCLUDE_DIRS}) include_directories(${CHROMAPRINT_INCLUDE_DIRS}) include_directories(${MYGPOQT_INCLUDE_DIRS}) @@ -301,7 +300,6 @@ set(SOURCES songinfo/artistinfoview.cpp songinfo/collapsibleinfoheader.cpp songinfo/collapsibleinfopane.cpp - songinfo/echonestbiographies.cpp songinfo/songinfobase.cpp songinfo/songinfofetcher.cpp songinfo/songinfoprovider.cpp @@ -593,7 +591,6 @@ set(HEADERS songinfo/artistinfoview.h songinfo/collapsibleinfoheader.h songinfo/collapsibleinfopane.h - songinfo/echonestbiographies.h songinfo/songinfobase.h songinfo/songinfofetcher.h songinfo/songinfoprovider.h @@ -830,16 +827,12 @@ optional_source(HAVE_LIBLASTFM internet/lastfm/lastfmcompat.cpp internet/lastfm/lastfmservice.cpp internet/lastfm/lastfmsettingspage.cpp - songinfo/echonestsimilarartists.cpp - songinfo/echonesttags.cpp songinfo/lastfmtrackinfoprovider.cpp songinfo/tagwidget.cpp HEADERS covers/lastfmcoverprovider.h internet/lastfm/lastfmservice.h internet/lastfm/lastfmsettingspage.h - songinfo/echonestsimilarartists.h - songinfo/echonesttags.h songinfo/lastfmtrackinfoprovider.h songinfo/tagwidget.h UI @@ -1254,7 +1247,6 @@ target_link_libraries(clementine_lib ${TAGLIB_LIBRARIES} ${MYGPOQT_LIBRARIES} ${CHROMAPRINT_LIBRARIES} - ${ECHONEST_LIBRARIES} ${GOBJECT_LIBRARIES} ${GLIB_LIBRARIES} ${GIO_LIBRARIES} diff --git a/src/main.cpp b/src/main.cpp index e40e52e7e..0964a2031 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -73,8 +73,6 @@ #include #include -#include - #ifdef Q_OS_DARWIN #include #include @@ -398,8 +396,8 @@ int main(int argc, char* argv[]) { // Add root CA cert for SoundCloud, whose certificate is missing on OS X. QSslSocket::addDefaultCaCertificates( QSslCertificate::fromPath(":/soundcloud-ca.pem", QSsl::Pem)); - QSslSocket::addDefaultCaCertificates( - QSslCertificate::fromPath(":/Equifax_Secure_Certificate_Authority.pem", QSsl::Pem)); + QSslSocket::addDefaultCaCertificates(QSslCertificate::fromPath( + ":/Equifax_Secure_Certificate_Authority.pem", QSsl::Pem)); // Has the user forced a different language? QString override_language = options.language(); @@ -437,10 +435,6 @@ int main(int argc, char* argv[]) { Application app; app.set_language_name(language); - Echonest::Config::instance()->setAPIKey("DFLFLJBUF4EGTXHIG"); - Echonest::Config::instance()->setNetworkAccessManager( - new NetworkAccessManager); - // Network proxy QNetworkProxyFactory::setApplicationProxyFactory( NetworkProxyFactory::Instance()); diff --git a/src/songinfo/artistinfoview.cpp b/src/songinfo/artistinfoview.cpp index e1fc5a18c..3ee92784d 100644 --- a/src/songinfo/artistinfoview.cpp +++ b/src/songinfo/artistinfoview.cpp @@ -17,25 +17,14 @@ #include "artistinfoview.h" -#include "songinfo/echonestbiographies.h" #include "songinfo/songinfofetcher.h" #include "songinfo/songkickconcerts.h" #include "songinfo/spotifyimages.h" #include "widgets/prettyimageview.h" -#ifdef HAVE_LIBLASTFM -#include "echonestsimilarartists.h" -#include "echonesttags.h" -#endif - ArtistInfoView::ArtistInfoView(QWidget* parent) : SongInfoBase(parent) { - fetcher_->AddProvider(new EchoNestBiographies); fetcher_->AddProvider(new SongkickConcerts); fetcher_->AddProvider(new SpotifyImages); -#ifdef HAVE_LIBLASTFM - fetcher_->AddProvider(new EchoNestSimilarArtists); - fetcher_->AddProvider(new EchoNestTags); -#endif } ArtistInfoView::~ArtistInfoView() {} diff --git a/src/songinfo/echonestbiographies.cpp b/src/songinfo/echonestbiographies.cpp deleted file mode 100644 index cd345e48e..000000000 --- a/src/songinfo/echonestbiographies.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/* This file is part of Clementine. - Copyright 2010, David Sansome - - Clementine 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. - - Clementine 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 Clementine. If not, see . -*/ - -#include "echonestbiographies.h" - -#include - -#include - -#include "songinfotextview.h" -#include "core/logging.h" -#include "ui/iconloader.h" - -struct EchoNestBiographies::Request { - Request(int id) : id_(id), artist_(new Echonest::Artist) {} - - int id_; - std::unique_ptr artist_; -}; - -EchoNestBiographies::EchoNestBiographies() { - site_relevance_["wikipedia"] = 100; - site_relevance_["lastfm"] = 60; - site_relevance_["amazon"] = 30; - - site_icons_["amazon"] = IconLoader::Load("amazon", IconLoader::Provider); - site_icons_["aol"] = IconLoader::Load("aol", IconLoader::Provider); - site_icons_["cdbaby"] = IconLoader::Load("cdbaby", IconLoader::Provider); - site_icons_["lastfm"] = IconLoader::Load("as", IconLoader::Lastfm); - site_icons_["mog"] = IconLoader::Load("mog", IconLoader::Provider); - site_icons_["mtvmusic"] = IconLoader::Load("mtvmusic", IconLoader::Provider); - site_icons_["myspace"] = IconLoader::Load("myspace", IconLoader::Provider); - site_icons_["wikipedia"] = IconLoader::Load("wikipedia", IconLoader::Provider); -} - -void EchoNestBiographies::FetchInfo(int id, const Song& metadata) { - std::shared_ptr request(new Request(id)); - request->artist_->setName(metadata.artist()); - - QNetworkReply* reply = request->artist_->fetchBiographies(); - connect(reply, SIGNAL(finished()), SLOT(RequestFinished())); - requests_[reply] = request; -} - -void EchoNestBiographies::RequestFinished() { - QNetworkReply* reply = qobject_cast(sender()); - if (!reply || !requests_.contains(reply)) return; - reply->deleteLater(); - - RequestPtr request = requests_.take(reply); - - try { - request->artist_->parseProfile(reply); - } - catch (Echonest::ParseError e) { - qLog(Warning) << "Error parsing echonest reply:" << e.errorType() - << e.what(); - } - - QSet already_seen; - - for (const Echonest::Biography& bio : request->artist_->biographies()) { - QString canonical_site = bio.site().toLower(); - canonical_site.replace(QRegExp("[^a-z]"), ""); - - if (already_seen.contains(canonical_site)) continue; - already_seen.insert(canonical_site); - - CollapsibleInfoPane::Data data; - data.id_ = "echonest/bio/" + bio.site(); - data.title_ = tr("Biography from %1").arg(bio.site()); - data.type_ = CollapsibleInfoPane::Data::Type_Biography; - - if (site_relevance_.contains(canonical_site)) - data.relevance_ = site_relevance_[canonical_site]; - if (site_icons_.contains(canonical_site)) - data.icon_ = site_icons_[canonical_site]; - - SongInfoTextView* editor = new SongInfoTextView; - QString text; - // Add a link to the bio webpage at the top if we have one - if (!bio.url().isEmpty()) { - QString bio_url = bio.url().toEncoded(); - if (bio.site() == "facebook") { - bio_url.replace("graph.facebook.com", "www.facebook.com"); - } - text += "

" + - tr("Open in your browser") + "

"; - } - - text += bio.text(); - if (bio.site() == "last.fm") { - // Echonest lost formatting and it seems there is currently no plans on - // Echonest side for changing this. - // But with last.fm, we can guess newlines: " " corresponds to a newline - // (this seems to be because on last.fm' website, extra blank is inserted - // before
tag, and this blank is kept). - // This is tricky, but this make the display nicer for last.fm - // biographies. - text.replace(" ", "

"); - } - editor->SetHtml(text); - data.contents_ = editor; - - emit InfoReady(request->id_, data); - } - - emit Finished(request->id_); -} diff --git a/src/songinfo/echonestbiographies.h b/src/songinfo/echonestbiographies.h deleted file mode 100644 index 2429bce58..000000000 --- a/src/songinfo/echonestbiographies.h +++ /dev/null @@ -1,48 +0,0 @@ -/* This file is part of Clementine. - Copyright 2010, David Sansome - - Clementine 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. - - Clementine 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 Clementine. If not, see . -*/ - -#ifndef ECHONESTBIOGRAPHIES_H -#define ECHONESTBIOGRAPHIES_H - -#include - -#include "songinfoprovider.h" - -class QNetworkReply; - -class EchoNestBiographies : public SongInfoProvider { - Q_OBJECT - - public: - EchoNestBiographies(); - - void FetchInfo(int id, const Song& metadata); - - private slots: - void RequestFinished(); - - private: - QMap site_relevance_; - QMap site_icons_; - - struct Request; - typedef std::shared_ptr RequestPtr; - - QMap requests_; -}; - -#endif // ECHONESTBIOGRAPHIES_H diff --git a/src/songinfo/echonestsimilarartists.cpp b/src/songinfo/echonestsimilarartists.cpp deleted file mode 100644 index af62ff2c1..000000000 --- a/src/songinfo/echonestsimilarartists.cpp +++ /dev/null @@ -1,76 +0,0 @@ -/* This file is part of Clementine. - Copyright 2010, David Sansome - - Clementine 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. - - Clementine 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 Clementine. If not, see . -*/ - -#include "echonestsimilarartists.h" -#include "tagwidget.h" -#include "core/logging.h" -#include "ui/iconloader.h" - -#include - -Q_DECLARE_METATYPE(QVector); - -void EchoNestSimilarArtists::FetchInfo(int id, const Song& metadata) { - using Echonest::Artist; - - Artist::SearchParams params; - params << Artist::SearchParamEntry(Artist::Name, metadata.artist()); - params << Artist::SearchParamEntry(Artist::MinHotttnesss, 0.5); - - QNetworkReply* reply = Echonest::Artist::fetchSimilar(params); - connect(reply, SIGNAL(finished()), SLOT(RequestFinished())); - requests_[reply] = id; -} - -void EchoNestSimilarArtists::RequestFinished() { - QNetworkReply* reply = qobject_cast(sender()); - if (!reply || !requests_.contains(reply)) return; - reply->deleteLater(); - - int id = requests_.take(reply); - - Echonest::Artists artists; - try { - artists = Echonest::Artist::parseSimilar(reply); - } - catch (Echonest::ParseError e) { - qLog(Warning) << "Error parsing echonest reply:" << e.errorType() - << e.what(); - } - - if (!artists.isEmpty()) { - CollapsibleInfoPane::Data data; - data.id_ = "echonest/similarartists"; - data.title_ = tr("Similar artists"); - data.type_ = CollapsibleInfoPane::Data::Type_Similar; - data.icon_ = IconLoader::Load("echonest", IconLoader::Provider); - - TagWidget* widget = new TagWidget(TagWidget::Type_Artists); - data.contents_ = widget; - - widget->SetIcon(IconLoader::Load("x-clementine-artist", IconLoader::Base)); - - for (const Echonest::Artist& artist : artists) { - widget->AddTag(artist.name()); - if (widget->count() >= 10) break; - } - - emit InfoReady(id, data); - } - - emit Finished(id); -} diff --git a/src/songinfo/echonestsimilarartists.h b/src/songinfo/echonestsimilarartists.h deleted file mode 100644 index f78fa544f..000000000 --- a/src/songinfo/echonestsimilarartists.h +++ /dev/null @@ -1,38 +0,0 @@ -/* This file is part of Clementine. - Copyright 2010, David Sansome - - Clementine 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. - - Clementine 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 Clementine. If not, see . -*/ - -#ifndef ECHONESTSIMILARARTISTS_H -#define ECHONESTSIMILARARTISTS_H - -#include "songinfoprovider.h" - -class QNetworkReply; - -class EchoNestSimilarArtists : public SongInfoProvider { - Q_OBJECT - - public: - void FetchInfo(int id, const Song& metadata); - - private slots: - void RequestFinished(); - - private: - QMap requests_; -}; - -#endif // ECHONESTSIMILARARTISTS_H diff --git a/src/songinfo/echonesttags.cpp b/src/songinfo/echonesttags.cpp deleted file mode 100644 index 232ec5191..000000000 --- a/src/songinfo/echonesttags.cpp +++ /dev/null @@ -1,80 +0,0 @@ -/* This file is part of Clementine. - Copyright 2010, David Sansome - - Clementine 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. - - Clementine 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 Clementine. If not, see . -*/ - -#include "echonesttags.h" - -#include - -#include - -#include "tagwidget.h" -#include "core/logging.h" -#include "ui/iconloader.h" - -struct EchoNestTags::Request { - Request(int id) : id_(id), artist_(new Echonest::Artist) {} - - int id_; - std::unique_ptr artist_; -}; - -void EchoNestTags::FetchInfo(int id, const Song& metadata) { - std::shared_ptr request(new Request(id)); - request->artist_->setName(metadata.artist()); - - QNetworkReply* reply = request->artist_->fetchTerms(); - connect(reply, SIGNAL(finished()), SLOT(RequestFinished())); - requests_[reply] = request; -} - -void EchoNestTags::RequestFinished() { - QNetworkReply* reply = qobject_cast(sender()); - if (!reply || !requests_.contains(reply)) return; - reply->deleteLater(); - - RequestPtr request = requests_.take(reply); - - try { - request->artist_->parseProfile(reply); - } - catch (Echonest::ParseError e) { - qLog(Warning) << "Error parsing echonest reply:" << e.errorType() - << e.what(); - } - - if (!request->artist_->terms().isEmpty()) { - CollapsibleInfoPane::Data data; - data.id_ = "echonest/artisttags"; - data.title_ = tr("Artist tags"); - data.type_ = CollapsibleInfoPane::Data::Type_Tags; - data.icon_ = IconLoader::Load("icon_tag", IconLoader::Lastfm); - - TagWidget* widget = new TagWidget(TagWidget::Type_Tags); - data.contents_ = widget; - - widget->SetIcon(data.icon_); - - for (const Echonest::Term& term : request->artist_->terms()) { - widget->AddTag(term.name()); - if (widget->count() >= 10) break; - } - - emit InfoReady(request->id_, data); - } - - emit Finished(request->id_); -} diff --git a/src/songinfo/echonesttags.h b/src/songinfo/echonesttags.h deleted file mode 100644 index 5776f3e00..000000000 --- a/src/songinfo/echonesttags.h +++ /dev/null @@ -1,43 +0,0 @@ -/* This file is part of Clementine. - Copyright 2010, David Sansome - - Clementine 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. - - Clementine 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 Clementine. If not, see . -*/ - -#ifndef ECHONESTTAGS_H -#define ECHONESTTAGS_H - -#include - -#include "songinfoprovider.h" - -class QNetworkReply; - -class EchoNestTags : public SongInfoProvider { - Q_OBJECT - - public: - void FetchInfo(int id, const Song& metadata); - - private slots: - void RequestFinished(); - - private: - struct Request; - typedef std::shared_ptr RequestPtr; - - QMap requests_; -}; - -#endif // ECHONESTTAGS_H diff --git a/src/songinfo/songkickconcerts.cpp b/src/songinfo/songkickconcerts.cpp index 4bb218fea..043ddb4bc 100644 --- a/src/songinfo/songkickconcerts.cpp +++ b/src/songinfo/songkickconcerts.cpp @@ -21,9 +21,6 @@ #include #include -#include -#include - #include #include "core/closure.h" @@ -31,77 +28,64 @@ #include "songkickconcertwidget.h" #include "ui/iconloader.h" -const char* SongkickConcerts::kSongkickArtistBucket = "songkick"; -const char* SongkickConcerts::kSongkickArtistCalendarUrl = - "https://api.songkick.com/api/3.0/artists/%1/calendar.json?" - "per_page=5&" - "apikey=8rgKfy1WU6IlJFfN"; +namespace { +const char* kSongkickArtistCalendarUrl = + "https://api.songkick.com/api/3.0/artists/%1/calendar.json"; +const char* kSongkickArtistSearchUrl = + "https://api.songkick.com/api/3.0/search/artists.json"; +const char* kSongkickApiKey = "8rgKfy1WU6IlJFfN"; +} // namespace SongkickConcerts::SongkickConcerts() { Geolocator* geolocator = new Geolocator; geolocator->Geolocate(); connect(geolocator, SIGNAL(Finished(Geolocator::LatLng)), SLOT(GeolocateFinished(Geolocator::LatLng))); - NewClosure(geolocator, SIGNAL(Finished(Geolocator::LatLng)), geolocator, - SLOT(deleteLater())); + connect(geolocator, SIGNAL(Finished(Geolocator::LatLng)), geolocator, + SLOT(deleteLater())); } void SongkickConcerts::FetchInfo(int id, const Song& metadata) { - Echonest::Artist::SearchParams params; - params.push_back( - qMakePair(Echonest::Artist::Name, QVariant(metadata.artist()))); - qLog(Debug) << "Params:" << params; - QNetworkReply* reply = Echonest::Artist::search( - params, - Echonest::ArtistInformation(Echonest::ArtistInformation::NoInformation, - QStringList() << kSongkickArtistBucket)); - qLog(Debug) << reply->request().url(); + if (metadata.artist().isEmpty()) { + emit Finished(id); + return; + } + + QUrl url(kSongkickArtistSearchUrl); + url.addQueryItem("apikey", kSongkickApiKey); + url.addQueryItem("query", metadata.artist()); + + QNetworkRequest request(url); + QNetworkReply* reply = network_.get(request); NewClosure(reply, SIGNAL(finished()), this, SLOT(ArtistSearchFinished(QNetworkReply*, int)), reply, id); } void SongkickConcerts::ArtistSearchFinished(QNetworkReply* reply, int id) { reply->deleteLater(); - try { - Echonest::Artists artists = Echonest::Artist::parseSearch(reply); - if (artists.isEmpty()) { - qLog(Debug) << "Failed to find artist in echonest"; - emit Finished(id); - return; - } - const Echonest::Artist& artist = artists[0]; - const Echonest::ForeignIds& foreign_ids = artist.foreignIds(); - QString songkick_id; - for (const Echonest::ForeignId& id : foreign_ids) { - if (id.catalog == "songkick") { - songkick_id = id.foreign_id; - break; - } - } + QJson::Parser parser; + QVariantMap json = parser.parse(reply).toMap(); - if (songkick_id.isEmpty()) { - qLog(Debug) << "Failed to fetch songkick foreign id for artist"; - emit Finished(id); - return; - } + QVariantMap results_page = json["resultsPage"].toMap(); + QVariantMap results = results_page["results"].toMap(); + QVariantList artists = results["artist"].toList(); - QStringList split = songkick_id.split(':'); - if (split.count() != 3) { - qLog(Error) << "Weird songkick id"; - emit Finished(id); - return; - } - - FetchSongkickCalendar(split[2], id); - } catch (Echonest::ParseError& e) { - qLog(Error) << "Error parsing echonest reply:" << e.errorType() << e.what(); + if (artists.isEmpty()) { emit Finished(id); + return; } + + QVariantMap artist = artists.first().toMap(); + QString artist_id = artist["id"].toString(); + + FetchSongkickCalendar(artist_id, id); } void SongkickConcerts::FetchSongkickCalendar(const QString& artist_id, int id) { QUrl url(QString(kSongkickArtistCalendarUrl).arg(artist_id)); + url.addQueryItem("per_page", "5"); + url.addQueryItem("apikey", kSongkickApiKey); qLog(Debug) << url; QNetworkReply* reply = network_.get(QNetworkRequest(url)); NewClosure(reply, SIGNAL(finished()), this, diff --git a/src/songinfo/songkickconcerts.h b/src/songinfo/songkickconcerts.h index 606909f26..66cd484a5 100644 --- a/src/songinfo/songkickconcerts.h +++ b/src/songinfo/songkickconcerts.h @@ -44,9 +44,6 @@ class SongkickConcerts : public SongInfoProvider { NetworkAccessManager network_; Geolocator::LatLng latlng_; - - static const char* kSongkickArtistBucket; - static const char* kSongkickArtistCalendarUrl; }; #endif