diff options
| author | Petter Rasmussen | 2016-02-21 12:55:09 +0100 |
|---|---|---|
| committer | Petter Rasmussen | 2016-02-21 12:55:09 +0100 |
| commit | 428da4bcfedb3d3a2441d1d236f861e72ee8f5c6 (patch) | |
| tree | 733a538b24411d18490783d1e1c1d6ff8c6411b0 /drive/download.go | |
| parent | 453384107e41991a5417c7c3ed78da6cb1c4a805 (diff) | |
| download | gdrive-428da4bcfedb3d3a2441d1d236f861e72ee8f5c6.tar.bz2 | |
Support downloading files by query
Diffstat (limited to 'drive/download.go')
| -rw-r--r-- | drive/download.go | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/drive/download.go b/drive/download.go index a33373f..1779d57 100644 --- a/drive/download.go +++ b/drive/download.go @@ -58,6 +58,47 @@ func (self *Drive) Download(args DownloadArgs) error { return err } +type DownloadQueryArgs struct { + Out io.Writer + Progress io.Writer + Query string + Path string + Force bool + Recursive bool +} + +func (self *Drive) DownloadQuery(args DownloadQueryArgs) error { + listArgs := listAllFilesArgs{ + query: args.Query, + fields: []googleapi.Field{"nextPageToken", "files(id,name,mimeType,size,md5Checksum)"}, + } + files, err := self.listAllFiles(listArgs) + if err != nil { + return fmt.Errorf("Failed to list files: %s", err) + } + + downloadArgs := DownloadArgs{ + Out: args.Out, + Progress: args.Progress, + Path: args.Path, + Force: args.Force, + } + + for _, f := range files { + if isDir(f) && args.Recursive { + err = self.downloadDirectory(f, downloadArgs) + } else if isBinary(f) { + _, _, err = self.downloadBinary(f, downloadArgs) + } + + if err != nil { + return err + } + } + + return nil +} + func (self *Drive) downloadRecursive(args DownloadArgs) error { f, err := self.service.Files.Get(args.Id).Fields("id", "name", "size", "mimeType", "md5Checksum").Do() if err != nil { |
