diff options
| author | Ophestra Umiker <cat@ophivana.moe> | 2024-09-09 03:11:50 +0900 |
|---|---|---|
| committer | Ophestra Umiker <cat@ophivana.moe> | 2024-09-09 03:11:50 +0900 |
| commit | 357cc4ce4d2888033a8163fe39861c8a88301da6 (patch) | |
| tree | a6dbdd09fc5ef2dea82ad1c85627b6455c2f3477 /dbus/config.go | |
| parent | 3242ce340621839d03ecf34bb3ed20d7c6f3cbb3 (diff) | |
dbus: implement xdg-dbus-proxy wrapper
Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
Diffstat (limited to 'dbus/config.go')
| -rw-r--r-- | dbus/config.go | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/dbus/config.go b/dbus/config.go new file mode 100644 index 00000000..9173d78d --- /dev/null +++ b/dbus/config.go @@ -0,0 +1,59 @@ +package dbus + +type Config struct { + See []string `json:"see"` + Talk []string `json:"talk"` + Own []string `json:"own"` + + Log bool `json:"log,omitempty"` + Filter bool `json:"filter"` +} + +func (c *Config) Args(address, path string) (args []string) { + argc := 2 + len(c.See) + len(c.Talk) + len(c.Own) + if c.Log { + argc++ + } + if c.Filter { + argc++ + } + + args = make([]string, 0, argc) + args = append(args, address, path) + for _, name := range c.See { + args = append(args, "--see="+name) + } + for _, name := range c.Talk { + args = append(args, "--talk="+name) + } + for _, name := range c.Own { + args = append(args, "--own="+name) + } + if c.Log { + args = append(args, "--log") + } + if c.Filter { + args = append(args, "--filter") + } + + return +} + +// NewConfig returns a reference to a Config struct with optional defaults. +// If id is an empty string own defaults are omitted. +func NewConfig(id string, defaults, mpris bool) (c *Config) { + c = &Config{Filter: true} + + if defaults { + c.Talk = []string{"org.freedesktop.DBus", "org.freedesktop.portal.*", "org.freedesktop.Notifications"} + + if id != "" { + c.Own = []string{id} + if mpris { + c.Own = append(c.Own, "org.mpris.MediaPlayer2."+id) + } + } + } + + return +} |
