Compare commits

...

7 Commits

3 changed files with 47 additions and 23 deletions

View File

@ -21,6 +21,7 @@ type (
accessToken string accessToken string
userAgent string userAgent string
Client *http.Client Client *http.Client
debug bool
} }
Result struct { Result struct {
@ -102,6 +103,12 @@ func WithUserAgent(userAgent string) func(*Client) {
} }
} }
func WithDebug(debug bool) func(*Client) {
return func(c *Client) {
c.debug = debug
}
}
func NewClientWithUserAgent(accessToken string, userAgent string) *Client { func NewClientWithUserAgent(accessToken string, userAgent string) *Client {
tr := &http.Transport{ tr := &http.Transport{
//TLSNextProto: make(map[string]func(authority string, c *tls.Conn) http.RoundTripper), //TLSNextProto: make(map[string]func(authority string, c *tls.Conn) http.RoundTripper),
@ -230,7 +237,7 @@ func (c *Client) breathe(selector string, breathe Breathe) (*Response, error) {
return resp, nil return resp, nil
} }
func (c *Client) setStates(selector string, states States) (*Response, error) { func (c *Client) setStates(states States) (*Response, error) {
var ( var (
err error err error
j []byte j []byte

View File

@ -4,7 +4,6 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"net/http"
"strings" "strings"
) )
@ -164,6 +163,10 @@ func (c RGBColor) ColorString() string {
return fmt.Sprintf("rgb:%d,%d,%d", c.R, c.G, c.B) return fmt.Sprintf("rgb:%d,%d,%d", c.R, c.G, c.B)
} }
func (c RGBColor) String() string {
return c.ColorString()
}
func (c RGBColor) Hex() string { func (c RGBColor) Hex() string {
return fmt.Sprintf("#%x%x%x", c.R, c.G, c.B) return fmt.Sprintf("#%x%x%x", c.R, c.G, c.B)
} }
@ -185,6 +188,10 @@ func (c HSBKColor) ColorString() string {
return strings.Join(s, " ") return strings.Join(s, " ")
} }
func (c HSBKColor) String() string {
return c.ColorString()
}
func (c HSBKColor) MarshalText() ([]byte, error) { func (c HSBKColor) MarshalText() ([]byte, error) {
return []byte(c.ColorString()), nil return []byte(c.ColorString()), nil
} }
@ -197,11 +204,14 @@ func (c NamedColor) ColorString() string {
return string(c) return string(c)
} }
func (c NamedColor) String() string {
return c.ColorString()
}
func (c *Client) ValidateColor(color Color) (Color, error) { func (c *Client) ValidateColor(color Color) (Color, error) {
var ( var (
err error err error
s *HSBKColor s *HSBKColor
r *http.Response
resp *Response resp *Response
) )
@ -209,13 +219,12 @@ func (c *Client) ValidateColor(color Color) (Color, error) {
return nil, err return nil, err
} }
resp, err = NewResponse(r)
if err != nil {
return nil, err
}
defer resp.Body.Close() defer resp.Body.Close()
if resp.IsError() {
return nil, resp.GetLifxError()
}
if err = json.NewDecoder(resp.Body).Decode(&s); err != nil { if err = json.NewDecoder(resp.Body).Decode(&s); err != nil {
return nil, err return nil, err
} }

View File

@ -3,6 +3,7 @@ package lifx
import ( import (
//"crypto/tls" //"crypto/tls"
"encoding/json" "encoding/json"
"errors"
"net/http" "net/http"
"time" "time"
) )
@ -39,19 +40,19 @@ type (
} }
Light struct { Light struct {
Id string `json:"id"` Id string `json:"id"`
UUID string `json:"uuid"` UUID string `json:"uuid"`
Label string `json:"label"` Label string `json:"label"`
Connected bool `json:"connected"` Connected bool `json:"connected"`
Power string `json:"power"` Power string `json:"power"`
Color HSBKColor `json:"color"` Color HSBKColor `json:"color"`
Brightness float64 `json:"brightness"` Brightness float64 `json:"brightness"`
Effect string `json:"effect"` Effect string `json:"effect"`
Group Selector `json:"group"` Group Selector `json:"group"`
Location Selector `json:"location"` Location Selector `json:"location"`
Product Product `json:"product"` Product Product `json:"product"`
LastSeen time.Time `json:"last_seen"` LastSeen *time.Time `json:"last_seen,omitempty"`
SecondsLastSeen float64 `json:"seconds_last_seen"` SecondsLastSeen float64 `json:"seconds_last_seen"`
} }
State struct { State struct {
@ -116,6 +117,13 @@ func NewBreathe() Breathe {
return b return b
} }
func (b *Breathe) Valid() error {
if b.Peak < 0 || b.Peak > 1 {
return errors.New("peak must be between 0.0 and 1.0")
}
return nil
}
func (c *Client) SetState(selector string, state State) (*LifxResponse, error) { func (c *Client) SetState(selector string, state State) (*LifxResponse, error) {
var ( var (
err error err error
@ -148,14 +156,14 @@ func (c *Client) FastSetState(selector string, state State) (*LifxResponse, erro
return c.SetState(selector, state) return c.SetState(selector, state)
} }
func (c *Client) SetStates(selector string, states States) (*LifxResponse, error) { func (c *Client) SetStates(states States) (*LifxResponse, error) {
var ( var (
err error err error
s *LifxResponse s *LifxResponse
resp *Response resp *Response
) )
if resp, err = c.setStates(selector, states); err != nil { if resp, err = c.setStates(states); err != nil {
return nil, err return nil, err
} }
defer resp.Body.Close() defer resp.Body.Close()