refactored command line tool
This commit is contained in:
parent
2283a91ab8
commit
079b1a469d
32
cmd/command.go
Normal file
32
cmd/command.go
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
package lumecmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"strconv"
|
||||||
|
|
||||||
|
"git.kill0.net/chill9/go-lifx"
|
||||||
|
)
|
||||||
|
|
||||||
|
type CmdArgs struct {
|
||||||
|
Flags *Flags
|
||||||
|
Client *lifx.Client
|
||||||
|
Selector string
|
||||||
|
}
|
||||||
|
|
||||||
|
type Flags struct {
|
||||||
|
*flag.FlagSet
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f Flags) String(name string) string {
|
||||||
|
return f.FlagSet.Lookup(name).Value.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f Flags) Float64(name string) float64 {
|
||||||
|
val, _ := strconv.ParseFloat(f.String(name), 64)
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f Flags) Bool(name string) bool {
|
||||||
|
val, _ := strconv.ParseBool(f.String(name))
|
||||||
|
return val
|
||||||
|
}
|
90
cmd/ls.go
Normal file
90
cmd/ls.go
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
package lumecmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.kill0.net/chill9/go-lifx"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
idWidth int = 0
|
||||||
|
locationWidth int = 0
|
||||||
|
groupWidth int = 0
|
||||||
|
labelWidth int = 0
|
||||||
|
lastSeenWidth int = 0
|
||||||
|
powerWidth int = 0
|
||||||
|
)
|
||||||
|
|
||||||
|
func LsCmd(args CmdArgs) int {
|
||||||
|
c := args.Client
|
||||||
|
lights, err := c.ListLights(args.Selector)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
PrintLights(lights)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func PrintLights(lights []lifx.Light) {
|
||||||
|
calculateWidths(lights)
|
||||||
|
|
||||||
|
fmt.Printf("total %d\n", len(lights))
|
||||||
|
for _, l := range lights {
|
||||||
|
fmt.Printf(
|
||||||
|
"%*s %*s %*s %*s %*s %-*s\n",
|
||||||
|
idWidth, l.Id,
|
||||||
|
locationWidth, l.Location.Name,
|
||||||
|
groupWidth, l.Group.Name,
|
||||||
|
labelWidth, l.Label,
|
||||||
|
lastSeenWidth, l.LastSeen.Local().Format(time.RFC3339),
|
||||||
|
powerWidth, powerColor(l.Power),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func powerColor(s string) string {
|
||||||
|
fs := "\033[1;31m%s\033[0m"
|
||||||
|
if s == "on" {
|
||||||
|
fs = "\033[1;32m%s\033[0m"
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Sprintf(fs, s)
|
||||||
|
}
|
||||||
|
|
||||||
|
func calculateWidths(lights []lifx.Light) {
|
||||||
|
var length int
|
||||||
|
|
||||||
|
for _, l := range lights {
|
||||||
|
length = len(l.Id)
|
||||||
|
if idWidth < length {
|
||||||
|
idWidth = length
|
||||||
|
}
|
||||||
|
|
||||||
|
length = len(l.Location.Name)
|
||||||
|
if locationWidth < length {
|
||||||
|
locationWidth = length
|
||||||
|
}
|
||||||
|
|
||||||
|
length = len(l.Group.Name)
|
||||||
|
if groupWidth < length {
|
||||||
|
groupWidth = length
|
||||||
|
}
|
||||||
|
|
||||||
|
length = len(l.Label)
|
||||||
|
if labelWidth < length {
|
||||||
|
labelWidth = length
|
||||||
|
}
|
||||||
|
|
||||||
|
length = len(l.LastSeen.Local().Format(time.RFC3339))
|
||||||
|
if lastSeenWidth < length {
|
||||||
|
lastSeenWidth = length
|
||||||
|
}
|
||||||
|
|
||||||
|
length = len(l.Power)
|
||||||
|
if powerWidth < length {
|
||||||
|
powerWidth = length
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
116
cmd/lume/main.go
116
cmd/lume/main.go
@ -5,44 +5,17 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"git.kill0.net/chill9/go-lifx"
|
"git.kill0.net/chill9/go-lifx"
|
||||||
|
lumecmd "git.kill0.net/chill9/go-lifx/cmd"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
idWidth int = 0
|
|
||||||
locationWidth int = 0
|
|
||||||
groupWidth int = 0
|
|
||||||
labelWidth int = 0
|
|
||||||
lastSeenWidth int = 0
|
|
||||||
powerWidth int = 0
|
|
||||||
)
|
|
||||||
|
|
||||||
type Flags struct {
|
|
||||||
*flag.FlagSet
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f Flags) String(name string) string {
|
|
||||||
return f.FlagSet.Lookup(name).Value.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f Flags) Float64(name string) float64 {
|
|
||||||
val, _ := strconv.ParseFloat(f.String(name), 64)
|
|
||||||
return val
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f Flags) Bool(name string) bool {
|
|
||||||
val, _ := strconv.ParseBool(f.String(name))
|
|
||||||
return val
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var (
|
var (
|
||||||
command string
|
command string
|
||||||
selector *string
|
selector string
|
||||||
//r *lifx.Response
|
//r *lifx.Response
|
||||||
err error
|
err error
|
||||||
color lifx.HSBKColor
|
color lifx.HSBKColor
|
||||||
@ -54,7 +27,7 @@ func main() {
|
|||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
|
|
||||||
selector = flag.String("selector", "all", "LIFX selector")
|
flag.StringVar(&selector, "selector", "all", "LIFX selector")
|
||||||
|
|
||||||
setStateCommand := flag.NewFlagSet("set-state", flag.ExitOnError)
|
setStateCommand := flag.NewFlagSet("set-state", flag.ExitOnError)
|
||||||
setStateCommand.String("power", "", "Set the power state (on/off)")
|
setStateCommand.String("power", "", "Set the power state (on/off)")
|
||||||
@ -77,20 +50,19 @@ func main() {
|
|||||||
|
|
||||||
c := lifx.NewClient(accessToken)
|
c := lifx.NewClient(accessToken)
|
||||||
|
|
||||||
|
cmdArgs := lumecmd.CmdArgs{
|
||||||
|
Client: c,
|
||||||
|
}
|
||||||
|
|
||||||
switch command {
|
switch command {
|
||||||
case "toggle":
|
case "toggle":
|
||||||
_, err = c.Toggle(*selector, 1)
|
_, err = c.Toggle(selector, 1)
|
||||||
case "ls":
|
case "ls":
|
||||||
lights, err := c.ListLights(*selector)
|
lumecmd.LsCmd(cmdArgs)
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
PrintLights(lights)
|
|
||||||
case "set-state":
|
case "set-state":
|
||||||
setStateCommand.Parse(os.Args[4:])
|
setStateCommand.Parse(os.Args[4:])
|
||||||
|
|
||||||
fs := Flags{setStateCommand}
|
fs := lumecmd.Flags{setStateCommand}
|
||||||
|
|
||||||
power := fs.String("power")
|
power := fs.String("power")
|
||||||
color := fs.String("color")
|
color := fs.String("color")
|
||||||
@ -120,11 +92,11 @@ func main() {
|
|||||||
state.Fast, err = strconv.ParseBool(fast)
|
state.Fast, err = strconv.ParseBool(fast)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = c.SetState(*selector, state)
|
_, err = c.SetState(selector, state)
|
||||||
case "set-white":
|
case "set-white":
|
||||||
setWhiteCommand.Parse(os.Args[4:])
|
setWhiteCommand.Parse(os.Args[4:])
|
||||||
|
|
||||||
fs := Flags{setWhiteCommand}
|
fs := lumecmd.Flags{setWhiteCommand}
|
||||||
|
|
||||||
name := fs.String("name")
|
name := fs.String("name")
|
||||||
kelvin := fs.String("kelvin")
|
kelvin := fs.String("kelvin")
|
||||||
@ -157,72 +129,10 @@ func main() {
|
|||||||
state.Fast, err = strconv.ParseBool(fast)
|
state.Fast, err = strconv.ParseBool(fast)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = c.SetState(*selector, state)
|
_, err = c.SetState(selector, state)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func calculateWidths(lights []lifx.Light) {
|
|
||||||
var length int
|
|
||||||
|
|
||||||
for _, l := range lights {
|
|
||||||
length = len(l.Id)
|
|
||||||
if idWidth < length {
|
|
||||||
idWidth = length
|
|
||||||
}
|
|
||||||
|
|
||||||
length = len(l.Location.Name)
|
|
||||||
if locationWidth < length {
|
|
||||||
locationWidth = length
|
|
||||||
}
|
|
||||||
|
|
||||||
length = len(l.Group.Name)
|
|
||||||
if groupWidth < length {
|
|
||||||
groupWidth = length
|
|
||||||
}
|
|
||||||
|
|
||||||
length = len(l.Label)
|
|
||||||
if labelWidth < length {
|
|
||||||
labelWidth = length
|
|
||||||
}
|
|
||||||
|
|
||||||
length = len(l.LastSeen.Local().Format(time.RFC3339))
|
|
||||||
if lastSeenWidth < length {
|
|
||||||
lastSeenWidth = length
|
|
||||||
}
|
|
||||||
|
|
||||||
length = len(l.Power)
|
|
||||||
if powerWidth < length {
|
|
||||||
powerWidth = length
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func PrintLights(lights []lifx.Light) {
|
|
||||||
calculateWidths(lights)
|
|
||||||
|
|
||||||
fmt.Printf("total %d\n", len(lights))
|
|
||||||
for _, l := range lights {
|
|
||||||
fmt.Printf(
|
|
||||||
"%*s %*s %*s %*s %*s %-*s\n",
|
|
||||||
idWidth, l.Id,
|
|
||||||
locationWidth, l.Location.Name,
|
|
||||||
groupWidth, l.Group.Name,
|
|
||||||
labelWidth, l.Label,
|
|
||||||
lastSeenWidth, l.LastSeen.Local().Format(time.RFC3339),
|
|
||||||
powerWidth, PowerColor(l.Power),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func PowerColor(s string) string {
|
|
||||||
fs := "\033[1;31m%s\033[0m"
|
|
||||||
if s == "on" {
|
|
||||||
fs = "\033[1;32m%s\033[0m"
|
|
||||||
}
|
|
||||||
|
|
||||||
return fmt.Sprintf(fs, s)
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user