commit:     435d5fdb52747acb507a0cbc1fec3778110e0a37
Author:     Alexander Golubev <fatzer2 <AT> gmail <DOT> com>
AuthorDate: Mon Dec 26 22:23:30 2016 +0000
Commit:     Lars Wendler <polynomial-c <AT> gentoo <DOT> org>
CommitDate: Mon Dec 26 23:38:58 2016 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=435d5fdb

media-sound/clementine-1.3.1: drop echonest support

Gentoo Bug: 573712
Thanks for the patch to Lars Wendler.

Also rename the recently added patch 'clementine-chromaprint14' to meet
gentoo patch naming suggestions.
Closes: https://github.com/gentoo/gentoo/pull/3246

 ...-1.3.1-r4.ebuild => clementine-1.3.1-r5.ebuild} |   4 +-
 ....patch => clementine-1.3.1-chromaprint14.patch} |   0
 .../clementine-1.3.1-libechonest_removal.patch     | 701 +++++++++++++++++++++
 3 files changed, 703 insertions(+), 2 deletions(-)

diff --git a/media-sound/clementine/clementine-1.3.1-r4.ebuild 
b/media-sound/clementine/clementine-1.3.1-r5.ebuild
similarity index 98%
rename from media-sound/clementine/clementine-1.3.1-r4.ebuild
rename to media-sound/clementine/clementine-1.3.1-r5.ebuild
index a61c2fe..4d23bb0 100644
--- a/media-sound/clementine/clementine-1.3.1-r4.ebuild
+++ b/media-sound/clementine/clementine-1.3.1-r5.ebuild
@@ -41,7 +41,6 @@ COMMON_DEPEND="
        >=media-libs/chromaprint-0.6
        media-libs/gstreamer:1.0
        media-libs/gst-plugins-base:1.0
-       media-libs/libechonest:=[qt4(+)]
        >=media-libs/libmygpo-qt-1.0.9[qt4(+)]
        >=media-libs/taglib-1.8[mp4(+)]
        sys-libs/zlib
@@ -95,7 +94,8 @@ S="${WORKDIR}/${MY_P^}"
 PATCHES=(
        "${FILESDIR}"/${PN}-1.3-fix-tokenizer.patch
        "${FILESDIR}"/${P}-fix-desktop-file.patch
-       "${FILESDIR}"/${PN}-chromaprint14.patch #603662
+       "${FILESDIR}"/${P}-chromaprint14.patch #603662
+       "${FILESDIR}"/${P}-libechonest_removal.patch
 )
 
 src_prepare() {

diff --git a/media-sound/clementine/files/clementine-chromaprint14.patch 
b/media-sound/clementine/files/clementine-1.3.1-chromaprint14.patch
similarity index 100%
rename from media-sound/clementine/files/clementine-chromaprint14.patch
rename to media-sound/clementine/files/clementine-1.3.1-chromaprint14.patch

diff --git 
a/media-sound/clementine/files/clementine-1.3.1-libechonest_removal.patch 
b/media-sound/clementine/files/clementine-1.3.1-libechonest_removal.patch
new file mode 100644
index 00000000..63eb096
--- /dev/null
+++ b/media-sound/clementine/files/clementine-1.3.1-libechonest_removal.patch
@@ -0,0 +1,701 @@
+Remove depend upon media-libs/libechonest and its support from clementine due 
to echonest service
+was shutdown and this functionality is useless now and results in nothing but 
a slight security
+and privacy risk.
+See Gentoo bug #573712.
+Based upon patch extracted from upstream git; original patch info:
+commit a8a0f2e4fdd3d4b2fd23b8628a3abc27c290d01d
+Author: John Maguire <john.magu...@gmail.com>
+Date:   Mon Jun 27 14:45:40 2016 +0100
+
+    Remove echonest and update songkick concert fetcher.
+--- Clementine-1.3.1/CMakeLists.txt
++++ Clementine-1.3.1/CMakeLists.txt
+@@ -365,9 +365,6 @@
+   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)
+--- Clementine-1.3.1/src/CMakeLists.txt
++++ Clementine-1.3.1/src/CMakeLists.txt
+@@ -35,7 +35,6 @@
+ 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})
+@@ -297,8 +296,6 @@
+   songinfo/artistinfoview.cpp
+   songinfo/collapsibleinfoheader.cpp
+   songinfo/collapsibleinfopane.cpp
+-  songinfo/echonestbiographies.cpp
+-  songinfo/echonestimages.cpp
+   songinfo/songinfobase.cpp
+   songinfo/songinfofetcher.cpp
+   songinfo/songinfoprovider.cpp
+@@ -586,8 +583,6 @@
+   songinfo/artistinfoview.h
+   songinfo/collapsibleinfoheader.h
+   songinfo/collapsibleinfopane.h
+-  songinfo/echonestbiographies.h
+-  songinfo/echonestimages.h
+   songinfo/songinfobase.h
+   songinfo/songinfofetcher.h
+   songinfo/songinfoprovider.h
+@@ -822,16 +817,12 @@
+     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
+@@ -1241,7 +1232,6 @@
+   ${TAGLIB_LIBRARIES}
+   ${MYGPOQT_LIBRARIES}
+   ${CHROMAPRINT_LIBRARIES}
+-  ${ECHONEST_LIBRARIES}
+   ${GOBJECT_LIBRARIES}
+   ${GLIB_LIBRARIES}
+   ${GIO_LIBRARIES}
+--- Clementine-1.3.1/src/main.cpp
++++ Clementine-1.3.1/src/main.cpp
+@@ -76,8 +76,6 @@
+ #include <glib.h>
+ #include <gst/gst.h>
+ 
+-#include <echonest/Config.h>
+-
+ #ifdef Q_OS_DARWIN
+ #include <sys/resource.h>
+ #include <sys/sysctl.h>
+@@ -401,8 +399,8 @@
+   // 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();
+@@ -440,10 +438,6 @@
+   Application app;
+   app.set_language_name(language);
+ 
+-  Echonest::Config::instance()->setAPIKey("DFLFLJBUF4EGTXHIG");
+-  Echonest::Config::instance()->setNetworkAccessManager(
+-      new NetworkAccessManager);
+-
+   // Network proxy
+   QNetworkProxyFactory::setApplicationProxyFactory(
+       NetworkProxyFactory::Instance());
+--- Clementine-1.3.1/src/songinfo/artistinfoview.cpp
++++ Clementine-1.3.1/src/songinfo/artistinfoview.cpp
+@@ -16,25 +16,12 @@
+ */
+ 
+ #include "artistinfoview.h"
+-#include "echonestbiographies.h"
+-#include "echonestimages.h"
+ #include "songinfofetcher.h"
+ #include "songkickconcerts.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 EchoNestImages);
+   fetcher_->AddProvider(new SongkickConcerts);
+-#ifdef HAVE_LIBLASTFM
+-  fetcher_->AddProvider(new EchoNestSimilarArtists);
+-  fetcher_->AddProvider(new EchoNestTags);
+-#endif
+ }
+ 
+ ArtistInfoView::~ArtistInfoView() {}
+--- Clementine-1.3.1/src/songinfo/echonestbiographies.cpp
++++ Clementine-1.3.1/src/songinfo/echonestbiographies.cpp
+@@ -1,123 +0,0 @@
+-/* This file is part of Clementine.
+-   Copyright 2010, David Sansome <m...@davidsansome.com>
+-
+-   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 <http://www.gnu.org/licenses/>.
+-*/
+-
+-#include "echonestbiographies.h"
+-
+-#include <memory>
+-
+-#include <echonest/Artist.h>
+-
+-#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<Echonest::Artist> 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> 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<QNetworkReply*>(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<QString> 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 += "<p><a href=\"" + bio_url + "\">" +
+-              tr("Open in your browser") + "</a></p>";
+-    }
+-
+-    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 <br /> tag, and this blank is kept).
+-      // This is tricky, but this make the display nicer for last.fm
+-      // biographies.
+-      text.replace("  ", "<p>");
+-    }
+-    editor->SetHtml(text);
+-    data.contents_ = editor;
+-
+-    emit InfoReady(request->id_, data);
+-  }
+-
+-  emit Finished(request->id_);
+-}
+--- Clementine-1.3.1/src/songinfo/echonestbiographies.h
++++ Clementine-1.3.1/src/songinfo/echonestbiographies.h
+@@ -1,48 +0,0 @@
+-/* This file is part of Clementine.
+-   Copyright 2010, David Sansome <m...@davidsansome.com>
+-
+-   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 <http://www.gnu.org/licenses/>.
+-*/
+-
+-#ifndef ECHONESTBIOGRAPHIES_H
+-#define ECHONESTBIOGRAPHIES_H
+-
+-#include <memory>
+-
+-#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<QString, int> site_relevance_;
+-  QMap<QString, QIcon> site_icons_;
+-
+-  struct Request;
+-  typedef std::shared_ptr<Request> RequestPtr;
+-
+-  QMap<QNetworkReply*, RequestPtr> requests_;
+-};
+-
+-#endif  // ECHONESTBIOGRAPHIES_H
+--- Clementine-1.3.1/src/songinfo/echonestsimilarartists.cpp
++++ Clementine-1.3.1/src/songinfo/echonestsimilarartists.cpp
+@@ -1,76 +0,0 @@
+-/* This file is part of Clementine.
+-   Copyright 2010, David Sansome <m...@davidsansome.com>
+-
+-   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 <http://www.gnu.org/licenses/>.
+-*/
+-
+-#include "echonestsimilarartists.h"
+-#include "tagwidget.h"
+-#include "core/logging.h"
+-#include "ui/iconloader.h"
+-
+-#include <echonest/Artist.h>
+-
+-Q_DECLARE_METATYPE(QVector<QString>);
+-
+-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<QNetworkReply*>(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);
+-}
+--- Clementine-1.3.1/src/songinfo/echonestsimilarartists.h
++++ Clementine-1.3.1/src/songinfo/echonestsimilarartists.h
+@@ -1,38 +0,0 @@
+-/* This file is part of Clementine.
+-   Copyright 2010, David Sansome <m...@davidsansome.com>
+-
+-   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 <http://www.gnu.org/licenses/>.
+-*/
+-
+-#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<QNetworkReply*, int> requests_;
+-};
+-
+-#endif  // ECHONESTSIMILARARTISTS_H
+--- Clementine-1.3.1/src/songinfo/echonesttags.cpp
++++ Clementine-1.3.1/src/songinfo/echonesttags.cpp
+@@ -1,80 +0,0 @@
+-/* This file is part of Clementine.
+-   Copyright 2010, David Sansome <m...@davidsansome.com>
+-
+-   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 <http://www.gnu.org/licenses/>.
+-*/
+-
+-#include "echonesttags.h"
+-
+-#include <memory>
+-
+-#include <echonest/Artist.h>
+-
+-#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<Echonest::Artist> artist_;
+-};
+-
+-void EchoNestTags::FetchInfo(int id, const Song& metadata) {
+-  std::shared_ptr<Request> 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<QNetworkReply*>(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_);
+-}
+--- Clementine-1.3.1/src/songinfo/echonesttags.h
++++ Clementine-1.3.1/src/songinfo/echonesttags.h
+@@ -1,43 +0,0 @@
+-/* This file is part of Clementine.
+-   Copyright 2010, David Sansome <m...@davidsansome.com>
+-
+-   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 <http://www.gnu.org/licenses/>.
+-*/
+-
+-#ifndef ECHONESTTAGS_H
+-#define ECHONESTTAGS_H
+-
+-#include <memory>
+-
+-#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<Request> RequestPtr;
+-
+-  QMap<QNetworkReply*, RequestPtr> requests_;
+-};
+-
+-#endif  // ECHONESTTAGS_H
+--- Clementine-1.3.1/src/songinfo/songkickconcerts.cpp
++++ Clementine-1.3.1/src/songinfo/songkickconcerts.cpp
+@@ -21,9 +21,6 @@
+ #include <QVBoxLayout>
+ #include <QXmlStreamWriter>
+ 
+-#include <echonest/Artist.h>
+-#include <echonest/TypeInformation.h>
+-
+ #include <qjson/parser.h>
+ 
+ #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;
+-      }
+-    }
+-
+-    if (songkick_id.isEmpty()) {
+-      qLog(Debug) << "Failed to fetch songkick foreign id for artist";
+-      emit Finished(id);
+-      return;
+-    }
+-
+-    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();
++
++  QJson::Parser parser;
++  QVariantMap json = parser.parse(reply).toMap();
++
++  QVariantMap results_page = json["resultsPage"].toMap();
++  QVariantMap results = results_page["results"].toMap();
++  QVariantList artists = results["artist"].toList();
++
++  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,
+--- Clementine-1.3.1/src/songinfo/songkickconcerts.h
++++ Clementine-1.3.1/src/songinfo/songkickconcerts.h
+@@ -44,9 +44,6 @@
+ 
+   NetworkAccessManager network_;
+   Geolocator::LatLng latlng_;
+-
+-  static const char* kSongkickArtistBucket;
+-  static const char* kSongkickArtistCalendarUrl;
+ };
+ 
+ #endif

Reply via email to