64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package omadaapi
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
|
|
"git.tordarus.net/tordarus/channel"
|
|
"git.tordarus.net/tordarus/ezhttp"
|
|
"git.tordarus.net/tordarus/omada-api/model"
|
|
)
|
|
|
|
func (api *Api) GetDevices(siteID model.SiteID) <-chan channel.Result[model.Device] {
|
|
out := make(chan channel.Result[model.Device], 1000)
|
|
|
|
go func() {
|
|
defer close(out)
|
|
|
|
for page := 1; ; page++ {
|
|
resp, err := api.getDevices(page, siteID)
|
|
if err != nil {
|
|
out <- channel.ResultOf[model.Device](nil, err)
|
|
return
|
|
}
|
|
|
|
for _, v := range resp.Result.Data {
|
|
out <- channel.ResultOfValue(v, nil)
|
|
}
|
|
|
|
if resp.Result.CurrentPage*resp.Result.CurrentSize >= resp.Result.TotalRows {
|
|
break
|
|
}
|
|
}
|
|
}()
|
|
|
|
return out
|
|
}
|
|
|
|
func (api *Api) getDevices(page int, siteID model.SiteID) (*model.PagedResponse[model.Device], error) {
|
|
req := ezhttp.Request(
|
|
ezhttp.Template(api.tmpl),
|
|
ezhttp.Method("GET"),
|
|
ezhttp.AppendPath(fmt.Sprintf("/openapi/v1/%s/sites/%s/devices", api.config.OmadaID, siteID)),
|
|
ezhttp.Query(
|
|
"page", strconv.Itoa(page),
|
|
"pageSize", "100",
|
|
),
|
|
)
|
|
|
|
resp, err := api.doRequest(req)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer resp.Body.Close()
|
|
|
|
response, err := ezhttp.ParseJsonResponse[model.PagedResponse[model.Device]](resp)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return handlePagedResponseErrors(api, response, func() (*model.PagedResponse[model.Device], error) {
|
|
return api.getDevices(page, siteID)
|
|
})
|
|
}
|