package mediatrack import ( "errors" "fmt" "net/http" "strconv" "github.com/alist-org/alist/v3/drivers/base" "github.com/alist-org/alist/v3/pkg/utils" "github.com/go-resty/resty/v2" log "github.com/sirupsen/logrus" ) // do others that not defined in Driver interface func (d *MediaTrack) request(url string, method string, callback base.ReqCallback, resp interface{}) ([]byte, error) { req := base.RestyClient.R() req.SetHeader("Authorization", "Bearer "+d.AccessToken) if callback != nil { callback(req) } var e BaseResp req.SetResult(&e) res, err := req.Execute(method, url) if err != nil { return nil, err } log.Debugln(res.String()) if e.Status != "SUCCESS" { return nil, errors.New(e.Message) } if resp != nil { err = utils.Json.Unmarshal(res.Body(), resp) } return res.Body(), err } func (d *MediaTrack) getFiles(parentId string) ([]File, error) { files := make([]File, 0) url := fmt.Sprintf("https://jayce.api.mediatrack.cn/v4/assets/%s/children", parentId) sort := "" if d.OrderBy != "" { if d.OrderDesc { sort = "-" } sort += d.OrderBy } page := 1 for { var resp ChildrenResp _, err := d.request(url, http.MethodGet, func(req *resty.Request) { req.SetQueryParams(map[string]string{ "page": strconv.Itoa(page), "size": "50", "sort": sort, }) }, &resp) if err != nil { return nil, err } if len(resp.Data.Assets) == 0 { break } page++ files = append(files, resp.Data.Assets...) } return files, nil }