aboutsummaryrefslogtreecommitdiff
path: root/cmd/corvid
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/corvid')
-rw-r--r--cmd/corvid/main.go51
1 files changed, 51 insertions, 0 deletions
diff --git a/cmd/corvid/main.go b/cmd/corvid/main.go
index 9064ad6..53c84aa 100644
--- a/cmd/corvid/main.go
+++ b/cmd/corvid/main.go
@@ -1,10 +1,61 @@
package main
import (
+ "fmt"
+ "os"
+ "strconv"
+
"github.com/CartConnoisseur/corvid/srv"
+ "github.com/godbus/dbus/v5"
)
func main() {
+ if len(os.Args) < 2 {
+ server()
+ }
+
+ switch os.Args[1] {
+ case "server":
+ server()
+ case "dismiss":
+ if len(os.Args) < 3 {
+ fmt.Println("dismiss command requires positional argument 'id'")
+ os.Exit(1)
+ }
+
+ id, err := strconv.ParseInt(os.Args[2], 0, 32)
+ if err != nil || id <= 0 {
+ fmt.Printf("invalid value for positional argument 'id' (must be u64): %s\n", os.Args[2])
+ os.Exit(1)
+ }
+
+ call("Dismiss", uint32(id))
+ case "dismiss-all":
+ call("DismissAll")
+ default:
+ fmt.Printf("unknown subcommand: %s\n", os.Args[1])
+ os.Exit(1)
+ }
+}
+
+func server() {
srv.Start()
select {}
}
+
+func call(name string, args ...interface{}) error {
+ const CORVID_DBUS_OBJECT = "/sh/cxl/Corvid"
+ const CORVID_DBUS_NAME = "sh.cxl.Corvid"
+
+ conn, err := dbus.SessionBus()
+ if err != nil {
+ return err
+ }
+
+ call := conn.Object(CORVID_DBUS_NAME, CORVID_DBUS_OBJECT).Call(CORVID_DBUS_NAME+"."+name, 0, args...)
+ if call.Err != nil {
+ return call.Err
+ }
+
+ return nil
+}