aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorXavi Garcia Mena <xavi.garcia.mena@canonical.com>2016-02-23 13:48:46 +0100
committerXavi Garcia Mena <xavi.garcia.mena@canonical.com>2016-02-23 13:48:46 +0100
commite40da89a473b15b64d036cdce2e1ead59770778b (patch)
tree1de74f75836e8c7246544ad08be30fa6ba729065 /src
parent957c495207b8c53ffa9d3622c24fdff4f31cebfa (diff)
downloadayatana-indicator-sound-e40da89a473b15b64d036cdce2e1ead59770778b.tar.gz
ayatana-indicator-sound-e40da89a473b15b64d036cdce2e1ead59770778b.tar.bz2
ayatana-indicator-sound-e40da89a473b15b64d036cdce2e1ead59770778b.zip
Created new class AccountsServiceAccess to hold all accounts service operations
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt33
-rw-r--r--src/accounts-service-access.vala241
-rw-r--r--src/main.c108
-rw-r--r--src/service.vala11
-rw-r--r--src/volume-control-pulse.vala192
-rw-r--r--src/volume-control.vala2
6 files changed, 337 insertions, 250 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ff03859..0498903 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -69,29 +69,37 @@ vala_add(indicator-sound-service
media-player-list
mpris2-interfaces
accounts-service-user
+ accounts-service-access
)
vala_add(indicator-sound-service
options.vala
DEPENDS
volume-control
volume-control-pulse
+ accounts-service-access
)
vala_add(indicator-sound-service
options-gsettings.vala
DEPENDS
options
- volume-control-pulse
+ volume-control-pulse
volume-control
+ accounts-service-access
)
vala_add(indicator-sound-service
volume-control.vala
DEPENDS
options
- volume-control-pulse
+ volume-control-pulse
+ accounts-service-access
+)
+vala_add(indicator-sound-service
+ accounts-service-access.vala
)
vala_add(indicator-sound-service
volume-control-pulse.vala
DEPENDS
+ accounts-service-access
options
volume-control
)
@@ -99,20 +107,22 @@ vala_add(indicator-sound-service
volume-warning.vala
DEPENDS
options
- volume-control-pulse
+ volume-control-pulse
volume-control
warn-notification
- notification
+ notification
+ accounts-service-access
)
vala_add(indicator-sound-service
volume-warning-pulse.vala
DEPENDS
volume-warning
- options
- volume-control-pulse
- volume-control
- warn-notification
- notification
+ options
+ volume-control-pulse
+ volume-control
+ warn-notification
+ notification
+ accounts-service-access
)
vala_add(indicator-sound-service
media-player.vala
@@ -161,8 +171,9 @@ vala_add(indicator-sound-service
DEPENDS
media-player
volume-control
- options
- volume-control-pulse
+ options
+ volume-control-pulse
+ accounts-service-access
)
vala_add(indicator-sound-service
accounts-service-user.vala
diff --git a/src/accounts-service-access.vala b/src/accounts-service-access.vala
new file mode 100644
index 0000000..d82f888
--- /dev/null
+++ b/src/accounts-service-access.vala
@@ -0,0 +1,241 @@
+/*
+ * -*- Mode:Vala; indent-tabs-mode:t; tab-width:4; encoding:utf8 -*-
+ * Copyright 2016 Canonical Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY 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/>.
+ *
+ * Authors:
+ * Xavi Garcia <xavi.garcia.mena@canonical.com>
+ */
+
+using PulseAudio;
+using Notify;
+using Gee;
+
+[DBus (name="com.canonical.UnityGreeter.List")]
+interface GreeterListInterfaceAccess : Object
+{
+ public abstract async string get_active_entry () throws IOError;
+ public signal void entry_selected (string entry_name);
+}
+
+public class AccountsServiceAccess : Object
+{
+ private DBusProxy _user_proxy;
+ private GreeterListInterfaceAccess _greeter_proxy;
+ private Cancellable _mute_cancellable;
+ private Cancellable _volume_cancellable;
+ private Cancellable _last_running_player_cancellable;
+ private double _volume = 0.0;
+ private string _last_running_player = "";
+ private bool _mute = false;
+
+ public AccountsServiceAccess ()
+ {
+ _mute_cancellable = new Cancellable ();
+ _volume_cancellable = new Cancellable ();
+ _last_running_player_cancellable = new Cancellable();
+
+ setup_accountsservice.begin ();
+ }
+
+ ~AccountsServiceAccess ()
+ {
+ }
+
+ public string last_running_player
+ {
+ get
+ {
+ return _last_running_player;
+ }
+ set
+ {
+ sync_last_running_player_to_accountsservice.begin (value);
+ }
+ }
+
+ public bool mute
+ {
+ get
+ {
+ return _mute;
+ }
+ set
+ {
+ sync_mute_to_accountsservice.begin (value);
+ }
+ }
+
+ public double volume
+ {
+ get
+ {
+ return _volume;
+ }
+ set
+ {
+ sync_volume_to_accountsservice.begin (value);
+ }
+ }
+
+ /* AccountsService operations */
+ private void accountsservice_props_changed_cb (DBusProxy proxy, Variant changed_properties, string[]? invalidated_properties)
+ {
+ Variant volume_variant = changed_properties.lookup_value ("Volume", VariantType.DOUBLE);
+ if (volume_variant != null) {
+ var volume = volume_variant.get_double ();
+ if (volume >= 0) {
+ _volume = volume;
+ this.notify_property("volume");
+ }
+ }
+
+ Variant mute_variant = changed_properties.lookup_value ("Muted", VariantType.BOOLEAN);
+ if (mute_variant != null) {
+ var mute = mute_variant.get_boolean ();
+ _mute = mute;
+ this.notify_property("mute");
+ }
+
+ Variant last_running_player_variant = changed_properties.lookup_value ("LastRunningPlayer", VariantType.STRING);
+ if (last_running_player_variant != null) {
+ var last_player = last_running_player_variant.get_string ();
+ _last_running_player = last_player;
+ this.notify_property("last-running-player");
+ }
+ }
+
+ private async void setup_user_proxy (string? username_in = null)
+ {
+ var username = username_in;
+ _user_proxy = null;
+
+ // Look up currently selected greeter user, if asked
+ if (username == null) {
+ try {
+ username = yield _greeter_proxy.get_active_entry ();
+ if (username == "" || username == null)
+ return;
+ } catch (GLib.Error e) {
+ warning ("unable to find Accounts path for user %s: %s", username, e.message);
+ return;
+ }
+ }
+
+ // Get master AccountsService object
+ DBusProxy accounts_proxy;
+ try {
+ accounts_proxy = yield DBusProxy.create_for_bus (BusType.SYSTEM, DBusProxyFlags.DO_NOT_LOAD_PROPERTIES | DBusProxyFlags.DO_NOT_CONNECT_SIGNALS, null, "org.freedesktop.Accounts", "/org/freedesktop/Accounts", "org.freedesktop.Accounts");
+ } catch (GLib.Error e) {
+ warning ("unable to get greeter proxy: %s", e.message);
+ return;
+ }
+
+ // Find user's AccountsService object
+ try {
+ var user_path_variant = yield accounts_proxy.call ("FindUserByName", new Variant ("(s)", username), DBusCallFlags.NONE, -1);
+ string user_path;
+ user_path_variant.get ("(o)", out user_path);
+ _user_proxy = yield DBusProxy.create_for_bus (BusType.SYSTEM, DBusProxyFlags.GET_INVALIDATED_PROPERTIES, null, "org.freedesktop.Accounts", user_path, "com.ubuntu.AccountsService.Sound");
+ } catch (GLib.Error e) {
+ warning ("unable to find Accounts path for user %s: %s", username, e.message);
+ return;
+ }
+
+ // Get current values and listen for changes
+ _user_proxy.g_properties_changed.connect (accountsservice_props_changed_cb);
+ try {
+ var props_variant = yield _user_proxy.get_connection ().call (_user_proxy.get_name (), _user_proxy.get_object_path (), "org.freedesktop.DBus.Properties", "GetAll", new Variant ("(s)", _user_proxy.get_interface_name ()), null, DBusCallFlags.NONE, -1);
+ Variant props;
+ props_variant.get ("(@a{sv})", out props);
+ accountsservice_props_changed_cb(_user_proxy, props, null);
+ } catch (GLib.Error e) {
+ debug("Unable to get properties for user %s at first try: %s", username, e.message);
+ }
+ }
+
+ private void greeter_user_changed (string username)
+ {
+ setup_user_proxy.begin (username);
+ }
+
+ private async void setup_accountsservice ()
+ {
+ if (Environment.get_variable ("XDG_SESSION_CLASS") == "greeter") {
+ try {
+ _greeter_proxy = yield Bus.get_proxy (BusType.SESSION, "com.canonical.UnityGreeter", "/list");
+ } catch (GLib.Error e) {
+ warning ("unable to get greeter proxy: %s", e.message);
+ return;
+ }
+ _greeter_proxy.entry_selected.connect (greeter_user_changed);
+ yield setup_user_proxy ();
+ } else {
+ // We are in a user session. We just need our own proxy
+ unowned string username = Environment.get_variable ("USER");
+ if (username != "" && username != null) {
+ yield setup_user_proxy (username);
+ }
+ }
+ }
+
+ private async void sync_last_running_player_to_accountsservice (string last_running_player)
+ {
+ if (_user_proxy == null)
+ return;
+
+ _last_running_player_cancellable.cancel ();
+ _last_running_player_cancellable.reset ();
+
+ try {
+ yield _user_proxy.get_connection ().call (_user_proxy.get_name (), _user_proxy.get_object_path (), "org.freedesktop.DBus.Properties", "Set", new Variant ("(ssv)", _user_proxy.get_interface_name (), "LastRunningPlayer", new Variant ("s", last_running_player)), null, DBusCallFlags.NONE, -1, _last_running_player_cancellable);
+ } catch (GLib.Error e) {
+ warning ("unable to sync last running player to AccountsService: %s", e.message);
+ }
+ _last_running_player = last_running_player;
+ }
+
+ private async void sync_volume_to_accountsservice (double volume)
+ {
+ if (_user_proxy == null)
+ return;
+
+ _volume_cancellable.cancel ();
+ _volume_cancellable.reset ();
+
+ warning("Interface name: %s", _user_proxy.get_interface_name ());
+ try {
+ yield _user_proxy.get_connection ().call (_user_proxy.get_name (), _user_proxy.get_object_path (), "org.freedesktop.DBus.Properties", "Set", new Variant ("(ssv)", _user_proxy.get_interface_name (), "Volume", new Variant ("d", volume)), null, DBusCallFlags.NONE, -1, _volume_cancellable);
+ } catch (GLib.Error e) {
+ warning ("unable to sync volume to AccountsService: %s", e.message);
+ }
+ }
+
+ private async void sync_mute_to_accountsservice (bool mute)
+ {
+ if (_user_proxy == null)
+ return;
+
+ _mute_cancellable.cancel ();
+ _mute_cancellable.reset ();
+
+ try {
+ yield _user_proxy.get_connection ().call (_user_proxy.get_name (), _user_proxy.get_object_path (), "org.freedesktop.DBus.Properties", "Set", new Variant ("(ssv)", _user_proxy.get_interface_name (), "Muted", new Variant ("b", mute)), null, DBusCallFlags.NONE, -1, _mute_cancellable);
+ } catch (GLib.Error e) {
+ warning ("unable to sync mute to AccountsService: %s", e.message);
+ }
+ }
+}
+
+
diff --git a/src/main.c b/src/main.c
index f4a59b2..43e330d 100644
--- a/src/main.c
+++ b/src/main.c
@@ -27,9 +27,9 @@ static pa_glib_mainloop * pgloop = NULL;
static gboolean
sigterm_handler (gpointer data)
{
- g_debug("Got SIGTERM");
- g_main_loop_quit((GMainLoop *)data);
- return G_SOURCE_REMOVE;
+ g_debug("Got SIGTERM");
+ g_main_loop_quit((GMainLoop *)data);
+ return G_SOURCE_REMOVE;
}
static void
@@ -37,8 +37,8 @@ on_name_lost(GDBusConnection * connection,
const gchar * name,
gpointer user_data)
{
- g_warning("Name lost or unable to acquire bus: %s", name);
- g_main_loop_quit((GMainLoop *)user_data);
+ g_warning("Name lost or unable to acquire bus: %s", name);
+ g_main_loop_quit((GMainLoop *)user_data);
}
static void
@@ -46,66 +46,68 @@ on_bus_acquired(GDBusConnection *connection,
const gchar *name,
gpointer user_data)
{
- MediaPlayerList * playerlist = NULL;
- IndicatorSoundOptions * options = NULL;
- VolumeControlPulse * volume = NULL;
- AccountsServiceUser * accounts = NULL;
- VolumeWarning * warning = NULL;
-
-
- if (g_strcmp0("lightdm", g_get_user_name()) == 0) {
- playerlist = MEDIA_PLAYER_LIST(media_player_list_greeter_new());
- } else {
- playerlist = MEDIA_PLAYER_LIST(media_player_list_mpris_new());
- accounts = accounts_service_user_new();
- }
-
- pgloop = pa_glib_mainloop_new(NULL);
- options = indicator_sound_options_gsettings_new();
- volume = volume_control_pulse_new(options, pgloop);
- warning = volume_warning_pulse_new(options, pgloop);
-
- service = indicator_sound_service_new (playerlist, volume, accounts, options, warning);
-
- g_clear_object(&playerlist);
- g_clear_object(&options);
- g_clear_object(&volume);
- g_clear_object(&accounts);
- g_clear_object(&warning);
+ MediaPlayerList * playerlist = NULL;
+ IndicatorSoundOptions * options = NULL;
+ VolumeControlPulse * volume = NULL;
+ AccountsServiceUser * accounts = NULL;
+ VolumeWarning * warning = NULL;
+ AccountsServiceAccess * accounts_service_access = NULL;
+
+
+ if (g_strcmp0("lightdm", g_get_user_name()) == 0) {
+ playerlist = MEDIA_PLAYER_LIST(media_player_list_greeter_new());
+ } else {
+ playerlist = MEDIA_PLAYER_LIST(media_player_list_mpris_new());
+ accounts = accounts_service_user_new();
+ }
+
+ pgloop = pa_glib_mainloop_new(NULL);
+ options = indicator_sound_options_gsettings_new();
+ accounts_service_access = accounts_service_access_new();
+ volume = volume_control_pulse_new(options, pgloop, accounts_service_access);
+ warning = volume_warning_pulse_new(options, pgloop);
+
+ service = indicator_sound_service_new (playerlist, volume, accounts, options, warning, accounts_service_access);
+
+ g_clear_object(&playerlist);
+ g_clear_object(&options);
+ g_clear_object(&volume);
+ g_clear_object(&accounts);
+ g_clear_object(&warning);
}
int
main (int argc, char ** argv)
{
- GMainLoop * loop = NULL;
- bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
- setlocale (LC_ALL, "");
- bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
+ GMainLoop * loop = NULL;
+ bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+ setlocale (LC_ALL, "");
+ bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR);
- /* Build Mainloop */
- loop = g_main_loop_new(NULL, FALSE);
+ /* Build Mainloop */
+ loop = g_main_loop_new(NULL, FALSE);
- g_unix_signal_add(SIGTERM, sigterm_handler, loop);
+ g_unix_signal_add(SIGTERM, sigterm_handler, loop);
- /* Initialize libnotify */
- notify_init ("indicator-sound");
+ /* Initialize libnotify */
+ notify_init ("indicator-sound");
- g_bus_own_name(G_BUS_TYPE_SESSION,
- "com.canonical.indicator.sound",
- G_BUS_NAME_OWNER_FLAGS_NONE,
- on_bus_acquired,
- NULL, /* name acquired */
- on_name_lost,
- loop,
- NULL);
+ g_bus_own_name(G_BUS_TYPE_SESSION,
+ "com.canonical.indicator.sound",
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ on_bus_acquired,
+ NULL, /* name acquired */
+ on_name_lost,
+ loop,
+ NULL);
- g_main_loop_run(loop);
+ g_main_loop_run(loop);
- g_clear_object(&service);
- g_clear_pointer(&pgloop, pa_glib_mainloop_free);
+ g_clear_object(&service);
+ g_clear_pointer(&pgloop, pa_glib_mainloop_free);
- notify_uninit();
+ notify_uninit();
- return 0;
+ return 0;
}
diff --git a/src/service.vala b/src/service.vala
index d72f16e..2a50b53 100644
--- a/src/service.vala
+++ b/src/service.vala
@@ -20,7 +20,9 @@
public class IndicatorSound.Service: Object {
DBusConnection bus;
- public Service (MediaPlayerList playerlist, VolumeControl volume, AccountsServiceUser? accounts, Options options, VolumeWarning volume_warning) {
+ public Service (MediaPlayerList playerlist, VolumeControl volume, AccountsServiceUser? accounts, Options options, VolumeWarning volume_warning, AccountsServiceAccess? accounts_service_access) {
+
+ _accounts_service_access = accounts_service_access;
try {
bus = Bus.get_sync(GLib.BusType.SESSION);
@@ -111,13 +113,13 @@ public class IndicatorSound.Service: Object {
this.menus.@foreach ( (profile, menu) => {
menu.last_player_updated.connect ((player_id) => {
- this.volume_control.last_running_player = player_id;
+ this._accounts_service_access.last_running_player = player_id;
});
});
- this.volume_control.notify["last-running-player"].connect(() => {
+ this._accounts_service_access.notify["last-running-player"].connect(() => {
this.menus.@foreach ( (profile, menu) => {
- menu.set_default_player (this.volume_control.last_running_player);
+ menu.set_default_player (this._accounts_service_access.last_running_player);
});
});
@@ -204,6 +206,7 @@ public class IndicatorSound.Service: Object {
private Options _options;
private VolumeWarning _volume_warning;
private IndicatorSound.InfoNotification _info_notification = new IndicatorSound.InfoNotification();
+ private AccountsServiceAccess _accounts_service_access;
const double volume_step_percentage = 0.06;
diff --git a/src/volume-control-pulse.vala b/src/volume-control-pulse.vala
index cdc6953..43092d1 100644
--- a/src/volume-control-pulse.vala
+++ b/src/volume-control-pulse.vala
@@ -22,13 +22,6 @@ using PulseAudio;
using Notify;
using Gee;
-[DBus (name="com.canonical.UnityGreeter.List")]
-interface GreeterListInterface : Object
-{
- public abstract async string get_active_entry () throws IOError;
- public signal void entry_selected (string entry_name);
-}
-
public class VolumeControlPulse : VolumeControl
{
private unowned PulseAudio.GLibMainLoop loop = null;
@@ -55,34 +48,17 @@ public class VolumeControlPulse : VolumeControl
private string? _objp_role_phone = null;
private uint _pa_volume_sig_count = 0;
- private DBusProxy _user_proxy;
- private GreeterListInterface _greeter_proxy;
- private Cancellable _mute_cancellable;
- private Cancellable _volume_cancellable;
- private Cancellable _last_running_player_cancellable;
private uint _local_volume_timer = 0;
private uint _accountservice_volume_timer = 0;
private bool _send_next_local_volume = false;
private double _account_service_volume = 0.0;
private VolumeControl.ActiveOutput _active_output = VolumeControl.ActiveOutput.SPEAKERS;
- private string _last_running_player = "";
+ private AccountsServiceAccess _accounts_service_access;
/** true when a microphone is active **/
public override bool active_mic { get; private set; default = false; }
- public override string last_running_player
- {
- get
- {
- return _last_running_player;
- }
- set
- {
- sync_last_running_player_to_accountsservice.begin (value);
- }
- }
-
- public VolumeControlPulse (IndicatorSound.Options options, PulseAudio.GLibMainLoop loop)
+ public VolumeControlPulse (IndicatorSound.Options options, PulseAudio.GLibMainLoop loop, AccountsServiceAccess? accounts_service_access)
{
base(options);
@@ -91,12 +67,14 @@ public class VolumeControlPulse : VolumeControl
this.loop = loop;
- _mute_cancellable = new Cancellable ();
- _volume_cancellable = new Cancellable ();
- _last_running_player_cancellable = new Cancellable();
-
- setup_accountsservice.begin ();
-
+ _accounts_service_access = accounts_service_access;
+ this._accounts_service_access.notify["volume"].connect(() => {
+ if (this._accounts_service_access.volume >= 0) {
+ _account_service_volume = this._accounts_service_access.volume;
+ // we need to wait for this to settle.
+ start_account_service_volume_timer();
+ }
+ });
this.reconnect_to_pulse ();
}
@@ -552,7 +530,7 @@ public class VolumeControlPulse : VolumeControl
public override void set_mute (bool mute)
{
if (set_mute_internal (mute))
- sync_mute_to_accountsservice.begin (mute);
+ _accounts_service_access.mute = mute;
}
public void toggle_mute ()
@@ -788,152 +766,6 @@ public class VolumeControlPulse : VolumeControl
}
/* AccountsService operations */
- private void accountsservice_props_changed_cb (DBusProxy proxy, Variant changed_properties, string[]? invalidated_properties)
- {
- Variant volume_variant = changed_properties.lookup_value ("Volume", VariantType.DOUBLE);
- if (volume_variant != null) {
- var volume = volume_variant.get_double ();
- if (volume >= 0) {
- _account_service_volume = volume;
- // we need to wait for this to settle.
- start_account_service_volume_timer();
- }
- }
-
- Variant mute_variant = changed_properties.lookup_value ("Muted", VariantType.BOOLEAN);
- if (mute_variant != null) {
- var mute = mute_variant.get_boolean ();
- set_mute_internal (mute);
- }
-
- Variant last_running_player_variant = changed_properties.lookup_value ("LastRunningPlayer", VariantType.STRING);
- if (last_running_player_variant != null) {
- var last_player = last_running_player_variant.get_string ();
- _last_running_player = last_player;
- this.notify_property("last-running-player");
- }
- }
-
- private async void setup_user_proxy (string? username_in = null)
- {
- var username = username_in;
- _user_proxy = null;
-
- // Look up currently selected greeter user, if asked
- if (username == null) {
- try {
- username = yield _greeter_proxy.get_active_entry ();
- if (username == "" || username == null)
- return;
- } catch (GLib.Error e) {
- warning ("unable to find Accounts path for user %s: %s", username, e.message);
- return;
- }
- }
-
- // Get master AccountsService object
- DBusProxy accounts_proxy;
- try {
- accounts_proxy = yield DBusProxy.create_for_bus (BusType.SYSTEM, DBusProxyFlags.DO_NOT_LOAD_PROPERTIES | DBusProxyFlags.DO_NOT_CONNECT_SIGNALS, null, "org.freedesktop.Accounts", "/org/freedesktop/Accounts", "org.freedesktop.Accounts");
- } catch (GLib.Error e) {
- warning ("unable to get greeter proxy: %s", e.message);
- return;
- }
-
- // Find user's AccountsService object
- try {
- var user_path_variant = yield accounts_proxy.call ("FindUserByName", new Variant ("(s)", username), DBusCallFlags.NONE, -1);
- string user_path;
- user_path_variant.get ("(o)", out user_path);
- _user_proxy = yield DBusProxy.create_for_bus (BusType.SYSTEM, DBusProxyFlags.GET_INVALIDATED_PROPERTIES, null, "org.freedesktop.Accounts", user_path, "com.ubuntu.AccountsService.Sound");
- } catch (GLib.Error e) {
- warning ("unable to find Accounts path for user %s: %s", username, e.message);
- return;
- }
-
- // Get current values and listen for changes
- _user_proxy.g_properties_changed.connect (accountsservice_props_changed_cb);
- try {
- var props_variant = yield _user_proxy.get_connection ().call (_user_proxy.get_name (), _user_proxy.get_object_path (), "org.freedesktop.DBus.Properties", "GetAll", new Variant ("(s)", _user_proxy.get_interface_name ()), null, DBusCallFlags.NONE, -1);
- Variant props;
- props_variant.get ("(@a{sv})", out props);
- accountsservice_props_changed_cb(_user_proxy, props, null);
- } catch (GLib.Error e) {
- debug("Unable to get properties for user %s at first try: %s", username, e.message);
- }
- }
-
- private void greeter_user_changed (string username)
- {
- setup_user_proxy.begin (username);
- }
-
- private async void setup_accountsservice ()
- {
- if (Environment.get_variable ("XDG_SESSION_CLASS") == "greeter") {
- try {
- _greeter_proxy = yield Bus.get_proxy (BusType.SESSION, "com.canonical.UnityGreeter", "/list");
- } catch (GLib.Error e) {
- warning ("unable to get greeter proxy: %s", e.message);
- return;
- }
- _greeter_proxy.entry_selected.connect (greeter_user_changed);
- yield setup_user_proxy ();
- } else {
- // We are in a user session. We just need our own proxy
- unowned string username = Environment.get_variable ("USER");
- if (username != "" && username != null) {
- yield setup_user_proxy (username);
- }
- }
- }
-
- private async void sync_mute_to_accountsservice (bool mute)
- {
- if (_user_proxy == null)
- return;
-
- _mute_cancellable.cancel ();
- _mute_cancellable.reset ();
-
- try {
- yield _user_proxy.get_connection ().call (_user_proxy.get_name (), _user_proxy.get_object_path (), "org.freedesktop.DBus.Properties", "Set", new Variant ("(ssv)", _user_proxy.get_interface_name (), "Muted", new Variant ("b", mute)), null, DBusCallFlags.NONE, -1, _mute_cancellable);
- } catch (GLib.Error e) {
- warning ("unable to sync mute to AccountsService: %s", e.message);
- }
- }
-
- private async void sync_last_running_player_to_accountsservice (string last_running_player)
- {
- if (_user_proxy == null)
- return;
-
- _last_running_player_cancellable.cancel ();
- _last_running_player_cancellable.reset ();
-
- try {
- yield _user_proxy.get_connection ().call (_user_proxy.get_name (), _user_proxy.get_object_path (), "org.freedesktop.DBus.Properties", "Set", new Variant ("(ssv)", _user_proxy.get_interface_name (), "LastRunningPlayer", new Variant ("s", last_running_player)), null, DBusCallFlags.NONE, -1, _last_running_player_cancellable);
- } catch (GLib.Error e) {
- warning ("unable to sync last running player to AccountsService: %s", e.message);
- }
- _last_running_player = last_running_player;
- }
-
- private async void sync_volume_to_accountsservice (VolumeControl.Volume volume)
- {
- if (_user_proxy == null)
- return;
-
- _volume_cancellable.cancel ();
- _volume_cancellable.reset ();
-
- warning("Interface name: %s", _user_proxy.get_interface_name ());
- try {
- yield _user_proxy.get_connection ().call (_user_proxy.get_name (), _user_proxy.get_object_path (), "org.freedesktop.DBus.Properties", "Set", new Variant ("(ssv)", _user_proxy.get_interface_name (), "Volume", new Variant ("d", volume.volume)), null, DBusCallFlags.NONE, -1, _volume_cancellable);
- } catch (GLib.Error e) {
- warning ("unable to sync volume to AccountsService: %s", e.message);
- }
- }
private void start_local_volume_timer()
{
@@ -943,7 +775,7 @@ public class VolumeControlPulse : VolumeControl
stop_account_service_volume_timer();
if (_local_volume_timer == 0) {
- sync_volume_to_accountsservice.begin (_volume);
+ _accounts_service_access.volume = _volume.volume;
_local_volume_timer = Timeout.add_seconds (1, local_volume_changed_timeout);
} else {
_send_next_local_volume = true;
diff --git a/src/volume-control.vala b/src/volume-control.vala
index 137e7b6..3d02f70 100644
--- a/src/volume-control.vala
+++ b/src/volume-control.vala
@@ -84,6 +84,4 @@ public abstract class VolumeControl : Object
public abstract VolumeControl.ActiveOutput active_output();
public signal void active_output_changed (VolumeControl.ActiveOutput active_output);
-
- public virtual string last_running_player { get { return ""; } set { } }
}