mirror of https://github.com/cloudreve/Cloudreve
fix(onedrive): cannot list folder with more than 500 direct children (#2446)
parent
fe309b234c
commit
2a7b46437f
|
@ -4,16 +4,17 @@ import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/chunk"
|
|
||||||
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/chunk/backoff"
|
|
||||||
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/fs"
|
|
||||||
"github.com/cloudreve/Cloudreve/v4/pkg/request"
|
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
"path"
|
"path"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/chunk"
|
||||||
|
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/chunk/backoff"
|
||||||
|
"github.com/cloudreve/Cloudreve/v4/pkg/filemanager/fs"
|
||||||
|
"github.com/cloudreve/Cloudreve/v4/pkg/request"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -76,7 +77,13 @@ func (client *client) ListChildren(ctx context.Context, path string) ([]FileInfo
|
||||||
requestURL = client.getRequestURL("root:/" + dst + ":/children")
|
requestURL = client.getRequestURL("root:/" + dst + ":/children")
|
||||||
}
|
}
|
||||||
|
|
||||||
res, err := client.requestWithStr(ctx, "GET", requestURL+"?$top=999999999", "", 200)
|
// Add pagination parameter
|
||||||
|
requestURL += "?$top=5000"
|
||||||
|
|
||||||
|
var allFiles []FileInfo
|
||||||
|
|
||||||
|
for {
|
||||||
|
res, err := client.requestWithStr(ctx, "GET", requestURL, "", 200)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
retried := 0
|
retried := 0
|
||||||
if v, ok := ctx.Value(RetryCtx{}).(int); ok {
|
if v, ok := ctx.Value(RetryCtx{}).(int); ok {
|
||||||
|
@ -100,7 +107,20 @@ func (client *client) ListChildren(ctx context.Context, path string) ([]FileInfo
|
||||||
return nil, decodeErr
|
return nil, decodeErr
|
||||||
}
|
}
|
||||||
|
|
||||||
return fileInfo.Value, nil
|
// Append current page results
|
||||||
|
allFiles = append(allFiles, fileInfo.Value...)
|
||||||
|
|
||||||
|
// Check if there's a next page
|
||||||
|
if fileInfo.NextLink == "" {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use the next link for the next iteration
|
||||||
|
client.l.Debug("Load next page, next link: %s", fileInfo.NextLink)
|
||||||
|
requestURL = fileInfo.NextLink
|
||||||
|
}
|
||||||
|
|
||||||
|
return allFiles, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Meta 根据资源ID或文件路径获取文件元信息
|
// Meta 根据资源ID或文件路径获取文件元信息
|
||||||
|
|
|
@ -96,6 +96,7 @@ type ThumbResponse struct {
|
||||||
type ListResponse struct {
|
type ListResponse struct {
|
||||||
Value []FileInfo `json:"value"`
|
Value []FileInfo `json:"value"`
|
||||||
Context string `json:"@odata.context"`
|
Context string `json:"@odata.context"`
|
||||||
|
NextLink string `json:"@odata.nextLink,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// oauthEndpoint OAuth接口地址
|
// oauthEndpoint OAuth接口地址
|
||||||
|
|
Loading…
Reference in New Issue