2020-03-25 00:12:35 +00:00
|
|
|
package lumecmd
|
|
|
|
|
|
|
|
import (
|
|
|
|
"flag"
|
2020-03-27 00:05:50 +00:00
|
|
|
"fmt"
|
2020-03-25 00:12:35 +00:00
|
|
|
"strconv"
|
|
|
|
|
2020-03-28 19:31:10 +00:00
|
|
|
"git.kill0.net/chill9/lume"
|
2020-03-25 00:12:35 +00:00
|
|
|
)
|
|
|
|
|
2020-03-29 04:47:42 +00:00
|
|
|
type Config struct {
|
|
|
|
AccessToken string
|
2020-04-04 15:27:09 +00:00
|
|
|
Colors map[string][]float32 `toml:"colors"`
|
2020-03-29 04:47:42 +00:00
|
|
|
}
|
|
|
|
|
2020-03-25 00:12:35 +00:00
|
|
|
type CmdArgs struct {
|
2020-03-28 23:13:15 +00:00
|
|
|
Flags Flags
|
|
|
|
Client *lifx.Client
|
2020-03-29 04:47:42 +00:00
|
|
|
Config Config
|
2020-03-25 00:12:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
type Flags struct {
|
|
|
|
*flag.FlagSet
|
|
|
|
}
|
|
|
|
|
2020-03-27 00:05:50 +00:00
|
|
|
type Command struct {
|
2020-03-28 00:31:41 +00:00
|
|
|
Name string
|
2020-03-29 05:08:17 +00:00
|
|
|
Func func(CmdArgs) (int, error)
|
2020-03-27 00:05:50 +00:00
|
|
|
Flags *flag.FlagSet
|
2020-08-07 23:11:42 +00:00
|
|
|
Use string
|
2020-08-08 03:09:40 +00:00
|
|
|
Short string
|
|
|
|
Long string
|
2020-03-27 00:05:50 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
var commandRegistry = make(map[string]Command)
|
|
|
|
|
2020-03-28 20:22:34 +00:00
|
|
|
var (
|
|
|
|
defaultSelector string = "all"
|
|
|
|
defaultDuration float64 = 1.0
|
|
|
|
defaultPower string = ""
|
|
|
|
defaultColor string = ""
|
|
|
|
defaultBrightness string = ""
|
|
|
|
defaultInfrared string = ""
|
|
|
|
defaultFast bool = false
|
|
|
|
defaultWhiteKelvin string = ""
|
|
|
|
defaultWhiteName string = ""
|
2020-03-28 23:03:16 +00:00
|
|
|
defaultHue string = ""
|
|
|
|
defaultSaturation string = ""
|
|
|
|
defaultRGB string = ""
|
2020-04-04 15:27:09 +00:00
|
|
|
defaultName string = ""
|
2020-03-28 20:22:34 +00:00
|
|
|
)
|
|
|
|
|
2020-03-25 00:12:35 +00:00
|
|
|
func (f Flags) String(name string) string {
|
|
|
|
return f.FlagSet.Lookup(name).Value.String()
|
|
|
|
}
|
|
|
|
|
2020-03-28 23:03:16 +00:00
|
|
|
func (f Flags) Float32(name string) float32 {
|
|
|
|
val, _ := strconv.ParseFloat(f.String(name), 32)
|
|
|
|
return float32(val)
|
|
|
|
}
|
|
|
|
|
2020-03-25 00:12:35 +00:00
|
|
|
func (f Flags) Float64(name string) float64 {
|
|
|
|
val, _ := strconv.ParseFloat(f.String(name), 64)
|
|
|
|
return val
|
|
|
|
}
|
|
|
|
|
2020-03-28 18:18:15 +00:00
|
|
|
func (f Flags) Int16(name string) int16 {
|
|
|
|
val, _ := strconv.ParseInt(f.String(name), 10, 16)
|
|
|
|
return int16(val)
|
|
|
|
}
|
|
|
|
|
2020-03-25 00:12:35 +00:00
|
|
|
func (f Flags) Bool(name string) bool {
|
|
|
|
val, _ := strconv.ParseBool(f.String(name))
|
|
|
|
return val
|
|
|
|
}
|
2020-03-27 00:05:50 +00:00
|
|
|
|
|
|
|
func RegisterCommand(name string, cmd Command) error {
|
|
|
|
if _, ok := commandRegistry[name]; ok {
|
|
|
|
return fmt.Errorf("%s command is already registered")
|
|
|
|
}
|
2020-08-07 23:09:54 +00:00
|
|
|
cmd.Name = name
|
2020-03-27 00:05:50 +00:00
|
|
|
commandRegistry[name] = cmd
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func GetCommand(name string) (Command, bool) {
|
|
|
|
cmd, ok := commandRegistry[name]
|
|
|
|
return cmd, ok
|
|
|
|
}
|