aboutsummaryrefslogtreecommitdiffstats
path: root/drive/download.go
diff options
context:
space:
mode:
authorPetter Rasmussen2016-02-21 12:55:09 +0100
committerPetter Rasmussen2016-02-21 12:55:09 +0100
commit428da4bcfedb3d3a2441d1d236f861e72ee8f5c6 (patch)
tree733a538b24411d18490783d1e1c1d6ff8c6411b0 /drive/download.go
parent453384107e41991a5417c7c3ed78da6cb1c4a805 (diff)
downloadgdrive-428da4bcfedb3d3a2441d1d236f861e72ee8f5c6.tar.bz2
Support downloading files by query
Diffstat (limited to 'drive/download.go')
-rw-r--r--drive/download.go41
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 {