display browser name in tooltip

reads /proc/<pid>/cmdline directly instead of using a library.
This commit is contained in:
Harvey Tindall 2020-08-23 16:25:27 +01:00
parent 840130680e
commit 623adf487e
Signed by: hrfee
GPG Key ID: BBC65952848FB1A2
3 changed files with 22 additions and 1 deletions

View File

@ -15,7 +15,7 @@ MPRIS2 is widely supported, so this component should work with:
* Most other music/media players * Most other music/media players
## Install ## Install
`go get github.com/hrfee/waybar-mpris` `go get github.com/hrfee/waybar-mpris` will install the program, as well as the go dbus bindings and pflags for command-line arguments.
or just grab the `waybar-mpris` binary from here and place it in your PATH. or just grab the `waybar-mpris` binary from here and place it in your PATH.

21
main.go
View File

@ -5,6 +5,7 @@ import (
"fmt" "fmt"
"github.com/godbus/dbus/v5" "github.com/godbus/dbus/v5"
flag "github.com/spf13/pflag" flag "github.com/spf13/pflag"
"io/ioutil"
"log" "log"
"net" "net"
"os" "os"
@ -17,6 +18,12 @@ var knownPlayers = map[string]string{
"noson": "Noson", "noson": "Noson",
} }
var knownBrowsers = map[string]string{
"mozilla": "Firefox",
"chrome": "Chrome",
"chromium": "Chromium",
}
type Player struct { type Player struct {
player dbus.BusObject player dbus.BusObject
fullName, name, title, artist, album string fullName, name, title, artist, album string
@ -50,6 +57,20 @@ func NewPlayer(conn *dbus.Conn, name string) (p *Player) {
for key, val := range knownPlayers { for key, val := range knownPlayers {
if strings.Contains(name, key) { if strings.Contains(name, key) {
playerName = val playerName = val
if val == "Browser" {
var pid uint32
conn.BusObject().Call("org.freedesktop.DBus.GetConnectionUnixProcessID", 0, name).Store(&pid)
file, err := ioutil.ReadFile(fmt.Sprintf("/proc/%d/cmdline", pid))
if err == nil {
cmd := string(file)
for k, v := range knownBrowsers {
if strings.Contains(cmd, k) {
playerName = v
break
}
}
}
}
break break
} }
} }

Binary file not shown.