aboutsummaryrefslogtreecommitdiff
path: root/backend/studip/requests.go
diff options
context:
space:
mode:
Diffstat (limited to 'backend/studip/requests.go')
-rw-r--r--backend/studip/requests.go90
1 files changed, 90 insertions, 0 deletions
diff --git a/backend/studip/requests.go b/backend/studip/requests.go
index afb5c04..5a637f8 100644
--- a/backend/studip/requests.go
+++ b/backend/studip/requests.go
@@ -9,6 +9,7 @@ import (
"io"
"net/http"
"net/url"
+ "strconv"
"github.com/rclone/rclone/fs"
"github.com/rclone/rclone/lib/rest"
@@ -102,6 +103,24 @@ func (f *Fs) studIPMkDir(
return nil
}
+func pagedPath(basePath string, offset, limit int) string {
+ values := url.Values{}
+ values.Set("page[offset]", strconv.Itoa(offset))
+ values.Set("page[limit]", strconv.Itoa(limit))
+ return basePath + "?" + values.Encode()
+}
+
+func nextPageLimit(limit, loaded int) int {
+ switch {
+ case limit > 0:
+ return limit
+ case loaded > 0:
+ return loaded
+ default:
+ return 30
+ }
+}
+
func (f *Fs) studIPGetFoldersOfFolder(
ctx context.Context,
folderID string,
@@ -132,6 +151,27 @@ func (f *Fs) studIPGetFoldersOfFolder(
}
defer res.Body.Close()
+ for len(responseJSON.Data) < responseJSON.Meta.Page.Total {
+ offset := len(responseJSON.Data)
+ limit := nextPageLimit(responseJSON.Meta.Page.Limit, len(responseJSON.Data))
+ page := &StudIPFolders{}
+ res, err := f.client.CallJSON(
+ ctx,
+ &rest.Opts{Method: "GET", Path: pagedPath(URL, offset, limit)},
+ nil,
+ page,
+ )
+ if err != nil {
+ return nil, err
+ }
+ res.Body.Close()
+ if len(page.Data) == 0 {
+ break
+ }
+ responseJSON.Data = append(responseJSON.Data, page.Data...)
+ responseJSON.Meta = page.Meta
+ }
+
return responseJSON, nil
}
@@ -165,6 +205,28 @@ func (f *Fs) studIPGetFilesOfFolder(
}
defer res.Body.Close()
+ for len(responseJSON.Data) < responseJSON.Meta.Page.Total {
+ offset := len(responseJSON.Data)
+ limit := nextPageLimit(responseJSON.Meta.Page.Limit, len(responseJSON.Data))
+ page := &StudIPFiles{}
+ res, err := f.client.CallJSON(
+ ctx,
+ &rest.Opts{Method: "GET", Path: pagedPath(URL, offset, limit)},
+ nil,
+ page,
+ )
+ if err != nil {
+ return nil, err
+ }
+ res.Body.Close()
+ if len(page.Data) == 0 {
+ break
+ }
+ responseJSON.Data = append(responseJSON.Data, page.Data...)
+ responseJSON.Meta = page.Meta
+ responseJSON.Links = page.Links
+ }
+
return responseJSON, nil
}
@@ -195,6 +257,27 @@ func (f *Fs) studIPGetCourseFolders(ctx context.Context) (*StudIPFolders, error)
}
defer res.Body.Close()
+ for len(responseJSON.Data) < responseJSON.Meta.Page.Total {
+ offset := len(responseJSON.Data)
+ limit := nextPageLimit(responseJSON.Meta.Page.Limit, len(responseJSON.Data))
+ page := &StudIPFolders{}
+ res, err := f.client.CallJSON(
+ ctx,
+ &rest.Opts{Method: "GET", Path: pagedPath(URL, offset, limit)},
+ nil,
+ page,
+ )
+ if err != nil {
+ return nil, err
+ }
+ res.Body.Close()
+ if len(page.Data) == 0 {
+ break
+ }
+ responseJSON.Data = append(responseJSON.Data, page.Data...)
+ responseJSON.Meta = page.Meta
+ }
+
return responseJSON, nil
}
@@ -569,6 +652,13 @@ func (f *Fs) studIPDeleteFile(ctx context.Context, fileRefID string) error {
Path: URL,
})
if err != nil {
+ if res != nil {
+ defer res.Body.Close()
+ if res.StatusCode == http.StatusNotFound {
+ fs.Debugf(f, "studIPDeleteFile: ignoring missing file-ref id=%q", fileRefID)
+ return nil
+ }
+ }
return err
}
defer res.Body.Close()