-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathdbus.go
102 lines (88 loc) · 1.97 KB
/
dbus.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package main
import (
"encoding/json"
"errors"
"github.com/godbus/dbus/v5"
"log"
)
var conn *dbus.Conn
var s *StreamDeckDBus
type StreamDeckDBus struct {
Cols int `json:"cols,omitempty"`
Rows int `json:"rows,omitempty"`
IconSize int `json:"icon_size,omitempty"`
Page int `json:"page"`
}
func (s StreamDeckDBus) GetDeckInfo() (string, *dbus.Error) {
infoString, err := json.Marshal(s)
if err != nil {
return "", dbus.MakeFailedError(err)
}
return string(infoString), nil
}
func (StreamDeckDBus) GetConfig() (string, *dbus.Error) {
configString, err := json.Marshal(config)
if err != nil {
return "", dbus.MakeFailedError(err)
}
return string(configString), nil
}
func (StreamDeckDBus) ReloadConfig() *dbus.Error {
err := ReloadConfig()
if err != nil {
return dbus.MakeFailedError(err)
}
return nil
}
func (StreamDeckDBus) SetPage(page int) *dbus.Error {
SetPage(config, page, dev)
return nil
}
func (StreamDeckDBus) SetConfig(configString string) *dbus.Error {
err := SetConfig(configString)
if err != nil {
return dbus.MakeFailedError(err)
}
return nil
}
func (StreamDeckDBus) CommitConfig() *dbus.Error {
err := SaveConfig()
if err != nil {
return dbus.MakeFailedError(err)
}
return nil
}
func InitDBUS() error {
var err error
conn, err = dbus.SessionBus()
if err != nil {
log.Println(err)
return err
}
defer conn.Close()
s = &StreamDeckDBus{
Cols: int(dev.Columns),
Rows: int(dev.Rows),
IconSize: int(dev.Pixels),
Page: p,
}
conn.ExportAll(s, "/com/unixstreamdeck/streamdeckd", "com.unixstreamdeck.streamdeckd")
reply, err := conn.RequestName("com.unixstreamdeck.streamdeckd",
dbus.NameFlagDoNotQueue)
if err != nil {
log.Println(err)
return err
}
if reply != dbus.RequestNameReplyPrimaryOwner {
return errors.New("DBus: Name already taken")
}
select {}
}
func EmitPage(page int) {
if conn != nil {
conn.Emit("/com/unixstreamdeck/streamdeckd", "com.unixstreamdeck.streamdeckd.Page", page)
}
if s != nil {
s.Page = page
}
}