aboutsummaryrefslogtreecommitdiffstats
path: root/drive/files.go
diff options
context:
space:
mode:
Diffstat (limited to 'drive/files.go')
-rw-r--r--drive/files.go68
1 files changed, 68 insertions, 0 deletions
diff --git a/drive/files.go b/drive/files.go
new file mode 100644
index 0000000..ed3c349
--- /dev/null
+++ b/drive/files.go
@@ -0,0 +1,68 @@
+package drive
+
+import (
+ "fmt"
+ "io"
+ "os"
+)
+
+func (self *Drive) List(args ListFilesArgs) {
+ fileList, err := self.service.Files.List().PageSize(args.MaxFiles).Q(args.Query).Fields("nextPageToken", "files(id,name,size,createdTime)").Do()
+ if err != nil {
+ exitF("Failed listing files: %s\n", err.Error())
+ }
+
+ for _, f := range fileList.Files {
+ fmt.Printf("%s %s %d %s\n", f.Id, f.Name, f.Size, f.CreatedTime)
+ }
+}
+
+
+func (self *Drive) Download(args DownloadFileArgs) {
+ getFile := self.service.Files.Get(args.Id)
+
+ f, err := getFile.Do()
+ if err != nil {
+ exitF("Failed to get file: %s", err.Error())
+ }
+
+ res, err := getFile.Download()
+ if err != nil {
+ exitF("Failed to download file: %s", err.Error())
+ }
+
+ // Close body on function exit
+ defer res.Body.Close()
+
+ if args.Stdout {
+ // Write file content to stdout
+ io.Copy(os.Stdout, res.Body)
+ return
+ }
+
+ // Check if file exists
+ if !args.Force && fileExists(f.Name) {
+ exitF("File '%s' already exists, use --force to overwrite", f.Name)
+ }
+
+ // Create new file
+ outFile, err := os.Create(f.Name)
+ if err != nil {
+ exitF("Unable to create new file: %s", err.Error())
+ }
+
+ // Close file on function exit
+ defer outFile.Close()
+
+ // Save file to disk
+ bytes, err := io.Copy(outFile, res.Body)
+ if err != nil {
+ exitF("Failed saving file: %s", err.Error())
+ }
+
+ fmt.Printf("Downloaded '%s' at %s, total %d\n", f.Name, "x/s", bytes)
+
+ //if deleteSourceFile {
+ // self.Delete(args.Id)
+ //}
+}