aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar Tomasz Moń2008-09-07 20:54:48 +0000
committerGravatar Tomasz Moń2008-09-07 20:54:48 +0000
commitb18f760b876b5488affbb0fd3da30eba12b3490f (patch)
tree92fc5e30a4819e292b4d58b9dfdf7bd437400436 /src/modules
parentFixing compilation w/o SSL (diff)
downloadKVIrc-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')
-rw-r--r--src/modules/mediaplayer/libkvimediaplayer.cpp1
-rw-r--r--src/modules/mediaplayer/mp_mprisinterface.cpp73
-rw-r--r--src/modules/mediaplayer/mp_mprisinterface.h12
3 files changed, 84 insertions, 2 deletions
diff --git a/src/modules/mediaplayer/libkvimediaplayer.cpp b/src/modules/mediaplayer/libkvimediaplayer.cpp
index 0263308b0..ad41e9a27 100644
--- a/src/modules/mediaplayer/libkvimediaplayer.cpp
+++ b/src/modules/mediaplayer/libkvimediaplayer.cpp
@@ -1611,6 +1611,7 @@ static bool mediaplayer_module_init( KviModule * m )
g_pDescriptorList->append(MP_CREATE_DESCRIPTOR(KviXmmsInterface));
g_pDescriptorList->append(MP_CREATE_DESCRIPTOR(KviXmms2Interface));
g_pDescriptorList->append(MP_CREATE_DESCRIPTOR(KviBmpxInterface));
+ g_pDescriptorList->append(MP_CREATE_DESCRIPTOR(KviAmarok2Interface));
#endif
#if defined(COMPILE_ON_WINDOWS) || defined(COMPILE_ON_MINGW)
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
diff --git a/src/modules/mediaplayer/mp_mprisinterface.h b/src/modules/mediaplayer/mp_mprisinterface.h
index 0405b9b91..c74fa2e2a 100644
--- a/src/modules/mediaplayer/mp_mprisinterface.h
+++ b/src/modules/mediaplayer/mp_mprisinterface.h
@@ -44,6 +44,7 @@
virtual bool stop();
virtual bool pause();
virtual bool quit();
+ virtual KviMediaPlayerInterface::PlayerStatus status();
virtual QString nowPlaying();
virtual QString mrl();
virtual QString title();
@@ -79,10 +80,17 @@
KviBmpxInterface();
virtual KviMediaPlayerInterface::PlayerStatus status();
};
-
+
+ class KviAmarok2Interface : public KviMPRISInterface
+ {
+ public:
+ KviAmarok2Interface();
+ };
+
MP_DECLARE_DESCRIPTOR(KviAudaciousInterface)
MP_DECLARE_DESCRIPTOR(KviBmpxInterface)
-
+ MP_DECLARE_DESCRIPTOR(KviAmarok2Interface)
+
#endif //!COMPILE_ON_WINDOWS
#endif //!_MP_AUDACIOUSINTERFACE_H_