aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbert Astals <albert.astals@canonical.com>2012-10-10 13:20:14 +0000
committerTarmac <Unknown>2012-10-10 13:20:14 +0000
commit706732851bc080de7c093a2744794b33fadd123d (patch)
treee39093997a5b4234909cb14b1b524c0deaa93075
parent2204cf861da871322c0fce1c27b473fb3eb3d57c (diff)
parentddecaeddbe497d07380b633867926deebc4a12f0 (diff)
downloadayatana-indicator-sound-706732851bc080de7c093a2744794b33fadd123d.tar.gz
ayatana-indicator-sound-706732851bc080de7c093a2744794b33fadd123d.tar.bz2
ayatana-indicator-sound-706732851bc080de7c093a2744794b33fadd123d.zip
Remove the determine_key function
As documented it did not work very well and it is not really needed since they only time we need to map from dbus interface to desktop name is when the program goes away that means we had previously seen it appearing thus we can have a map with the dbus interface -> destkop name mapping . Fixes: https://bugs.launchpad.net/bugs/1064255. Approved by Conor Curran, jenkins.
-rw-r--r--src/music-player-bridge.vala58
1 files changed, 18 insertions, 40 deletions
diff --git a/src/music-player-bridge.vala b/src/music-player-bridge.vala
index 606b129..59ced36 100644
--- a/src/music-player-bridge.vala
+++ b/src/music-player-bridge.vala
@@ -29,6 +29,7 @@ public class MusicPlayerBridge : GLib.Object
private Dbusmenu.Menuitem root_menu;
private HashMap<string, PlayerController> registered_clients;
private HashMap<string, string> file_monitors;
+ private HashMap<string, string> mpris_to_desktop;
private Mpris2Watcher watcher;
public MusicPlayerBridge()
@@ -38,6 +39,7 @@ public class MusicPlayerBridge : GLib.Object
construct{
this.registered_clients = new HashMap<string, PlayerController> ();
this.file_monitors = new HashMap<string, string> ();
+ this.mpris_to_desktop = new HashMap<string, string> ();
this.settings_manager = new SettingsManager();
this.settings_manager.blacklist_updates.connect ( this.on_blacklist_update );
this.settings_manager.preferred_updates.connect ( this.on_preferred_update );
@@ -47,8 +49,8 @@ public class MusicPlayerBridge : GLib.Object
{
debug("some blacklist update");
- foreach(var s in blacklist){
- string key = this.determine_key (s);
+ foreach(var desktop_id in blacklist){
+ string key = desktop_id;
if (this.registered_clients.has_key (key)){
debug ("Apparently %s is now blacklisted - remove thy self", key);
this.registered_clients[key].remove_from_menu();
@@ -67,8 +69,8 @@ public class MusicPlayerBridge : GLib.Object
player_controller.set_as_preferred (false);
}
- foreach (var s in preferred) {
- string key = this.determine_key (s);
+ foreach (var desktop_id in preferred) {
+ string key = desktop_id;
if (this.registered_clients.has_key (key)) {
debug ("Setting %s as preferred player", key);
this.registered_clients[key].set_as_preferred (true);
@@ -96,7 +98,7 @@ public class MusicPlayerBridge : GLib.Object
null,
PlayerController.state.OFFLINE,
is_preferred );
- var mpris_key = determine_key ( desktop );
+ var mpris_key = desktop;
this.registered_clients.set(mpris_key, ctrl);
this.establish_file_monitoring (app_info, mpris_key);
}
@@ -183,9 +185,10 @@ public class MusicPlayerBridge : GLib.Object
return;
}
- var mpris_key = determine_key ( desktop );
+ var mpris_key = desktop;
bool is_preferred = desktop in this.settings_manager.fetch_preferred ();
+ mpris_to_desktop.set (dbus_name, desktop);
if ( this.registered_clients.has_key (mpris_key) == false ){
debug("New client has registered that we have not seen before: %s", dbus_name );
PlayerController ctrl = new PlayerController ( this.root_menu,
@@ -216,10 +219,13 @@ public class MusicPlayerBridge : GLib.Object
mpris_root_interface );
if (root_menu != null){
debug("\n attempt to remove %s", mpris_root_interface);
- var mpris_key = determine_key ( mpris_root_interface );
- if ( mpris_key != null && this.registered_clients.has_key(mpris_key)){
- registered_clients[mpris_key].hibernate();
- debug("\n Successively offlined client %s", mpris_key);
+ if (mpris_to_desktop.has_key(mpris_root_interface)){
+ var mpris_key = mpris_to_desktop[mpris_root_interface];
+ mpris_to_desktop.unset(mpris_root_interface);
+ if ( mpris_key != null && this.registered_clients.has_key(mpris_key)){
+ registered_clients[mpris_key].hibernate();
+ debug("\n Successively offlined client %s", mpris_key);
+ }
}
}
}
@@ -236,7 +242,7 @@ public class MusicPlayerBridge : GLib.Object
public void enable_player_specific_items_for_client (string object_path,
string desktop_id)
{
- var mpris_key = determine_key ( desktop_id );
+ var mpris_key = desktop_id;
if (this.registered_clients.has_key (mpris_key) == false){
warning ("we don't have a client with desktop id %s registered", desktop_id);
return;
@@ -247,7 +253,7 @@ public class MusicPlayerBridge : GLib.Object
public void enable_track_specific_items_for_client (string object_path,
string desktop_id)
{
- var mpris_key = determine_key ( desktop_id );
+ var mpris_key = desktop_id;
if (this.registered_clients.has_key (mpris_key) == false){
warning ("we don't have a client with desktop id %s registered", desktop_id);
return;
@@ -292,34 +298,6 @@ public class MusicPlayerBridge : GLib.Object
return null;
}
}
-
- /*
- Messy but necessary method to consolidate desktop filesnames and mpris dbus
- names into the one single word string (used as the key in the players hash).
- So this means that we can determine the key for the players_hash from the
- dbus interface name or the desktop file name, at startup offline/online and
- shutdown.
- */
- private static string? determine_key(owned string desktop_or_interface)
- {
- // handle the special case of amarok, (kde4-amarok desktop file name)
- if (desktop_or_interface.contains("amarok")){
- return "amarok";
- }
-
- var result = desktop_or_interface;
-
- var tokens = desktop_or_interface.split( "." );
- if (tokens != null && tokens.length > 1){
- result = tokens[tokens.length - 1];
- }
- var temp = result.split("-");
- if (temp != null && temp.length > 1){
- result = temp[0];
- }
- return result;
- }
-
}