diff options
author | Aylur <[email protected]> | 2024-10-29 22:06:27 +0100 |
---|---|---|
committer | Aylur <[email protected]> | 2024-10-29 22:06:27 +0100 |
commit | 58e947dcbc9614ddb9a0833154ec0028aed23d17 (patch) | |
tree | 0b6a96547ab7c62b59f667a4e184338a8881f378 | |
parent | 479e85aca3dfc60f92f3d98ec82a5d58607e24db (diff) |
fix(mpris): bus_name constructor setter
-rw-r--r-- | lib/mpris/mpris.vala | 10 | ||||
-rw-r--r-- | lib/mpris/player.vala | 64 |
2 files changed, 36 insertions, 38 deletions
diff --git a/lib/mpris/mpris.vala b/lib/mpris/mpris.vala index 8eaffa5..8039d39 100644 --- a/lib/mpris/mpris.vala +++ b/lib/mpris/mpris.vala @@ -73,12 +73,10 @@ public class AstalMpris.Mpris : Object { var p = new Player(busname); _players.set(busname, p); - p.notify["available"].connect(() => { - if (!p.available) { - player_closed(p); - _players.remove(busname); - notify_property("players"); - } + p.closed.connect(() => { + player_closed(p); + _players.remove(busname); + notify_property("players"); }); player_added(p); diff --git a/lib/mpris/player.vala b/lib/mpris/player.vala index b72c15e..26ce7e6 100644 --- a/lib/mpris/player.vala +++ b/lib/mpris/player.vala @@ -9,8 +9,13 @@ public class AstalMpris.Player : Object { private IPlayer proxy; private uint pollid; // periodically notify position - // identifiers - public string bus_name { owned get; private set; } + internal signal void appeared() { available = true; } + internal signal void closed() { available = false; } + + /** + * Full dbus namae of this player. + */ + public string bus_name { owned get; private construct set; } /** * Indicates if [[email protected]:bus_name] is available on dbus. @@ -407,8 +412,8 @@ public class AstalMpris.Player : Object { * @param name dbus name of the player. */ public Player(string name) { - bus_name = name.has_prefix("org.mpris.MediaPlayer2.") - ? name : @"org.mpris.MediaPlayer2.$name"; + Object(bus_name: name.has_prefix("org.mpris.MediaPlayer2.") + ? name : @"org.mpris.MediaPlayer2.$name"); } private void sync() { @@ -560,14 +565,30 @@ public class AstalMpris.Player : Object { construct { try { - try_proxy(); + setup_proxy(); + setup_position_poll(); sync(); } catch (Error error) { critical(error.message); } } - private void try_proxy() throws Error { + private void setup_position_poll() { + var current_position = position; + + pollid = Timeout.add_seconds(1, () => { + if (!available) + return Source.CONTINUE; + + if (position >= 0 && current_position != position) { + current_position = position; + notify_property("position"); + } + return Source.CONTINUE; + }, Priority.DEFAULT); + } + + private void setup_proxy() throws Error { if (proxy != null) return; @@ -577,28 +598,19 @@ public class AstalMpris.Player : Object { "/org/mpris/MediaPlayer2" ); - if (proxy.g_name_owner != null) - available = false; + if (proxy.g_name_owner != null) { + appeared(); + } proxy.notify["g-name-owner"].connect(() => { if (proxy.g_name_owner != null) { - available = true; + appeared(); } else { - available = false; + closed(); } }); proxy.g_properties_changed.connect(sync); - - pollid = Timeout.add_seconds(1, () => { - if (!available) - return Source.CONTINUE; - - if (position >= 0) { - notify_property("position"); - } - return Source.CONTINUE; - }, Priority.DEFAULT); } ~Player() { @@ -622,18 +634,6 @@ public enum AstalMpris.PlaybackStatus { return STOPPED; } } - - internal string to_string() { - switch (this) { - case PLAYING: - return "Playing"; - case PAUSED: - return "Paused"; - case STOPPED: - default: - return "Stopped"; - } - } } public enum AstalMpris.Loop { |