diff options
| author | Petter Rasmussen | 2016-02-14 23:10:57 +0100 |
|---|---|---|
| committer | Petter Rasmussen | 2016-02-14 23:10:57 +0100 |
| commit | ef097ce557abf04a4871429e313af52e13d31cec (patch) | |
| tree | 45303a0e0f9ce141f2a1685745db9989178bf7c0 /drive | |
| parent | 453c097b053b8a85395caf117136f7aec1d1ada4 (diff) | |
| download | gdrive-ef097ce557abf04a4871429e313af52e13d31cec.tar.bz2 | |
Add progress bar to upload from stdin
Diffstat (limited to 'drive')
| -rw-r--r-- | drive/progress.go | 9 | ||||
| -rw-r--r-- | drive/upload.go | 6 |
2 files changed, 12 insertions, 3 deletions
diff --git a/drive/progress.go b/drive/progress.go index 9d4eb5a..989191e 100644 --- a/drive/progress.go +++ b/drive/progress.go @@ -12,7 +12,7 @@ const MaxRateInterval = time.Second * 3 func getProgressReader(r io.Reader, w io.Writer, size int64) io.Reader { // Don't wrap reader if output is discarded or size is too small - if w == ioutil.Discard || size < 1024 * 1024 { + if w == ioutil.Discard || (size > 0 && size < 1024 * 1024) { return r } @@ -79,7 +79,12 @@ func (self *Progress) draw(isLast bool) { self.clear() // Print progress - fmt.Fprintf(self.Writer, "%s/%s", formatSize(self.progress, false), formatSize(self.Size, false)) + fmt.Fprintf(self.Writer, "%s", formatSize(self.progress, false)) + + // Print total size + if self.Size > 0 { + fmt.Fprintf(self.Writer, "/%s", formatSize(self.Size, false)) + } // Print rate if self.rate > 0 { diff --git a/drive/upload.go b/drive/upload.go index ad3cb34..4f237ca 100644 --- a/drive/upload.go +++ b/drive/upload.go @@ -161,6 +161,7 @@ type UploadStreamArgs struct { Mime string Share bool ChunkSize int64 + Progress io.Writer } func (self *Drive) UploadStream(args UploadStreamArgs) (err error) { @@ -182,10 +183,13 @@ func (self *Drive) UploadStream(args UploadStreamArgs) (err error) { // Chunk size option chunkSize := googleapi.ChunkSize(int(args.ChunkSize)) + // Wrap file in progress reader + srcReader := getProgressReader(args.In, args.Progress, 0) + fmt.Fprintf(args.Out, "Uploading %s\n", dstFile.Name) started := time.Now() - f, err := self.service.Files.Create(dstFile).Fields("id", "name", "size").Media(args.In, chunkSize).Do() + f, err := self.service.Files.Create(dstFile).Fields("id", "name", "size").Media(srcReader, chunkSize).Do() if err != nil { return fmt.Errorf("Failed to upload file: %s", err) } |
