From 8873de6f03670480886ea808a26eeb882a8ff0a6 Mon Sep 17 00:00:00 2001 From: Tomasz Moń Date: Sat, 10 May 2008 19:45:49 +0000 Subject: copy'n'paste'n'sed is bad, use inheritance instead git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@1741 17fca916-40b9-46aa-a4ea-0a15b648b75c --- src/modules/mediaplayer/mp_xmms2interface.cpp | 272 +------------------------- 1 file changed, 3 insertions(+), 269 deletions(-) (limited to 'src/modules/mediaplayer/mp_xmms2interface.cpp') diff --git a/src/modules/mediaplayer/mp_xmms2interface.cpp b/src/modules/mediaplayer/mp_xmms2interface.cpp index c3412b8ca..59dda8314 100644 --- a/src/modules/mediaplayer/mp_xmms2interface.cpp +++ b/src/modules/mediaplayer/mp_xmms2interface.cpp @@ -30,282 +30,16 @@ MP_IMPLEMENT_DESCRIPTOR( KviXmms2Interface, "audacious", __tr2qs_ctx( - "An interface to the popular xmms2 media player.\n" \ + "An interface to the xmms2 media player.\n" \ "Download it from http://wiki.xmms2.xmms.se/index.php/Main_Page\n", "mediaplayer" ) ) KviXmms2Interface::KviXmms2Interface() -: KviMediaPlayerInterface() +: KviMPRISInterface() { -} - -KviXmms2Interface::~KviXmms2Interface() -{ -} - -int KviXmms2Interface::detect(bool bStart) -{ - QDBusReply 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 == "org.mpris.xmms2") /* audacious is running */ - return 100; - - return 1; /* dbus works, audacious may be closed */ -} - -#define XMMS2_SIMPLE_CALL(__action) \ - QDBusInterface dbus_iface("org.mpris.xmms2", "/Player", \ - "org.freedesktop.MediaPlayer", QDBusConnection::sessionBus()); \ - QDBusMessage reply = dbus_iface.call(QDBus::Block, __action); \ - if (reply.type() == QDBusMessage::ErrorMessage) { \ - QDBusError err = reply; \ - debug("Error: %s\n%s\n", qPrintable(err.name()), qPrintable(err.message())); \ - return FALSE; \ - } \ - return TRUE; - -bool KviXmms2Interface::prev() -{ - XMMS2_SIMPLE_CALL("Prev") -} - -bool KviXmms2Interface::next() -{ - XMMS2_SIMPLE_CALL("Next") -} - -bool KviXmms2Interface::play() -{ - XMMS2_SIMPLE_CALL("Play") -} - -bool KviXmms2Interface::stop() -{ - XMMS2_SIMPLE_CALL("Stop") -} - -bool KviXmms2Interface::pause() -{ - XMMS2_SIMPLE_CALL("Pause") -} - -bool KviXmms2Interface::quit() -{ - XMMS2_SIMPLE_CALL("Quit") -} - -#define XMMS2_CALL_METHOD(__method, __return_if_fail) \ - QDBusInterface dbus_iface("org.mpris.xmms2", "/Player", \ - "org.freedesktop.MediaPlayer", QDBusConnection::sessionBus()); \ - QDBusMessage reply = dbus_iface.call(QDBus::Block, __method); \ - if (reply.type() == QDBusMessage::ErrorMessage) { \ - QDBusError err = reply; \ - debug("Error: %s\n%s\n", qPrintable(err.name()), qPrintable(err.message())); \ - return __return_if_fail; \ - } - -#define XMMS2_CALL_METHOD_WITH_ARG(__method, __arg, __return_if_fail) \ - QDBusInterface dbus_iface("org.mpris.xmms2", "/Player", \ - "org.freedesktop.MediaPlayer", QDBusConnection::sessionBus()); \ - QDBusMessage reply = dbus_iface.call(QDBus::Block, __method, __arg); \ - if (reply.type() == QDBusMessage::ErrorMessage) { \ - QDBusError err = reply; \ - debug("Error: %s\n%s\n", qPrintable(err.name()), qPrintable(err.message())); \ - return __return_if_fail; \ - } - -QString KviXmms2Interface::nowPlaying() -{ - if (this->status() != KviMediaPlayerInterface::Playing) - return ""; - - XMMS2_CALL_METHOD("GetMetadata", "") - - QString artist; - QString title; - foreach (QVariant v, reply.arguments()) { - QDBusArgument arg = qvariant_cast(v); - QVariant v = qdbus_cast(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 KviXmms2Interface::mrl() -{ - XMMS2_CALL_METHOD("GetMetadata", "") - - foreach (QVariant v, reply.arguments()) { - QDBusArgument arg = qvariant_cast(v); - QVariant v = qdbus_cast(arg); - if (v.userType() == QVariant::Map) { - const QVariantMap map = v.toMap(); - QVariantMap::ConstIterator it = map.constBegin(); - for ( ; it != map.constEnd(); ++it) { - if (it.key() == "URI") - return it.value().toString(); - } - } - } - return ""; -} - -bool KviXmms2Interface::setVol(kvs_int_t &iVol) -{ - XMMS2_CALL_METHOD_WITH_ARG("VolumeSet", QVariant((int)(100*iVol/255)), false); - return true; -} - -int KviXmms2Interface::getVol() -{ - XMMS2_CALL_METHOD("VolumeGet", -1) - - int iVol = reply.arguments().first().toInt(); - return iVol * 255 /100; -} - -KviMediaPlayerInterface::PlayerStatus KviXmms2Interface::status() -{ - QDBusInterface dbus_iface("org.mpris.xmms2", "/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 KviXmms2Interface::position() -{ - XMMS2_CALL_METHOD("PositionGet", -1) - return reply.arguments().first().toInt(); -} - -int KviXmms2Interface::length() -{ - XMMS2_CALL_METHOD("GetMetadata", -1) - - foreach (QVariant v, reply.arguments()) { - QDBusArgument arg = qvariant_cast(v); - QVariant v = qdbus_cast(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; -} - -bool KviXmms2Interface::jumpTo(int &iPos) -{ - XMMS2_CALL_METHOD_WITH_ARG("PositionSet", QVariant(iPos), false) - return true; -} - -#define XMMS2_GET_METADATA_FIELD(__field) \ - if (this->status() != KviMediaPlayerInterface::Playing) \ - return ""; \ - QDBusInterface dbus_iface("org.mpris.xmms2", "/Player", \ - "org.freedesktop.MediaPlayer", QDBusConnection::sessionBus()); \ - QDBusMessage reply = dbus_iface.call(QDBus::Block, "GetMetadata"); \ - if (reply.type() == QDBusMessage::ErrorMessage) { \ - QDBusError err = reply; \ - debug("Error: %s\n%s\n", qPrintable(err.name()), qPrintable(err.message())); \ - return ""; \ - } \ - foreach (QVariant v, reply.arguments()) { \ - QDBusArgument arg = qvariant_cast(v); \ - QVariant v = qdbus_cast(arg); \ - if (v.userType() == QVariant::Map) { \ - const QVariantMap map = v.toMap(); \ - QVariantMap::ConstIterator it = map.constBegin(); \ - for ( ; it != map.constEnd(); ++it) { \ - if (it.key() == __field) \ - return it.value().toString(); \ - } \ - } \ - } \ - return ""; - -QString KviXmms2Interface::title() -{ - XMMS2_GET_METADATA_FIELD("title") -} - -QString KviXmms2Interface::artist() -{ - XMMS2_GET_METADATA_FIELD("artist") -} - -QString KviXmms2Interface::genre() -{ - XMMS2_GET_METADATA_FIELD("genre") -} - -QString KviXmms2Interface::comment() -{ - XMMS2_GET_METADATA_FIELD("comment") -} - -QString KviXmms2Interface::album() -{ - XMMS2_GET_METADATA_FIELD("album") -} - -/* audacious specific interface */ -int KviXmms2Interface::getPlayListPos() -{ - QDBusInterface dbus_iface("org.mpris.xmms2", "/org/atheme/audacious", - "org.atheme.audacious", QDBusConnection::sessionBus()); - QDBusReply pos = dbus_iface.call(QDBus::Block, "Position"); - return pos; -} - -#define XMMS2_GET_TUPLE_FIELD(__field) \ - if (this->status() != KviMediaPlayerInterface::Playing) \ - return ""; \ - QDBusInterface dbus_iface("org.mpris.xmms2", "/org/atheme/audacious", \ - "org.atheme.audacious", QDBusConnection::sessionBus()); \ - QList args; \ - args << (uint)this->getPlayListPos() << QString(__field); \ - QDBusReply reply = dbus_iface.callWithArgumentList(QDBus::Block, "SongTuple", args); \ - return reply.value().variant().toString(); \ - -QString KviXmms2Interface::year() -{ - XMMS2_GET_TUPLE_FIELD("year") -} - -QString KviXmms2Interface::mediaType() -{ - XMMS2_GET_TUPLE_FIELD("codec") + m_szServiceName = "org.mpris.xmms2"; } #endif //!COMPILE_ON_WINDOWS -- cgit v1.3.1-10-gc9f91