aboutsummaryrefslogtreecommitdiffstats
path: root/drive
diff options
context:
space:
mode:
authorPetter Rasmussen2016-02-06 02:12:13 +0100
committerPetter Rasmussen2016-02-06 02:12:13 +0100
commit803981c1078d04d39bc9d30c197f0c7b02c51a9e (patch)
treed6f0d9f0c7cb49ca95e0f2de0caccfd52ad0aee1 /drive
parentdd73d460bc8fde4bbe493bf4a491ba1ab250a652 (diff)
downloadgdrive-803981c1078d04d39bc9d30c197f0c7b02c51a9e.tar.bz2
List all files matching query
Diffstat (limited to 'drive')
-rw-r--r--drive/sync.go22
1 files changed, 18 insertions, 4 deletions
diff --git a/drive/sync.go b/drive/sync.go
index 7b039e2..0ff4cd9 100644
--- a/drive/sync.go
+++ b/drive/sync.go
@@ -6,7 +6,9 @@ import (
"path/filepath"
"github.com/gyuho/goraph/graph"
"github.com/sabhiram/go-git-ignore"
+ "golang.org/x/net/context"
"google.golang.org/api/drive/v3"
+ "google.golang.org/api/googleapi"
)
const DefaultIgnoreFile = ".gdriveignore"
@@ -94,25 +96,37 @@ func prepareLocalFiles(root string) ([]*localFile, error) {
return files, err
}
+func (self *Drive) listAllFiles(q string, fields []googleapi.Field) ([]*drive.File, error) {
+ var files []*drive.File
+
+ err := self.service.Files.List().Q(q).Fields(fields...).PageSize(1000).Pages(context.TODO(), func(fl *drive.FileList) error {
+ files = append(files, fl.Files...)
+ return nil
+ })
+
+ return files, err
+}
+
func (self *Drive) prepareRemoteFiles(rootDir *drive.File) ([]*remoteFile, error) {
// Find all files which has rootDir as root
query := fmt.Sprintf("appProperties has {key='syncRootId' and value='%s'}", rootDir.Id)
- fileList, err := self.service.Files.List().Q(query).Fields("files(id,name,parents,md5Checksum,mimeType)").Do()
+ fields := []googleapi.Field{"nextPageToken", "files(id,name,parents,md5Checksum,mimeType)"}
+ files, err := self.listAllFiles(query, fields)
if err != nil {
return nil, fmt.Errorf("Failed listing files: %s", err)
}
- if err := checkFiles(fileList.Files); err != nil {
+ if err := checkFiles(files); err != nil {
return nil, err
}
- relPaths, err := prepareRemoteRelPaths(rootDir.Id, fileList.Files)
+ relPaths, err := prepareRemoteRelPaths(rootDir, files)
if err != nil {
return nil, err
}
var remoteFiles []*remoteFile
- for _, f := range fileList.Files {
+ for _, f := range files {
relPath, ok := relPaths[f.Id]
if !ok {
return nil, fmt.Errorf("File %s does not have a valid parent", f.Id)