diff --git a/go.mod b/go.mod index ac6b8b7..3248878 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,7 @@ require ( github.com/davecgh/go-spew v1.1.1 github.com/dhamith93/systats v0.2.0 github.com/gliderlabs/ssh v0.3.5 + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 github.com/lucasb-eyer/go-colorful v1.2.0 github.com/manifoldco/promptui v0.9.0 github.com/mazznoer/colorgrad v0.9.0 diff --git a/go.sum b/go.sum index 8ede324..7bb4417 100644 --- a/go.sum +++ b/go.sum @@ -187,6 +187,8 @@ github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= +github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= diff --git a/internal/cli/cli.go b/internal/cli/cli.go index 869319e..e3a9c1a 100644 --- a/internal/cli/cli.go +++ b/internal/cli/cli.go @@ -14,6 +14,8 @@ import ( "github.com/davecgh/go-spew/spew" + "github.com/google/shlex" + "git.tcp.direct/kayos/ziggs/internal/common" "git.tcp.direct/kayos/ziggs/internal/config" "git.tcp.direct/kayos/ziggs/internal/ziggy" @@ -39,8 +41,12 @@ func executor(cmd string) { go saveHist() } }() - cmd = strings.TrimSpace(cmd) - var args = strings.Fields(cmd) + args, err := shlex.Split(strings.TrimSpace(cmd)) + if err != nil { + log.Error().Msgf("error parsing command: %s", err) + status = 1 + return + } if len(args) == 0 { return } diff --git a/internal/cli/set.go b/internal/cli/set.go index 884e226..e9e3f19 100644 --- a/internal/cli/set.go +++ b/internal/cli/set.go @@ -218,7 +218,11 @@ func cmdSet(bridge *ziggy.Bridge, args []string) error { actions = append(actions, func() error { err := target.Scene(targetScene) if err != nil { - err = fmt.Errorf("failed to set scene: %w", err) + targetScene = ziggy.GetSceneMap()[targetScene].ID + err = target.Scene(targetScene) + if err != nil { + err = fmt.Errorf("failed to set scene: %w", err) + } } return err }) diff --git a/internal/ziggy/multiplexor.go b/internal/ziggy/multiplexor.go index d3af5f8..cdb90c9 100644 --- a/internal/ziggy/multiplexor.go +++ b/internal/ziggy/multiplexor.go @@ -55,3 +55,27 @@ func GetGroupMap() map[string]*huego.Group { } return groupMap } + +func GetSceneMap() map[string]*huego.Scene { + var sceneMap = make(map[string]*huego.Scene) + for _, c := range Lucifer.Bridges { + scs, err := c.GetScenes() + if err != nil { + log.Warn().Msgf("error getting groups on bridge %s: %v", c.ID, err) + continue + } + for _, s := range scs { + group, gerr := c.GetScene(s.ID) + if gerr != nil { + log.Warn().Msgf("failed to get pointer for scene %s on bridge %s: %v", s.Name, c.ID, gerr) + continue + } + if _, ok := sceneMap[s.Name]; ok { + log.Warn().Msgf("duplicate scene name %s on bridge %s - please rename", s.Name, c.ID) + continue + } + sceneMap[s.Name] = group + } + } + return sceneMap +} diff --git a/vendor/modules.txt b/vendor/modules.txt index 32e0c4e..20b464d 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -58,6 +58,9 @@ github.com/gliderlabs/ssh # github.com/gofrs/flock v0.8.0 ## explicit github.com/gofrs/flock +# github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 +## explicit; go 1.13 +github.com/google/shlex # github.com/hashicorp/errwrap v1.0.0 ## explicit github.com/hashicorp/errwrap