Skip to content

Commit

Permalink
media-sound/cantata: Drop USE=kde,qt5 and simplify ebuild
Browse files Browse the repository at this point in the history
Add fixes for MPRIS and >=Plasma-5.7
X not used with Qt5 - upstream commit c934ae9ed5b8aeb3d8ff6a6b108b3cfe4fb30dea

Package-Manager: portage-2.3.0
  • Loading branch information
a17r authored and kensington committed Nov 5, 2016
1 parent 0c480f4 commit 5440184
Show file tree
Hide file tree
Showing 4 changed files with 280 additions and 0 deletions.
120 changes: 120 additions & 0 deletions media-sound/cantata/cantata-2.0.1-r1.ebuild
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=6

PLOCALES="cs de en_GB es fr hu ko pl ru zh_CN"
inherit cmake-utils gnome2-utils l10n qmake-utils xdg

DESCRIPTION="Featureful and configurable Qt client for the music player daemon (MPD)"
HOMEPAGE="https://github.com/CDrummond/cantata"
SRC_URI="https://github.com/CDrummond/cantata/releases/download/v${PV}/${P}.tar.bz2"

LICENSE="GPL-2"
SLOT="4"
KEYWORDS="~amd64 ~x86"
IUSE="cdda cddb http-server mtp musicbrainz replaygain taglib udisks"
REQUIRED_USE="
cdda? ( udisks || ( cddb musicbrainz ) )
cddb? ( cdda taglib )
mtp? ( taglib udisks )
musicbrainz? ( cdda taglib )
replaygain? ( taglib )
"

RDEPEND="
dev-db/sqlite:3
dev-qt/qtconcurrent:5
dev-qt/qtcore:5
dev-qt/qtdbus:5
dev-qt/qtgui:5
dev-qt/qtnetwork:5
dev-qt/qtsql:5
dev-qt/qtsvg:5
dev-qt/qtwidgets:5
dev-qt/qtxml:5
sys-libs/zlib
|| ( kde-frameworks/breeze-icons:5 kde-frameworks/oxygen-icons:* )
cdda? ( media-sound/cdparanoia )
cddb? ( media-libs/libcddb )
mtp? ( media-libs/libmtp )
musicbrainz? ( media-libs/musicbrainz:5 )
replaygain? (
media-libs/libebur128
media-sound/mpg123
virtual/ffmpeg
)
taglib? (
media-libs/taglib[asf(+),mp4(+)]
media-libs/taglib-extras
udisks? ( sys-fs/udisks:2 )
)
"
DEPEND="${RDEPEND}
dev-qt/linguist-tools:5
"

# cantata has no tests
RESTRICT="test"

PATCHES=(
"${FILESDIR}/${P}-mpris-true.patch"
"${FILESDIR}/${P}-mpris-plasma57.patch"
"${FILESDIR}/${P}-qt5-no-X11.patch"
)

src_prepare() {
cmake-utils_src_prepare

# Unbundle 3rd party libs
rm -rf 3rdparty/qtsingleapplication/ || die
rm -rf 3rdparty/libebur128/ || die
# qjson ebuild does not support Qt5 yet
rm -rf 3rdparty/qjson/ || die

l10n_find_plocales_changes 'po' '' '.po'
}

src_configure() {
local langs="$(l10n_get_locales)"

local mycmakeargs=(
-DCANTATA_TRANSLATIONS="${langs// /;}"
-DENABLE_CDPARANOIA=$(usex cdda)
-DENABLE_CDDB=$(usex cddb)
-DENABLE_HTTP_SERVER=$(usex http-server)
-DENABLE_MTP=$(usex mtp)
-DENABLE_MUSICBRAINZ=$(usex musicbrainz)
-DENABLE_QT5=ON
-DLCONVERT_EXECUTABLE="$(qt5_get_bindir)/lconvert"
-DLRELEASE_EXECUTABLE="$(qt5_get_bindir)/lrelease"
-DENABLE_FFMPEG=$(usex replaygain)
-DENABLE_MPG123=$(usex replaygain)
-DENABLE_TAGLIB=$(usex taglib)
-DENABLE_TAGLIB_EXTRAS=$(usex taglib)
-DENABLE_DEVICES_SUPPORT=$(usex udisks)
-DENABLE_HTTP_STREAM_PLAYBACK=OFF
-DENABLE_REMOTE_DEVICES=OFF
-DENABLE_UDISKS2=ON
-DUSE_SYSTEM_MENU_ICON=OFF
)
# -DENABLE_KDE=$(usex kde) # not yet ported to KF5

cmake-utils_src_configure
}

pkg_preinst() {
gnome2_icon_savelist
xdg_pkg_preinst
}

pkg_postinst() {
gnome2_icon_cache_update
xdg_pkg_postinst
}

pkg_postrm() {
gnome2_icon_cache_update
xdg_pkg_postrm
}
46 changes: 46 additions & 0 deletions media-sound/cantata/files/cantata-2.0.1-mpris-plasma57.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
Work-around KDE 5.7 MPRIS issues.

diff --git a/gui/mainwindow.cpp b/gui/mainwindow.cpp
index cc2b532..37eec9e 100644
--- a/gui/mainwindow.cpp
+++ b/gui/mainwindow.cpp
@@ -1410,8 +1410,8 @@ void MainWindow::setRating()
}
}

-void MainWindow::readSettings()
-{
+void MainWindow::initMpris()
+{
#ifdef QT_QTDBUS_FOUND
if (Settings::self()->mpris()) {
if (!mpris) {
@@ -1424,6 +1424,16 @@ void MainWindow::readSettings()
mpris=0;
}
CurrentCover::self()->setEnabled(mpris || Settings::self()->showPopups() || 0!=Settings::self()->playQueueBackground() || Settings::self()->showCoverWidget());
+ #endif
+}
+
+void MainWindow::readSettings()
+{
+ #ifdef QT_QTDBUS_FOUND
+ // It appears as if the KDE MPRIS code does not like the MPRIS interface to be setup before the window is visible.
+ // to work-around this, initMpris in the next event loop iteration.
+ // See #863
+ QTimer::singleShot(0, this, SLOT(initMpris()));
#else
CurrentCover::self()->setEnabled(Settings::self()->showPopups() || 0!=Settings::self()->playQueueBackground() || Settings::self()->showCoverWidget());
#endif
diff --git a/gui/mainwindow.h b/gui/mainwindow.h
index 6d6e960..aa3a80a 100644
--- a/gui/mainwindow.h
+++ b/gui/mainwindow.h
@@ -268,6 +268,7 @@ public Q_SLOTS:
private Q_SLOTS:
void toggleContext();
void toggleMenubar();
+ void initMpris();

private:
int prevPage;
100 changes: 100 additions & 0 deletions media-sound/cantata/files/cantata-2.0.1-mpris-true.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
Always return true for MPRIS CanPlay, CanPause, etc.

diff --git a/dbus/mpris.cpp b/dbus/mpris.cpp
index 4736d19..45a539a 100644
--- a/dbus/mpris.cpp
+++ b/dbus/mpris.cpp
@@ -65,6 +65,31 @@ Mpris::~Mpris()
QDBusConnection::sessionBus().unregisterService("org.mpris.MediaPlayer2.cantata");
}

+void Mpris::Pause()
+{
+ if (MPDState_Playing==MPDStatus::self()->state()) {
+ StdActions::self()->playPauseTrackAction->trigger();
+ }
+}
+
+void Mpris::Play()
+{
+ MPDStatus * const status = MPDStatus::self();
+ if (status->playlistLength() && MPDState_Playing!=status->state()) {
+ StdActions::self()->playPauseTrackAction->trigger();
+ }
+}
+
+QString Mpris::PlaybackStatus() const
+{
+ switch(MPDStatus::self()->state()) {
+ case MPDState_Playing: return QLatin1String("Playing");
+ case MPDState_Paused: return QLatin1String("Paused");
+ default:
+ case MPDState_Stopped: return QLatin1String("Stopped");
+ }
+}
+
qlonglong Mpris::Position() const
{
// Cant use MPDStatus, as we dont poll for track position, but use a timer instead!
diff --git a/dbus/mpris.h b/dbus/mpris.h
index 64a4fbe..a1578b9 100644
--- a/dbus/mpris.h
+++ b/dbus/mpris.h
@@ -71,37 +71,15 @@ class Mpris : public QObject
// org.mpris.MediaPlayer2.Player
void Next() { StdActions::self()->nextTrackAction->trigger(); }
void Previous() { StdActions::self()->prevTrackAction->trigger(); }
- void Pause() {
- if (MPDState_Playing==MPDStatus::self()->state()) {
- StdActions::self()->playPauseTrackAction->trigger();
- }
- }
-
+ void Pause();
void PlayPause() { StdActions::self()->playPauseTrackAction->trigger(); }
void Stop() { StdActions::self()->stopPlaybackAction->trigger(); }
void StopAfterCurrent() { StdActions::self()->stopAfterCurrentTrackAction->trigger(); }
-
- void Play() {
- MPDStatus * const status = MPDStatus::self();
-
- if (status->playlistLength() && MPDState_Playing!=status->state()) {
- StdActions::self()->playPauseTrackAction->trigger();
- }
- }
-
+ void Play();
void Seek(qlonglong pos) { emit setSeekId(-1, pos/1000000); }
void SetPosition(const QDBusObjectPath &, qlonglong pos) {emit setSeekId(-1, pos/1000000); }
void OpenUri(const QString &) { }
-
- QString PlaybackStatus() {
- switch(MPDStatus::self()->state()) {
- case MPDState_Playing: return QLatin1String("Playing");
- case MPDState_Paused: return QLatin1String("Paused");
- default:
- case MPDState_Stopped: return QLatin1String("Stopped");
- }
- }
-
+ QString PlaybackStatus() const;
QString LoopStatus() { return MPDStatus::self()->repeat() ? QLatin1String("Playlist") : QLatin1String("None"); }
void SetLoopStatus(const QString &s) { emit setRepeat(QLatin1String("None")!=s); }
QVariantMap Metadata() const;
@@ -115,11 +93,11 @@ class Mpris : public QObject
double MinimumRate() const { return 1.0; }
double MaximumRate() const { return 1.0; }
bool CanControl() const { return true; }
- bool CanPlay() const { return MPDState_Playing!=MPDStatus::self()->state() && MPDStatus::self()->playlistLength()>0; }
- bool CanPause() const { return MPDState_Playing==MPDStatus::self()->state(); }
- bool CanSeek() const { return -1!=MPDStatus::self()->songId(); }
- bool CanGoNext() const { return MPDState_Stopped!=MPDStatus::self()->state() && MPDStatus::self()->playlistLength()>1; }
- bool CanGoPrevious() const { return MPDState_Stopped!=MPDStatus::self()->state() && MPDStatus::self()->playlistLength()>1; }
+ bool CanPlay() const { return true; }
+ bool CanPause() const { return true; }
+ bool CanSeek() const { return true; }
+ bool CanGoNext() const { return true; }
+ bool CanGoPrevious() const { return true; }

// org.mpris.MediaPlayer2
bool CanQuit() const { return true; }
14 changes: 14 additions & 0 deletions media-sound/cantata/files/cantata-2.0.1-qt5-no-X11.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
diff --git a/support/CMakeLists.txt b/support/CMakeLists.txt
index fcdaf5c..f6160f0 100644
--- a/support/CMakeLists.txt
+++ b/support/CMakeLists.txt
@@ -89,7 +89,7 @@ if (NOT ENABLE_UBUNTU AND NOT ENABLE_WEB)

add_library(support STATIC ${SUPPORT_MOC_SRCS} ${SUPPORT_SRCS} ${SUPPORT_UI_HDRS} ${SUPPORT_RC_SRCS})

- if (X11_FOUND)
+ if (NOT ENABLE_QT5 AND X11_FOUND)
target_link_libraries(support ${X11_LIBRARIES})
- endif (X11_FOUND)
+ endif (NOT ENABLE_QT5 AND X11_FOUND)
endif (NOT ENABLE_UBUNTU AND NOT ENABLE_WEB)

0 comments on commit 5440184

Please sign in to comment.