diff --git a/_examples/io/main.go b/_examples/io/main.go new file mode 100644 index 0000000..6413b2c --- /dev/null +++ b/_examples/io/main.go @@ -0,0 +1,63 @@ +package main + +import ( + "fmt" + "io" + "net/http" + "os" + "path/filepath" + "time" + + "github.com/vbauerster/mpb/v4" + "github.com/vbauerster/mpb/v4/decor" +) + +func main() { + url := "https://github.com/onivim/oni/releases/download/v0.3.4/Oni-0.3.4-amd64-linux.deb" + + resp, err := http.Get(url) + if err != nil { + panic(err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + fmt.Printf("Server return non-200 status: %s\n", resp.Status) + return + } + + size := resp.ContentLength + + // create dest + destName := filepath.Base(url) + dest, err := os.Create(destName) + if err != nil { + fmt.Printf("Can't create %s: %v\n", destName, err) + return + } + defer dest.Close() + + p := mpb.New( + mpb.WithWidth(60), + mpb.WithRefreshRate(180*time.Millisecond), + ) + + bar := p.AddBar(size, mpb.BarStyle("[=>-|"), + mpb.PrependDecorators( + decor.CountersKibiByte("% 6.1f / % 6.1f"), + ), + mpb.AppendDecorators( + decor.EwmaETA(decor.ET_STYLE_MMSS, float64(size)/2048), + decor.Name(" ] "), + decor.AverageSpeed(decor.UnitKiB, "% .2f"), + ), + ) + + // create proxy reader + reader := bar.ProxyReader(resp.Body) + + // and copy from reader, ignoring errors + io.Copy(dest, reader) + + p.Wait() +} diff --git a/_examples/io/multiple/main.go b/_examples/io/multiple/main.go deleted file mode 100644 index 1d0a6a6..0000000 --- a/_examples/io/multiple/main.go +++ /dev/null @@ -1,83 +0,0 @@ -package main - -import ( - "fmt" - "io" - "log" - "net/http" - "os" - "path/filepath" - "sync" - - "github.com/vbauerster/mpb/v4" - "github.com/vbauerster/mpb/v4/decor" -) - -func main() { - log.SetOutput(os.Stderr) - - url1 := "https://homebrew.bintray.com/bottles/youtube-dl-2016.12.12.sierra.bottle.tar.gz" - url2 := "https://homebrew.bintray.com/bottles/libtiff-4.0.7.sierra.bottle.tar.gz" - - var wg sync.WaitGroup - p := mpb.New(mpb.WithWidth(64), mpb.WithWaitGroup(&wg)) - - for i, url := range [...]string{url1, url2} { - wg.Add(1) - name := fmt.Sprintf("url%d:", i+1) - go download(&wg, p, name, url, i) - } - - p.Wait() -} - -func download(wg *sync.WaitGroup, p *mpb.Progress, name, url string, n int) { - defer wg.Done() - resp, err := http.Get(url) - if err != nil { - log.Printf("%s: %v", name, err) - return - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - err = fmt.Errorf("non-200 status: %s", resp.Status) - log.Printf("%s: %v", name, err) - return - } - - size := resp.ContentLength - - // create dest - destName := filepath.Base(url) - dest, err := os.Create(destName) - if err != nil { - err = fmt.Errorf("Can't create %s: %v", destName, err) - log.Printf("%s: %v", name, err) - return - } - - // create bar with appropriate decorators - bar := p.AddBar(size, mpb.BarPriority(n), - mpb.PrependDecorators( - decor.Name(name, decor.WC{W: len(name) + 1, C: decor.DidentRight}), - decor.CountersKibiByte("%6.1f / %6.1f", decor.WCSyncWidth), - ), - mpb.AppendDecorators( - decor.EwmaETA(decor.ET_STYLE_HHMMSS, 1024*4, decor.WCSyncWidth), - decor.AverageSpeed(decor.UnitKiB, "% .2f"), - ), - ) - - // create proxy reader - reader := bar.ProxyReader(resp.Body) - // and copy from reader - _, err = io.Copy(dest, reader) - - if e := dest.Close(); err == nil { - err = e - } - if err != nil { - log.Printf("%s: %v", name, err) - } -} diff --git a/_examples/io/single/main.go b/_examples/io/single/main.go deleted file mode 100644 index 6413b2c..0000000 --- a/_examples/io/single/main.go +++ /dev/null @@ -1,63 +0,0 @@ -package main - -import ( - "fmt" - "io" - "net/http" - "os" - "path/filepath" - "time" - - "github.com/vbauerster/mpb/v4" - "github.com/vbauerster/mpb/v4/decor" -) - -func main() { - url := "https://github.com/onivim/oni/releases/download/v0.3.4/Oni-0.3.4-amd64-linux.deb" - - resp, err := http.Get(url) - if err != nil { - panic(err) - } - defer resp.Body.Close() - - if resp.StatusCode != http.StatusOK { - fmt.Printf("Server return non-200 status: %s\n", resp.Status) - return - } - - size := resp.ContentLength - - // create dest - destName := filepath.Base(url) - dest, err := os.Create(destName) - if err != nil { - fmt.Printf("Can't create %s: %v\n", destName, err) - return - } - defer dest.Close() - - p := mpb.New( - mpb.WithWidth(60), - mpb.WithRefreshRate(180*time.Millisecond), - ) - - bar := p.AddBar(size, mpb.BarStyle("[=>-|"), - mpb.PrependDecorators( - decor.CountersKibiByte("% 6.1f / % 6.1f"), - ), - mpb.AppendDecorators( - decor.EwmaETA(decor.ET_STYLE_MMSS, float64(size)/2048), - decor.Name(" ] "), - decor.AverageSpeed(decor.UnitKiB, "% .2f"), - ), - ) - - // create proxy reader - reader := bar.ProxyReader(resp.Body) - - // and copy from reader, ignoring errors - io.Copy(dest, reader) - - p.Wait() -}