diff options
| author | Petter Rasmussen | 2016-02-06 02:12:13 +0100 |
|---|---|---|
| committer | Petter Rasmussen | 2016-02-06 02:12:13 +0100 |
| commit | 803981c1078d04d39bc9d30c197f0c7b02c51a9e (patch) | |
| tree | d6f0d9f0c7cb49ca95e0f2de0caccfd52ad0aee1 /drive | |
| parent | dd73d460bc8fde4bbe493bf4a491ba1ab250a652 (diff) | |
| download | gdrive-803981c1078d04d39bc9d30c197f0c7b02c51a9e.tar.bz2 | |
List all files matching query
Diffstat (limited to 'drive')
| -rw-r--r-- | drive/sync.go | 22 |
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) |
