diff options
| author | 2008-09-07 20:54:48 +0000 | |
|---|---|---|
| committer | 2008-09-07 20:54:48 +0000 | |
| commit | b18f760b876b5488affbb0fd3da30eba12b3490f (patch) | |
| tree | 92fc5e30a4819e292b4d58b9dfdf7bd437400436 /src/modules/mediaplayer/mp_mprisinterface.cpp | |
| parent | Fixing compilation w/o SSL (diff) | |
| download | KVIrc-b18f760b876b5488affbb0fd3da30eba12b3490f.tar.gz KVIrc-b18f760b876b5488affbb0fd3da30eba12b3490f.tar.bz2 KVIrc-b18f760b876b5488affbb0fd3da30eba12b3490f.zip | |
add amarok2 interface
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@2418 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/mediaplayer/mp_mprisinterface.cpp')
| -rw-r--r-- | src/modules/mediaplayer/mp_mprisinterface.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/modules/mediaplayer/mp_mprisinterface.cpp b/src/modules/mediaplayer/mp_mprisinterface.cpp index 48707bd57..28ea4940d 100644 --- a/src/modules/mediaplayer/mp_mprisinterface.cpp +++ b/src/modules/mediaplayer/mp_mprisinterface.cpp @@ -26,9 +26,44 @@ #if (!defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MAC) && !defined(COMPILE_ON_MINGW)) #include "kvi_locale.h" +/* + according to MPRIS 1.0, GetStatus returns struct of 4 integers. + + First integer: 0 = Playing, 1 = Paused, 2 = Stopped. + Second interger: 0 = Playing linearly , 1 = Playing randomly. + Third integer: 0 = Go to the next element once the current has finished playing , 1 = Repeat the current element + Fourth integer: 0 = Stop playing once the last element has been played, 1 = Never give up playing +*/ + +struct MPRISPlayerStatus +{ + int Play; + int Random; + int RepeatCurrent; + int RepeatPlaylist; +}; +Q_DECLARE_METATYPE( MPRISPlayerStatus ) + +QDBusArgument &operator<<(QDBusArgument &argument, const MPRISPlayerStatus &status) +{ + argument.beginStructure(); + argument << status.Play << status.Random << status.RepeatCurrent << status.RepeatPlaylist; + argument.endStructure(); + return argument; +}; + +const QDBusArgument &operator>>(const QDBusArgument &argument, MPRISPlayerStatus &status) +{ + argument.beginStructure(); + argument >> status.Play >> status.Random >> status.RepeatCurrent >> status.RepeatPlaylist; + argument.endStructure(); + return argument; +}; + KviMPRISInterface::KviMPRISInterface() : KviMediaPlayerInterface() { + qDBusRegisterMetaType<MPRISPlayerStatus>(); } KviMPRISInterface::~KviMPRISInterface() @@ -89,6 +124,26 @@ bool KviMPRISInterface::quit() MPRIS_SIMPLE_CALL("/", "Quit") } +KviMediaPlayerInterface::PlayerStatus KviMPRISInterface::status() +{ + QDBusInterface dbus_iface(m_szServiceName, "/Player", + "org.freedesktop.MediaPlayer", QDBusConnection::sessionBus()); + if (!dbus_iface.isValid()) + return KviMediaPlayerInterface::Unknown; + + QDBusReply<MPRISPlayerStatus> reply = dbus_iface.call(QDBus::Block, "GetStatus"); + + if (!reply.isValid()) + return KviMediaPlayerInterface::Unknown; + + switch (reply.value().Play) { + case 0: return KviMediaPlayerInterface::Playing; + case 1: return KviMediaPlayerInterface::Paused; + case 2: return KviMediaPlayerInterface::Stopped; + default: return KviMediaPlayerInterface::Unknown; + } +} + #define MPRIS_CALL_METHOD(__method, __return_if_fail) \ QDBusInterface dbus_iface(m_szServiceName, "/Player", \ "org.freedesktop.MediaPlayer", QDBusConnection::sessionBus()); \ @@ -378,4 +433,22 @@ KviMediaPlayerInterface::PlayerStatus KviBmpxInterface::status() return KviMediaPlayerInterface::Playing; } +/* Amarok2 interface */ +MP_IMPLEMENT_DESCRIPTOR( + KviAmarok2Interface, + "amarok2", + __tr2qs_ctx( + "An interface to Amarok2.\n" \ + "Download it from http://amarok.kde.org\n" + , + "mediaplayer" + ) +) + +KviAmarok2Interface::KviAmarok2Interface() +: KviMPRISInterface() +{ + m_szServiceName = "org.mpris.amarok"; +} + #endif //!COMPILE_ON_WINDOWS |
