add players as detected, switch to currently playing player on state

change.
This commit is contained in:
Harvey Tindall 2020-08-21 15:44:59 +01:00
parent 461d87b8c9
commit 3cf3f910ca
Signed by: hrfee
GPG Key ID: BBC65952848FB1A2
3 changed files with 30 additions and 32 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
./main

BIN
main

Binary file not shown.

61
main.go
View File

@ -6,6 +6,7 @@ import (
"github.com/godbus/dbus/v5"
"sort"
"strings"
// "time"
)
type Player struct {
@ -85,8 +86,6 @@ func (s Players) Len() int {
}
func (s Players) Less(i, j int) bool {
// x, err := s[i].GetProperty("org.mpris.MediaPlayer2.Player.PlaybackStatus")
// y, err := s[j].GetProperty("org.mpris.MediaPlayer2.Player.PlaybackStatus")
s[i].Refresh()
s[j].Refresh()
var states [2]int
@ -96,13 +95,6 @@ func (s Players) Less(i, j int) bool {
if s[j].playing {
states[1] = 1
}
// if strings.Contains(x.String(), "Playing") {
// states[0] = 1
// }
// if strings.Contains(y.String(), "Playing") {
// states[1] = 1
// }
// fmt.Println(states[i])
// reverse
return states[0] > states[1]
}
@ -116,39 +108,44 @@ func main() {
if err != nil {
panic(err)
}
var fd []string
err = conn.BusObject().Call("org.freedesktop.DBus.ListNames", 0).Store(&fd)
if err != nil {
panic(err)
}
var players Players
for _, name := range fd {
if strings.HasPrefix(name, "org.mpris.MediaPlayer2") {
//players = append(players, conn.Object(name, "/org/mpris/MediaPlayer2"))
players = append(players, NewPlayer(conn, name))
getPlayers := func() {
var fd []string
err = conn.BusObject().Call("org.freedesktop.DBus.ListNames", 0).Store(&fd)
if err != nil {
panic(err)
}
for _, name := range fd {
if strings.HasPrefix(name, "org.mpris.MediaPlayer2") {
players = append(players, NewPlayer(conn, name))
}
}
sort.Sort(players)
}
sort.Sort(players)
getPlayers()
go func() {
conn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0,
"type='signal',path='/org/freedesktop/DBus',interface='org.freedesktop.DBus',member='NameOwnerChanged'")
c := make(chan *dbus.Signal, 10)
conn.Signal(c)
for v := range c {
switch name := v.Body[0].(type) {
case string:
if strings.Contains(name, "org.mpris.MediaPlayer2") && name != "org.mpris.MediaPlayer2.Player" {
players = append(players, NewPlayer(conn, name))
sort.Sort(players)
}
}
}
}()
conn.BusObject().Call("org.freedesktop.DBus.AddMatch", 0,
"type='signal',path='/org/mpris/MediaPlayer2',interface='org.freedesktop.DBus.Properties'")
c := make(chan *dbus.Signal, 10)
conn.Signal(c)
fmt.Println(players[0].JSON())
for range c {
sort.Sort(players)
players[0].Refresh()
fmt.Println(players[0].JSON())
}
// fmt.Printf("%d: %s: %t\n", i, s.playerName, s.playing)
// for key, val := range s.metadata {
// fmt.Println(key, val)
// }
// fmt.Println(fd)
// node, err := introspect.Call(conn.Object("org.mpris.MediaPlayer2", "/org/mpris/MediaPlayer2"))
// if err != nil {
// panic(err)
// }
// data, _ := json.MarshalIndent(node, "", " ")
// fmt.Println(data)
}