From 5f59b30a8cef05d21b68855f1655a917d6d49a81 Mon Sep 17 00:00:00 2001
From: Alejandro Wainzinger <aikawarazuni@gmail.com>
Date: Thu, 11 Aug 2011 17:49:30 -0700
Subject: [PATCH] Add basic metadata MPRIS info.

---
 .../infoplugins/unix/mprisplugin.cpp          | 29 +++++++++++++++----
 .../unix/mprispluginplayeradaptor.cpp         |  2 ++
 2 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/src/libtomahawk/infosystem/infoplugins/unix/mprisplugin.cpp b/src/libtomahawk/infosystem/infoplugins/unix/mprisplugin.cpp
index f8e1c1da4..b431f6d74 100644
--- a/src/libtomahawk/infosystem/infoplugins/unix/mprisplugin.cpp
+++ b/src/libtomahawk/infosystem/infoplugins/unix/mprisplugin.cpp
@@ -21,6 +21,7 @@
 
 #include "audio/audioengine.h"
 #include "infosystem/infosystemworker.h"
+#include "album.h"
 #include "artist.h"
 #include "result.h"
 #include "tomahawksettings.h"
@@ -149,7 +150,7 @@ MprisPlugin::canPlay() const
 bool
 MprisPlugin::canSeek() const
 {
-    return true;
+    return false;
 }
 
 QString
@@ -201,7 +202,18 @@ MprisPlugin::maximumRate() const
 QVariantMap
 MprisPlugin::metadata() const
 {
-    return QVariantMap();
+    QVariantMap metadataMap;
+    Tomahawk::result_ptr track = AudioEngine::instance()->currentTrack();
+    if( track )
+    {
+        metadataMap.insert( "mpris:trackid", track->id() );
+        metadataMap.insert( "mpris:length", track->duration() );
+        metadataMap.insert( "xesam:album", track->album()->name() );
+        metadataMap.insert( "xesam:artist", track->artist()->name() );
+        metadataMap.insert( "xesam:title", track->track() );
+    }
+
+    return metadataMap;
 }
 
 double
@@ -278,9 +290,12 @@ MprisPlugin::Next()
 }
 
 void 
-MprisPlugin::OpenUri(const QString &Uri)
+MprisPlugin::OpenUri( const QString &Uri )
 {
-    // TODO
+    if( Uri.contains( "tomahawk://" ) )
+        GlobalActionManager::instance()->parseTomahawkLink( Uri );
+    else if( Uri.contains( "spotify:" ) )
+        GlobalActionManager::instance()->openSpotifyLink( Uri );
 }
 
 void
@@ -310,7 +325,10 @@ MprisPlugin::Previous()
 void
 MprisPlugin::Seek( qlonglong Offset )
 {
+    qDebug() << Q_FUNC_INFO;
+    /*
     qlonglong seekTime = position() + Offset;
+    qDebug() << "seekTime: " << seekTime;
     if( seekTime < 0 )
         AudioEngine::instance()->seek( 0 );
     else if( seekTime > AudioEngine::instance()->currentTrackTotalTime() )
@@ -318,8 +336,7 @@ MprisPlugin::Seek( qlonglong Offset )
     // seekTime is in microseconds, but we work internally in milliseconds
     else
         AudioEngine::instance()->seek( (qint64) ( seekTime / 1000 ) );
-
-
+    */
 }
 
 void
diff --git a/src/libtomahawk/infosystem/infoplugins/unix/mprispluginplayeradaptor.cpp b/src/libtomahawk/infosystem/infoplugins/unix/mprispluginplayeradaptor.cpp
index 47e8c8c9f..c1a155b2d 100644
--- a/src/libtomahawk/infosystem/infoplugins/unix/mprispluginplayeradaptor.cpp
+++ b/src/libtomahawk/infosystem/infoplugins/unix/mprispluginplayeradaptor.cpp
@@ -185,12 +185,14 @@ void MprisPluginPlayerAdaptor::Previous()
 
 void MprisPluginPlayerAdaptor::Seek(qlonglong Offset)
 {
+    qDebug() << Q_FUNC_INFO;
     // handle method call org.mpris.MediaPlayer2.Player.Seek
     QMetaObject::invokeMethod(parent(), "Seek", Q_ARG(qlonglong, Offset));
 }
 
 void MprisPluginPlayerAdaptor::SetPosition(const QDBusObjectPath &TrackId, qlonglong Position)
 {
+    qDebug() << Q_FUNC_INFO;
     // handle method call org.mpris.MediaPlayer2.Player.SetPosition
     QMetaObject::invokeMethod(parent(), "SetPosition", Q_ARG(QDBusObjectPath, TrackId), Q_ARG(qlonglong, Position));
 }