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)  		}  	} | 
