28
28
private SettingsManager settings_manager;
29
29
private Dbusmenu.Menuitem root_menu;
30
30
private HashMap<string, PlayerController> registered_clients;
31
private HashMap<string, string> file_monitors;
31
32
private Mpris2Watcher watcher;
33
34
public MusicPlayerBridge()
38
39
this.registered_clients = new HashMap<string, PlayerController> ();
40
this.file_monitors = new HashMap<string, string> ();
39
41
this.settings_manager = new SettingsManager();
40
42
this.settings_manager.blacklist_updates.connect ( this.on_blacklist_update );
74
76
calculate_menu_position(),
76
78
PlayerController.state.OFFLINE );
77
this.registered_clients.set(mpris_key, ctrl);
79
this.registered_clients.set(mpris_key, ctrl);
80
this.establish_file_monitoring (app_info, mpris_key);
84
private void establish_file_monitoring (AppInfo info, string mpris_key){
85
DesktopAppInfo desktop_info = info as DesktopAppInfo;
86
var file_path = desktop_info.get_filename ();
87
File f = File.new_for_path (file_path);
90
monitor = f.monitor (FileMonitorFlags.SEND_MOVED, null);
93
warning ("Unable to create a file monitor for %s", info.get_name());
96
this.file_monitors.set (file_path, mpris_key);
97
// Finally watch for a change.
98
monitor.changed.connect ((desktop_file, other_file, event_type) => {
99
this.relevant_desktop_file_changed (desktop_file, other_file, event_type, monitor);
103
private void relevant_desktop_file_changed (File desktop_file,
105
FileMonitorEvent event_type,
108
if (event_type != FileMonitorEvent.DELETED)
111
string? path = desktop_file.get_path ();
113
warning ("relevant_desktop_file_changed is returning a file with no path !");
116
if (!this.file_monitors.has_key (path)){
117
warning ("relevant_desktop_file_changed is returning a file which we know nothing about - %s",
121
this.registered_clients[this.file_monitors[path]].remove_from_menu();
122
this.settings_manager.remove_interested (this.file_monitors[path]);
123
this.registered_clients.unset (this.file_monitors[path]);
81
128
private int calculate_menu_position()
125
172
this.registered_clients.set ( mpris_key, ctrl );
126
173
debug ( "Have not seen this %s before, new controller created.", desktop );
127
174
this.settings_manager.add_interested ( desktop );
175
this.establish_file_monitoring (app_info, mpris_key);
128
176
debug ( "application added to the interested list" );