Skip to content

Commit bf8350d

Browse files
committed
adding some apis
1 parent 29e6bf5 commit bf8350d

13 files changed

+188
-159
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,5 @@
1313

1414
# Dependency directories (remove the comment below to include it)
1515
# vendor/
16+
17+
.idea/

.idea/codeStyles/codeStyleConfig.xml

-5
This file was deleted.

.idea/modules.xml

-8
This file was deleted.

.idea/reolink-go-api.iml

-9
This file was deleted.

.idea/vcs.xml

-6
This file was deleted.

.idea/workspace.xml

-91
This file was deleted.

examples/basic_usage.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ func BasicUsage() {
1111
panic(err)
1212
}
1313

14-
ok, err := camera.API.FormatHdd()(camera.API.RestHandler)
14+
ok, err := camera.API.FormatHdd(0)(camera.API.RestHandler)
1515

1616
if err != nil {
1717
panic(err)

internal/app/api_handler.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ func NewApiHandler(username string, password string, restHandler *network.RestHa
1818
authMixin := &api.AuthMixin{
1919
Username: username,
2020
Password: password,
21-
Token: "",
2221
}
2322

23+
// pass the restHandler object to the Login function
2424
ok, err := authMixin.Login()(restHandler)
2525

2626
if err != nil {

internal/pkg/api/auth_mixin.go

+15-18
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package api
22

33
import (
4-
"encoding/json"
54
"fmt"
65
"github.com/ReolinkCameraAPI/reolink-go-api/internal/pkg/network"
76
)
@@ -13,32 +12,30 @@ type AuthMixin struct {
1312
}
1413

1514
func (am *AuthMixin) Login() func(handler *network.RestHandler) (bool, error) {
16-
payload := map[string]interface{}{
17-
"cmd": "Login",
18-
"action": 0,
19-
"params": map[string]interface{}{
20-
"User": map[string]interface{}{
21-
"userName": am.Username,
22-
"password": am.Password,
23-
},
24-
},
25-
}
26-
27-
data, err := json.Marshal([]interface{}{payload})
28-
2915
return func(handler *network.RestHandler) (bool, error) {
3016

31-
if err != nil {
32-
return false, err
17+
payload := map[string]interface{}{
18+
"cmd": "Login",
19+
"action": 0,
20+
"params": map[string]interface{}{
21+
"User": map[string]interface{}{
22+
"userName": am.Username,
23+
"password": am.Password,
24+
},
25+
},
3326
}
3427

35-
resp, err := handler.Request("POST", data)
28+
result, err := handler.Request("POST", payload, false)
3629

3730
if err != nil {
3831
return false, err
3932
}
4033

41-
if resp.StatusCode == 200 {
34+
// Set the token
35+
if result.Code == 0 {
36+
tokenData := result.Value.(network.LoginData)
37+
am.Token = tokenData.Token.Name
38+
handler.SetToken(am.Token)
4239
return true, nil
4340
}
4441

internal/pkg/api/device_mixin.go

+54-8
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,66 @@
11
package api
22

3-
import "github.com/ReolinkCameraAPI/reolink-go-api/internal/pkg/network"
3+
import (
4+
"fmt"
5+
"github.com/ReolinkCameraAPI/reolink-go-api/internal/pkg/network"
6+
)
47

58
type DeviceMixin struct {
69
}
710

8-
func (dm *DeviceMixin) GetHddInfo() func(handler *network.RestHandler) (bool, error) {
9-
return func(handler *network.RestHandler) (bool, error) {
10-
// TODO: implement
11-
return false, nil
11+
12+
// Get the Camera's HDD information
13+
// TODO: Better error messages
14+
func (dm *DeviceMixin) GetHddInfo() func(handler *network.RestHandler) (*network.GetHddInfoData, error) {
15+
return func(handler *network.RestHandler) (*network.GetHddInfoData, error) {
16+
payload := map[string]interface{}{
17+
"cmd": "GetHddInfo",
18+
"action": 0,
19+
"params": map[string]interface{}{},
20+
}
21+
22+
result, err := handler.Request("GET", payload, true)
23+
24+
if err != nil {
25+
return nil, err
26+
}
27+
28+
if result.Code == 0 {
29+
hddInfoData := result.Value.(*network.GetHddInfoData)
30+
return hddInfoData, nil
31+
}
32+
33+
return nil, fmt.Errorf("could not retrieve hdd info data")
1234
}
1335
}
1436

15-
func (dm *DeviceMixin) FormatHdd() func(handler *network.RestHandler) (bool, error) {
37+
// Format the camera HDD.
38+
// Default hddId: 0
39+
// TODO: better error messages
40+
func (dm *DeviceMixin) FormatHdd(hddId int) func(handler *network.RestHandler) (bool, error) {
1641
return func(handler *network.RestHandler) (bool, error) {
17-
// TODO: implement
18-
return false, nil
42+
payload := map[string]interface{}{
43+
"cmd": "Format",
44+
"action": 0,
45+
"params": map[string]interface{}{
46+
"HddInfo": map[string]interface{}{
47+
"id": hddId,
48+
},
49+
},
50+
}
51+
52+
result, err := handler.Request("GET", payload, true)
53+
54+
if err != nil {
55+
return false, err
56+
}
57+
58+
formatHdd := result.Value.(*network.FormatHddData)
59+
60+
if formatHdd.RspCode == 200 {
61+
return true, nil
62+
}
63+
64+
return false, fmt.Errorf("could not format camera hdd")
1965
}
2066
}

internal/pkg/api/display_mixin.go

+21-5
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,30 @@
11
package api
22

3-
import "github.com/ReolinkCameraAPI/reolink-go-api/internal/pkg/network"
3+
import (
4+
"github.com/ReolinkCameraAPI/reolink-go-api/internal/pkg/network"
5+
)
46

57
type DisplayMixin struct {
68
}
79

8-
func (dm *DisplayMixin) GetOSD() func(handler *network.RestHandler) (bool, error) {
9-
return func(handler *network.RestHandler) (bool, error) {
10-
// TODO: implement
11-
return false, nil
10+
func (dm *DisplayMixin) GetOSD() func(handler *network.RestHandler) (*network.OsdData, error) {
11+
return func(handler *network.RestHandler) (*network.OsdData, error) {
12+
payload := map[string]interface{}{
13+
"cmd": "GetOSD",
14+
"action": 1,
15+
"params": map[string]interface{}{
16+
"channel": 0,
17+
},
18+
}
19+
20+
result, err := handler.Request("GET", payload, true)
21+
22+
if err != nil {
23+
return nil, err
24+
}
25+
26+
osdData := result.Value.(*network.OsdData)
27+
return osdData, nil
1228
}
1329
}
1430

internal/pkg/network/rest_data.go

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package network
2+
3+
type GeneralData struct {
4+
Code int `json:"code"`
5+
Value interface{} `json:"value;omitempty"`
6+
Initial interface{} `json:"initial;omitempty"`
7+
Range interface{} `json:"range;omitempty"`
8+
}
9+
10+
type LoginTokenData struct {
11+
Name string `json:"name"`
12+
}
13+
14+
type LoginData struct {
15+
Token LoginTokenData `json:"Token"`
16+
}
17+
18+
type GetHddInfoData struct {
19+
Capacity int `json:"capacity"`
20+
Format int `json:"format"`
21+
ID int `json:"id"`
22+
Mount int `json:"mount"`
23+
Size int `json:"size"`
24+
}
25+
26+
type FormatHddData struct {
27+
RspCode int `json:"rspCode"`
28+
}
29+
30+
type OsdChannelData struct {
31+
Enable bool `json:"enable"`
32+
Name string `json:"name"`
33+
Pos string `json:"pos"`
34+
}
35+
36+
type OsdTimeData struct {
37+
Enable bool `json:"enable"`
38+
Pos string `json:"pos"`
39+
}
40+
41+
type OsdData struct {
42+
BgColor int `json:"bgcolor"`
43+
Channel int `json:"channel"`
44+
OsdChannel OsdChannelData `json:"osdChannel"`
45+
OsdTime OsdTimeData `json:"osdTime"`
46+
}

0 commit comments

Comments
 (0)