aboutsummaryrefslogtreecommitdiffstats
path: root/drive/progress.go
diff options
context:
space:
mode:
Diffstat (limited to 'drive/progress.go')
-rw-r--r--drive/progress.go148
1 files changed, 74 insertions, 74 deletions
diff --git a/drive/progress.go b/drive/progress.go
index 989191e..bb5740c 100644
--- a/drive/progress.go
+++ b/drive/progress.go
@@ -1,101 +1,101 @@
package drive
import (
- "io"
- "io/ioutil"
- "fmt"
- "time"
+ "fmt"
+ "io"
+ "io/ioutil"
+ "time"
)
const MaxDrawInterval = time.Second * 1
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 > 0 && size < 1024 * 1024) {
- return r
- }
-
- return &Progress{
- Reader: r,
- Writer: w,
- Size: size,
- }
+ // Don't wrap reader if output is discarded or size is too small
+ if w == ioutil.Discard || (size > 0 && size < 1024*1024) {
+ return r
+ }
+
+ return &Progress{
+ Reader: r,
+ Writer: w,
+ Size: size,
+ }
}
type Progress struct {
- Writer io.Writer
- Reader io.Reader
- Size int64
- progress int64
- rate int64
- rateProgress int64
- rateUpdated time.Time
- updated time.Time
- done bool
+ Writer io.Writer
+ Reader io.Reader
+ Size int64
+ progress int64
+ rate int64
+ rateProgress int64
+ rateUpdated time.Time
+ updated time.Time
+ done bool
}
func (self *Progress) Read(p []byte) (int, error) {
- // Read
- n, err := self.Reader.Read(p)
-
- now := time.Now()
- isLast := err != nil
-
- // Increment progress
- newProgress := self.progress + int64(n)
- self.progress = newProgress
-
- // Initialize rate state
- if self.rateUpdated.IsZero() {
- self.rateUpdated = now
- self.rateProgress = newProgress
- }
-
- // Update rate every x seconds
- if self.rateUpdated.Add(MaxRateInterval).Before(now) {
- self.rate = calcRate(newProgress - self.rateProgress, self.rateUpdated, now)
- self.rateUpdated = now
- self.rateProgress = newProgress
- }
-
- // Draw progress every x seconds
- if self.updated.Add(MaxDrawInterval).Before(now) || isLast {
- self.draw(isLast)
- self.updated = now
- }
-
- // Mark as done if error occurs
- self.done = isLast
-
- return n, err
+ // Read
+ n, err := self.Reader.Read(p)
+
+ now := time.Now()
+ isLast := err != nil
+
+ // Increment progress
+ newProgress := self.progress + int64(n)
+ self.progress = newProgress
+
+ // Initialize rate state
+ if self.rateUpdated.IsZero() {
+ self.rateUpdated = now
+ self.rateProgress = newProgress
+ }
+
+ // Update rate every x seconds
+ if self.rateUpdated.Add(MaxRateInterval).Before(now) {
+ self.rate = calcRate(newProgress-self.rateProgress, self.rateUpdated, now)
+ self.rateUpdated = now
+ self.rateProgress = newProgress
+ }
+
+ // Draw progress every x seconds
+ if self.updated.Add(MaxDrawInterval).Before(now) || isLast {
+ self.draw(isLast)
+ self.updated = now
+ }
+
+ // Mark as done if error occurs
+ self.done = isLast
+
+ return n, err
}
func (self *Progress) draw(isLast bool) {
- if self.done {
- return
- }
+ if self.done {
+ return
+ }
- self.clear()
+ self.clear()
- // Print progress
- fmt.Fprintf(self.Writer, "%s", formatSize(self.progress, false))
+ // Print progress
+ 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 total size
+ if self.Size > 0 {
+ fmt.Fprintf(self.Writer, "/%s", formatSize(self.Size, false))
+ }
- // Print rate
- if self.rate > 0 {
- fmt.Fprintf(self.Writer, ", Rate: %s/s", formatSize(self.rate, false))
- }
+ // Print rate
+ if self.rate > 0 {
+ fmt.Fprintf(self.Writer, ", Rate: %s/s", formatSize(self.rate, false))
+ }
- if isLast {
- self.clear()
- }
+ if isLast {
+ self.clear()
+ }
}
func (self *Progress) clear() {
- fmt.Fprintf(self.Writer, "\r%50s\r", "")
+ fmt.Fprintf(self.Writer, "\r%50s\r", "")
}