diff --git a/backend/box/api/types.go b/backend/box/api/types.go index 68d6aac2a..363fa3353 100644 --- a/backend/box/api/types.go +++ b/backend/box/api/types.go @@ -103,10 +103,11 @@ func (i *Item) ModTime() (t time.Time) { // FolderItems is returned from the GetFolderItems call type FolderItems struct { - TotalCount int `json:"total_count"` - Entries []Item `json:"entries"` - Offset int `json:"offset"` - Limit int `json:"limit"` + TotalCount int `json:"total_count"` + Entries []Item `json:"entries"` + Offset int `json:"offset"` + Limit int `json:"limit"` + NextMarker *string `json:"next_marker,omitempty"` Order []struct { By string `json:"by"` Direction string `json:"direction"` diff --git a/backend/box/box.go b/backend/box/box.go index 2af0a857e..7f41def85 100644 --- a/backend/box/box.go +++ b/backend/box/box.go @@ -578,10 +578,13 @@ func (f *Fs) listAll(ctx context.Context, dirID string, directoriesOnly bool, fi Parameters: fieldsValue(), } opts.Parameters.Set("limit", strconv.Itoa(listChunks)) - offset := 0 + opts.Parameters.Set("usemarker", "true") + var marker *string OUTER: for { - opts.Parameters.Set("offset", strconv.Itoa(offset)) + if marker != nil { + opts.Parameters.Set("marker", *marker) + } var result api.FolderItems var resp *http.Response @@ -615,8 +618,8 @@ OUTER: break OUTER } } - offset += result.Limit - if offset >= result.TotalCount { + marker = result.NextMarker + if marker == nil { break } } @@ -1100,9 +1103,12 @@ func (f *Fs) CleanUp(ctx context.Context) (err error) { }, } opts.Parameters.Set("limit", strconv.Itoa(listChunks)) - offset := 0 + opts.Parameters.Set("usemarker", "true") + var marker *string for { - opts.Parameters.Set("offset", strconv.Itoa(offset)) + if marker != nil { + opts.Parameters.Set("marker", *marker) + } var result api.FolderItems var resp *http.Response @@ -1125,8 +1131,8 @@ func (f *Fs) CleanUp(ctx context.Context) (err error) { continue } } - offset += result.Limit - if offset >= result.TotalCount { + marker = result.NextMarker + if marker == nil { break } }