From fa741e65856124cec0fba2c5a5c222f1469aaf8d Mon Sep 17 00:00:00 2001 From: Collin Guarino Date: Thu, 18 Feb 2016 23:48:12 -0500 Subject: Moved functions, rearranged Bridge.funcs into bridge.go file --- bridge.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'bridge.go') diff --git a/bridge.go b/bridge.go index 4f5a585..d729633 100644 --- a/bridge.go +++ b/bridge.go @@ -217,6 +217,57 @@ func (bridge *Bridge) DeleteUser(username string) error { return nil } +// GetAllLights retreives the state of all lights that the bridge is aware of. +func (bridge *Bridge) GetAllLights() ([]Light, error) { + // Loop through all light indicies to see if they exist + // and parse their values. Supports 100 lights. + var lights []Light + for index := 1; index < 101; index++ { + light, err := bridge.GetLightByIndex(index) + if err != nil { + break + } + lights = append(lights, light) + } + return lights, nil +} + +// GetLightByIndex returns a light struct containing data on +// a light given its index stored on the bridge. This is used for +// quickly updating an individual light. +func (bridge *Bridge) GetLightByIndex(index int) (Light, error) { + // Send an http GET and inspect the response + uri := fmt.Sprintf("/api/%s/lights/%d", bridge.Username, index) + body, _, err := bridge.Get(uri) + if err != nil { + return Light{}, err + } + if strings.Contains(string(body), "not available") { + return Light{}, errors.New("Index Error") + } + + // Parse and load the response into the light array + light := Light{} + err = json.Unmarshal(body, &light) + if err != nil { + trace("", err) + } + light.Index = index + light.Bridge = bridge + return light, nil +} + +// GetLight returns a light struct containing data on a given name. +func (bridge *Bridge) GetLightByName(name string) (Light, error) { + lights, _ := bridge.GetAllLights() + for _, light := range lights { + if light.Name == name { + return light, nil + } + } + return Light{}, errors.New("Light not found.") +} + // Log the date, time, file location, line number, and function. // Message can be "" or Err can be nil (not both) func trace(message string, err error) { -- cgit v1.2.3