Luis Figueiredo 8 سال پیش
والد
کامیت
0f2086fa93
2فایلهای تغییر یافته به همراه29 افزوده شده و 1 حذف شده
  1. 6 1
      src/buildme/project.go
  2. 23 0
      src/buildme/utils/statreader.go

+ 6 - 1
src/buildme/project.go

@@ -2,6 +2,7 @@ package buildme
 
 import (
 	"bufio"
+	"buildme/utils"
 	"context"
 	"encoding/json"
 	"fmt"
@@ -60,7 +61,11 @@ func (p *Project) SetConf(projConf ProjectConf) *Project {
 
 func (p *Project) Reader() io.ReadCloser {
 	f, _ := os.Open(p.tarFilename)
-	return f
+	stat, _ := f.Stat()
+	return utils.NewStatReadCloser(f, int(stat.Size()), func(progress float64) {
+		log.Progress("Readed %.2f", progress)
+	})
+	//return f
 }
 
 func (p *Project) Close() {

+ 23 - 0
src/buildme/utils/statreader.go

@@ -0,0 +1,23 @@
+package utils
+
+import "io"
+
+type StatReadCloser struct {
+	io.ReadCloser
+	rd    int
+	total int
+	fn    func(progress float64)
+}
+
+func NewStatReadCloser(rd io.ReadCloser, total int, fn func(progress float64)) *StatReadCloser {
+	return &StatReadCloser{rd, 0, total, fn}
+}
+
+func (s *StatReadCloser) Read(d []byte) (int, error) {
+	n, err := s.ReadCloser.Read(d)
+	s.rd += n
+	per := float64(s.rd) / float64(s.total) * float64(100)
+	s.fn(per)
+
+	return n, err
+}