Skip to content

Commit 5c3feba

Browse files
authored
Merge pull request #11 from dhlin/snapshot
add snapshot support
2 parents ce25a22 + 88946e6 commit 5c3feba

File tree

2 files changed

+41
-12
lines changed

2 files changed

+41
-12
lines changed

internal/pkg/api/image_mixin.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"fmt"
66
"github.com/ReolinkCameraAPI/reolinkapigo/internal/pkg/enum"
77
"github.com/ReolinkCameraAPI/reolinkapigo/internal/pkg/network/rest"
8+
"net/url"
89
)
910

1011
type ImageMixin struct {
@@ -199,6 +200,22 @@ func (im *ImageMixin) SetImageSettings(imageOptions ...OptionImageSetting) func(
199200
}
200201
}
201202

203+
func (im *ImageMixin) Snap() func(handler *rest.RestHandler) ([]byte, error) {
204+
return func(handler *rest.RestHandler) ([]byte, error) {
205+
params := url.Values{}
206+
params.Add("cmd", "Snap")
207+
params.Add("channel", "0")
208+
209+
snapshot, err := handler.RequestRaw("GET", "", params)
210+
211+
if err != nil {
212+
return nil, err
213+
}
214+
215+
return snapshot, nil
216+
}
217+
}
218+
202219
// Set Image Brightness
203220
// Default: 128
204221
func ImageOptionBrightness(brightness int) OptionImageSetting {

internal/pkg/network/rest/rest_handler.go

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,27 @@ func NewRestHandler(host string, opts ...OptionRestHandler) *RestHandler {
182182
// auth: alters the request to include auth token on true
183183
func (rh *RestHandler) Request(method string, payload interface{}, command string) (*GeneralData, error) {
184184

185+
params := url.Values{}
186+
params.Add("cmd", command)
187+
188+
respBody, err := rh.RequestRaw(method, payload, params)
189+
190+
if err != nil {
191+
return nil, err
192+
}
193+
194+
var result []*GeneralData
195+
196+
err = json.Unmarshal(respBody, &result)
197+
198+
if err != nil {
199+
return nil, err
200+
}
201+
202+
return result[0], nil
203+
}
204+
205+
func (rh *RestHandler) RequestRaw(method string, payload interface{}, params url.Values) ([]byte, error) {
185206
var urlConcat string
186207
if rh.port > 0 {
187208
urlConcat = fmt.Sprintf("%s:%d/%s", rh.host, rh.port, rh.endpoint)
@@ -191,14 +212,12 @@ func (rh *RestHandler) Request(method string, payload interface{}, command strin
191212

192213
urlConcat = fmt.Sprintf("%s://%s", rh.scheme.String(), urlConcat)
193214

194-
var data []byte
195-
196-
params := url.Values{}
197215
params.Add("token", rh.token)
198-
params.Add("cmd", command)
199216

200217
urlConcat = fmt.Sprintf("%s?%s", urlConcat, params.Encode())
201218

219+
var data []byte
220+
202221
data, err := json.Marshal([]interface{}{payload})
203222

204223
if err != nil {
@@ -309,20 +328,13 @@ func (rh *RestHandler) Request(method string, payload interface{}, command strin
309328
return nil, err
310329
}
311330

312-
var result []*GeneralData
313331
body, err := ioutil.ReadAll(resp.Body)
314332

315333
if err != nil {
316334
return nil, err
317335
}
318336

319-
err = json.Unmarshal(body, &result)
320-
321-
if err != nil {
322-
return nil, err
323-
}
324-
325-
return result[0], nil
337+
return body, nil
326338
}
327339

328340
// Set the current token

0 commit comments

Comments
 (0)