aboutsummaryrefslogtreecommitdiffstats
path: root/drive
diff options
context:
space:
mode:
Diffstat (limited to 'drive')
-rw-r--r--drive/import.go57
-rw-r--r--drive/upload.go11
2 files changed, 63 insertions, 5 deletions
diff --git a/drive/import.go b/drive/import.go
new file mode 100644
index 0000000..cb82508
--- /dev/null
+++ b/drive/import.go
@@ -0,0 +1,57 @@
+package drive
+
+import (
+ "io"
+ "io/ioutil"
+ "fmt"
+ "strings"
+ "mime"
+ "path/filepath"
+)
+
+type ImportArgs struct {
+ Out io.Writer
+ Progress io.Writer
+ Path string
+ Share bool
+ Parents []string
+}
+
+func (self *Drive) Import(args ImportArgs) error {
+ fromMime := getMimeType(args.Path)
+ if fromMime == "" {
+ return fmt.Errorf("Could not determine mime type of file")
+ }
+
+ about, err := self.service.About.Get().Fields("importFormats").Do()
+ if err != nil {
+ return fmt.Errorf("Failed to get about: %s", err)
+ }
+
+ toMimes, ok := about.ImportFormats[fromMime]
+ if !ok || len(toMimes) == 0 {
+ return fmt.Errorf("Mime type '%s' is not supported for import", fromMime)
+ }
+
+ f, err := self.uploadFile(UploadArgs{
+ Out: ioutil.Discard,
+ Progress: args.Progress,
+ Path: args.Path,
+ Parents: args.Parents,
+ Mime: toMimes[0],
+ Share: args.Share,
+ })
+ if err != nil {
+ return err
+ }
+
+ fmt.Fprintf(args.Out, "[document] id: %s, name: %s\n", f.Id, f.Name)
+ fmt.Fprintf(args.Out, "Imported %s with mime type: '%s'\n", args.Path, toMimes[0])
+
+ return nil
+}
+
+func getMimeType(path string) string {
+ t := mime.TypeByExtension(filepath.Ext(path))
+ return strings.Split(t, ";")[0]
+}
diff --git a/drive/upload.go b/drive/upload.go
index 5e70dd8..1e145f7 100644
--- a/drive/upload.go
+++ b/drive/upload.go
@@ -48,7 +48,8 @@ func (self *Drive) upload(args UploadArgs) error {
args.Name = ""
return self.uploadDirectory(args)
} else {
- return self.uploadFile(args)
+ _, err := self.uploadFile(args)
+ return err
}
}
@@ -91,10 +92,10 @@ func (self *Drive) uploadDirectory(args UploadArgs) error {
return nil
}
-func (self *Drive) uploadFile(args UploadArgs) error {
+func (self *Drive) uploadFile(args UploadArgs) (*drive.File, error) {
srcFile, srcFileInfo, err := openFile(args.Path)
if err != nil {
- return err
+ return nil, err
}
// Instantiate empty drive file
@@ -128,7 +129,7 @@ func (self *Drive) uploadFile(args UploadArgs) error {
f, err := self.service.Files.Create(dstFile).Fields("id", "name", "size", "md5Checksum").Media(srcReader, chunkSize).Do()
if err != nil {
- return fmt.Errorf("Failed to upload file: %s", err)
+ return nil, fmt.Errorf("Failed to upload file: %s", err)
}
// Calculate average upload rate
@@ -136,7 +137,7 @@ func (self *Drive) uploadFile(args UploadArgs) error {
fmt.Fprintf(args.Out, "[file] id: %s, md5: %s, name: %s\n", f.Id, f.Md5Checksum, f.Name)
fmt.Fprintf(args.Out, "Uploaded '%s' at %s/s, total %s\n", f.Name, formatSize(rate, false), formatSize(f.Size, false))
- return nil
+ return f, nil
}
type UploadStreamArgs struct {