From ace6532d81c54440cab5936d615631232b8a3ec2 Mon Sep 17 00:00:00 2001
From: Denis Fomin <fominde@gmail.com>
Date: Tue, 4 Oct 2011 20:50:21 +0300
Subject: [PATCH] add new plugin. mpris2 support

---
 mpris2_support/__init__.py       |  1 +
 mpris2_support/manifest.ini      |  7 +++++
 mpris2_support/mpris2_support.py | 52 ++++++++++++++++++++++++++++++++
 3 files changed, 60 insertions(+)
 create mode 100644 mpris2_support/__init__.py
 create mode 100644 mpris2_support/manifest.ini
 create mode 100644 mpris2_support/mpris2_support.py

diff --git a/mpris2_support/__init__.py b/mpris2_support/__init__.py
new file mode 100644
index 00000000..9b35e379
--- /dev/null
+++ b/mpris2_support/__init__.py
@@ -0,0 +1 @@
+from mpris2_support import Mpris2Plugin
diff --git a/mpris2_support/manifest.ini b/mpris2_support/manifest.ini
new file mode 100644
index 00000000..997154a4
--- /dev/null
+++ b/mpris2_support/manifest.ini
@@ -0,0 +1,7 @@
+[info]
+name: MPRIS2 support
+short_name: mpris2_support
+version: 0.1
+description: MPRIS2 support
+authors = Denis Fomin <fominde@gmail.com>
+homepage = http://trac-plugins.gajim.org/wiki
diff --git a/mpris2_support/mpris2_support.py b/mpris2_support/mpris2_support.py
new file mode 100644
index 00000000..7ecea214
--- /dev/null
+++ b/mpris2_support/mpris2_support.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+
+import gtk
+import gobject
+
+from common import gajim
+from plugins import GajimPlugin
+from plugins.helpers import log_calls
+from plugins.plugin import GajimPluginException
+from common import dbus_support
+
+if dbus_support.supported:
+    from music_track_listener import MusicTrackInfo, MusicTrackListener
+
+class Mpris2Plugin(GajimPlugin):
+    @log_calls('Mpris2Plugin')
+    def init(self):
+        self.description = _('MPRIS2 support')
+        self.config_dialog = None
+        self.artist = self.title = self.source = ''
+        self.listener = MusicTrackListener().get()
+
+    @log_calls('NowListenPlugin')
+    def activate(self):
+        self.bus = dbus_support.session_bus.SessionBus()
+        self.bus.add_signal_receiver(self.properties_changed,
+            "PropertiesChanged", "org.freedesktop.DBus.Properties")
+
+    @log_calls('Mpris2Plugin')
+    def deactivate(self):
+        self.bus.remove_signal_receiver(self.properties_changed,
+            "PropertiesChanged", "org.freedesktop.DBus.Properties")
+
+    def properties_changed(self,*args,**kw):
+        if args[0] != 'org.mpris.MediaPlayer2.Player':
+            return
+        if 'PlaybackStatus' in args[1]:
+            if args[1]['PlaybackStatus'] in ['Paused', 'Stopped']:
+                self.title = self.artist = self.source = ''
+                self.listener.emit('music-track-changed', None)
+            return
+        if 'Metadata' not in args[1]:
+            return
+
+        data = args[1]['Metadata']
+        info = MusicTrackInfo()
+        info.title = data.get("xesam:title", '')
+        info.album = data.get("xesam:album", '')
+        info.artist = data.get("xesam:artist", [''])[0]
+        info.duration = int(data.get('mpris:length', 0))
+        info.track_number = int(data.get('xesam:trackNumber', 0))
+        self.listener.emit('music-track-changed', info)
-- 
GitLab