diff options
Diffstat (limited to 'libre/clementine')
-rw-r--r-- | libre/clementine/PKGBUILD | 57 | ||||
-rw-r--r-- | libre/clementine/clementine-gcc5.1.patch | 23 | ||||
-rw-r--r-- | libre/clementine/clementine-udisks-namespace.patch | 38 | ||||
-rw-r--r-- | libre/clementine/remove-nonfree-artwork-and-spotify.patch | 757 |
4 files changed, 546 insertions, 329 deletions
diff --git a/libre/clementine/PKGBUILD b/libre/clementine/PKGBUILD index 68db00139..1082bbbb9 100644 --- a/libre/clementine/PKGBUILD +++ b/libre/clementine/PKGBUILD @@ -1,4 +1,4 @@ -# $Id: PKGBUILD 163295 2016-02-24 12:02:19Z alucryd $ +# $Id: PKGBUILD 171170 2016-04-16 09:31:33Z alucryd $ # Maintainer (Arch): Maxime Gauduin <alucryd@archlinux.org> # Contributor (Arch): Stéphane Gaudreault <stephane@archlinux.org> # Contributor (Arch): BlackEagle <ike.devolder@gmail.com> @@ -9,36 +9,34 @@ pkgname=clementine _pkgname=$pkgname-libre -pkgver=1.2.3 -pkgrel=10.parabola1 +pkgver=1.3 +pkgrel=1.parabola1 pkgdesc='A modern music player and library organizer, without nonfree artwork and Spotify support' url="http://www.$pkgname-player.org/" license=('GPL') arch=('i686' 'x86_64') replaces=("$_pkgname") conflicts=("$_pkgname") -depends=('chromaprint' 'glew' 'gstreamer0.10-base' 'libcdio' 'libgpod' - 'liblastfm' 'libmtp' 'libmygpo-qt' 'protobuf' 'qca-qt4' 'taglib') -makedepends=('cmake' 'boost' 'mesa' 'sparsehash') -optdepends=('gstreamer0.10-base-plugins: "Base" plugin libraries' - 'gstreamer0.10-good-plugins: "Good" plugin libraries' - 'gstreamer0.10-bad-plugins: "Bad" plugin libraries' - 'gstreamer0.10-ugly-plugins: "Ugly" plugin libraries' - 'gstreamer0.10-ffmpeg: FFmpeg plugin' +depends=('chromaprint' 'crypto++' 'fftw' 'gcc-libs' 'glew' 'glib2' 'glibc' + 'gst-plugins-base-libs' 'gstreamer' 'libcdio' 'libechonest' 'libgl' + 'libgpod' 'liblastfm' 'libmtp' 'libpulse' 'libx11' 'protobuf' 'qjson' + 'qt4' 'sqlite' 'taglib' 'zlib') +makedepends=('boost' 'cmake' 'mesa' 'sparsehash') +optdepends=('gst-plugins-base: "Base" plugin libraries' + 'gst-plugins-good: "Good" plugin libraries' + 'gst-plugins-bad: "Bad" plugin libraries' + 'gst-plugins-ugly: "Ugly" plugin libraries' + 'gst-libav: Libav plugin' 'gvfs: Various devices support') install="${pkgname}.install" mksource=("${pkgname}-${pkgver}.tar.gz::https://github.com/$pkgname-player/${pkgname^}/archive/${pkgver}.tar.gz") source=("https://repo.parabola.nu/other/${_pkgname}/${_pkgname}-${pkgver}.tar.gz" 'remove-nonfree-artwork-and-spotify.patch' - 'moognu.png' - "${pkgname}-gcc5.1.patch" - "${pkgname}-udisks-namespace.patch") -mksha256sums=('7df5650445a005c09f5f0e1a1b0d077037c37ecbe4ee77baf9d45f121308a1bf') -sha256sums=('30fde23dde610b610d2172e94e4bd87f4a86afaeb4d9b6c8a5be8cbab0502eea' - '48bfbf42c84ac1891021638627c10780194fcc59eda1c69e157be3aebe8ee10b' - 'c6918617769152f3617c61f721819e69d03f671b85760b11cfe45abd53955bc4' - 'b03c190b881520c3233ed8f5804b518e9e699c6f773ab227f36133f422b786e1' - 'a7c2764576cee303a57e4efe6a5dbd583a66de8a15aee738bd92d4bb21786008') + 'moognu.png') +mksha256sums=('55e8d283ed02e3f2376a88b012cd2003e00fef95a98b6a919d67cb57e96b8617') +sha256sums=('d036d4ff71bff71baf941e5f3302a5a72a2665a04252d02f2ded5b1ecd0bb880' + '8df85540364e62b1b12c818958e83eb079bc203f9ab2a542c97410c7a74aa360' + 'c6918617769152f3617c61f721819e69d03f671b85760b11cfe45abd53955bc4') mksource() { cd ${pkgname^}-${pkgver} @@ -58,9 +56,11 @@ prepare() { rm -rv ext/{$pkgname-spotifyblob,lib${pkgname}-spotifyblob} # remove Spotify files - rm -v cmake/SpotifyVersion.cmake - rm -v data/spotify-attribution.png rm -v data/icons/svg/spotify.svg + rm -v data/providers/{22x22,32x32,48x48}/spotify.png + rm -v data/spotify-attribution.png + rm -v data/clementine-spotify-public.pem + rm -v cmake/SpotifyVersion.cmake rm -v data/schema/schema-30.sql rm -v src/{globalsearch/spotifysearchprovider.{cpp,h},internet/spotify{blobdownloader.{cpp,h},server.{cpp,h},service.{cpp,h},settingspage.{cpp,h,ui}}} @@ -71,17 +71,14 @@ prepare() { # create a blank file because it's a dependency for Clementine touch data/schema/schema-30.sql - patch -Np1 -i ../clementine-gcc5.1.patch - patch -Np1 -i ../clementine-udisks-namespace.patch -} - -build() { - cd ${pkgname^}-${pkgver} - if [[ -d build ]]; then rm -rf build fi - mkdir build && cd build + mkdir build +} + +build() { + cd ${pkgname^}-${pkgver}/build cmake .. \ -DCMAKE_BUILD_TYPE='Release' \ diff --git a/libre/clementine/clementine-gcc5.1.patch b/libre/clementine/clementine-gcc5.1.patch deleted file mode 100644 index 4fff0f704..000000000 --- a/libre/clementine/clementine-gcc5.1.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff -rupN Clementine-1.2.3.orig/src/CMakeLists.txt Clementine-1.2.3/src/CMakeLists.txt ---- Clementine-1.2.3.orig/src/CMakeLists.txt 2015-05-30 11:15:10.903093300 +0200 -+++ Clementine-1.2.3/src/CMakeLists.txt 2015-05-30 11:15:34.801955100 +0200 -@@ -1,6 +1,6 @@ - - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") --set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -Wall -Wno-sign-compare -Wno-deprecated-declarations -Wno-unused-local-typedefs -Wno-unused-private-field -Wno-unknown-warning-option --std=c++0x -U__STRICT_ANSI__") -+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Woverloaded-virtual -Wall -Wno-sign-compare -Wno-deprecated-declarations -Wno-unused-local-typedefs --std=c++0x -U__STRICT_ANSI__") - - option(BUILD_WERROR "Build with -Werror" ON) - -diff -rupN Clementine-1.2.3.orig/src/ui/mainwindow.cpp Clementine-1.2.3/src/ui/mainwindow.cpp ---- Clementine-1.2.3.orig/src/ui/mainwindow.cpp 2015-05-30 11:15:10.867894300 +0200 -+++ Clementine-1.2.3/src/ui/mainwindow.cpp 2015-05-30 11:15:54.578517000 +0200 -@@ -911,7 +911,7 @@ void MainWindow::ScrobblingEnabledChange - if (ui_->action_toggle_scrobbling->isVisible()) - SetToggleScrobblingIcon(value); - -- if (!app_->player()->GetState() == Engine::Idle) { -+ if (app_->player()->GetState() != Engine::Idle) { - return; - } - else { diff --git a/libre/clementine/clementine-udisks-namespace.patch b/libre/clementine/clementine-udisks-namespace.patch deleted file mode 100644 index e74889e78..000000000 --- a/libre/clementine/clementine-udisks-namespace.patch +++ /dev/null @@ -1,38 +0,0 @@ -From ec580cb815c16ec1ab43a469d5af7d51d8d03082 Mon Sep 17 00:00:00 2001 -From: Chocobozzz <florian.chocobo@gmail.com> -Date: Wed, 16 Jul 2014 15:57:25 +0200 -Subject: [PATCH] No namespaces for DBus interfaces. Fixes #4401 - ---- - src/CMakeLists.txt | 9 ++++----- - 1 file changed, 4 insertions(+), 5 deletions(-) - -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index 650fa74..775b0a5 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -892,11 +892,6 @@ optional_source(LINUX SOURCES widgets/osd_x11.cpp) - if(HAVE_DBUS) - file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dbus) - -- # Hack to get it to generate interfaces without namespaces - required -- # because otherwise org::freedesktop::UDisks and -- # org::freedesktop::UDisks::Device conflict. -- list(APPEND QT_DBUSXML2CPP_EXECUTABLE -N) -- - # MPRIS DBUS interfaces - qt4_add_dbus_adaptor(SOURCES - dbus/org.freedesktop.MediaPlayer.player.xml -@@ -964,6 +959,10 @@ if(HAVE_DBUS) - - # DeviceKit DBUS interfaces - if(HAVE_DEVICEKIT) -+ set_source_files_properties(dbus/org.freedesktop.UDisks.xml -+ PROPERTIES NO_NAMESPACE dbus/udisks) -+ set_source_files_properties(dbus/org.freedesktop.UDisks.Device.xml -+ PROPERTIES NO_NAMESPACE dbus/udisksdevice) - qt4_add_dbus_interface(SOURCES - dbus/org.freedesktop.UDisks.xml - dbus/udisks) --- -2.0.3 diff --git a/libre/clementine/remove-nonfree-artwork-and-spotify.patch b/libre/clementine/remove-nonfree-artwork-and-spotify.patch index 8c1b9aafd..76b875e11 100644 --- a/libre/clementine/remove-nonfree-artwork-and-spotify.patch +++ b/libre/clementine/remove-nonfree-artwork-and-spotify.patch @@ -11,27 +11,27 @@ index a349f59..c418e0b 100644 @"com.apple.QuickTimePlayerX", @"com.apple.quicktimeplayer", diff --git a/CMakeLists.txt b/CMakeLists.txt -index 47f1693..986351b 100644 +index 23070d9..f2c8b72 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt -@@ -7,7 +7,6 @@ include(cmake/Summary.cmake) +@@ -7,7 +7,6 @@ include(cmake/C++11Compat.cmake) + include(cmake/Summary.cmake) include(cmake/Version.cmake) include(cmake/Deb.cmake) - include(cmake/Rpm.cmake) -include(cmake/SpotifyVersion.cmake) include(cmake/OptionalSource.cmake) + include(cmake/Format.cmake) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) - -@@ -78,7 +77,6 @@ pkg_check_modules(LIBMYGPO_QT libmygpo-qt>=1.0.7) +@@ -74,7 +73,6 @@ pkg_check_modules(LIBMYGPO_QT libmygpo-qt>=1.0.9) + pkg_check_modules(LIBPULSE libpulse) pkg_check_modules(LIBXML libxml-2.0) - pkg_check_modules(QCA qca2) pkg_check_modules(QJSON REQUIRED QJson) -pkg_check_modules(SPOTIFY libspotify>=12.1.45) pkg_check_modules(TAGLIB REQUIRED taglib>=1.6) if (WIN32) -@@ -124,13 +122,6 @@ if (APPLE) - find_library(GROWL Growl) +@@ -117,13 +115,6 @@ endif() + if (APPLE) find_library(SPARKLE Sparkle) - find_library(SPOTIFY libspotify) @@ -44,30 +44,34 @@ index 47f1693..986351b 100644 add_subdirectory(3rdparty/SPMediaKeyTap) set(SPMEDIAKEYTAP_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/SPMediaKeyTap) set(SPMEDIAKEYTAP_LIBRARIES SPMediaKeyTap) -@@ -254,7 +245,7 @@ optional_component(DEVICEKIT ON "Devices: DeviceKit backend" +@@ -254,11 +245,6 @@ optional_component(DEVICEKIT ON "Devices: DeviceKit backend" DEPENDS "D-Bus support" HAVE_DBUS ) -optional_component(SPOTIFY_BLOB ON "Spotify support: non-GPL binary helper" -+optional_component(SPOTIFY_BLOB OFF "Spotify support: non-GPL binary helper" - DEPENDS "protobuf" PROTOBUF_FOUND PROTOBUF_PROTOC_EXECUTABLE - DEPENDS "libspotify" SPOTIFY_FOUND +- DEPENDS "protobuf" PROTOBUF_FOUND PROTOBUF_PROTOC_EXECUTABLE +- DEPENDS "libspotify" SPOTIFY_FOUND +-) +- + optional_component(MOODBAR ON "Moodbar support" + DEPENDS "fftw3" FFTW3_FOUND ) -@@ -270,13 +261,6 @@ optional_component(SPARKLE ON "Sparkle integration" +@@ -274,14 +260,6 @@ optional_component(LIBPULSE ON "Pulse audio integration" optional_component(VISUALISATIONS ON "Visualisations") --if(NOT HAVE_SPOTIFY_BLOB AND NOT QCA_FOUND) -- message(FATAL_ERROR "Either QCA must be available or the non-GPL Spotify " +-if(NOT HAVE_SPOTIFY_BLOB AND NOT CRYPTOPP_FOUND) +- message(FATAL_ERROR "Either crypto++ must be available or the non-GPL Spotify " - "code must be compiled in") --elseif(QCA_FOUND) +-elseif(CRYPTOPP_FOUND) +- set(HAVE_CRYPTOPP ON) - set(HAVE_SPOTIFY_DOWNLOADER ON) -endif() - # Find DBus if it's enabled if (HAVE_DBUS) find_package(Qt4 REQUIRED QtDbus) -@@ -440,7 +424,6 @@ add_subdirectory(ext/libclementine-common) +@@ -422,7 +400,6 @@ add_subdirectory(ext/libclementine-common) add_subdirectory(ext/libclementine-tagreader) add_subdirectory(ext/clementine-tagreader) add_subdirectory(ext/libclementine-remote) @@ -75,7 +79,7 @@ index 47f1693..986351b 100644 option(WITH_DEBIAN OFF) if(WITH_DEBIAN) -@@ -451,10 +434,6 @@ if(HAVE_BREAKPAD) +@@ -433,10 +410,6 @@ if(HAVE_BREAKPAD) add_subdirectory(3rdparty/google-breakpad) endif(HAVE_BREAKPAD) @@ -87,42 +91,18 @@ index 47f1693..986351b 100644 add_subdirectory(gst/moodbar) endif() diff --git a/data/data.qrc b/data/data.qrc -index 4c5473f..bd5fe2d 100644 +index 694eaad..caecc30 100644 --- a/data/data.qrc +++ b/data/data.qrc -@@ -2,7 +2,6 @@ - <qresource prefix="/"> +@@ -3,7 +3,6 @@ + <file>Equifax_Secure_Certificate_Authority.pem</file> <file>blank.ttf</file> <file>clementine_remote_qr.png</file> - <file>clementine-spotify-public.pem</file> <file>currenttrack_bar_left.png</file> <file>currenttrack_bar_mid.png</file> <file>currenttrack_bar_right.png</file> -@@ -77,7 +76,6 @@ - <file>icons/22x22/phone-nokia-n900.png</file> - <file>icons/22x22/phone-palm-pre.png</file> - <file>icons/22x22/phone.png</file> -- <file>icons/22x22/spotify.png</file> - <file>icons/22x22/user-away.png</file> - <file>icons/22x22/view-choose.png</file> - <file>icons/22x22/view-fullscreen.png</file> -@@ -154,7 +152,6 @@ - <file>icons/32x32/phone-palm-pre.png</file> - <file>icons/32x32/phone.png</file> - <file>icons/32x32/search.png</file> -- <file>icons/32x32/spotify.png</file> - <file>icons/32x32/tools-wizard.png</file> - <file>icons/32x32/view-choose.png</file> - <file>icons/32x32/view-fullscreen.png</file> -@@ -230,7 +227,6 @@ - <file>icons/48x48/phone-nokia-n900.png</file> - <file>icons/48x48/phone-palm-pre.png</file> - <file>icons/48x48/phone.png</file> -- <file>icons/48x48/spotify.png</file> - <file>icons/48x48/view-choose.png</file> - <file>icons/48x48/view-fullscreen.png</file> - <file>icons/48x48/view-media-equalizer.png</file> -@@ -262,10 +258,10 @@ +@@ -280,10 +279,10 @@ <file>lumberjacksong.txt</file> <file>lyrics/ultimate_providers.xml</file> <file>mainwindow.css</file> @@ -134,19 +114,56 @@ index 4c5473f..bd5fe2d 100644 <file>oauthsuccess.html</file> <file>osd_background.png</file> <file>osd_shadow_corner.png</file> -@@ -391,7 +387,6 @@ - <file>smartplaylistsearchterm.css</file> +@@ -350,7 +349,6 @@ + <file>providers/22x22/somafm.png</file> + <file>providers/22x22/songkick.png</file> + <file>providers/22x22/soundcloud.png</file> +- <file>providers/22x22/spotify.png</file> + <file>providers/22x22/subsonic.png</file> + <file>providers/22x22/vk.png</file> + <file>providers/22x22/wikipedia.png</file> +@@ -382,7 +380,6 @@ + <file>providers/32x32/somafm.png</file> + <file>providers/32x32/songkick.png</file> + <file>providers/32x32/soundcloud.png</file> +- <file>providers/32x32/spotify.png</file> + <file>providers/32x32/subsonic.png</file> + <file>providers/32x32/vk.png</file> + <file>providers/32x32/wikipedia.png</file> +@@ -414,7 +411,6 @@ + <file>providers/48x48/somafm.png</file> + <file>providers/48x48/songkick.png</file> + <file>providers/48x48/soundcloud.png</file> +- <file>providers/48x48/spotify.png</file> + <file>providers/48x48/subsonic.png</file> + <file>providers/48x48/vk.png</file> + <file>providers/48x48/wikipedia.png</file> +@@ -478,7 +474,6 @@ <file>songinfo.css</file> + <file>soundcloud-ca.pem</file> <file>spinner.gif</file> - <file>spotify-attribution.png</file> <file>star-off.png</file> <file>star-on.png</file> <file>tiny-pause.png</file> +diff --git a/dist/codesign.py b/dist/codesign.py +index 7c111fd..fee7345 100755 +--- a/dist/codesign.py ++++ b/dist/codesign.py +@@ -33,7 +33,7 @@ def main(): + for file in files: + if re.search(r'\.(dylib|so)$', file): + SignPath(os.path.join(root, file), developer_id) +- elif re.match(r'(clementine-spotifyblob|clementine-tagreader|gst-plugin-scanner)', file): ++ elif re.match(r'(clementine-tagreader|gst-plugin-scanner)', file): + SignPath(os.path.join(root, file), developer_id) + + SignPath(app_bundle, developer_id, deep=False) diff --git a/dist/macdeploy.py b/dist/macdeploy.py -index e054619..3568a6f 100755 +index 5d83c2e..f4d7d33 100755 --- a/dist/macdeploy.py +++ b/dist/macdeploy.py -@@ -398,10 +398,7 @@ def main(): +@@ -435,10 +435,7 @@ def main(): FixPlugin(FindGioModule('libgiolibproxy.so'), 'gio-modules') try: @@ -158,10 +175,10 @@ index e054619..3568a6f 100755 for plugin in QT_PLUGINS: FixPlugin(FindQtPlugin(plugin), os.path.dirname(plugin)) diff --git a/dist/windows/clementine.nsi.in b/dist/windows/clementine.nsi.in -index 750b332..6bf47ff 100644 +index 10ba0ff..2e1eba6 100644 --- a/dist/windows/clementine.nsi.in +++ b/dist/windows/clementine.nsi.in -@@ -97,9 +97,6 @@ Section "Delete old files" oldfiles +@@ -187,9 +187,6 @@ Section "Delete old files" oldfiles Delete "$INSTDIR\gstreamer-plugins\libgstqueue2.dll" Delete "$INSTDIR\gstreamer-plugins\libgstsoup.dll" @@ -171,40 +188,40 @@ index 750b332..6bf47ff 100644 ; 1.0 Delete "$INSTDIR\libofa.dll" Delete "$INSTDIR\gstreamer-plugins\libgstofa.dll" -@@ -128,7 +125,6 @@ Section "Clementine" Clementine - File "avutil-51.dll" +@@ -260,7 +257,6 @@ Section "Clementine" Clementine + File "clementine.exe" File "clementine-tagreader.exe" - File "clementine-spotifyblob.exe" File "clementine.ico" File "glew32.dll" - File "intl.dll" -@@ -181,7 +177,6 @@ Section "Clementine" Clementine + File "libcdio-16.dll" +@@ -314,7 +310,6 @@ Section "Clementine" Clementine + File "libprotobuf-8.dll" File "libqjson.dll" - File "libsoup-2.4-1.dll" File "libspeex-1.dll" - File "libspotify.dll" + File "libsqlite3-0.dll" File "libstdc++-6.dll" File "libtag.dll" - File "libtasn1-3.dll" -@@ -939,7 +934,6 @@ Section "Uninstall" +@@ -1073,7 +1068,6 @@ Section "Uninstall" Delete "$INSTDIR\clementine.ico" Delete "$INSTDIR\clementine.exe" Delete "$INSTDIR\clementine-tagreader.exe" - Delete "$INSTDIR\clementine-spotifyblob.exe" Delete "$INSTDIR\glew32.dll" - Delete "$INSTDIR\intl.dll" - Delete "$INSTDIR\libcdio-14.dll" -@@ -992,7 +986,6 @@ Section "Uninstall" + Delete "$INSTDIR\libcdio-16.dll" + Delete "$INSTDIR\libchromaprint.dll" +@@ -1126,7 +1120,6 @@ Section "Uninstall" + Delete "$INSTDIR\libprotobuf-8.dll" Delete "$INSTDIR\libqjson.dll" - Delete "$INSTDIR\libsoup-2.4-1.dll" Delete "$INSTDIR\libspeex-1.dll" - Delete "$INSTDIR\libspotify.dll" Delete "$INSTDIR\libstdc++-6.dll" Delete "$INSTDIR\libtag.dll" - Delete "$INSTDIR\libtasn1-3.dll" + Delete "$INSTDIR\libtasn1-6.dll" diff --git a/ext/libclementine-common/core/logging.cpp b/ext/libclementine-common/core/logging.cpp -index 3c53d7a..49dd8cf 100644 +index ec8faa2..f76f034 100644 --- a/ext/libclementine-common/core/logging.cpp +++ b/ext/libclementine-common/core/logging.cpp @@ -14,10 +14,6 @@ @@ -219,10 +236,10 @@ index 3c53d7a..49dd8cf 100644 #include <cxxabi.h> diff --git a/ext/libclementine-common/core/logging.h b/ext/libclementine-common/core/logging.h -index 3c582cf..4a3cea8 100644 +index 21eebdf..68232ca 100644 --- a/ext/libclementine-common/core/logging.h +++ b/ext/libclementine-common/core/logging.h -@@ -14,11 +14,6 @@ +@@ -14,10 +14,6 @@ limitations under the License. */ @@ -230,15 +247,59 @@ index 3c582cf..4a3cea8 100644 -// it is used by the Spotify blob which links against libspotify and is not GPL -// compatible. - -- #ifndef LOGGING_H #define LOGGING_H +diff --git a/ext/libclementine-common/core/messagehandler.cpp b/ext/libclementine-common/core/messagehandler.cpp +index 1ea6492..5c4e79a 100644 +--- a/ext/libclementine-common/core/messagehandler.cpp ++++ b/ext/libclementine-common/core/messagehandler.cpp +@@ -14,10 +14,6 @@ + limitations under the License. + */ + +-// Note: this file is licensed under the Apache License instead of GPL because +-// it is used by the Spotify blob which links against libspotify and is not GPL +-// compatible. +- + #include "messagehandler.h" + #include "core/logging.h" + +diff --git a/ext/libclementine-common/core/messagehandler.h b/ext/libclementine-common/core/messagehandler.h +index 5a7f8f2..7df58df 100644 +--- a/ext/libclementine-common/core/messagehandler.h ++++ b/ext/libclementine-common/core/messagehandler.h +@@ -14,10 +14,6 @@ + limitations under the License. + */ + +-// Note: this file is licensed under the Apache License instead of GPL because +-// it is used by the Spotify blob which links against libspotify and is not GPL +-// compatible. +- + #ifndef MESSAGEHANDLER_H + #define MESSAGEHANDLER_H + +diff --git a/ext/libclementine-common/core/override.h b/ext/libclementine-common/core/override.h +index 98c2764..ca37137 100644 +--- a/ext/libclementine-common/core/override.h ++++ b/ext/libclementine-common/core/override.h +@@ -14,10 +14,6 @@ + limitations under the License. + */ + +-// Note: this file is licensed under the Apache License instead of GPL because +-// it is used by the Spotify blob which links against libspotify and is not GPL +-// compatible. +- + #ifndef OVERRIDE_H + #define OVERRIDE_H + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index 1104542..e7a8032 100644 +index afe58b9..125dd75 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt -@@ -60,8 +60,6 @@ include_directories(${CMAKE_SOURCE_DIR}/ext/libclementine-tagreader) +@@ -56,8 +56,6 @@ include_directories(${CMAKE_SOURCE_DIR}/ext/libclementine-tagreader) include_directories(${CMAKE_BINARY_DIR}/ext/libclementine-tagreader) include_directories(${CMAKE_SOURCE_DIR}/ext/libclementine-remote) include_directories(${CMAKE_BINARY_DIR}/ext/libclementine-remote) @@ -247,7 +308,7 @@ index 1104542..e7a8032 100644 cmake_policy(SET CMP0011 NEW) include(../cmake/ParseArguments.cmake) -@@ -157,7 +155,6 @@ set(SOURCES +@@ -154,7 +152,6 @@ set(SOURCES globalsearch/simplesearchprovider.cpp globalsearch/somafmsearchprovider.cpp globalsearch/soundcloudsearchprovider.cpp @@ -255,16 +316,16 @@ index 1104542..e7a8032 100644 globalsearch/suggestionwidget.cpp globalsearch/urlsearchprovider.cpp -@@ -195,9 +192,6 @@ set(SOURCES - internet/somafmservice.cpp - internet/somafmurlhandler.cpp - internet/soundcloudservice.cpp -- internet/spotifyserver.cpp -- internet/spotifyservice.cpp -- internet/spotifysettingspage.cpp - internet/subsonicservice.cpp - internet/subsonicsettingspage.cpp - internet/subsonicurlhandler.cpp +@@ -191,9 +188,6 @@ set(SOURCES + internet/somafm/somafmurlhandler.cpp + internet/soundcloud/soundcloudservice.cpp + internet/soundcloud/soundcloudsettingspage.cpp +- internet/spotify/spotifyserver.cpp +- internet/spotify/spotifyservice.cpp +- internet/spotify/spotifysettingspage.cpp + internet/subsonic/subsonicservice.cpp + internet/subsonic/subsonicsettingspage.cpp + internet/subsonic/subsonicurlhandler.cpp @@ -461,7 +455,6 @@ set(HEADERS globalsearch/searchprovider.h globalsearch/simplesearchprovider.h @@ -272,42 +333,42 @@ index 1104542..e7a8032 100644 - globalsearch/spotifysearchprovider.h globalsearch/suggestionwidget.h - internet/cloudfileservice.h + internet/core/cloudfileservice.h @@ -494,9 +487,6 @@ set(HEADERS - internet/somafmservice.h - internet/somafmurlhandler.h - internet/soundcloudservice.h -- internet/spotifyserver.h -- internet/spotifyservice.h -- internet/spotifysettingspage.h - internet/subsonicservice.h - internet/subsonicsettingspage.h - internet/subsonicurlhandler.h -@@ -685,7 +675,6 @@ set(UI - internet/magnatunedownloaddialog.ui - internet/magnatunesettingspage.ui - internet/searchboxwidget.ui -- internet/spotifysettingspage.ui - internet/subsonicsettingspage.ui + internet/somafm/somafmurlhandler.h + internet/soundcloud/soundcloudservice.h + internet/soundcloud/soundcloudsettingspage.h +- internet/spotify/spotifyserver.h +- internet/spotify/spotifyservice.h +- internet/spotify/spotifysettingspage.h + internet/subsonic/subsonicservice.h + internet/subsonic/subsonicsettingspage.h + internet/subsonic/subsonicurlhandler.h +@@ -692,7 +682,6 @@ set(UI + internet/magnatune/magnatunesettingspage.ui + internet/core/searchboxwidget.ui + internet/soundcloud/soundcloudsettingspage.ui +- internet/spotify/spotifysettingspage.ui + internet/subsonic/subsonicsettingspage.ui library/groupbydialog.ui -@@ -836,15 +825,6 @@ optional_source(HAVE_LIBLASTFM +@@ -839,15 +828,6 @@ optional_source(HAVE_LIBLASTFM ) -optional_source(HAVE_SPOTIFY_DOWNLOADER - SOURCES -- internet/spotifyblobdownloader.cpp +- internet/spotify/spotifyblobdownloader.cpp - HEADERS -- internet/spotifyblobdownloader.h +- internet/spotify/spotifyblobdownloader.h - INCLUDE_DIRECTORIES -- ${QCA_INCLUDE_DIRS} +- ${CRYPTOPP_INCLUDE_DIRS} -) - # Platform specific - OS X optional_source(APPLE INCLUDE_DIRECTORIES -@@ -1171,7 +1151,6 @@ add_dependencies(clementine_lib pot) +@@ -1233,7 +1213,6 @@ add_dependencies(clementine_lib pot) target_link_libraries(clementine_lib @@ -315,21 +376,21 @@ index 1104542..e7a8032 100644 libclementine-common libclementine-tagreader libclementine-remote -@@ -1240,13 +1219,6 @@ if(HAVE_BREAKPAD) +@@ -1303,13 +1282,6 @@ if(HAVE_BREAKPAD) endif (LINUX) endif(HAVE_BREAKPAD) -if(HAVE_SPOTIFY_DOWNLOADER) - target_link_libraries(clementine_lib -- ${QCA_LIBRARIES} +- ${CRYPTOPP_LIBRARIES} - ) -- link_directories(${QCA_LIBRARY_DIRS}) +- link_directories(${CRYPTOPP_LIBRARY_DIRS}) -endif(HAVE_SPOTIFY_DOWNLOADER) - - if (APPLE) - target_link_libraries(clementine_lib - ${GROWL} -@@ -1328,16 +1300,6 @@ target_link_libraries(clementine + if(HAVE_LIBPULSE) + target_link_libraries(clementine_lib ${LIBPULSE_LIBRARIES}) + endif() +@@ -1394,16 +1366,6 @@ target_link_libraries(clementine clementine_lib ) @@ -346,51 +407,65 @@ index 1104542..e7a8032 100644 if (APPLE) install(FILES ../dist/clementine.icns DESTINATION "${CMAKE_BINARY_DIR}/clementine.app/Contents/Resources") -diff --git a/src/analyzers/nyancatanalyzer.cpp b/src/analyzers/nyancatanalyzer.cpp -index 39ea101..ab19341 100644 ---- a/src/analyzers/nyancatanalyzer.cpp -+++ b/src/analyzers/nyancatanalyzer.cpp -@@ -23,13 +23,13 @@ - #include <QTimerEvent> - #include <QBrush> - --const char* NyanCatAnalyzer::kName = "Nyanalyzer cat"; -+const char* NyanCatAnalyzer::kName = "MooGNU"; - const float NyanCatAnalyzer::kPixelScale = 0.02f; - - - NyanCatAnalyzer::NyanCatAnalyzer(QWidget* parent) - : Analyzer::Base(parent, 9), -- cat_(":/nyancat.png"), -+ cat_(":/moognu.png"), - timer_id_(startTimer(kFrameIntervalMs)), - frame_(0), - current_buffer_(0), +diff --git a/src/analyzers/rainbowanalyzer.cpp b/src/analyzers/rainbowanalyzer.cpp +index c8aa0cf..e8eec8b 100644 +--- a/src/analyzers/rainbowanalyzer.cpp ++++ b/src/analyzers/rainbowanalyzer.cpp +@@ -40,7 +40,7 @@ const int Rainbow::RainbowAnalyzer::kRainbowHeight[] = { 21, 16 }; + const int Rainbow::RainbowAnalyzer::kRainbowOverlap[] = { 13, 15 }; + const int Rainbow::RainbowAnalyzer::kSleepingHeight[] = { 24, 33 }; + +-const char* Rainbow::NyanCatAnalyzer::kName = "Nyanalyzer Cat"; ++const char* Rainbow::NyanCatAnalyzer::kName = "MooGNU"; + const char* Rainbow::RainbowDashAnalyzer::kName = "Rainbow Dash"; + const float Rainbow::RainbowAnalyzer::kPixelScale = 0.02f; + +@@ -56,7 +56,7 @@ Rainbow::RainbowAnalyzer::RainbowAnalyzer(const RainbowType& rbtype, QWidget* pa + x_offset_(0), + background_brush_(QColor(0x0f, 0x43, 0x73)) { + rainbowtype = rbtype; +- cat_dash_[0] = QPixmap(":/nyancat.png"); ++ cat_dash_[0] = QPixmap(":/moognu.png"); + cat_dash_[1] = QPixmap(":/rainbowdash.png"); + memset(history_, 0, sizeof(history_)); + +@@ -192,8 +192,8 @@ void Rainbow::RainbowAnalyzer::analyze(QPainter& p, const Analyzer::Scope& s, + // Draw the buffer on to the widget + p.drawPixmap(0, 0, buffer_[current_buffer_], x_offset_, 0, 0, 0); + +- // Draw rainbow analyzer (nyan cat or rainbowdash) +- // Nyan nyan nyan nyan dash dash dash dash. ++ // Draw rainbow analyzer (moo gnu or rainbowdash) ++ // Moo moo moo moo dash dash dash dash. + if (!is_playing_) { + // Ssshhh! + p.drawPixmap(SleepingDestRect(rainbowtype), cat_dash_[rainbowtype], diff --git a/src/config.h.in b/src/config.h.in -index 6cac97e..90e4ee2 100644 +index f22fe9b..92124f5 100644 --- a/src/config.h.in +++ b/src/config.h.in -@@ -39,7 +39,6 @@ - #cmakedefine HAVE_QCA +@@ -40,7 +40,6 @@ + #cmakedefine HAVE_SEAFILE #cmakedefine HAVE_SKYDRIVE #cmakedefine HAVE_SPARKLE -#cmakedefine HAVE_SPOTIFY_DOWNLOADER - #cmakedefine HAVE_STATIC_SQLITE - #cmakedefine HAVE_UBUNTU_ONE + #cmakedefine HAVE_VK #cmakedefine HAVE_WIIMOTEDEV + #cmakedefine TAGLIB_HAS_OPUS diff --git a/src/core/backgroundstreams.cpp b/src/core/backgroundstreams.cpp -index 347b959..b00cb87 100644 +index 2e6ac60..e62504c 100644 --- a/src/core/backgroundstreams.cpp +++ b/src/core/backgroundstreams.cpp -@@ -9,7 +9,6 @@ +@@ -28,8 +28,6 @@ const char* BackgroundStreams::kSettingsGroup = "BackgroundStreams"; const char* BackgroundStreams::kHypnotoadUrl = "hypnotoad:///"; --const char* BackgroundStreams::kRainUrl = "http://data.clementine-player.org/rainymood"; +-const char* BackgroundStreams::kRainUrl = +- "http://data.clementine-player.org/rainymood"; const char* BackgroundStreams::kEnterpriseUrl = "enterprise:///"; BackgroundStreams::BackgroundStreams(EngineBase* engine, QObject* parent) -@@ -28,7 +27,6 @@ void BackgroundStreams::LoadStreams() { +@@ -44,7 +42,6 @@ void BackgroundStreams::LoadStreams() { int version = s.value("version", 0).toInt(); if (version < 1) { AddStream(QT_TR_NOOP("Hypnotoad"), QUrl(kHypnotoadUrl)); @@ -399,10 +474,10 @@ index 347b959..b00cb87 100644 if (version < kVersion) { diff --git a/src/core/timeconstants.h b/src/core/timeconstants.h -index 96242d6..69196bd 100644 +index 67d0227..49020d8 100644 --- a/src/core/timeconstants.h +++ b/src/core/timeconstants.h -@@ -14,10 +14,6 @@ +@@ -16,10 +16,6 @@ limitations under the License. */ @@ -410,16 +485,16 @@ index 96242d6..69196bd 100644 -// it is used by the Spotify blob which links against libspotify and is not GPL -// compatible. - - #ifndef TIMECONSTANTS_H - #define TIMECONSTANTS_H + #ifndef CORE_TIMECONSTANTS_H_ + #define CORE_TIMECONSTANTS_H_ diff --git a/src/core/utilities.cpp b/src/core/utilities.cpp -index 3fdc6be..e6a109f 100644 +index 739cadb..a022a47 100644 --- a/src/core/utilities.cpp +++ b/src/core/utilities.cpp -@@ -340,9 +340,6 @@ QString GetConfigPath(ConfigPath config) { - return QDir::homePath(); - #endif +@@ -368,9 +368,6 @@ QString GetConfigPath(ConfigPath config) { + return QDir::homePath(); + #endif - case Path_LocalSpotifyBlob: - return GetConfigPath(Path_Root) + "/spotifyblob"; @@ -428,40 +503,38 @@ index 3fdc6be..e6a109f 100644 qFatal("%s", Q_FUNC_INFO); return QString::null; diff --git a/src/core/utilities.h b/src/core/utilities.h -index edaa545..ad2138c 100644 +index 5fd8fc1..36ddefe 100644 --- a/src/core/utilities.h +++ b/src/core/utilities.h -@@ -111,7 +111,6 @@ namespace Utilities { - Path_NetworkCache, - Path_GstreamerRegistry, - Path_DefaultMusicLibrary, -- Path_LocalSpotifyBlob, - Path_MoodbarCache, - Path_CacheRoot, - }; +@@ -129,7 +129,6 @@ enum ConfigPath { + Path_NetworkCache, + Path_GstreamerRegistry, + Path_DefaultMusicLibrary, +- Path_LocalSpotifyBlob, + Path_MoodbarCache, + Path_CacheRoot, + }; diff --git a/src/covers/albumcoverloader.cpp b/src/covers/albumcoverloader.cpp -index a4c4241..39dd101 100644 +index 8ebf51c..b4d646b 100644 --- a/src/covers/albumcoverloader.cpp +++ b/src/covers/albumcoverloader.cpp -@@ -30,7 +30,6 @@ +@@ -34,14 +34,12 @@ #include "core/tagreaderclient.h" #include "core/utilities.h" - #include "internet/internetmodel.h" --#include "internet/spotifyservice.h" + #include "internet/core/internetmodel.h" +-#include "internet/spotify/spotifyservice.h" + AlbumCoverLoader::AlbumCoverLoader(QObject* parent) + : QObject(parent), + stop_requested_(false), + next_id_(1), +- network_(new NetworkAccessManager(this)), +- connected_spotify_(false) {} ++ network_(new NetworkAccessManager(this)) - -@@ -38,8 +37,7 @@ AlbumCoverLoader::AlbumCoverLoader(QObject* parent) - : QObject(parent), - stop_requested_(false), - next_id_(1), -- network_(new NetworkAccessManager(this)), -- connected_spotify_(false) -+ network_(new NetworkAccessManager(this)) - { - } - -@@ -169,26 +167,6 @@ AlbumCoverLoader::TryLoadResult AlbumCoverLoader::TryLoadImage( + QString AlbumCoverLoader::ImageCacheDir() { + return Utilities::GetConfigPath(Utilities::Path_AlbumCovers); +@@ -176,26 +174,6 @@ AlbumCoverLoader::TryLoadResult AlbumCoverLoader::TryLoadImage( remote_tasks_.insert(reply, task); return TryLoadResult(true, false, QImage()); @@ -470,8 +543,8 @@ index a4c4241..39dd101 100644 - SpotifyService* spotify = InternetModel::Service<SpotifyService>(); - - if (!connected_spotify_) { -- connect(spotify, SIGNAL(ImageLoaded(QString,QImage)), -- SLOT(SpotifyImageLoaded(QString,QImage))); +- connect(spotify, SIGNAL(ImageLoaded(QString, QImage)), +- SLOT(SpotifyImageLoaded(QString, QImage))); - connected_spotify_ = true; - } - @@ -488,13 +561,13 @@ index a4c4241..39dd101 100644 } QImage image(filename); -@@ -196,16 +174,6 @@ AlbumCoverLoader::TryLoadResult AlbumCoverLoader::TryLoadImage( - image.isNull() ? task.options.default_output_image_: image); +@@ -204,16 +182,6 @@ AlbumCoverLoader::TryLoadResult AlbumCoverLoader::TryLoadImage( + image.isNull() ? task.options.default_output_image_ : image); } --void AlbumCoverLoader::SpotifyImageLoaded(const QString& id, const QImage& image) { -- if (!remote_spotify_tasks_.contains(id)) -- return; +-void AlbumCoverLoader::SpotifyImageLoaded(const QString& id, +- const QImage& image) { +- if (!remote_spotify_tasks_.contains(id)) return; - - Task task = remote_spotify_tasks_.take(id); - QImage scaled = ScaleAndPad(task.options, image); @@ -506,18 +579,18 @@ index a4c4241..39dd101 100644 reply->deleteLater(); diff --git a/src/covers/albumcoverloader.h b/src/covers/albumcoverloader.h -index 987be66..5214e14 100644 +index 4d3e4d5..5de0663 100644 --- a/src/covers/albumcoverloader.h +++ b/src/covers/albumcoverloader.h -@@ -62,7 +62,6 @@ class AlbumCoverLoader : public QObject { +@@ -66,7 +66,6 @@ class AlbumCoverLoader : public QObject { protected slots: void ProcessTasks(); void RemoteFetchFinished(QNetworkReply* reply); - void SpotifyImageLoaded(const QString& url, const QImage& image); protected: - enum State { -@@ -102,13 +101,10 @@ class AlbumCoverLoader : public QObject { + enum State { State_TryingManual, State_TryingAuto, }; +@@ -103,13 +102,10 @@ class AlbumCoverLoader : public QObject { QMutex mutex_; QQueue<Task> tasks_; QMap<QNetworkReply*, Task> remote_tasks_; @@ -532,21 +605,21 @@ index 987be66..5214e14 100644 }; diff --git a/src/engines/gstenginepipeline.cpp b/src/engines/gstenginepipeline.cpp -index 94f77a3..37c1cdf 100644 +index c3fde67..cae00d4 100644 --- a/src/engines/gstenginepipeline.cpp +++ b/src/engines/gstenginepipeline.cpp -@@ -29,8 +29,6 @@ +@@ -34,8 +34,6 @@ #include "core/signalchecker.h" #include "core/utilities.h" - #include "internet/internetmodel.h" --#include "internet/spotifyserver.h" --#include "internet/spotifyservice.h" - + #include "internet/core/internetmodel.h" +-#include "internet/spotify/spotifyserver.h" +-#include "internet/spotify/spotifyservice.h" const int GstEnginePipeline::kGstStateTimeoutNanosecs = 10000000; -@@ -141,37 +139,11 @@ bool GstEnginePipeline::ReplaceDecodeBin(GstElement* new_bin) { + const int GstEnginePipeline::kFaderFudgeMsec = 2000; +@@ -152,44 +150,14 @@ bool GstEnginePipeline::ReplaceDecodeBin(GstElement* new_bin) { bool GstEnginePipeline::ReplaceDecodeBin(const QUrl& url) { - GstElement* new_bin = NULL; + GstElement* new_bin = nullptr; - if (url.scheme() == "spotify") { - new_bin = gst_bin_new("spotify_bin"); @@ -554,13 +627,12 @@ index 94f77a3..37c1cdf 100644 - // Create elements - GstElement* src = engine_->CreateElement("tcpserversrc", new_bin); - GstElement* gdp = engine_->CreateElement("gdpdepay", new_bin); -- if (!src || !gdp) -- return false; +- if (!src || !gdp) return false; - - // Pick a port number - const int port = Utilities::PickUnusedPort(); -- g_object_set(G_OBJECT(src), "host", "127.0.0.1", NULL); -- g_object_set(G_OBJECT(src), "port", port, NULL); +- g_object_set(G_OBJECT(src), "host", "127.0.0.1", nullptr); +- g_object_set(G_OBJECT(src), "port", port, nullptr); - - // Link the elements - gst_element_link(src, gdp); @@ -571,84 +643,293 @@ index 94f77a3..37c1cdf 100644 - gst_object_unref(GST_OBJECT(pad)); - - // Tell spotify to start sending data to us. -- InternetModel::Service<SpotifyService>()->server()->StartPlaybackLater(url.toString(), port); +- SpotifyServer* spotify_server = InternetModel::Service<SpotifyService>()->server(); +- // Need to schedule this in the spotify server's thread +- QMetaObject::invokeMethod(spotify_server, "StartPlayback", +- Qt::QueuedConnection, +- Q_ARG(QString, url.toString()), +- Q_ARG(quint16, port)); - } else { - new_bin = engine_->CreateElement("uridecodebin"); - g_object_set(G_OBJECT(new_bin), "uri", url.toEncoded().constData(), NULL); - CHECKED_GCONNECT(G_OBJECT(new_bin), "drained", &SourceDrainedCallback, this); - CHECKED_GCONNECT(G_OBJECT(new_bin), "pad-added", &NewPadCallback, this); - CHECKED_GCONNECT(G_OBJECT(new_bin), "notify::source", &SourceSetupCallback, this); +- new_bin = engine_->CreateElement("uridecodebin"); +- g_object_set(G_OBJECT(new_bin), "uri", url.toEncoded().constData(), +- nullptr); +- CHECKED_GCONNECT(G_OBJECT(new_bin), "drained", &SourceDrainedCallback, +- this); +- CHECKED_GCONNECT(G_OBJECT(new_bin), "pad-added", &NewPadCallback, this); +- CHECKED_GCONNECT(G_OBJECT(new_bin), "notify::source", &SourceSetupCallback, +- this); - } ++ new_bin = engine_->CreateElement("uridecodebin"); ++ g_object_set(G_OBJECT(new_bin), "uri", url.toEncoded().constData(), ++ nullptr); ++ CHECKED_GCONNECT(G_OBJECT(new_bin), "drained", &SourceDrainedCallback, ++ this); ++ CHECKED_GCONNECT(G_OBJECT(new_bin), "pad-added", &NewPadCallback, this); ++ CHECKED_GCONNECT(G_OBJECT(new_bin), "notify::source", &SourceSetupCallback, ++ this); return ReplaceDecodeBin(new_bin); } -diff --git a/src/internet/internetmodel.cpp b/src/internet/internetmodel.cpp -index 289f591..ac9e3e0 100644 ---- a/src/internet/internetmodel.cpp -+++ b/src/internet/internetmodel.cpp -@@ -30,7 +30,6 @@ - #include "savedradio.h" - #include "somafmservice.h" - #include "soundcloudservice.h" --#include "spotifyservice.h" - #include "subsonicservice.h" +@@ -923,17 +891,6 @@ GstPadProbeReturn GstEnginePipeline::EventHandoffCallback(GstPad*, + void GstEnginePipeline::SourceDrainedCallback(GstURIDecodeBin* bin, + gpointer self) { + GstEnginePipeline* instance = reinterpret_cast<GstEnginePipeline*>(self); +- +- if (instance->has_next_valid_url() && +- // I'm not sure why, but calling this when previous track is a local song +- // and the next track is a Spotify song is buggy: the Spotify song will +- // not start or with some offset. So just do nothing here: when the song +- // finished, EndOfStreamReached/TrackEnded will be emitted anyway so +- // NextItem will be called. +- !(instance->url_.scheme() != "spotify" && +- instance->next_url_.scheme() == "spotify")) { +- instance->TransitionToNext(); +- } + } + + void GstEnginePipeline::SourceSetupCallback(GstURIDecodeBin* bin, +@@ -1032,24 +989,6 @@ GstState GstEnginePipeline::state() const { + } + + QFuture<GstStateChangeReturn> GstEnginePipeline::SetState(GstState state) { +- if (url_.scheme() == "spotify" && !buffering_) { +- const GstState current_state = this->state(); +- +- if (state == GST_STATE_PAUSED && current_state == GST_STATE_PLAYING) { +- SpotifyService* spotify = InternetModel::Service<SpotifyService>(); +- +- // Need to schedule this in the spotify service's thread +- QMetaObject::invokeMethod(spotify, "SetPaused", Qt::QueuedConnection, +- Q_ARG(bool, true)); +- } else if (state == GST_STATE_PLAYING && +- current_state == GST_STATE_PAUSED) { +- SpotifyService* spotify = InternetModel::Service<SpotifyService>(); +- +- // Need to schedule this in the spotify service's thread +- QMetaObject::invokeMethod(spotify, "SetPaused", Qt::QueuedConnection, +- Q_ARG(bool, false)); +- } +- } + return ConcurrentRun::Run<GstStateChangeReturn, GstElement*, GstState>( + &set_state_threadpool_, &gst_element_set_state, pipeline_, state); + } +diff --git a/src/internet/core/internetmodel.cpp b/src/internet/core/internetmodel.cpp +index 597d904..a769489 100644 +--- a/src/internet/core/internetmodel.cpp ++++ b/src/internet/core/internetmodel.cpp +@@ -37,7 +37,6 @@ + #include "internet/internetradio/savedradio.h" + #include "internet/somafm/somafmservice.h" + #include "internet/soundcloud/soundcloudservice.h" +-#include "internet/spotify/spotifyservice.h" + #include "internet/subsonic/subsonicservice.h" #include "core/closure.h" #include "core/logging.h" -@@ -94,7 +93,6 @@ InternetModel::InternetModel(Application* app, QObject* parent) - AddService(new SkyFmService(app, this)); +@@ -97,7 +96,6 @@ InternetModel::InternetModel(Application* app, QObject* parent) + AddService(new RadioTunesService(app, this)); AddService(new SomaFMService(app, this)); AddService(new SoundCloudService(app, this)); - AddService(new SpotifyService(app, this)); AddService(new SubsonicService(app, this)); - #ifdef HAVE_UBUNTU_ONE - AddService(new UbuntuOneService(app, this)); + #ifdef HAVE_BOX + AddService(new BoxService(app, this)); +diff --git a/src/main.cpp b/src/main.cpp +index 1a961c8..515630e 100644 +--- a/src/main.cpp ++++ b/src/main.cpp +@@ -159,13 +159,6 @@ void SetEnv(const char* key, const QString& value) { + #endif + } + +-// This must be done early so that the spotify blob process also picks up +-// these environment variables. +-void SetGstreamerEnvironment() { +- QString scanner_path; +- QString plugin_path; +- QString registry_filename; +- + // On windows and mac we bundle the gstreamer plugins with clementine + #if defined(Q_OS_DARWIN) + scanner_path = +diff --git a/src/playlist/playlistbackend.h b/src/playlist/playlistbackend.h +index f9d347c..320c0fb 100644 +--- a/src/playlist/playlistbackend.h ++++ b/src/playlist/playlistbackend.h +@@ -47,8 +47,6 @@ class PlaylistBackend : public QObject { + QString dynamic_backend; + QByteArray dynamic_data; + +- // Special playlists have different behaviour, eg. the "spotify-search" +- // type has a spotify search box at the top, replacing the ordinary filter. + QString special_type; + }; + typedef QList<Playlist> PlaylistList; +diff --git a/src/playlist/playlistdelegates.cpp b/src/playlist/playlistdelegates.cpp +index 11ffa42..649976a 100644 +--- a/src/playlist/playlistdelegates.cpp ++++ b/src/playlist/playlistdelegates.cpp +@@ -458,9 +458,7 @@ QPixmap SongSourceDelegate::LookupPixmap(const QUrl& url, + if (handler) { + icon = handler->icon(); + } else { +- if (url.scheme() == "spotify") { +- icon = IconLoader::Load("spotify", IconLoader::Provider); +- } else if (url.scheme() == "file") { ++ if (url.scheme() == "file") { + icon = IconLoader::Load("folder-sound", IconLoader::Base); + } else if (url.host() == "api.jamendo.com") { + icon = IconLoader::Load("jamendo", IconLoader::Provider); +diff --git a/src/songinfo/echonestimages.cpp b/src/songinfo/echonestimages.cpp +index ce13645..c3e7e0e 100644 +--- a/src/songinfo/echonestimages.cpp ++++ b/src/songinfo/echonestimages.cpp +@@ -27,11 +27,6 @@ + #include "core/logging.h" + #include "core/network.h" + +-namespace { +-static const char* kSpotifyBucket = "spotify"; +-static const char* kSpotifyArtistUrl = "https://api.spotify.com/v1/artists/%1"; +-} +- + EchoNestImages::EchoNestImages() : network_(new NetworkAccessManager) {} + + EchoNestImages::~EchoNestImages() {} +@@ -48,19 +43,6 @@ void EchoNestImages::FetchInfo(int id, const Song& metadata) { + NewClosure(reply, SIGNAL(finished()), this, + SLOT(RequestFinished(QNetworkReply*, int, Echonest::Artist)), + reply, id, artist); +- +- // Also look up the artist id for the spotify API so we can directly request +- // images from there too. +- Echonest::Artist::SearchParams params; +- params.push_back( +- qMakePair(Echonest::Artist::Name, QVariant(metadata.artist()))); +- QNetworkReply* rosetta_reply = Echonest::Artist::search( +- params, +- Echonest::ArtistInformation(Echonest::ArtistInformation::NoInformation, +- QStringList() << kSpotifyBucket)); +- RegisterReply(rosetta_reply, id); +- NewClosure(rosetta_reply, SIGNAL(finished()), this, +- SLOT(IdsFound(QNetworkReply*, int)), rosetta_reply, id); + } + + void EchoNestImages::RequestFinished(QNetworkReply* reply, int id, +@@ -88,49 +70,12 @@ void EchoNestImages::IdsFound(QNetworkReply* reply, int request_id) { + if (artists.isEmpty()) { + return; + } +- const Echonest::ForeignIds& foreign_ids = artists.first().foreignIds(); +- for (const Echonest::ForeignId& id : foreign_ids) { +- if (id.catalog.contains("spotify")) { +- DoSpotifyImageRequest(id.foreign_id, request_id); +- } +- } + } catch (Echonest::ParseError e) { + qLog(Warning) << "Error parsing echonest reply:" << e.errorType() + << e.what(); + } + } + +-void EchoNestImages::DoSpotifyImageRequest(const QString& id, int request_id) { +- QString artist_id = id.split(":").last(); +- QUrl url(QString(kSpotifyArtistUrl).arg(artist_id)); +- QNetworkReply* reply = network_->get(QNetworkRequest(url)); +- RegisterReply(reply, request_id); +- NewClosure(reply, SIGNAL(finished()), [this, reply, request_id]() { +- reply->deleteLater(); +- QJson::Parser parser; +- QVariantMap result = parser.parse(reply).toMap(); +- QVariantList images = result["images"].toList(); +- QList<QPair<QUrl, QSize>> image_urls; +- for (const QVariant& image : images) { +- QVariantMap image_result = image.toMap(); +- image_urls.append(qMakePair(image_result["url"].toUrl(), +- QSize(image_result["width"].toInt(), +- image_result["height"].toInt()))); +- } +- // All the images are the same just different sizes; just pick the largest. +- std::sort(image_urls.begin(), image_urls.end(), +- [](const QPair<QUrl, QSize>& a, +- const QPair<QUrl, QSize>& b) { +- // Sorted by area ascending. +- return (a.second.height() * a.second.width()) < +- (b.second.height() * b.second.width()); +- }); +- if (!image_urls.isEmpty()) { +- emit ImageReady(request_id, image_urls.last().first); +- } +- }); +-} +- + // Keeps track of replies and emits Finished() when all replies associated with + // a request are finished with. + void EchoNestImages::RegisterReply(QNetworkReply* reply, int id) { +diff --git a/src/songinfo/echonestimages.h b/src/songinfo/echonestimages.h +index 6e67e87..8cd71e4 100644 +--- a/src/songinfo/echonestimages.h ++++ b/src/songinfo/echonestimages.h +@@ -42,8 +42,6 @@ class EchoNestImages : public SongInfoProvider { + void IdsFound(QNetworkReply* reply, int id); + + private: +- void DoSpotifyImageRequest(const QString& id, int request_id); +- + void RegisterReply(QNetworkReply* reply, int id); + QMultiMap<int, QNetworkReply*> replies_; + std::unique_ptr<NetworkAccessManager> network_; diff --git a/src/ui/about.cpp b/src/ui/about.cpp -index 53e42bd..49e7714 100644 +index 77a05d1..a43ae4f 100644 --- a/src/ui/about.cpp +++ b/src/ui/about.cpp -@@ -76,14 +76,9 @@ QString About::MakeHtml() const { +@@ -83,7 +83,6 @@ QString About::MakeHtml() const { ret += QString("<br />%1</p>").arg(tr("...and all the Amarok contributors")); ret += QString("<p><b>%1</b>").arg(tr("And:")); - ret += QString("<br /><a href=\"http://rainymood.com\">Rainy Mood</a>"); - ret += QString("<br /><a href=\"http://www.smitelli.com/?page=blog&p=54\">Scott Smitelli</a>"); - ret += QString("<br /><a href=\"http://hyperboleandahalf.blogspot.com\">Allie Brosh</a></p>"); - -- ret += "<p>This product uses Music by Spotify but is not endorsed, certified " -- "or otherwise approved in any way by Spotify. Spotify is the registered " -- "trade mark of the Spotify Group.</p>"; + ret += QString( + "<br /><a href=\"http://www.smitelli.com/?page=blog&p=54\">Scott " + "Smitelli</a>"); +@@ -91,11 +90,6 @@ QString About::MakeHtml() const { + "<br /><a href=\"http://hyperboleandahalf.blogspot.com\">Allie " + "Brosh</a></p>"); + +- ret += +- "<p>This product uses Music by Spotify but is not endorsed, certified " +- "or otherwise approved in any way by Spotify. Spotify is the registered " +- "trade mark of the Spotify Group.</p>"; - return ret; } diff --git a/src/ui/settingsdialog.cpp b/src/ui/settingsdialog.cpp -index dc0d84f..4a9335d 100644 +index 2cb7e1b..8cb60e7 100644 --- a/src/ui/settingsdialog.cpp +++ b/src/ui/settingsdialog.cpp -@@ -38,7 +38,6 @@ - #include "internet/digitallyimportedsettingspage.h" - #include "internet/groovesharksettingspage.h" - #include "internet/magnatunesettingspage.h" --#include "internet/spotifysettingspage.h" - #include "internet/subsonicsettingspage.h" - #include "internet/ubuntuonesettingspage.h" +@@ -39,7 +39,6 @@ + #include "internet/core/internetshowsettingspage.h" + #include "internet/magnatune/magnatunesettingspage.h" + #include "internet/soundcloud/soundcloudsettingspage.h" +-#include "internet/spotify/spotifysettingspage.h" + #include "internet/subsonic/subsonicsettingspage.h" #include "library/librarysettingspage.h" -@@ -174,7 +173,6 @@ SettingsDialog::SettingsDialog(Application* app, BackgroundStreams* streams, QWi - AddPage(Page_Box, new BoxSettingsPage(this), providers); + #include "playlist/playlistview.h" +@@ -184,7 +183,6 @@ SettingsDialog::SettingsDialog(Application* app, BackgroundStreams* streams, #endif + AddPage(Page_SoundCloud, new SoundCloudSettingsPage(this), providers); - AddPage(Page_Spotify, new SpotifySettingsPage(this), providers); - AddPage(Page_Magnatune, new MagnatuneSettingsPage(this), providers); - AddPage(Page_DigitallyImported, new DigitallyImportedSettingsPage(this), providers); - AddPage(Page_BackgroundStreams, new BackgroundStreamsSettingsPage(this), providers); + + #ifdef HAVE_VK + AddPage(Page_Vk, new VkSettingsPage(this), providers); diff --git a/src/ui/settingsdialog.h b/src/ui/settingsdialog.h -index e9e709a..5485a37 100644 +index 14bb976..b543cc9 100644 --- a/src/ui/settingsdialog.h +++ b/src/ui/settingsdialog.h -@@ -69,7 +69,6 @@ public: +@@ -69,7 +69,6 @@ class SettingsDialog : public QDialog { Page_Library, Page_Lastfm, - Page_Grooveshark, + Page_SoundCloud, - Page_Spotify, Page_Magnatune, Page_DigitallyImported, |