Merge pull request #266 from bchapuis/fix-263

Update the progress status with the ticker
This commit is contained in:
Alexander Neumann 2015-08-18 22:47:14 +02:00
commit a4cb8995a8
1 changed files with 19 additions and 8 deletions

View File

@ -6,19 +6,22 @@ import (
"time" "time"
) )
const minTickerTime = time.Second / 60
type Progress struct { type Progress struct {
OnStart func() OnStart func()
OnUpdate ProgressFunc OnUpdate ProgressFunc
OnDone ProgressFunc OnDone ProgressFunc
fnM sync.Mutex fnM sync.Mutex
cur Stat cur Stat
curM sync.Mutex curM sync.Mutex
start time.Time start time.Time
c *time.Ticker c *time.Ticker
cancel chan struct{} cancel chan struct{}
o sync.Once o sync.Once
d time.Duration d time.Duration
lastUpdate time.Time
running bool running bool
} }
@ -92,9 +95,17 @@ func (p *Progress) Report(s Stat) {
p.curM.Lock() p.curM.Lock()
p.cur.Add(s) p.cur.Add(s)
cur := p.cur cur := p.cur
needUpdate := false
if time.Since(p.lastUpdate) > minTickerTime {
p.lastUpdate = time.Now()
needUpdate = true
}
p.curM.Unlock() p.curM.Unlock()
p.updateProgress(cur, false) if needUpdate {
p.updateProgress(cur, false)
}
} }
func (p *Progress) updateProgress(cur Stat, ticker bool) { func (p *Progress) updateProgress(cur Stat, ticker bool) {