summaryrefslogtreecommitdiff
path: root/libre/clementine
diff options
context:
space:
mode:
authorcoadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu>2014-09-04 01:39:21 -0300
committercoadde [Márcio Alexandre Silva Delgado] <coadde@parabola.nu>2014-09-04 01:39:21 -0300
commit035f2fd609cd247ac0430f15cad3af94ce79f5f8 (patch)
treee370cdaffe855596877f25cb769922090ca2e2aa /libre/clementine
parentab339da9245bbbc89d8fff20a1c114f2e2c226d3 (diff)
rename to clementine
Diffstat (limited to 'libre/clementine')
-rw-r--r--libre/clementine/PKGBUILD89
-rw-r--r--libre/clementine/clementine.install15
-rw-r--r--libre/clementine/moognu.pngbin0 -> 610 bytes
-rw-r--r--libre/clementine/remove-nonfree-artwork-and-spotify.patch655
-rw-r--r--libre/clementine/udisks-namespace.patch38
5 files changed, 797 insertions, 0 deletions
diff --git a/libre/clementine/PKGBUILD b/libre/clementine/PKGBUILD
new file mode 100644
index 000000000..cfa05ad10
--- /dev/null
+++ b/libre/clementine/PKGBUILD
@@ -0,0 +1,89 @@
+# $Id: PKGBUILD 117584 2014-08-18 23:42:44Z alucryd $
+# Maintainer (Arch): Maxime Gauduin <alucryd@gmail.com>
+# Contributor (Arch): Stéphane Gaudreault <stephane@archlinux.org>
+# Contributor (Arch): BlackEagle <ike.devolder@gmail.com>
+# Contributor (Arch): Dany Martineau <dany.luc.martineau@gmail.com>
+# Maintainer: André Silva <emulatorman@parabola.nu>
+# Contributor: Kete <kete@ninthfloor.org>
+# Contributor: Márcio Silva <coadde@parabola.nu>
+
+pkgname=clementine
+_pkgname=$pkgname-libre
+pkgver=1.2.3
+pkgrel=2.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' 'mips64el')
+replaces=("$_pkgname")
+conflicts=("$_pkgname")
+depends=('chromaprint' 'glew' 'gstreamer0.10-base' 'libcdio' 'libgpod' 'liblastfm' 'libmtp' 'libmygpo-qt' 'protobuf' 'qca-ossl' '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'
+ 'gvfs: Various devices support')
+install="${pkgname}.install"
+mksource=("${pkgname}-${pkgver}.tar.gz::https://github.com/$pkgname-player/${pkgname^}/archive/${pkgver}.tar.gz"
+ 'remove-nonfree-artwork-and-spotify.patch'
+ 'moognu.png')
+source=("https://repo.parabolagnulinux.org/other/${_pkgname}/${_pkgname}-${pkgver}.tar.gz"
+ 'udisks-namespace.patch')
+mksha256sums=('7df5650445a005c09f5f0e1a1b0d077037c37ecbe4ee77baf9d45f121308a1bf'
+ '48bfbf42c84ac1891021638627c10780194fcc59eda1c69e157be3aebe8ee10b'
+ 'c6918617769152f3617c61f721819e69d03f671b85760b11cfe45abd53955bc4')
+sha256sums=('c68275373b839b5b256b813b5bed85d501f94e12bef3dd8ed69e90094af3f769'
+ 'a7c2764576cee303a57e4efe6a5dbd583a66de8a15aee738bd92d4bb21786008')
+
+mksource() {
+ cd ${pkgname^}-${pkgver}
+
+ # remove nonfree nonfree artwork and spotify references on files
+ patch -Np1 -i ../remove-nonfree-artwork-and-spotify.patch
+
+ # remove nonfree spotifyblob folders
+ rm -rv ext/{$pkgname-spotifyblob,lib${pkgname}-spotifyblob}
+
+ # remove nonfree spotify files
+ rm -v cmake/SpotifyVersion.cmake
+ rm -v data/spotify-attribution.png
+ rm -v data/icons/svg/spotify.svg
+ 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}}}
+
+ ## remove nonfree nyancat.png
+ rm -v data/nyancat.png
+
+ ## rut moognu.png to the source code
+ install -m644 -v ../moognu.png data
+
+ # create a blank file due which is a dependency for clementine
+ touch data/schema/schema-30.sql
+}
+
+prepare() {
+ cd ${_pkgname}-${pkgver}
+
+ patch -Np1 -i ../udisks-namespace.patch
+}
+
+build() {
+ cd ${_pkgname}-${pkgver}
+
+ if [[ -d build ]]; then
+ rm -rf build
+ fi
+ mkdir build && cd build
+
+ cmake .. -DCMAKE_INSTALL_PREFIX='/usr' -DCMAKE_BUILD_TYPE='Release'
+ make
+}
+
+package() {
+ cd ${_pkgname}-${pkgver}/build
+
+ make DESTDIR="${pkgdir}" install
+}
+
+# vim: ts=2 sw=2 et:
diff --git a/libre/clementine/clementine.install b/libre/clementine/clementine.install
new file mode 100644
index 000000000..927a10258
--- /dev/null
+++ b/libre/clementine/clementine.install
@@ -0,0 +1,15 @@
+post_install() {
+ gtk-update-icon-cache -ftq usr/share/icons/hicolor
+ update-desktop-database -q
+}
+
+post_upgrade() {
+ post_install
+}
+
+
+post_remove() {
+ post_install
+}
+
+# vim: ts=2 sw=2 et:
diff --git a/libre/clementine/moognu.png b/libre/clementine/moognu.png
new file mode 100644
index 000000000..177041886
--- /dev/null
+++ b/libre/clementine/moognu.png
Binary files differ
diff --git a/libre/clementine/remove-nonfree-artwork-and-spotify.patch b/libre/clementine/remove-nonfree-artwork-and-spotify.patch
new file mode 100644
index 000000000..8c1b9aafd
--- /dev/null
+++ b/libre/clementine/remove-nonfree-artwork-and-spotify.patch
@@ -0,0 +1,655 @@
+diff --git a/3rdparty/SPMediaKeyTap/SPMediaKeyTap.m b/3rdparty/SPMediaKeyTap/SPMediaKeyTap.m
+index a349f59..c418e0b 100644
+--- a/3rdparty/SPMediaKeyTap/SPMediaKeyTap.m
++++ b/3rdparty/SPMediaKeyTap/SPMediaKeyTap.m
+@@ -98,7 +98,6 @@ static CGEventRef tapEventCallback(CGEventTapProxy proxy, CGEventType type, CGEv
+ {
+ return [NSArray arrayWithObjects:
+ [[NSBundle mainBundle] bundleIdentifier], // your app
+- @"com.spotify.client",
+ @"com.apple.iTunes",
+ @"com.apple.QuickTimePlayerX",
+ @"com.apple.quicktimeplayer",
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 47f1693..986351b 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -7,7 +7,6 @@ include(cmake/Summary.cmake)
+ include(cmake/Version.cmake)
+ include(cmake/Deb.cmake)
+ include(cmake/Rpm.cmake)
+-include(cmake/SpotifyVersion.cmake)
+ include(cmake/OptionalSource.cmake)
+ set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake)
+
+@@ -78,7 +77,6 @@ pkg_check_modules(LIBMYGPO_QT libmygpo-qt>=1.0.7)
+ 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)
+ find_library(SPARKLE Sparkle)
+
+- find_library(SPOTIFY libspotify)
+- if (SPOTIFY)
+- set (SPOTIFY_FOUND ON)
+- set (SPOTIFY_INCLUDE_DIRS ${SPOTIFY})
+- set (SPOTIFY_LIBRARIES ${SPOTIFY})
+- endif (SPOTIFY)
+-
+ 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"
+ 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
+ )
+@@ -270,13 +261,6 @@ optional_component(SPARKLE ON "Sparkle 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 "
+- "code must be compiled in")
+-elseif(QCA_FOUND)
+- 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)
+ add_subdirectory(ext/libclementine-tagreader)
+ add_subdirectory(ext/clementine-tagreader)
+ add_subdirectory(ext/libclementine-remote)
+-add_subdirectory(ext/libclementine-spotifyblob)
+
+ option(WITH_DEBIAN OFF)
+ if(WITH_DEBIAN)
+@@ -451,10 +434,6 @@ if(HAVE_BREAKPAD)
+ add_subdirectory(3rdparty/google-breakpad)
+ endif(HAVE_BREAKPAD)
+
+-if(HAVE_SPOTIFY_BLOB)
+- add_subdirectory(ext/clementine-spotifyblob)
+-endif(HAVE_SPOTIFY_BLOB)
+-
+ if(HAVE_MOODBAR)
+ add_subdirectory(gst/moodbar)
+ endif()
+diff --git a/data/data.qrc b/data/data.qrc
+index 4c5473f..bd5fe2d 100644
+--- a/data/data.qrc
++++ b/data/data.qrc
+@@ -2,7 +2,6 @@
+ <qresource prefix="/">
+ <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 @@
+ <file>lumberjacksong.txt</file>
+ <file>lyrics/ultimate_providers.xml</file>
+ <file>mainwindow.css</file>
++ <file>moognu.png</file>
+ <file>nocover.png</file>
+ <file>nomusic.png</file>
+ <file>now_playing_tooltip.txt</file>
+- <file>nyancat.png</file>
+ <file>oauthsuccess.html</file>
+ <file>osd_background.png</file>
+ <file>osd_shadow_corner.png</file>
+@@ -391,7 +387,6 @@
+ <file>smartplaylistsearchterm.css</file>
+ <file>songinfo.css</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/macdeploy.py b/dist/macdeploy.py
+index e054619..3568a6f 100755
+--- a/dist/macdeploy.py
++++ b/dist/macdeploy.py
+@@ -398,10 +398,7 @@ def main():
+ FixPlugin(FindGioModule('libgiolibproxy.so'), 'gio-modules')
+
+ try:
+- FixPlugin('clementine-spotifyblob', '.')
+ FixPlugin('clementine-tagreader', '.')
+- except:
+- print 'Failed to find blob: %s' % traceback.format_exc()
+
+ 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
+--- a/dist/windows/clementine.nsi.in
++++ b/dist/windows/clementine.nsi.in
+@@ -97,9 +97,6 @@ Section "Delete old files" oldfiles
+ Delete "$INSTDIR\gstreamer-plugins\libgstqueue2.dll"
+ Delete "$INSTDIR\gstreamer-plugins\libgstsoup.dll"
+
+- ; 1.0 prerelease
+- Delete "$INSTDIR\spotify.dll"
+-
+ ; 1.0
+ Delete "$INSTDIR\libofa.dll"
+ Delete "$INSTDIR\gstreamer-plugins\libgstofa.dll"
+@@ -128,7 +125,6 @@ Section "Clementine" Clementine
+ File "avutil-51.dll"
+ 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 "libqjson.dll"
+ File "libsoup-2.4-1.dll"
+ File "libspeex-1.dll"
+- File "libspotify.dll"
+ File "libstdc++-6.dll"
+ File "libtag.dll"
+ File "libtasn1-3.dll"
+@@ -939,7 +934,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\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"
+diff --git a/ext/libclementine-common/core/logging.cpp b/ext/libclementine-common/core/logging.cpp
+index 3c53d7a..49dd8cf 100644
+--- a/ext/libclementine-common/core/logging.cpp
++++ b/ext/libclementine-common/core/logging.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 <QtGlobal>
+
+ #include <cxxabi.h>
+diff --git a/ext/libclementine-common/core/logging.h b/ext/libclementine-common/core/logging.h
+index 3c582cf..4a3cea8 100644
+--- a/ext/libclementine-common/core/logging.h
++++ b/ext/libclementine-common/core/logging.h
+@@ -14,11 +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 LOGGING_H
+ #define LOGGING_H
+
+diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
+index 1104542..e7a8032 100644
+--- a/src/CMakeLists.txt
++++ b/src/CMakeLists.txt
+@@ -60,8 +60,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)
+-include_directories(${CMAKE_SOURCE_DIR}/ext/libclementine-spotifyblob)
+-include_directories(${CMAKE_BINARY_DIR}/ext/libclementine-spotifyblob)
+
+ cmake_policy(SET CMP0011 NEW)
+ include(../cmake/ParseArguments.cmake)
+@@ -157,7 +155,6 @@ set(SOURCES
+ globalsearch/simplesearchprovider.cpp
+ globalsearch/somafmsearchprovider.cpp
+ globalsearch/soundcloudsearchprovider.cpp
+- globalsearch/spotifysearchprovider.cpp
+ 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
+@@ -461,7 +455,6 @@ set(HEADERS
+ globalsearch/searchprovider.h
+ globalsearch/simplesearchprovider.h
+ globalsearch/soundcloudsearchprovider.h
+- globalsearch/spotifysearchprovider.h
+ globalsearch/suggestionwidget.h
+
+ internet/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
+
+ library/groupbydialog.ui
+@@ -836,15 +825,6 @@ optional_source(HAVE_LIBLASTFM
+ )
+
+
+-optional_source(HAVE_SPOTIFY_DOWNLOADER
+- SOURCES
+- internet/spotifyblobdownloader.cpp
+- HEADERS
+- internet/spotifyblobdownloader.h
+- INCLUDE_DIRECTORIES
+- ${QCA_INCLUDE_DIRS}
+-)
+-
+ # Platform specific - OS X
+ optional_source(APPLE
+ INCLUDE_DIRECTORIES
+@@ -1171,7 +1151,6 @@ add_dependencies(clementine_lib pot)
+
+
+ target_link_libraries(clementine_lib
+- clementine-spotifyblob-messages
+ libclementine-common
+ libclementine-tagreader
+ libclementine-remote
+@@ -1240,13 +1219,6 @@ if(HAVE_BREAKPAD)
+ endif (LINUX)
+ endif(HAVE_BREAKPAD)
+
+-if(HAVE_SPOTIFY_DOWNLOADER)
+- target_link_libraries(clementine_lib
+- ${QCA_LIBRARIES}
+- )
+- link_directories(${QCA_LIBRARY_DIRS})
+-endif(HAVE_SPOTIFY_DOWNLOADER)
+-
+ if (APPLE)
+ target_link_libraries(clementine_lib
+ ${GROWL}
+@@ -1328,16 +1300,6 @@ target_link_libraries(clementine
+ clementine_lib
+ )
+
+-# macdeploy.py relies on the blob being built first.
+-if(HAVE_SPOTIFY_BLOB)
+- add_dependencies(clementine clementine-spotifyblob)
+-endif(HAVE_SPOTIFY_BLOB)
+-add_dependencies(clementine clementine-tagreader)
+-
+-set_target_properties(clementine PROPERTIES
+- MACOSX_BUNDLE_INFO_PLIST "../dist/Info.plist"
+-)
+-
+ 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/config.h.in b/src/config.h.in
+index 6cac97e..90e4ee2 100644
+--- a/src/config.h.in
++++ b/src/config.h.in
+@@ -39,7 +39,6 @@
+ #cmakedefine HAVE_QCA
+ #cmakedefine HAVE_SKYDRIVE
+ #cmakedefine HAVE_SPARKLE
+-#cmakedefine HAVE_SPOTIFY_DOWNLOADER
+ #cmakedefine HAVE_STATIC_SQLITE
+ #cmakedefine HAVE_UBUNTU_ONE
+ #cmakedefine HAVE_WIIMOTEDEV
+diff --git a/src/core/backgroundstreams.cpp b/src/core/backgroundstreams.cpp
+index 347b959..b00cb87 100644
+--- a/src/core/backgroundstreams.cpp
++++ b/src/core/backgroundstreams.cpp
+@@ -9,7 +9,6 @@
+
+ const char* BackgroundStreams::kSettingsGroup = "BackgroundStreams";
+ const char* BackgroundStreams::kHypnotoadUrl = "hypnotoad:///";
+-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() {
+ int version = s.value("version", 0).toInt();
+ if (version < 1) {
+ AddStream(QT_TR_NOOP("Hypnotoad"), QUrl(kHypnotoadUrl));
+- AddStream(QT_TR_NOOP("Rain"), QUrl(kRainUrl));
+ }
+
+ if (version < kVersion) {
+diff --git a/src/core/timeconstants.h b/src/core/timeconstants.h
+index 96242d6..69196bd 100644
+--- a/src/core/timeconstants.h
++++ b/src/core/timeconstants.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 TIMECONSTANTS_H
+ #define TIMECONSTANTS_H
+
+diff --git a/src/core/utilities.cpp b/src/core/utilities.cpp
+index 3fdc6be..e6a109f 100644
+--- a/src/core/utilities.cpp
++++ b/src/core/utilities.cpp
+@@ -340,9 +340,6 @@ QString GetConfigPath(ConfigPath config) {
+ return QDir::homePath();
+ #endif
+
+- case Path_LocalSpotifyBlob:
+- return GetConfigPath(Path_Root) + "/spotifyblob";
+-
+ default:
+ qFatal("%s", Q_FUNC_INFO);
+ return QString::null;
+diff --git a/src/core/utilities.h b/src/core/utilities.h
+index edaa545..ad2138c 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,
+ };
+diff --git a/src/covers/albumcoverloader.cpp b/src/covers/albumcoverloader.cpp
+index a4c4241..39dd101 100644
+--- a/src/covers/albumcoverloader.cpp
++++ b/src/covers/albumcoverloader.cpp
+@@ -30,7 +30,6 @@
+ #include "core/tagreaderclient.h"
+ #include "core/utilities.h"
+ #include "internet/internetmodel.h"
+-#include "internet/spotifyservice.h"
+
+
+
+@@ -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(
+
+ remote_tasks_.insert(reply, task);
+ return TryLoadResult(true, false, QImage());
+- } else if (filename.toLower().startsWith("spotify://image/")) {
+- // HACK: we should add generic image URL handlers
+- SpotifyService* spotify = InternetModel::Service<SpotifyService>();
+-
+- if (!connected_spotify_) {
+- connect(spotify, SIGNAL(ImageLoaded(QString,QImage)),
+- SLOT(SpotifyImageLoaded(QString,QImage)));
+- connected_spotify_ = true;
+- }
+-
+- QString id = QUrl(filename).path();
+- if (id.startsWith('/')) {
+- id.remove(0, 1);
+- }
+- remote_spotify_tasks_.insert(id, task);
+-
+- // Need to schedule this in the spotify service's thread
+- QMetaObject::invokeMethod(spotify, "LoadImage", Qt::QueuedConnection,
+- Q_ARG(QString, id));
+- return TryLoadResult(true, false, QImage());
+ }
+
+ QImage image(filename);
+@@ -196,16 +174,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;
+-
+- Task task = remote_spotify_tasks_.take(id);
+- QImage scaled = ScaleAndPad(task.options, image);
+- emit ImageLoaded(task.id, scaled);
+- emit ImageLoaded(task.id, scaled, image);
+-}
+-
+ void AlbumCoverLoader::RemoteFetchFinished(QNetworkReply* reply) {
+ reply->deleteLater();
+
+diff --git a/src/covers/albumcoverloader.h b/src/covers/albumcoverloader.h
+index 987be66..5214e14 100644
+--- a/src/covers/albumcoverloader.h
++++ b/src/covers/albumcoverloader.h
+@@ -62,7 +62,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 {
+ QMutex mutex_;
+ QQueue<Task> tasks_;
+ QMap<QNetworkReply*, Task> remote_tasks_;
+- QMap<QString, Task> remote_spotify_tasks_;
+ quint64 next_id_;
+
+ NetworkAccessManager* network_;
+
+- bool connected_spotify_;
+-
+ static const int kMaxRedirects = 3;
+ };
+
+diff --git a/src/engines/gstenginepipeline.cpp b/src/engines/gstenginepipeline.cpp
+index 94f77a3..37c1cdf 100644
+--- a/src/engines/gstenginepipeline.cpp
++++ b/src/engines/gstenginepipeline.cpp
+@@ -29,8 +29,6 @@
+ #include "core/signalchecker.h"
+ #include "core/utilities.h"
+ #include "internet/internetmodel.h"
+-#include "internet/spotifyserver.h"
+-#include "internet/spotifyservice.h"
+
+
+ const int GstEnginePipeline::kGstStateTimeoutNanosecs = 10000000;
+@@ -141,37 +139,11 @@ bool GstEnginePipeline::ReplaceDecodeBin(GstElement* new_bin) {
+ bool GstEnginePipeline::ReplaceDecodeBin(const QUrl& url) {
+ GstElement* new_bin = NULL;
+
+- if (url.scheme() == "spotify") {
+- new_bin = gst_bin_new("spotify_bin");
+-
+- // Create elements
+- GstElement* src = engine_->CreateElement("tcpserversrc", new_bin);
+- GstElement* gdp = engine_->CreateElement("gdpdepay", new_bin);
+- 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);
+-
+- // Link the elements
+- gst_element_link(src, gdp);
+-
+- // Add a ghost pad
+- GstPad* pad = gst_element_get_static_pad(gdp, "src");
+- gst_element_add_pad(GST_ELEMENT(new_bin), gst_ghost_pad_new("src", pad));
+- gst_object_unref(GST_OBJECT(pad));
+-
+- // Tell spotify to start sending data to us.
+- InternetModel::Service<SpotifyService>()->server()->StartPlaybackLater(url.toString(), 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);
+- }
+
+ 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"
+ #include "core/closure.h"
+ #include "core/logging.h"
+@@ -94,7 +93,6 @@ InternetModel::InternetModel(Application* app, QObject* parent)
+ AddService(new SkyFmService(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));
+diff --git a/src/ui/about.cpp b/src/ui/about.cpp
+index 53e42bd..49e7714 100644
+--- a/src/ui/about.cpp
++++ b/src/ui/about.cpp
+@@ -76,14 +76,9 @@ 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>";
+-
+ return ret;
+ }
+
+diff --git a/src/ui/settingsdialog.cpp b/src/ui/settingsdialog.cpp
+index dc0d84f..4a9335d 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"
+ #include "library/librarysettingspage.h"
+@@ -174,7 +173,6 @@ SettingsDialog::SettingsDialog(Application* app, BackgroundStreams* streams, QWi
+ AddPage(Page_Box, new BoxSettingsPage(this), providers);
+ #endif
+
+- 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);
+diff --git a/src/ui/settingsdialog.h b/src/ui/settingsdialog.h
+index e9e709a..5485a37 100644
+--- a/src/ui/settingsdialog.h
++++ b/src/ui/settingsdialog.h
+@@ -69,7 +69,6 @@ public:
+ Page_Library,
+ Page_Lastfm,
+ Page_Grooveshark,
+- Page_Spotify,
+ Page_Magnatune,
+ Page_DigitallyImported,
+ Page_BackgroundStreams,
diff --git a/libre/clementine/udisks-namespace.patch b/libre/clementine/udisks-namespace.patch
new file mode 100644
index 000000000..e74889e78
--- /dev/null
+++ b/libre/clementine/udisks-namespace.patch
@@ -0,0 +1,38 @@
+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