From 435d5fdb52747acb507a0cbc1fec3778110e0a37 Mon Sep 17 00:00:00 2001 From: Alexander Golubev Date: Tue, 27 Dec 2016 01:23:30 +0300 Subject: 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 --- .../files/clementine-1.3.1-chromaprint14.patch | 41 ++ .../clementine-1.3.1-libechonest_removal.patch | 701 +++++++++++++++++++++ .../files/clementine-chromaprint14.patch | 41 -- 3 files changed, 742 insertions(+), 41 deletions(-) create mode 100644 media-sound/clementine/files/clementine-1.3.1-chromaprint14.patch create mode 100644 media-sound/clementine/files/clementine-1.3.1-libechonest_removal.patch delete mode 100644 media-sound/clementine/files/clementine-chromaprint14.patch (limited to 'media-sound/clementine/files') diff --git a/media-sound/clementine/files/clementine-1.3.1-chromaprint14.patch b/media-sound/clementine/files/clementine-1.3.1-chromaprint14.patch new file mode 100644 index 000000000000..bfdc49265aa3 --- /dev/null +++ b/media-sound/clementine/files/clementine-1.3.1-chromaprint14.patch @@ -0,0 +1,41 @@ +From ded312685735fc266d4154d355286eeb86db3bcd Mon Sep 17 00:00:00 2001 +From: Chocobozzz +Date: Thu, 8 Dec 2016 23:12:17 +0100 +Subject: [PATCH] Add compatibility with chromaprint >= 1.4 + +--- + src/musicbrainz/chromaprinter.cpp | 14 +++++++++++--- + 1 file changed, 11 insertions(+), 3 deletions(-) + +diff --git a/src/musicbrainz/chromaprinter.cpp b/src/musicbrainz/chromaprinter.cpp +index 9579b62..c7ad99e 100644 +--- a/src/musicbrainz/chromaprinter.cpp ++++ b/src/musicbrainz/chromaprinter.cpp +@@ -143,16 +143,24 @@ QString Chromaprinter::CreateFingerprint() { + ChromaprintContext* chromaprint = + chromaprint_new(CHROMAPRINT_ALGORITHM_DEFAULT); + chromaprint_start(chromaprint, kDecodeRate, kDecodeChannels); +- chromaprint_feed(chromaprint, reinterpret_cast(data.data()), ++ chromaprint_feed(chromaprint, reinterpret_cast(data.data()), + data.size() / 2); + chromaprint_finish(chromaprint); + +- void* fprint = nullptr; + int size = 0; ++ ++#if CHROMAPRINT_VERSION_MAJOR >= 1 && CHROMAPRINT_VERSION_MINOR >= 4 ++ u_int32_t *fprint = nullptr; ++ char *encoded = nullptr; ++#else ++ void *fprint = nullptr; ++ void *encoded = nullptr; ++#endif ++ + int ret = chromaprint_get_raw_fingerprint(chromaprint, &fprint, &size); ++ + QByteArray fingerprint; + if (ret == 1) { +- void* encoded = nullptr; + int encoded_size = 0; + chromaprint_encode_fingerprint(fprint, size, CHROMAPRINT_ALGORITHM_DEFAULT, + &encoded, &encoded_size, 1); 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 000000000000..63eb096d84d0 --- /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 +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 + #include + +-#include +- + #ifdef Q_OS_DARWIN + #include + #include +@@ -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 +- +- 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_); +-} +--- 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 +- +- 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 +--- 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 +- +- 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); +-} +--- 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 +- +- 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 +--- 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 +- +- 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_); +-} +--- 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 +- +- 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 +--- Clementine-1.3.1/src/songinfo/songkickconcerts.cpp ++++ Clementine-1.3.1/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; +- } +- } +- +- 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 diff --git a/media-sound/clementine/files/clementine-chromaprint14.patch b/media-sound/clementine/files/clementine-chromaprint14.patch deleted file mode 100644 index bfdc49265aa3..000000000000 --- a/media-sound/clementine/files/clementine-chromaprint14.patch +++ /dev/null @@ -1,41 +0,0 @@ -From ded312685735fc266d4154d355286eeb86db3bcd Mon Sep 17 00:00:00 2001 -From: Chocobozzz -Date: Thu, 8 Dec 2016 23:12:17 +0100 -Subject: [PATCH] Add compatibility with chromaprint >= 1.4 - ---- - src/musicbrainz/chromaprinter.cpp | 14 +++++++++++--- - 1 file changed, 11 insertions(+), 3 deletions(-) - -diff --git a/src/musicbrainz/chromaprinter.cpp b/src/musicbrainz/chromaprinter.cpp -index 9579b62..c7ad99e 100644 ---- a/src/musicbrainz/chromaprinter.cpp -+++ b/src/musicbrainz/chromaprinter.cpp -@@ -143,16 +143,24 @@ QString Chromaprinter::CreateFingerprint() { - ChromaprintContext* chromaprint = - chromaprint_new(CHROMAPRINT_ALGORITHM_DEFAULT); - chromaprint_start(chromaprint, kDecodeRate, kDecodeChannels); -- chromaprint_feed(chromaprint, reinterpret_cast(data.data()), -+ chromaprint_feed(chromaprint, reinterpret_cast(data.data()), - data.size() / 2); - chromaprint_finish(chromaprint); - -- void* fprint = nullptr; - int size = 0; -+ -+#if CHROMAPRINT_VERSION_MAJOR >= 1 && CHROMAPRINT_VERSION_MINOR >= 4 -+ u_int32_t *fprint = nullptr; -+ char *encoded = nullptr; -+#else -+ void *fprint = nullptr; -+ void *encoded = nullptr; -+#endif -+ - int ret = chromaprint_get_raw_fingerprint(chromaprint, &fprint, &size); -+ - QByteArray fingerprint; - if (ret == 1) { -- void* encoded = nullptr; - int encoded_size = 0; - chromaprint_encode_fingerprint(fprint, size, CHROMAPRINT_ALGORITHM_DEFAULT, - &encoded, &encoded_size, 1); -- cgit v1.2.3-65-gdbad