add forgetting devices to hue2 (untested yolo-deploy).
This commit is contained in:
@@ -619,3 +619,14 @@ func (b *Bridge) SearchDevices(ctx context.Context, timeout time.Duration) ([]mo
|
||||
// Return said devices.
|
||||
return newDevices, nil
|
||||
}
|
||||
|
||||
func (b *Bridge) Forget(ctx context.Context, device models.Device) error {
|
||||
b.mu.Lock()
|
||||
resource := b.resources[device.InternalID]
|
||||
b.mu.Unlock()
|
||||
if resource == nil || resource.LegacyID == "" {
|
||||
return errors.New("resource not found")
|
||||
}
|
||||
|
||||
return b.client.legacyDelete(ctx, resource.LegacyID, nil)
|
||||
}
|
||||
|
||||
@@ -305,6 +305,38 @@ func (c *Client) legacyPost(ctx context.Context, resource string, body interface
|
||||
return json.NewDecoder(res.Body).Decode(target)
|
||||
}
|
||||
|
||||
func (c *Client) legacyDelete(ctx context.Context, resource string, target interface{}) error {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return ctx.Err()
|
||||
case <-c.ch:
|
||||
defer func() {
|
||||
c.ch <- struct{}{}
|
||||
}()
|
||||
}
|
||||
|
||||
if c.token != "" {
|
||||
resource = c.token + "/" + resource
|
||||
}
|
||||
|
||||
req, err := http.NewRequest("DELETE", fmt.Sprintf("http://%s/api/%s", c.host, resource), nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
res, err := httpClient.Do(req.WithContext(ctx))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer res.Body.Close()
|
||||
|
||||
if target == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return json.NewDecoder(res.Body).Decode(target)
|
||||
}
|
||||
|
||||
func reqBody(body interface{}) (io.Reader, error) {
|
||||
if body == nil {
|
||||
return nil, nil
|
||||
|
||||
@@ -100,6 +100,10 @@ func (d *Driver) Run(ctx context.Context, bridge models.Bridge, ch chan<- models
|
||||
return d.ensureBridge(bridge).Run(ctx, ch)
|
||||
}
|
||||
|
||||
func (d *Driver) ForgetDevice(ctx context.Context, bridge models.Bridge, device models.Device) error {
|
||||
return d.ensureBridge(bridge).Forget(ctx, device)
|
||||
}
|
||||
|
||||
func (d *Driver) ensureBridge(info models.Bridge) *Bridge {
|
||||
d.mu.Lock()
|
||||
for _, bridge := range d.bridges {
|
||||
|
||||
Reference in New Issue
Block a user