From d762cdbae06efd194ffac7b976c16aac21a26f94 Mon Sep 17 00:00:00 2001 From: Mitch Riedstra Date: Fri, 8 Jan 2021 23:03:01 -0500 Subject: Also show the size of games on the page listing --- cmd/web/index.go | 2 +- steam/formatBytes.go | 28 ++++++++++++++++++++++++++++ steam/package.go | 20 ++++++++++++++++++++ steam/steam.go | 13 ++++++++----- 4 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 steam/formatBytes.go diff --git a/cmd/web/index.go b/cmd/web/index.go index 87f9e25..6229f71 100644 --- a/cmd/web/index.go +++ b/cmd/web/index.go @@ -88,7 +88,7 @@ an external hard drive diff --git a/steam/formatBytes.go b/steam/formatBytes.go new file mode 100644 index 0000000..8627b58 --- /dev/null +++ b/steam/formatBytes.go @@ -0,0 +1,28 @@ +package steam + +import ( + "fmt" + "math" +) + +func formatBytes(b int64) string { + if b < 1024 { + return fmt.Sprintf("%d b", b) + } + + s := "" + + pfxs := "kmgt" + for i := 0; i < len(pfxs); i++ { + pow := math.Pow(float64(1024), float64(i+1)) + // This one is too big, return the previous string + if b < int64(pow) { + return s + } + s = fmt.Sprintf("%.2f %cb", + float64(b)/(pow), + pfxs[i]) + } + + return s +} diff --git a/steam/package.go b/steam/package.go index cff086e..76914dc 100644 --- a/steam/package.go +++ b/steam/package.go @@ -96,3 +96,23 @@ func (g *Game) Delete() error { return nil } + +// Get the Size of a game in a pretty format +func (g Game) GetSize() string { + return formatBytes(g.Size) +} + +func (g *Game) setSizeInfo() error { + pth := filepath.Join(g.LibraryPath, "common", g.Name) + return filepath.Walk(pth, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + + if info.Mode().IsRegular() { + g.Size += info.Size() + } + + return nil + }) +} diff --git a/steam/steam.go b/steam/steam.go index 8c3dcbb..24e4c54 100644 --- a/steam/steam.go +++ b/steam/steam.go @@ -3,10 +3,10 @@ package steam import ( + "bufio" + "errors" "fmt" "io/ioutil" - "errors" - "bufio" "os" "path/filepath" "strings" @@ -20,6 +20,7 @@ type Library struct { type Game struct { Name string LibraryPath string + Size int64 } func ProcessMultipleLibraries(r []string) ([]*Library, error) { @@ -44,7 +45,7 @@ func NewLibrary(path string) (*Library, error) { return l, err } -func NewLibraryMust(path string) (*Library) { +func NewLibraryMust(path string) *Library { l, err := NewLibrary(path) if err != nil { panic(err) @@ -67,11 +68,13 @@ func (s *Library) ProcessLibrary(r string) error { s.Folder = r for _, f := range dirs { if f.IsDir() { - s.Games[f.Name()] = Game{ + g := &Game{ Name: f.Name(), LibraryPath: r, } - // s.Games = append(s.Games, f.Name()) + g.setSizeInfo() + + s.Games[f.Name()] = *g } } -- cgit v1.2.3