diff --git a/README.md b/README.md index f42627a..6a22fa8 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,4 @@ # clementine +Clementine is a modern music player and library organiser. Clementine is a port of Amarok 1.4, with some features rewritten to take advantage of Qt4. + diff --git a/clementine-0.6-optional-dbus-devicekit.patch b/clementine-0.6-optional-dbus-devicekit.patch new file mode 100644 index 0000000..1f9d9c2 --- /dev/null +++ b/clementine-0.6-optional-dbus-devicekit.patch @@ -0,0 +1,283 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 34f6951..b5b38e9 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -9,7 +9,18 @@ include(cmake/Rpm.cmake) + + find_package(Qt4 4.5.0 REQUIRED QtCore QtGui QtOpenGL QtSql QtNetwork QtXml) + if(UNIX AND NOT APPLE) +- find_package(Qt4 REQUIRED QtDbus) ++ option(ENABLE_DBUS "Enable D-Bus, MPRIS and native notifications. Required for DeviceKit and Wii remote support" ON) ++ if(ENABLE_DBUS) ++ find_package(Qt4 REQUIRED QtDbus) ++ set(HAVE_DBUS ON) ++ ++ option(ENABLE_DEVICEKIT "DeviceKit backend" ON) ++ if(ENABLE_DEVICEKIT) ++ set(HAVE_DEVICEKIT ON) ++ endif(ENABLE_DEVICEKIT) ++ ++ option(ENABLE_WIIMOTEDEV "Enable Wii remote support in Clementine" ON) ++ endif(ENABLE_DBUS) + endif(UNIX AND NOT APPLE) + find_package(Qt4 COMPONENTS Phonon QtWebKit) + +@@ -127,10 +138,6 @@ option(BUNDLE_PROJECTM_PRESETS "Install Clementine's own copies of libprojectm p + option(ENABLE_SOUNDMENU "Add Clementine to the Gnome sound menu" ON) + option(ENABLE_LIBLASTFM "Use liblastfm for fetching song info, scrobbling and radio streams" ON) + +-if(NOT APPLE AND NOT WIN32) +- option(ENABLE_WIIMOTEDEV "Enable Wii remote support in Clementine" ON) +-endif(NOT APPLE AND NOT WIN32) +- + if(ENABLE_LIBGPOD AND LIBGPOD_FOUND) + set(HAVE_LIBGPOD ON) + endif(ENABLE_LIBGPOD AND LIBGPOD_FOUND) +@@ -252,10 +259,12 @@ add_custom_target(uninstall + "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") + + # Show a summary of what we have enabled ++summary_add("devices: DeviceKit backend" HAVE_DEVICEKIT) + summary_add("devices: iPod classic support" HAVE_LIBGPOD) + summary_add("devices: iPod Touch, iPhone, iPad support" HAVE_IMOBILEDEVICE) + summary_add("devices: MTP support" HAVE_LIBMTP) + summary_add("devices: GIO backend" HAVE_GIO) ++summary_add("D-Bus support" HAVE_DBUS) + summary_add("Gnome sound menu integration" HAVE_LIBINDICATE) + summary_add("Wiimote support" ENABLE_WIIMOTEDEV) + summary_add("Visualisations" ENABLE_VISUALISATIONS) +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 530ff23..e327701 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -557,7 +557,7 @@ else(APPLE) + endif(APPLE) + + # DBUS and MPRIS - Linux specific +-if(NOT APPLE AND NOT WIN32) ++if(HAVE_DBUS) + file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/dbus) + + # Hack to get it to generate interfaces without namespaces - required +@@ -593,12 +593,14 @@ if(NOT APPLE AND NOT WIN32) + dbus/notification) + + # DeviceKit DBUS interfaces ++ if(HAVE_DEVICEKIT) + qt4_add_dbus_interface(SOURCES + dbus/org.freedesktop.UDisks.xml + dbus/udisks) + qt4_add_dbus_interface(SOURCES + dbus/org.freedesktop.UDisks.Device.xml + dbus/udisksdevice) ++ endif(HAVE_DEVICEKIT) + + # MPRIS source + list(APPEND SOURCES core/mpris.cpp core/mpris2.cpp) +@@ -622,12 +624,14 @@ if(NOT APPLE AND NOT WIN32) + endif(ENABLE_WIIMOTEDEV) + + # DeviceKit lister source ++ if(HAVE_DEVICEKIT) + list(APPEND SOURCES devices/devicekitlister.cpp) + list(APPEND HEADERS devices/devicekitlister.h) ++ endif(HAVE_DEVICEKIT) + + # Gnome Screensaver DBus interface + list(APPEND SOURCES ui/dbusscreensaver.cpp) +-endif(NOT APPLE AND NOT WIN32) ++endif(HAVE_DBUS) + + # Libgpod device backend + if(HAVE_LIBGPOD) +diff --git a/src/core/player.cpp b/src/core/player.cpp +index 2c0ba2d..3b26e95 100644 +--- a/src/core/player.cpp ++++ b/src/core/player.cpp +@@ -39,7 +39,7 @@ + # include "radio/lastfmservice.h" + #endif + +-#ifdef Q_WS_X11 ++#ifdef HAVE_DBUS + # include "mpris.h" + # include "mpris2.h" + # include +@@ -77,7 +77,7 @@ Player::Player(MainWindow* main_window, PlaylistManager* playlists, + connect(playlists, SIGNAL(CurrentSongChanged(Song)), + art_loader_, SLOT(LoadArt(Song))); + +-#ifdef Q_WS_X11 ++#ifdef HAVE_DBUS + // MPRIS DBus interface. + qDBusRegisterMetaType(); + qDBusRegisterMetaType(); +diff --git a/src/core/player.h b/src/core/player.h +index ef6999b..94b247b 100644 +--- a/src/core/player.h ++++ b/src/core/player.h +@@ -42,7 +42,7 @@ namespace mpris { + class ArtLoader; + } + +-#ifdef Q_WS_X11 ++#ifdef HAVE_DBUS + # include + QDBusArgument& operator<< (QDBusArgument& arg, const QImage& image); + const QDBusArgument& operator>> (const QDBusArgument& arg, QImage& image); +diff --git a/src/devices/devicemanager.cpp b/src/devices/devicemanager.cpp +index a4fe94a..cc12c21 100644 +--- a/src/devices/devicemanager.cpp ++++ b/src/devices/devicemanager.cpp +@@ -182,7 +182,7 @@ DeviceManager::DeviceManager(BackgroundThread* database, + connected_devices_model_ = new DeviceStateFilterModel(this); + connected_devices_model_->setSourceModel(this); + +-#ifdef Q_WS_X11 ++#ifdef HAVE_DEVICEKIT + AddLister(new DeviceKitLister); + #endif + #ifdef HAVE_GIO +diff --git a/src/ui/screensaver.cpp b/src/ui/screensaver.cpp +index a8353b1..b548ce1 100644 +--- a/src/ui/screensaver.cpp ++++ b/src/ui/screensaver.cpp +@@ -19,7 +19,7 @@ + + #include + +-#ifdef Q_WS_X11 ++#ifdef HAVE_DBUS + #include "dbusscreensaver.h" + #include + #include +@@ -42,7 +42,7 @@ Screensaver* Screensaver::screensaver_ = 0; + + Screensaver* Screensaver::GetScreensaver() { + if (!screensaver_) { +- #if defined(Q_WS_X11) ++ #if defined(HAVE_DBUS) + if (QDBusConnection::sessionBus().interface()->isServiceRegistered(kGnomeService)) { + screensaver_ = new DBusScreensaver(kGnomeService, kGnomePath, kGnomeInterface); + } else if (QDBusConnection::sessionBus().interface()->isServiceRegistered(kKdeService)) { +diff --git a/src/widgets/osd.cpp b/src/widgets/osd.cpp +index 29dc2ff..f38379f 100644 +--- a/src/widgets/osd.cpp ++++ b/src/widgets/osd.cpp +@@ -19,7 +19,7 @@ + #include "osdpretty.h" + #include "ui/systemtrayicon.h" + +-#ifdef Q_WS_X11 ++#ifdef HAVE_DBUS + # include "dbus/notification.h" + #endif + +@@ -193,7 +193,7 @@ void OSD::ShowMessage(const QString& summary, + } + } + +-#ifndef Q_WS_X11 ++#ifndef HAVE_DBUS + void OSD::CallFinished(QDBusPendingCallWatcher*) {} + #endif + +diff --git a/src/widgets/osd.h b/src/widgets/osd.h +index 7e25d1a..e899c63 100644 +--- a/src/widgets/osd.h ++++ b/src/widgets/osd.h +@@ -33,7 +33,7 @@ class SystemTrayIcon; + + class QDBusPendingCallWatcher; + +-#ifdef Q_WS_X11 ++#ifdef HAVE_DBUS + # include + # include + +@@ -127,7 +127,7 @@ class OSD : public QObject { + GrowlNotificationWrapper* wrapper_; + #endif // Q_OS_DARWIN + +-#ifdef Q_WS_X11 ++#ifdef HAVE_DBUS + boost::scoped_ptr interface_; + uint notification_id_; + QDateTime last_notification_time_; +diff --git a/src/widgets/osd_x11.cpp b/src/widgets/osd_x11.cpp +index b87e0ad..d1d26d6 100644 +--- a/src/widgets/osd_x11.cpp ++++ b/src/widgets/osd_x11.cpp +@@ -16,11 +16,13 @@ + */ + + #include "osd.h" +-#include "dbus/notification.h" + +-#include + #include +-#include ++ ++#ifdef HAVE_DBUS ++ #include "dbus/notification.h" ++ #include ++ #include + + using boost::scoped_ptr; + +@@ -52,8 +54,10 @@ const QDBusArgument& operator>> (const QDBusArgument& arg, QImage& image) { + Q_ASSERT(0); + return arg; + } ++#endif + + void OSD::Init() { ++ #ifdef HAVE_DBUS + interface_.reset(new OrgFreedesktopNotificationsInterface( + OrgFreedesktopNotificationsInterface::staticInterfaceName(), + "/org/freedesktop/Notifications", +@@ -63,10 +67,15 @@ void OSD::Init() { + } + + notification_id_ = 0; ++ #endif + } + + bool OSD::SupportsNativeNotifications() { ++ #ifdef HAVE_DBUS + return true; ++ #else ++ return false; ++ #endif + } + + bool OSD::SupportsTrayPopups() { +@@ -75,6 +84,7 @@ bool OSD::SupportsTrayPopups() { + + void OSD::ShowMessageNative(const QString& summary, const QString& message, + const QString& icon, const QImage& image) { ++ #ifdef HAVE_DBUS + QVariantMap hints; + if (!image.isNull()) { + hints["image_data"] = QVariant(image); +@@ -101,8 +111,12 @@ void OSD::ShowMessageNative(const QString& summary, const QString& message, + QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(reply, this); + connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), + SLOT(CallFinished(QDBusPendingCallWatcher*))); ++ #else ++ qWarning() << __PRETTY_FUNCTION__ << ": NOT IMPLEMENTED"; ++ #endif + } + ++#ifdef HAVE_DBUS + void OSD::CallFinished(QDBusPendingCallWatcher* watcher) { + scoped_ptr w(watcher); + +@@ -118,3 +132,4 @@ void OSD::CallFinished(QDBusPendingCallWatcher* watcher) { + last_notification_time_ = QDateTime::currentDateTime(); + } + } ++#endif +- +1.6.1 + diff --git a/clementine-0.7.1-glibc-2.31.patch b/clementine-0.7.1-glibc-2.31.patch new file mode 100644 index 0000000..1a9b016 --- /dev/null +++ b/clementine-0.7.1-glibc-2.31.patch @@ -0,0 +1,55 @@ +diff -Nru clementine-0.7.1.orig/src/devices/giolister.cpp clementine-0.7.1/src/devices/giolister.cpp +--- clementine-0.7.1.orig/src/devices/giolister.cpp 2011-03-29 21:23:34.000000000 +0200 ++++ clementine-0.7.1/src/devices/giolister.cpp 2011-11-10 06:00:35.671356613 +0100 +@@ -458,19 +458,34 @@ + + if (info.volume) { + if (g_volume_can_eject(info.volume)) { +- g_volume_eject(info.volume, G_MOUNT_UNMOUNT_NONE, NULL, +- (GAsyncReadyCallback) VolumeEjectFinished, NULL); ++ g_volume_eject_with_operation( ++ info.volume, ++ G_MOUNT_UNMOUNT_NONE, ++ NULL, ++ NULL, ++ (GAsyncReadyCallback) VolumeEjectFinished, ++ NULL); + g_object_unref(info.volume); + return; + } + } + + if (g_mount_can_eject(info.mount)) { +- g_mount_eject(info.mount, G_MOUNT_UNMOUNT_NONE, NULL, +- (GAsyncReadyCallback) MountEjectFinished, NULL); ++ g_mount_eject_with_operation( ++ info.mount, ++ G_MOUNT_UNMOUNT_NONE, ++ NULL, ++ NULL, ++ (GAsyncReadyCallback) MountEjectFinished, ++ NULL); + } else if (g_mount_can_unmount(info.mount)) { +- g_mount_unmount(info.mount, G_MOUNT_UNMOUNT_NONE, NULL, +- (GAsyncReadyCallback) MountUnmountFinished, NULL); ++ g_mount_unmount_with_operation( ++ info.mount, ++ G_MOUNT_UNMOUNT_NONE, ++ NULL, ++ NULL, ++ (GAsyncReadyCallback) MountUnmountFinished, ++ NULL); + } + } + +--- clementine-0.7.1.orig/src/main.cpp 2011-03-29 21:16:24.000000000 +0200 ++++ clementine-0.7.1/src/main.cpp 2011-11-10 06:16:27.777883663 +0100 +@@ -61,7 +61,7 @@ + #include + + #include +-#include ++#include + #include + + #include diff --git a/clementine-1.0.1-libimobiledevice-1.1.2.patch b/clementine-1.0.1-libimobiledevice-1.1.2.patch new file mode 100644 index 0000000..feaecab --- /dev/null +++ b/clementine-1.0.1-libimobiledevice-1.1.2.patch @@ -0,0 +1,63 @@ +commit 119c9c27ac74d4e0f2941a66143afde2b3c64870 +Author: David Sansome +Date: Tue Mar 27 21:24:38 2012 +0100 + + Detect libimobiledevice 1.1.2 and use its new "udid" field instead of "uuid". + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index c250704..3339ba1 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -25,6 +25,10 @@ if (QT_VERSION_MINOR GREATER 5) + endif(QT_VERSION_MINOR GREATER 7) + endif(QT_VERSION_MINOR GREATER 5) + ++if(ENABLE_IMOBILEDEVICE AND IMOBILEDEVICE_VERSION VERSION_GREATER 1.1.1) ++ set(IMOBILEDEVICE_USES_UDIDS ON) ++endif() ++ + include_directories(${CMAKE_BINARY_DIR}) + include_directories(${GLIB_INCLUDE_DIRS}) + include_directories(${LIBXML_INCLUDE_DIRS}) +@@ -1079,6 +1083,7 @@ if(HAVE_IMOBILEDEVICE) + ${USBMUXD_LIBRARIES} + gstafcsrc + ) ++ link_directories(${IMOBILEDEVICE_LIBRARY_DIRS}) + link_directories(${USBMUXD_LIBRARY_DIRS}) + endif(HAVE_IMOBILEDEVICE) + +diff --git a/src/config.h.in b/src/config.h.in +index aae8b77..e2b1ce5 100644 +--- a/src/config.h.in ++++ b/src/config.h.in +@@ -39,6 +39,7 @@ + #cmakedefine HAVE_SPOTIFY + #cmakedefine HAVE_STATIC_SQLITE + #cmakedefine HAVE_WIIMOTEDEV ++#cmakedefine IMOBILEDEVICE_USES_UDIDS + #cmakedefine LEOPARD + #cmakedefine SNOW_LEOPARD + #cmakedefine USE_INSTALL_PREFIX +diff --git a/src/devices/ilister.cpp b/src/devices/ilister.cpp +index c0140d9..a27f37b 100644 +--- a/src/devices/ilister.cpp ++++ b/src/devices/ilister.cpp +@@ -1,3 +1,4 @@ ++#include "config.h" + #include "ilister.h" + #include "imobiledeviceconnection.h" + +@@ -17,7 +18,11 @@ void iLister::Init() { + void iLister::EventCallback(const idevice_event_t* event, void* context) { + iLister* me = reinterpret_cast(context); + ++#ifdef IMOBILEDEVICE_USES_UDIDS ++ const char* uuid = event->udid; ++#else + const char* uuid = event->uuid; ++#endif + + switch (event->event) { + case IDEVICE_DEVICE_ADD: + diff --git a/clementine-1.2.2-glibc-2.19.patch b/clementine-1.2.2-glibc-2.19.patch new file mode 100644 index 0000000..f8cb040 --- /dev/null +++ b/clementine-1.2.2-glibc-2.19.patch @@ -0,0 +1,22 @@ +diff -ru Clementine-1.2.2/src/core/utilities.cpp Clementine-1.2.2.orig/src/core/utilities.cpp +--- Clementine-1.2.2/src/core/utilities.cpp 2014-03-07 15:44:34.000000000 +0100 ++++ Clementine-1.2.2.orig/src/core/utilities.cpp 2014-03-22 12:21:28.919223867 +0100 +@@ -50,6 +50,7 @@ + #endif + + #ifdef Q_OS_LINUX ++# include + # include + #endif + #ifdef Q_OS_DARWIN +diff -ru Clementine-1.2.2/src/internet/spotifyblobdownloader.cpp Clementine-1.2.2.orig/src/internet/spotifyblobdownloader.cpp +--- Clementine-1.2.2/src/internet/spotifyblobdownloader.cpp 2014-03-07 15:44:34.000000000 +0100 ++++ Clementine-1.2.2.orig/src/internet/spotifyblobdownloader.cpp 2014-03-22 16:07:52.461080157 +0100 +@@ -21,6 +21,7 @@ + #include "core/logging.h" + #include "core/network.h" + #include "core/utilities.h" ++#include "unistd.h" + + #include + #include diff --git a/clementine.spec b/clementine.spec new file mode 100644 index 0000000..a68dbcd --- /dev/null +++ b/clementine.spec @@ -0,0 +1,154 @@ +Name: clementine +Version: 1.2.3 +Release: 1mamba +Summary: A modern music player and library organiser +Group: Graphical Desktop/Applications/Multimedia +Vendor: openmamba +Distribution: openmamba +Packager: Silvan Calarco +URL: http://code.google.com/p/clementine-player/ +Source: https://github.com/clementine-player/Clementine.git/%{version}/Clementine-%{version}.tar.bz2 +#Source: http://clementine-player.googlecode.com/files/clementine-%{version}.tar.gz +Patch0: %{name}-0.6-optional-dbus-devicekit.patch +Patch1: %{name}-0.7.1-glibc-2.31.patch +Patch2: %{name}-1.0.1-libimobiledevice-1.1.2.patch +Patch3: clementine-1.2.2-glibc-2.19.patch +License: GPL +## AUTOBUILDREQ-BEGIN +BuildRequires: glibc-devel +BuildRequires: libcdio-devel +BuildRequires: libchromaprint-devel +BuildRequires: libfftw-devel +BuildRequires: libgcc +BuildRequires: libgdk-pixbuf-devel +BuildRequires: libGL-devel +BuildRequires: libglew-devel +BuildRequires: libglib-devel +BuildRequires: libGLU-devel +BuildRequires: libgpod-devel +BuildRequires: libgst-plugins-base010-devel +BuildRequires: libgstreamer010-devel +BuildRequires: libICE-devel +BuildRequires: libimobiledevice-devel +BuildRequires: libmtp-devel +BuildRequires: libopenssl-devel +BuildRequires: libplist-devel +BuildRequires: libqca-devel +BuildRequires: libqjson-devel +BuildRequires: libqt4-devel +BuildRequires: libSM-devel +BuildRequires: libstdc++6-devel +BuildRequires: libtag-devel +BuildRequires: libusb-devel +BuildRequires: libusbmuxd-devel +BuildRequires: libX11-devel +BuildRequires: libXext-devel +BuildRequires: libxml2-devel +BuildRequires: libz-devel +BuildRequires: protobuf-devel +## AUTOBUILDREQ-END +BuildRequires: cmake +BuildRequires: liblastfm-devel >= 0.3.3 +BuildRequires: libboost-devel +BuildRequires: protobuf-devel >= 2.4.1 +BuildRequires: libavformat-devel +Requires: udisks +Requires: upower +Requires: gst-plugins-good010 +Requires: gst-plugins-ugly010 +BuildRoot: %{_tmppath}/%{name}-%{version}-root + +%description +Clementine is a modern music player and library organiser. Clementine is a port of Amarok 1.4, with some features rewritten to take advantage of Qt4. + +%prep +%setup -q -n Clementine-%{version} +#%patch0 -p1 +#%patch1 -p1 +#%patch2 -p1 +#%patch3 -p1 + +%build +%cmake -d build +%make + +%install +[ "%{buildroot}" != / ] && rm -rf "%{buildroot}" +%makeinstall -C build + +%clean +[ "%{buildroot}" != / ] && rm -rf "%{buildroot}" + +%post +update-desktop-database &> /dev/null || : +touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : + +%postun +update-desktop-database &> /dev/null || : +if [ $1 -eq 0 ] ; then + touch --no-create %{_datadir}/icons/hicolor &>/dev/null + %{_bindir}/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : +fi +: + +%posttrans +%{_bindir}/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : + +%files +%defattr(-,root,root) +%{_bindir}/clementine-tagreader +%{_bindir}/clementine +%{_datadir}/applications/clementine.desktop +%{_datadir}/kde4/services/clementine-*.protocol +%{_datadir}/icons/hicolor/*/apps/application-x-clementine.png +%{_datadir}/icons/hicolor/scalable/apps/application-x-clementine.svg +%dir %{_datadir}/clementine +%dir %{_datadir}/clementine/projectm-presets +%{_datadir}/clementine/projectm-presets/* +%doc COPYING + +%changelog +* Sun Apr 27 2014 Automatic Build System 1.2.3-1mamba +- automatic version update by autodist + +* Sat Mar 01 2014 Silvan Calarco 1.2.2-1mamba +- update to 1.2.2 + +* Tue Nov 26 2013 Automatic Build System 1.2.1-1mamba +- automatic version update by autodist + +* Tue Nov 19 2013 Silvan Calarco 1.2.0-2mamba +- rebuilt with protobuf 2.5.0 + +* Sun Oct 20 2013 Automatic Build System 1.2.0-1mamba +- automatic version update by autodist + +* Sun Nov 18 2012 Automatic Build System 1.1.1-1mamba +- automatic version update by autodist + +* Sun Oct 28 2012 Silvan Calarco 1.1.0-2mamba +- require gst-plugins-good010 and gst-pluguns-ugly010 (devel) + +* Sat Oct 27 2012 Automatic Build System 1.1.0-1mamba +- automatic version update by autodist + +* Mon Aug 13 2012 Silvan Calarco 1.0.1-2mamba +- rebuilt with protobuf 2.4.1 + +* Tue May 15 2012 Silvan Calarco 1.0.1-1mamba +- update to 1.0.1 + +* Thu Nov 10 2011 Silvan Calarco 0.7.1-1mamba +- update to 0.7.1 + +* Sat Feb 19 2011 Silvan Calarco 0.6-1mamba +- update to 0.6 + +* Fri Dec 03 2010 Silvan Calarco 0.5.3-1mamba +- update to 0.5.3 + +* Tue Sep 21 2010 Silvan Calarco 0.5.1-1mamba +- update to 0.5.1 + +* Mon Sep 20 2010 Silvan Calarco 0.5-1mamba +- package created by autospec