summaryrefslogtreecommitdiff
path: root/internal
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-02-05 01:02:17 +0200
committerPaul Buetow <paul@buetow.org>2025-02-05 01:02:17 +0200
commit24778551d8e5b0b47a06494dd28a66a71dfb47f0 (patch)
tree6000d14601d57f2f34840793f1798c8baefc59ca /internal
parent07d9f1840494924dd6ca713493dd3d630e9ad721 (diff)
use of generic ascii table package
Diffstat (limited to 'internal')
-rw-r--r--internal/colour/colour.go6
-rw-r--r--internal/schedule/stats.go55
-rw-r--r--internal/table/render.go15
-rw-r--r--internal/table/table.go12
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)