aboutsummaryrefslogtreecommitdiff
path: root/src/music-player-bridge.vala
diff options
context:
space:
mode:
authorConor Curran <conor.curran@canonical.com>2010-05-20 18:50:44 +0100
committerConor Curran <conor.curran@canonical.com>2010-05-20 18:50:44 +0100
commit14d9ed691abf09a2600f978aa7be13f841bc1ce5 (patch)
treeea2456934e0c3a4e6cde256ac6a02229794047fe /src/music-player-bridge.vala
parent8e2bd9c87d812a07caaa2c5aba0bbf819b445e56 (diff)
downloadayatana-indicator-sound-14d9ed691abf09a2600f978aa7be13f841bc1ce5.tar.gz
ayatana-indicator-sound-14d9ed691abf09a2600f978aa7be13f841bc1ce5.tar.bz2
ayatana-indicator-sound-14d9ed691abf09a2600f978aa7be13f841bc1ce5.zip
We have clients properly registering and unregistering dynamically
Diffstat (limited to 'src/music-player-bridge.vala')
-rw-r--r--src/music-player-bridge.vala89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/music-player-bridge.vala b/src/music-player-bridge.vala
new file mode 100644
index 0000000..c2cfc7a
--- /dev/null
+++ b/src/music-player-bridge.vala
@@ -0,0 +1,89 @@
+using Indicate;
+using Dbusmenu;
+using Gee;
+
+public class MusicPlayerBridge : GLib.Object
+{
+
+ private Listener listener;
+ private Dbusmenu.Menuitem root_menu;
+ private HashMap<string, Dbusmenu.Menuitem> registered_clients;
+
+ public MusicPlayerBridge()
+ {
+ registered_clients = new HashMap<string, Dbusmenu.Menuitem> ();
+ listener = Listener.ref_default();
+ listener.indicator_added.connect(on_indicator_added);
+ listener.indicator_removed.connect(on_indicator_removed);
+ listener.indicator_modified.connect(on_indicator_modified);
+ listener.server_added.connect(on_server_added);
+ listener.server_removed.connect(on_server_removed);
+ listener.server_count_changed.connect(on_server_count_changed);
+ }
+
+ public void set_root_menu_item(Dbusmenu.Menuitem menu)
+ {
+ debug("MusicPlayerBridge -> set_root_menu_item");
+ root_menu = menu;
+ }
+
+ public void on_indicator_added(Indicate.ListenerServer object, Indicate.ListenerIndicator p0)
+ {
+ debug("MusicPlayerBridge-> on_indicator_added");
+ }
+
+ public void on_indicator_removed(Indicate.ListenerServer object, Indicate.ListenerIndicator p0)
+ {
+ debug("MusicPlayerBridge -> on_indicator_removed");
+ }
+
+ public void on_indicator_modified(Indicate.ListenerServer object, Indicate.ListenerIndicator p0, string s)
+ {
+ debug("MusicPlayerBridge -> indicator_modified with vale %s", s );
+ }
+
+ public void on_server_added(Indicate.ListenerServer object, string type)
+ {
+ debug("MusicPlayerBridge -> on_server_added with value %s", type);
+ if(server_is_not_of_interest(type)) return;
+ string client_name = type.split(".")[1];
+ if (root_menu != null && client_name != null){
+ Dbusmenu.Menuitem client_item = new Dbusmenu.Menuitem();
+ client_item.property_set(MENUITEM_PROP_LABEL, client_name.concat(" is registered"));
+ registered_clients.set(client_name, client_item);
+ root_menu.child_append(client_item);
+ debug("client of name %s has successfully registered with us", client_name);
+ }
+ }
+
+ public void on_server_removed(Indicate.ListenerServer object, string type)
+ {
+ debug("MusicPlayerBridge -> on_server_removed with value %s", type);
+ if(server_is_not_of_interest(type)) return;
+ string client_name = type.split(".")[1];
+ if (root_menu != null && client_name != null){
+ root_menu.child_delete(registered_clients[client_name]);
+ registered_clients.remove(client_name);
+ debug("Successively removed menu_item for client %s from registered_clients", client_name);
+ }
+ }
+
+ private bool server_is_not_of_interest(string type){
+ if (type == null) return true;
+ if (type.contains("music") == false) {
+ debug("server is of no interest, it is not an music server");
+ return true;
+ }
+ return false;
+ }
+
+ public void on_server_count_changed(Indicate.ListenerServer object, uint i)
+ {
+ debug("MusicPlayerBridge-> on_server_count_changed with value %u", i);
+ }
+
+}
+
+
+
+