fix metadata generator

This commit is contained in:
ston1th 2022-04-07 17:11:30 +02:00
commit 3e765a7943
4 changed files with 94 additions and 25 deletions

View file

@ -3,15 +3,19 @@
package main
import (
"cachefs/pkg/provider"
"cachefs/pkg/provider/parse"
"encoding/hex"
"errors"
"flag"
"fmt"
"io"
"math"
"os"
"path/filepath"
"strings"
"sync/atomic"
"time"
)
var (
@ -176,7 +180,52 @@ func cp(args []string) (err error) {
return
}
defer df.Close()
_, err = io.Copy(df, sf)
fi, err := sf.Stat()
if err != nil {
return
}
r := &progressReader{
f: sf,
done: make(chan struct{}),
size: fi.Size(),
}
go r.PrintProgress()
_, err = io.Copy(df, r)
close(r.done)
return
}
type progressReader struct {
f provider.File
done chan struct{}
size int64
n int64
}
func (p *progressReader) Read(b []byte) (n int, err error) {
n, err = p.f.Read(b)
atomic.AddInt64(&p.n, int64(n))
return
}
func (p *progressReader) ReadAt(b []byte, off int64) (n int, err error) {
n, err = p.f.ReadAt(b, off)
atomic.AddInt64(&p.n, int64(n))
return
}
func (p *progressReader) PrintProgress() {
for {
select {
case <-p.done:
fmt.Println()
return
case <-time.After(time.Millisecond * 500):
}
n := atomic.LoadInt64(&p.n)
percent := int(math.Round(float64(n) / float64(p.size) * 100))
fmt.Printf("progress: %d / %d %d%%\r", n, p.size, percent)
}
return
}