summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAylur <[email protected]>2024-10-29 22:06:27 +0100
committerAylur <[email protected]>2024-10-29 22:06:27 +0100
commit58e947dcbc9614ddb9a0833154ec0028aed23d17 (patch)
tree0b6a96547ab7c62b59f667a4e184338a8881f378 /lib
parent479e85aca3dfc60f92f3d98ec82a5d58607e24db (diff)
fix(mpris): bus_name constructor setter
Diffstat (limited to 'lib')
-rw-r--r--lib/mpris/mpris.vala10
-rw-r--r--lib/mpris/player.vala64
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 {