diff options
| author | Paul Buetow <paul@buetow.org> | 2025-02-05 01:02:17 +0200 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-02-05 01:02:17 +0200 |
| commit | 24778551d8e5b0b47a06494dd28a66a71dfb47f0 (patch) | |
| tree | 6000d14601d57f2f34840793f1798c8baefc59ca /internal | |
| parent | 07d9f1840494924dd6ca713493dd3d630e9ad721 (diff) | |
use of generic ascii table package
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/colour/colour.go | 6 | ||||
| -rw-r--r-- | internal/schedule/stats.go | 55 | ||||
| -rw-r--r-- | internal/table/render.go | 15 | ||||
| -rw-r--r-- | internal/table/table.go | 12 |
4 files changed, 34 insertions, 54 deletions
diff --git a/internal/colour/colour.go b/internal/colour/colour.go index 0b11163..030a6ef 100644 --- a/internal/colour/colour.go +++ b/internal/colour/colour.go @@ -13,12 +13,12 @@ var ( } Infoln = func(args ...any) { fmt.Println(args...) } - info2Col = color.New(color.FgHiYellow, color.BgBlue) + Info2Col = color.New(color.FgHiYellow, color.BgBlue) Info2fln = func(format string, args ...any) { - info2Col.Printf(format, args...) + Info2Col.Printf(format, args...) fmt.Print("\n") } - SInfo2f = info2Col.SprintfFunc() + SInfo2f = Info2Col.SprintfFunc() warnCol = color.New(color.FgHiWhite, color.BgRed) Warnln = warnCol.PrintlnFunc() diff --git a/internal/schedule/stats.go b/internal/schedule/stats.go index 40cc175..ecc840d 100644 --- a/internal/schedule/stats.go +++ b/internal/schedule/stats.go @@ -1,10 +1,8 @@ package schedule import ( - "fmt" "os" "path/filepath" - "strconv" "strings" "time" @@ -12,6 +10,7 @@ import ( "codeberg.org/snonux/gos/internal/entry" "codeberg.org/snonux/gos/internal/oi" "codeberg.org/snonux/gos/internal/platforms" + "codeberg.org/snonux/gos/internal/table" "codeberg.org/snonux/gos/internal/timestamp" ) @@ -155,48 +154,20 @@ func (s *stats) gatherQueuedStats(dir string) error { } func (s stats) RenderTable(platform platforms.Platform) { - var sb strings.Builder - - val := func(val any) string { - switch v := val.(type) { - case int: - return strconv.Itoa(v) - case float64: - return fmt.Sprintf("%0.2f", v) - case string: - return v - default: - return fmt.Sprintf("%v", v) - } - } - - dataRow := func(descr1 string, val1 any, descr2 string, val2 any) { - const format = "| %-21s | %-11s | %-21s | %-11s |" - sb.WriteString(colour.SInfo2f(format, descr1, val(val1), descr2, val(val2))) - sb.WriteString("\n") - } + err := table.New(platform.String(), "value", "Lifetime stats", "value"). + WithColor(colour.Info2Col). + Add("Since (days)", s.sinceDays, "Total since (days)", s.totalSinceDays). + Add("#Posted entries", s.posted, "#Total posted entries", s.totalPosted). + Add("#Queued entries", s.queued, "", ""). + Add("Enough for (days)", s.queuedForDays, "", ""). + Add("Last post (days ago)", s.lastPostDaysAgo, "Pause days", s.pauseDays). + Add("Posts per day", s.postsPerDay, "Total posts per day", s.totalPostsPerDay). + Add("Posts per day target", s.postsPerDayTarget, "", ""). + Render() - sep := colour.SInfo2f("+%s+%s+%s+%s+", strings.Repeat("-", 23), - strings.Repeat("-", 13), strings.Repeat("-", 23), strings.Repeat("-", 13)) - - separator := func() { - sb.WriteString(sep) - sb.WriteString("\n") + if err != nil { + panic(err) } - - separator() - dataRow(platform.String(), "value", "Lifetime stats", "value") - separator() - dataRow("Since (days)", s.sinceDays, "Total since (days)", s.totalSinceDays) - dataRow("#Posted entries", s.posted, "#Total posted entries", s.totalPosted) - dataRow("#Queued entries", s.queued, "", "") - dataRow("Enough for (days)", s.queuedForDays, "", "") - dataRow("Last post (days ago)", s.lastPostDaysAgo, "Pause days", s.pauseDays) - dataRow("Posts per day", s.postsPerDay, "Total posts per day", s.totalPostsPerDay) - dataRow("Posts per day target", s.postsPerDayTarget, "", "") - separator() - - fmt.Print(sb.String()) } func pastTime(duration time.Duration) time.Time { diff --git a/internal/table/render.go b/internal/table/render.go index edac866..c7ed46c 100644 --- a/internal/table/render.go +++ b/internal/table/render.go @@ -25,9 +25,7 @@ func newRender(tab *Table) render { r.lineLen += len + 3 } - separator.WriteString("+\n") - r.separator = separator.String() - + r.separator = tab.sprintf("%s+", separator.String()) + "\n" return r } @@ -35,23 +33,26 @@ func (r render) String() string { var sb strings.Builder sb.WriteString(r.separator) - r.writeRow(&sb, r.tab.headers) + sb.WriteString(r.rowString(r.tab.headers)) sb.WriteString(r.separator) for _, row := range r.tab.rows { - r.writeRow(&sb, row) + sb.WriteString(r.rowString(row)) } sb.WriteString(r.separator) return sb.String() } -func (r render) writeRow(sb *strings.Builder, row []string) { +func (r render) rowString(row []string) string { + var sb strings.Builder + for i, col := range row { sb.WriteString(fmt.Sprintf("| %s ", col)) for j := len(col); j < r.tab.lengths[i]; j++ { sb.WriteString(" ") } } - sb.WriteString("|\n") + + return r.tab.sprintf("%s|", sb.String()) + "\n" } diff --git a/internal/table/table.go b/internal/table/table.go index 040f50d..7ebeb1b 100644 --- a/internal/table/table.go +++ b/internal/table/table.go @@ -3,6 +3,8 @@ package table import ( "fmt" "strconv" + + "github.com/fatih/color" ) type row []string @@ -10,15 +12,16 @@ type row []string type Table struct { headers []string rows []row - lengths []int // Max length of each col + lengths []int // Max length of each col + sprintf func(format string, args ...any) string // For colored output err error } func New(args ...any) *Table { - t := Table{ headers: make([]string, 0, len(args)), lengths: make([]int, 0, len(args)), + sprintf: fmt.Sprintf, } for _, arg := range args { @@ -30,6 +33,11 @@ func New(args ...any) *Table { return &t } +func (t *Table) WithColor(col *color.Color) *Table { + t.sprintf = col.Sprintf + return t +} + func (t *Table) Add(args ...any) *Table { if len(args) != len(t.headers) { t.err = fmt.Errorf("Table row (%v) not same length as table headers (%v)", args, t.headers) |
