pgcli: use go-pretty progress bar

This commit is contained in:
rkonfj
2024-12-12 20:32:58 +08:00
parent bdc7c21c64
commit b3dabbf4bb
4 changed files with 37 additions and 16 deletions
+5 -2
View File
@@ -13,7 +13,7 @@ import (
"os/signal"
"syscall"
"github.com/schollz/progressbar/v3"
"github.com/sigcn/pg/cmd/pgcli/share"
"github.com/sigcn/pg/fileshare"
)
@@ -72,8 +72,11 @@ func readFile(fh *fileshare.FileHandle) error {
return err
}
r, fileSize, _ := fh.File()
bar := progressbar.DefaultBytes(int64(fileSize), fh.Filename)
trackerManager := share.TrackerManager{AutoStop: true}
bar := trackerManager.CreateBar(int64(fileSize), fh.Filename)
bar.Add(int(partSize))
if _, err = io.Copy(io.MultiWriter(f, bar, sha256Checksum), r); err != nil {
return fmt.Errorf("download file falied: %w", err)
}
+32 -6
View File
@@ -8,9 +8,10 @@ import (
"log/slog"
"os"
"os/signal"
"sync"
"syscall"
"github.com/schollz/progressbar/v3"
"github.com/jedib0t/go-pretty/v6/progress"
"github.com/sigcn/pg/fileshare"
)
@@ -21,7 +22,8 @@ func Run() error {
fmt.Printf("Flags:\n")
flagSet.PrintDefaults()
}
fileManager := fileshare.FileManager{ListenUDPPort: 28878, ProgressBar: createBar}
trackerManager := TrackerManager{}
fileManager := fileshare.FileManager{ListenUDPPort: 28878, ProgressBar: trackerManager.CreateBar}
flagSet.StringVar(&fileManager.Server, "s", "", "peermap server")
flagSet.StringVar(&fileManager.Network, "pubnet", "public", "peermap public network")
@@ -64,8 +66,32 @@ func Run() error {
return fileManager.Serve(ctx, listener)
}
func createBar(total int64, desc string) fileshare.ProgressBar {
bar := progressbar.DefaultBytes(total, desc)
progressbar.OptionSetTheme(progressbar.ThemeASCII)(bar)
return bar
type ProgressBar struct {
tracker *progress.Tracker
}
func (bar *ProgressBar) Write(p []byte) (int, error) {
bar.tracker.Increment(int64(len(p)))
return len(p), nil
}
func (bar *ProgressBar) Add(progress int) error {
bar.tracker.Increment(int64(progress))
return nil
}
type TrackerManager struct {
AutoStop bool
pw progress.Progress
renderOnce sync.Once
}
func (tm *TrackerManager) CreateBar(total int64, desc string) fileshare.ProgressBar {
tm.renderOnce.Do(func() {
tm.pw.SetAutoStop(tm.AutoStop)
go tm.pw.Render()
})
tracker := progress.Tracker{Message: desc, Total: total, Units: progress.UnitsBytes}
tm.pw.AppendTracker(&tracker)
return &ProgressBar{tracker: &tracker}
}
-2
View File
@@ -7,7 +7,6 @@ require (
github.com/gorilla/websocket v1.5.3
github.com/jedib0t/go-pretty/v6 v6.6.3
github.com/mdp/qrterminal/v3 v3.2.0
github.com/schollz/progressbar/v3 v3.17.1
github.com/vishvananda/netlink v1.3.0
golang.org/x/crypto v0.25.0
golang.org/x/net v0.27.0
@@ -24,7 +23,6 @@ require (
require (
github.com/go-jose/go-jose/v4 v4.0.2 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/vishvananda/netns v0.0.4 // indirect
golang.org/x/term v0.26.0 // indirect
-6
View File
@@ -1,5 +1,3 @@
github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM=
github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY=
github.com/coreos/go-oidc/v3 v3.11.0 h1:Ia3MxdwpSw702YW0xgfmP1GVCMA9aEFWu12XUZ3/OtI=
github.com/coreos/go-oidc/v3 v3.11.0/go.mod h1:gE3LgjOgFoHi9a4ce4/tJczr0Ai2/BoDhf0r5lltWI0=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -18,15 +16,11 @@ github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6T
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mdp/qrterminal/v3 v3.2.0 h1:qteQMXO3oyTK4IHwj2mWsKYYRBOp1Pj2WRYFYYNTCdk=
github.com/mdp/qrterminal/v3 v3.2.0/go.mod h1:XGGuua4Lefrl7TLEsSONiD+UEjQXJZ4mPzF+gWYIJkk=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ=
github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/schollz/progressbar/v3 v3.17.1 h1:bI1MTaoQO+v5kzklBjYNRQLoVpe0zbyRZNK6DFkVC5U=
github.com/schollz/progressbar/v3 v3.17.1/go.mod h1:RzqpnsPQNjUyIgdglUjRLgD7sVnxN1wpmBMV+UiEbL4=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/vishvananda/netlink v1.3.0 h1:X7l42GfcV4S6E4vHTsw48qbrV+9PVojNfIhZcwQdrZk=