]> code.octet-stream.net Git - broadcaster/blobdiff - radio/config.go
Simplify package names
[broadcaster] / radio / config.go
diff --git a/radio/config.go b/radio/config.go
new file mode 100644 (file)
index 0000000..6837b7d
--- /dev/null
@@ -0,0 +1,70 @@
+package main
+
+import (
+       "errors"
+       "log"
+       "os"
+       "strings"
+
+       "github.com/BurntSushi/toml"
+)
+
+type RadioConfig struct {
+       GpioDevice string
+       PTTPin     int
+       COSPin     int
+       ServerURL  string
+       Token      string
+       CachePath  string
+       TimeZone   string
+}
+
+func NewRadioConfig() RadioConfig {
+       return RadioConfig{
+               GpioDevice: "gpiochip0",
+               PTTPin:     -1,
+               COSPin:     -1,
+               ServerURL:  "",
+               Token:      "",
+               CachePath:  "",
+               TimeZone:   "Australia/Hobart",
+       }
+}
+
+func (c *RadioConfig) LoadFromFile(path string) {
+       _, err := toml.DecodeFile(path, &c)
+       if err != nil {
+               log.Fatal("could not read config file for reading at path:", path, err)
+       }
+       err = c.Validate()
+       if err != nil {
+               log.Fatal(err)
+       }
+       c.ApplyDefaults()
+}
+
+func (c *RadioConfig) Validate() error {
+       if c.ServerURL == "" {
+               return errors.New("ServerURL must be provided in the configuration")
+       }
+       if c.Token == "" {
+               return errors.New("Token must be provided in the configuration")
+       }
+       return nil
+}
+
+func (c *RadioConfig) ApplyDefaults() {
+       if c.CachePath == "" {
+               dir, err := os.MkdirTemp("", "broadcast")
+               if err != nil {
+                       log.Fatal(err)
+               }
+               c.CachePath = dir
+       }
+}
+
+func (c *RadioConfig) WebsocketURL() string {
+       addr := strings.Replace(c.ServerURL, "https://", "wss://", -1)
+       addr = strings.Replace(addr, "http://", "ws://", -1)
+       return addr + "/radio-ws"
+}