package omadaapi import ( "fmt" "strconv" "git.tordarus.net/tordarus/ezhttp" "git.tordarus.net/tordarus/omada-api/model" ) func (api *Api) GetDevices(siteID model.SiteID) (<-chan *model.Device, <-chan error) { out := make(chan *model.Device, 1000) errChan := make(chan error) go func() { defer close(out) for page := 1; ; page++ { resp, err := api.getDevices(page, siteID) if err != nil { errChan <- err return } for _, v := range resp.Result.Data { out <- &v } if resp.Result.CurrentPage*resp.Result.CurrentSize >= resp.Result.TotalRows { break } } }() return out, errChan } func (api *Api) getDevices(page int, siteID model.SiteID) (*model.PagedResponse[model.Device], error) { api.refreshMutex.RLock() defer api.refreshMutex.RUnlock() 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 := ezhttp.Do(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 response, nil }