aboutsummaryrefslogtreecommitdiff
path: root/src/mpris-controller.vala
diff options
context:
space:
mode:
authorConor Curran <conor.curran@canonical.com>2010-06-16 18:19:35 +0100
committerConor Curran <conor.curran@canonical.com>2010-06-16 18:19:35 +0100
commit71d315d3abec5b62e43b821232d70262bec92bd1 (patch)
tree955da2d757bf08cd788d67196dae714f103706e1 /src/mpris-controller.vala
parent0585eccbaa90e2d4eae447a5a69e1101c528d2c0 (diff)
downloadayatana-indicator-sound-71d315d3abec5b62e43b821232d70262bec92bd1.tar.gz
ayatana-indicator-sound-71d315d3abec5b62e43b821232d70262bec92bd1.tar.bz2
ayatana-indicator-sound-71d315d3abec5b62e43b821232d70262bec92bd1.zip
metadata being updated dynamically
Diffstat (limited to 'src/mpris-controller.vala')
-rw-r--r--src/mpris-controller.vala61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/mpris-controller.vala b/src/mpris-controller.vala
new file mode 100644
index 0000000..f606b32
--- /dev/null
+++ b/src/mpris-controller.vala
@@ -0,0 +1,61 @@
+/*
+This service primarily controls PulseAudio and is driven by the sound indicator menu on the panel.
+Copyright 2010 Canonical Ltd.
+
+Authors:
+ Conor Curran <conor.curran@canonical.com>
+
+This program is free software: you can redistribute it and/or modify it
+under the terms of the GNU General Public License version 3, as published
+by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranties of
+MERCHANTABILITY, SATISFACTORY QUALITY, 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, see <http://www.gnu.org/licenses/>.
+*/
+using Gee;
+
+public class MprisController : GLib.Object
+{
+ private DBus.Connection connection;
+ private dynamic DBus.Object mpris_player;
+ private PlayerController controller;
+
+ public MprisController(string name, PlayerController controller, string mpris_interface="org.freedesktop.MediaPlayer"){
+ try {
+ this.connection = DBus.Bus.get (DBus.BusType.SESSION);
+ } catch (Error e) {
+ error("Problems connecting to the session bus - %s", e.message);
+ }
+ this.controller = controller;
+ this.mpris_player = this.connection.get_object ("org.mpris.".concat(name.down()) , "/Player", mpris_interface);
+ this.mpris_player.TrackChange += onTrackChange;
+ this.controller.update_playing_info(get_track_data());
+ }
+
+ public HashMap<string, string> get_track_data()
+ {
+ return format_metadata(this.mpris_player.GetMetadata());
+ }
+
+ private void onTrackChange(dynamic DBus.Object mpris_client, HashTable<string,Value?> ht)
+ {
+ this.controller.update_playing_info(format_metadata(ht));
+ }
+
+ private static HashMap<string, string> format_metadata(HashTable<string,Value?> data)
+ {
+ HashMap<string,string> results = new HashMap<string, string>();
+ debug("format_metadata - title = %s", (string)data.lookup("title"));
+ results.set("title", (string)data.lookup("title"));
+ results.set("artist", (string)data.lookup("artist"));
+ results.set("album", (string)data.lookup("album"));
+ results.set("arturl", (string)data.lookup("arturl"));
+ return results;
+ }
+
+}