-
Notifications
You must be signed in to change notification settings - Fork 0
/
progressbar.go
52 lines (41 loc) · 936 Bytes
/
progressbar.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package main
import "fmt"
type Progressbar struct {
Total int64
Current int64
FileName string
Percent int64
CurrentFile int
FilesCount int
}
func NewProgressbar(fileName string, current, total int64, file, files int) *Progressbar {
p := &Progressbar{
Total: total,
Current: current,
FileName: fileName,
CurrentFile: file,
FilesCount: files,
}
p.Percent = p.GetPercent()
return p
}
func (p *Progressbar) GetPercent() int64 {
return int64((float32(p.Current) / float32(p.Total)) * 100)
}
func (p *Progressbar) Play(n int) {
p.Current = int64(n)
last := p.Percent
p.Percent = p.GetPercent()
if last == p.Percent {
return
}
fmt.Printf("\r%3d%% %v %v/%v", p.Percent, p.FileName, p.CurrentFile, p.FilesCount)
}
func (p *Progressbar) Finish() {
fmt.Println()
}
func (b *Progressbar) Write(p []byte) (n int, err error) {
n = len(p)
b.Play(int(b.Current) + n)
return
}