diff options
author | Harvey Tindall <hrfee@protonmail.ch> | 2021-01-07 17:59:02 +0000 |
---|---|---|
committer | Harvey Tindall <hrfee@protonmail.ch> | 2021-01-07 17:59:02 +0000 |
commit | 233b5dd1ca729522d1bca27ba73348c45754c9a0 (patch) | |
tree | e5b769cafb67f2d456c8258d4a5091edc16d5c8c /mpris2client/mpris2.go | |
parent | bcd2a83dd92d0984a9eb6fc4fa4d135d9d5fc7da (diff) | |
download | waybar-mpris-233b5dd1ca729522d1bca27ba73348c45754c9a0.tar.gz waybar-mpris-233b5dd1ca729522d1bca27ba73348c45754c9a0.zip |
improve ignoring of playerctld
also now ignores signals from it by storing its unique sender name on
startup and checking each signal.
Diffstat (limited to 'mpris2client/mpris2.go')
-rw-r--r-- | mpris2client/mpris2.go | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/mpris2client/mpris2.go b/mpris2client/mpris2.go index 8565bd5..e990283 100644 --- a/mpris2client/mpris2.go +++ b/mpris2client/mpris2.go @@ -229,6 +229,8 @@ type Mpris2 struct { interpolate bool poll int autofocus bool + // playerctld mirrors property changes of other players, so we store its UID here to ignore it. + playerctldUID string } func NewMpris2(conn *dbus.Conn, interpolate bool, poll int, autofocus bool) *Mpris2 { @@ -254,8 +256,11 @@ func (pl *Mpris2) Listen() { case string: var pid uint32 pl.conn.BusObject().Call("org.freedesktop.DBus.GetConnectionUnixProcessID", 0, name).Store(&pid) - // Ignore playerctld again - if strings.Contains(name, INTERFACE) && !strings.Contains(name, "playerctld") { + // Ignore playerctld + if strings.Contains(name, "playerctld") { + // Store UID so we know to ignore it later + pl.playerctldUID = v.Sender + } else if strings.Contains(name, INTERFACE) { if pid == 0 { pl.Remove(name) pl.Messages <- Message{Name: "remove", Value: name} @@ -265,7 +270,7 @@ func (pl *Mpris2) Listen() { } } } - } else if strings.Contains(v.Name, "PropertiesChanged") && strings.Contains(v.Body[0].(string), INTERFACE+".Player") { + } else if strings.Contains(v.Name, "PropertiesChanged") && strings.Contains(v.Body[0].(string), INTERFACE+".Player") && v.Sender != pl.playerctldUID { pl.Refresh() } } @@ -310,7 +315,12 @@ func (pl *Mpris2) Reload() error { } for _, name := range buses { // Don't add playerctld, it just duplicates other players - if strings.HasPrefix(name, INTERFACE) && !strings.Contains(name, "playerctld") { + if strings.Contains(name, "playerctld") { + // Store its UID + uid := "" + pl.conn.BusObject().Call("org.freedesktop.DBus.GetNameOwner", 0, name).Store(&uid) + pl.playerctldUID = uid + } else if strings.HasPrefix(name, INTERFACE) { pl.New(name) } } |