Skip to content
Nadim147cPublic
forked from pauloo27/go-mpris

About

📦 A Go library for MPRIS

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

 
 

Latest commit

 

History

79 Commits

Folders and files

Repository files navigation

Go MPRIS

Go library for DBus-MPRIS.

Important

🔥 Found this useful? A quick star goes a long way.

[!DANGER] v2 is very unstable!

Features

  1. Full MPRIS 2.2 support for Base and Player interfaces (TrackList and Playlists are incomplete).
  2. Type-safe D-Bus access ensuring reliable data handling across all players.
  3. Native time.Duration usage for playback times instead of raw microseconds.
  4. Simple, high-level API for playback control, metadata, and property management.

Install

go get github.com/Nadim147c/go-mpris/v2

The dependency github.com/godbus/dbus/v5 is going to be installed as well.

Client Example

Printing the current playback status and then changing it:

import (
	"log"

	"github.com/Nadim147c/go-mpris/v2"
	"github.com/godbus/dbus/v5"
)

func main() {
	conn, err := dbus.SessionBus()
	if err != nil {
		panic(err)
	}
	names, err := mpris.List(conn)
	if err != nil {
		panic(err)
	}
	if len(names) == 0 {
		log.Fatal("No player found")
	}

	name := names[0]
	client := mpris.NewClient(conn, name)

	status, err := client.GetPlaybackStatus()
	if err != nil {
		log.Fatal("Could not get current playback status")
	}

	log.Printf("The player was %s...", status)
	err = client.PlayPause()
	if err != nil {
		log.Fatal("Could not play/pause player")
	}
}

Server Example

Creating a mock MPRIS server:

import (
	"context"
	"log"

	"github.com/Nadim147c/go-mpris/v2"
	"github.com/godbus/dbus/v5"
)

func main() {
	conn, err := dbus.SessionBus()
	if err != nil {
		panic(err)
	}
	defer conn.Close()

	name := mpris.BaseInterface + ".my_server"
	server := mpris.NewServer(conn, name)

	meta := mpris.Metadata{}
	meta.Set(mpris.KeyTitle, "My Track")
	meta.Set(mpris.KeyArtist, []string{"My Artist"})

	pm := mpris.NewPropertiesManager(&mpris.Properties{
		PlaybackStatus: mpris.PlaybackPlaying,
		Metadata:       meta,
	})

	server.RegisterPropertiesManager(pm, mpris.NoOpPropertySetter{})
	server.RegisterBaseHandler(mpris.NoOpBaseHandler{})
	server.RegisterPlayerHandler(mpris.NoOpPlayerHandler{})

	log.Printf("Listening on %s", name)
	if err := server.Listen(context.Background()); err != nil {
		log.Fatal(err)
	}
}

For more examples, see the examples folder.

Go Docs

Read the docs at https://pkg.go.dev/github.com/Nadim147c/go-mpris.

Credits

emersion and Pauloo27 for the original code.

About

📦 A Go library for MPRIS

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Used by

Contributors

Languages