aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/mediaplayer/mp_mprisinterface.cpp
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2011-01-01 20:19:56 +0000
committerGravatar Szymon Tomasz Stefanek2011-01-01 20:19:56 +0000
commitc601b5a27f74b16158adafe429faefbe573e64a2 (patch)
treea3cde3206a45628f8ac86e8dfbdab70b20c3a831 /src/modules/mediaplayer/mp_mprisinterface.cpp
parentprobable compilation fix for rijndaled/crypto++ (diff)
downloadKVIrc-c601b5a27f74b16158adafe429faefbe573e64a2.tar.gz
KVIrc-c601b5a27f74b16158adafe429faefbe573e64a2.tar.bz2
KVIrc-c601b5a27f74b16158adafe429faefbe573e64a2.zip
The big rename for modules. Still some details remaining.
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5284 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/mediaplayer/mp_mprisinterface.cpp')
-rw-r--r--src/modules/mediaplayer/mp_mprisinterface.cpp579
1 files changed, 0 insertions, 579 deletions
diff --git a/src/modules/mediaplayer/mp_mprisinterface.cpp b/src/modules/mediaplayer/mp_mprisinterface.cpp
deleted file mode 100644
index 3bc59730e..000000000
--- a/src/modules/mediaplayer/mp_mprisinterface.cpp
+++ /dev/null
@@ -1,579 +0,0 @@
-//=============================================================================
-//
-// File : mp_mprisinterface.cpp
-// Creation date : Thu 06 Dec 2007 14:20:02 by Tomasz Moń
-//
-// This file is part of the KVIrc IRC client distribution
-// Copyright (C) 2007-2009 Tomasz Moń <desowin@gmail.com>
-//
-// This program is FREE software. You can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your opinion) any later version.
-//
-// This program is distributed in the HOPE that it will be USEFUL,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, write to the Free Software Foundation,
-// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-//
-//=============================================================================
-
-#include "mp_mprisinterface.h"
-#if (defined(COMPILE_DBUS_SUPPORT) && !defined(COMPILE_ON_WINDOWS) && !defined(COMPILE_ON_MAC) && !defined(COMPILE_ON_MINGW))
-#include "KviLocale.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()
-{
-}
-
-int KviMPRISInterface::detect(bool)
-{
- QDBusReply<QStringList> reply = QDBusConnection::sessionBus().interface()->registeredServiceNames();
- if (!reply.isValid()) /* something fishy with dbus, it won't work */
- return 0;
-
- foreach (QString name, reply.value())
- if (name == m_szServiceName) /* player is running */
- return 100;
-
- return 1; /* dbus works, player may be closed */
-}
-
-#define MPRIS_SIMPLE_CALL(__path, __action) \
- QDBusInterface dbus_iface(m_szServiceName, __path, \
- "org.freedesktop.MediaPlayer", QDBusConnection::sessionBus()); \
- QDBusMessage reply = dbus_iface.call(QDBus::Block, __action); \
- if (reply.type() == QDBusMessage::ErrorMessage) { \
- QDBusError err = reply; \
- qDebug("Error: %s\n%s\n", qPrintable(err.name()), qPrintable(err.message())); \
- return FALSE; \
- } \
- return TRUE;
-
-bool KviMPRISInterface::prev()
-{
- MPRIS_SIMPLE_CALL("/Player", "Prev")
-}
-
-bool KviMPRISInterface::next()
-{
- MPRIS_SIMPLE_CALL("/Player", "Next")
-}
-
-bool KviMPRISInterface::play()
-{
- MPRIS_SIMPLE_CALL("/Player", "Play")
-}
-
-bool KviMPRISInterface::stop()
-{
- MPRIS_SIMPLE_CALL("/Player", "Stop")
-}
-
-bool KviMPRISInterface::pause()
-{
- MPRIS_SIMPLE_CALL("/Player", "Pause")
-}
-
-bool KviMPRISInterface::quit()
-{
- MPRIS_SIMPLE_CALL("/", "Quit")
-}
-
-#define MPRIS_CALL_METHOD(__method, __return_if_fail) \
- QDBusInterface dbus_iface(m_szServiceName, "/Player", \
- "org.freedesktop.MediaPlayer", QDBusConnection::sessionBus()); \
- QDBusMessage reply = dbus_iface.call(QDBus::Block, __method); \
- if (reply.type() == QDBusMessage::ErrorMessage) { \
- QDBusError err = reply; \
- qDebug("Error: %s\n%s\n", qPrintable(err.name()), qPrintable(err.message())); \
- return __return_if_fail; \
- }
-
-#define MPRIS_GET_METADATA_FIELD(__field, __return_type, __return_if_fail) \
- if (this->status() != KviMediaPlayerInterface::Playing) \
- return __return_if_fail; \
- MPRIS_CALL_METHOD("GetMetadata", __return_if_fail) \
- foreach (QVariant v, reply.arguments()) { \
- QDBusArgument arg = qvariant_cast<QDBusArgument>(v); \
- QVariant v = qdbus_cast<QVariantMap>(arg); \
- if (v.userType() == QVariant::Map) { \
- const QVariantMap map = v.toMap(); \
- QVariantMap::ConstIterator it = map.find(__field); \
- if (it != map.end() && it.key() == __field) { \
- return it.value().value< __return_type >(); \
- } \
- } \
- } \
- return __return_if_fail;
-
-#define MPRIS_CALL_METHOD_WITH_ARG(__method, __arg, __return_if_fail) \
- QDBusInterface dbus_iface(m_szServiceName, "/Player", \
- "org.freedesktop.MediaPlayer", QDBusConnection::sessionBus()); \
- QDBusMessage reply = dbus_iface.call(QDBus::Block, __method, __arg); \
- if (reply.type() == QDBusMessage::ErrorMessage) { \
- QDBusError err = reply; \
- qDebug("Error: %s\n%s\n", qPrintable(err.name()), qPrintable(err.message())); \
- return __return_if_fail; \
- }
-
-KviMediaPlayerInterface::PlayerStatus KviMPRISInterface::status()
-{
- MPRIS_CALL_METHOD("GetStatus", KviMediaPlayerInterface::Unknown)
-
- MPRISPlayerStatus status;
-
- if(reply.arguments().isEmpty())
- return KviMediaPlayerInterface::Unknown;
-
- status = qdbus_cast<MPRISPlayerStatus>(reply.arguments().first());
-
- switch (status.Play) {
- case 0: return KviMediaPlayerInterface::Playing;
- case 1: return KviMediaPlayerInterface::Paused;
- case 2: return KviMediaPlayerInterface::Stopped;
- default: return KviMediaPlayerInterface::Unknown;
- }
-}
-
-QString KviMPRISInterface::nowPlaying()
-{
- if (this->status() != KviMediaPlayerInterface::Playing)
- return "";
-
- MPRIS_CALL_METHOD("GetMetadata", "")
-
- QString artist;
- QString title;
- foreach (QVariant v, reply.arguments()) {
- QDBusArgument arg = qvariant_cast<QDBusArgument>(v);
- QVariant v = qdbus_cast<QVariantMap>(arg);
- if (v.userType() == QVariant::Map) {
- const QVariantMap map = v.toMap();
- QVariantMap::ConstIterator it = map.constBegin();
- for ( ; it != map.constEnd(); ++it) { /* maybe do some configureable formatting */
- if (it.key() == "artist")
- artist = it.value().toString();
- else if (it.key() == "title")
- title = it.value().toString();
- }
- }
- }
- if (artist.length() && title.length())
- return artist + " - " + title;
- else
- return "";
-}
-
-QString KviMPRISInterface::mrl()
-{
- MPRIS_CALL_METHOD("GetMetadata", "")
-
- foreach (QVariant v, reply.arguments()) {
- QDBusArgument arg = qvariant_cast<QDBusArgument>(v);
- QVariant v = qdbus_cast<QVariantMap>(arg);
- if (v.userType() == QVariant::Map) {
- const QVariantMap map = v.toMap();
- QVariantMap::ConstIterator it = map.find("location");
- if (it != map.end() && it.key() == "location") {
- return it.value().toString();
- }
- }
- }
- return "";
-}
-
-QString KviMPRISInterface::title()
-{
- MPRIS_GET_METADATA_FIELD("title", QString, "")
-}
-
-QString KviMPRISInterface::artist()
-{
- MPRIS_GET_METADATA_FIELD("artist", QString, "")
-}
-
-QString KviMPRISInterface::genre()
-{
- MPRIS_GET_METADATA_FIELD("genre", QString, "")
-}
-
-QString KviMPRISInterface::comment()
-{
- MPRIS_GET_METADATA_FIELD("comment", QString, "")
-}
-
-QString KviMPRISInterface::year()
-{
- MPRIS_GET_METADATA_FIELD("year", QString, "")
-}
-
-QString KviMPRISInterface::album()
-{
- MPRIS_GET_METADATA_FIELD("album", QString, "")
-}
-
-int KviMPRISInterface::bitRate()
-{
- MPRIS_GET_METADATA_FIELD("audio-bitrate", int, -1)
-}
-
-int KviMPRISInterface::sampleRate()
-{
- MPRIS_GET_METADATA_FIELD("audio-samplerate", int, -1)
-}
-
-bool KviMPRISInterface::setVol(kvs_int_t &iVol)
-{
- MPRIS_CALL_METHOD_WITH_ARG("VolumeSet", QVariant((int)(100*iVol/255)), false);
- return true;
-}
-
-int KviMPRISInterface::getVol()
-{
- MPRIS_CALL_METHOD("VolumeGet", -1)
-
- int iVol = reply.arguments().first().toInt();
- return iVol * 255 /100;
-}
-
-int KviMPRISInterface::position()
-{
- MPRIS_CALL_METHOD("PositionGet", -1)
- return reply.arguments().first().toInt();
-}
-
-int KviMPRISInterface::length()
-{
- MPRIS_CALL_METHOD("GetMetadata", -1)
-
- foreach (QVariant v, reply.arguments()) {
- QDBusArgument arg = qvariant_cast<QDBusArgument>(v);
- QVariant v = qdbus_cast<QVariantMap>(arg);
- if (v.userType() == QVariant::Map) {
- const QVariantMap map = v.toMap();
- QVariantMap::ConstIterator it = map.constBegin();
- for ( ; it != map.constEnd(); ++it) {
- if (it.key() == "mtime")
- return it.value().toInt();
- }
- }
- }
- return -1;
-}
-
-bool KviMPRISInterface::jumpTo(kvs_int_t &iPos)
-{
- MPRIS_CALL_METHOD_WITH_ARG("PositionSet", QVariant((int)iPos), false)
- return true;
-}
-
-/* audacious interface */
-MP_IMPLEMENT_DESCRIPTOR(
- KviAudaciousInterface,
- "audacious",
- __tr2qs_ctx(
- "An interface to the popular audacious media player.\n" \
- "Download it from http://audacious-media-player.org\n"
- ,
- "mediaplayer"
- )
-)
-
-KviAudaciousInterface::KviAudaciousInterface()
-: KviMPRISInterface()
-{
- m_szServiceName = "org.mpris.audacious";
-}
-
-int KviAudaciousInterface::getPlayListPos()
-{
- QDBusInterface dbus_iface("org.mpris.audacious", "/org/atheme/audacious",
- "org.atheme.audacious", QDBusConnection::sessionBus());
- QDBusReply<uint> pos = dbus_iface.call(QDBus::Block, "Position");
- return pos;
-}
-
-
-bool KviAudaciousInterface::quit()
-{
- if (KviMPRISInterface::quit())
- return TRUE;
-
- /* compability with older versions */
- MPRIS_SIMPLE_CALL("/Player", "Quit")
-}
-
-QString KviAudaciousInterface::mrl()
-{
- MPRIS_CALL_METHOD("GetMetadata", "")
-
- foreach (QVariant v, reply.arguments()) {
- QDBusArgument arg = qvariant_cast<QDBusArgument>(v);
- QVariant v = qdbus_cast<QVariantMap>(arg);
- if (v.userType() == QVariant::Map) {
- const QVariantMap map = v.toMap();
- QVariantMap::ConstIterator it = map.find("location");
- if (it != map.end() && it.key() == "location") {
- return it.value().toString();
- }
- /* Some audacious versions send URI instead of location */
- it = map.find("URI");
- if (it != map.end() && it.key() == "URI") {
- return it.value().toString();
- }
- }
- }
- return "";
-}
-
-KviMediaPlayerInterface::PlayerStatus KviAudaciousInterface::status()
-{
- KviMediaPlayerInterface::PlayerStatus status;
- status = KviMPRISInterface::status();
- if (status != KviMediaPlayerInterface::Unknown)
- return status;
-
- /* compability with older versions */
- QDBusInterface dbus_iface(m_szServiceName, "/Player",
- "org.freedesktop.MediaPlayer", QDBusConnection::sessionBus());
- if (!dbus_iface.isValid())
- return KviMediaPlayerInterface::Unknown;
-
- QDBusMessage reply = dbus_iface.call(QDBus::Block, "GetStatus");
-
- switch (reply.arguments().first().toInt()) {
- case 0: return KviMediaPlayerInterface::Playing;
- case 1: return KviMediaPlayerInterface::Paused;
- case 2: return KviMediaPlayerInterface::Stopped;
- default: return KviMediaPlayerInterface::Unknown;
- }
-}
-
-int KviAudaciousInterface::length()
-{
- int length = KviMPRISInterface::length();
- if (length != -1)
- return length;
-
- /* compability with older versions */
- MPRIS_CALL_METHOD("GetMetadata", -1)
-
- foreach (QVariant v, reply.arguments()) {
- QDBusArgument arg = qvariant_cast<QDBusArgument>(v);
- QVariant v = qdbus_cast<QVariantMap>(arg);
- if (v.userType() == QVariant::Map) {
- const QVariantMap map = v.toMap();
- QVariantMap::ConstIterator it = map.constBegin();
- for ( ; it != map.constEnd(); ++it) {
- if (it.key() == "length")
- return it.value().toInt();
- }
- }
- }
- return -1;
-}
-
-#define AUDACIOUS_GET_TUPLE_FIELD(__field) \
- if (this->status() != KviMediaPlayerInterface::Playing) \
- return ""; \
- QDBusInterface dbus_iface("org.mpris.audacious", "/org/atheme/audacious", \
- "org.atheme.audacious", QDBusConnection::sessionBus()); \
- QList<QVariant> args; \
- args << (uint)this->getPlayListPos() << QString(__field); \
- QDBusReply<QDBusVariant> reply = dbus_iface.callWithArgumentList(QDBus::Block, "SongTuple", args); \
- return reply.value().variant().toString(); \
-
-QString KviAudaciousInterface::year()
-{
- AUDACIOUS_GET_TUPLE_FIELD("year")
-}
-
-QString KviAudaciousInterface::mediaType()
-{
- AUDACIOUS_GET_TUPLE_FIELD("codec")
-}
-
-/* BMPx interface */
-MP_IMPLEMENT_DESCRIPTOR(
- KviBmpxInterface,
- "bmpx",
- __tr2qs_ctx(
- "An interface to BMPx.\n" \
- "Download it from http://sourceforge.net/projects/beepmp\n"
- ,
- "mediaplayer"
- )
-)
-
-KviBmpxInterface::KviBmpxInterface()
-: KviMPRISInterface()
-{
- m_szServiceName = "org.mpris.bmp";
-}
-
-/* BMPx doesn't provide GetStatus method, always assume Playing status */
-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";
-}
-
-/* Qmmp interface */
-MP_IMPLEMENT_DESCRIPTOR(
- KviQmmpInterface,
- "Qmmp",
- __tr2qs_ctx(
- "An interface to Qmmp.\n" \
- "Download it from http://qmmp.ylsoftware.com\n"
- ,
- "mediaplayer"
- )
-)
-
-KviQmmpInterface::KviQmmpInterface()
-: KviMPRISInterface()
-{
- m_szServiceName = "org.mpris.qmmp";
-}
-
-/* xmms2 interface */
-MP_IMPLEMENT_DESCRIPTOR(
- KviXmms2Interface,
- "xmms2",
- __tr2qs_ctx(
- "An interface to the Xmms2 media player.\n" \
- "Download it from http://xmms2.org\n",
- "mediaplayer"
- )
-)
-
-KviXmms2Interface::KviXmms2Interface()
-: KviMPRISInterface()
-{
- m_szServiceName = "org.mpris.xmms2";
-}
-
-/* mozilla songbird interface */
-MP_IMPLEMENT_DESCRIPTOR(
- KviSongbirdInterface,
- "songbird",
- __tr2qs_ctx(
- "An interface to the Mozilla Songbird media player.\n" \
- "Download it from http://www.getsongbird.com.\n" \
- "To use it you have to install also the MPRIS addon " \
- "available at http://addons.songbirdnest.com/addon/1626.\n",
- "mediaplayer"
- )
-)
-
-KviSongbirdInterface::KviSongbirdInterface()
-: KviMPRISInterface()
-{
- m_szServiceName = "org.mpris.songbird";
-}
-
-KviMediaPlayerInterface::PlayerStatus KviSongbirdInterface::status()
-{
- return KviMediaPlayerInterface::Playing;
-}
-
-/* Totem interface */
-MP_IMPLEMENT_DESCRIPTOR(
- KviTotemInterface,
- "totem",
- __tr2qs_ctx(
- "An interface to Totem.\n" \
- "Download it from http://projects.gnome.org/totem/\n"
- ,
- "mediaplayer"
- )
-)
-
-KviTotemInterface::KviTotemInterface()
-: KviMPRISInterface()
-{
- m_szServiceName = "org.mpris.Totem";
-}
-
-/* Vlc interface */
-MP_IMPLEMENT_DESCRIPTOR(
- KviVlcInterface,
- "vlc",
- __tr2qs_ctx(
- "An interface to Vlc.\n" \
- "Download it from http://www.videolan.org/\n" \
- "You need to manually enable the DBus control\n" \
- "interface in the Vlc preferences\n" \
- ,
- "mediaplayer"
- )
-)
-
-KviVlcInterface::KviVlcInterface()
-: KviMPRISInterface()
-{
- m_szServiceName = "org.mpris.vlc";
-}
-#endif //COMPILE_ON_WINDOWS