64 lines
2.2 KiB
Go
64 lines
2.2 KiB
Go
package cli
|
||
|
||
import (
|
||
"fmt"
|
||
"strings"
|
||
|
||
"reasonix/internal/i18n"
|
||
"reasonix/internal/memory"
|
||
)
|
||
|
||
func renderMemory(width int, set *memory.Set) string {
|
||
var b strings.Builder
|
||
fmt.Fprintf(&b, "%s\n", viewHeader("%s", strings.TrimRight(i18n.M.MemoryLoaded, "::")))
|
||
if len(set.Docs) > 0 {
|
||
b.WriteString(viewSubhead("docs") + "\n")
|
||
for _, d := range set.Docs {
|
||
scope := "(" + string(d.Scope) + ")"
|
||
fmt.Fprintf(&b, " %s %s\n", viewMeta(scope), viewCompactPath(d.Path, viewBudget(width, 2+visibleWidth(scope)+2)))
|
||
}
|
||
}
|
||
facts := set.Store.List()
|
||
archived := set.Store.ListArchived()
|
||
hasSaved := len(facts) > 0 || strings.TrimSpace(set.Index) != ""
|
||
if hasSaved {
|
||
if len(set.Docs) > 0 {
|
||
b.WriteByte('\n')
|
||
}
|
||
header := strings.TrimRight(strings.TrimSpace(i18n.M.MemorySavedHeader), "::")
|
||
b.WriteString(viewSubhead(viewCompactText(header, viewBudget(width, 2))) + "\n")
|
||
for _, f := range facts {
|
||
label := f.Title
|
||
if label == "" {
|
||
label = f.Description
|
||
}
|
||
meta := ""
|
||
if label != "" {
|
||
meta = " " + viewMeta(viewCompactText(label, min(40, viewBudget(width, 2+visibleWidth(f.Name)+2))))
|
||
}
|
||
fmt.Fprintf(&b, " %s%s\n", viewCompactText(f.Name, viewBudget(width, 2+visibleWidth(meta))), meta)
|
||
}
|
||
}
|
||
if len(archived) > 0 {
|
||
if len(set.Docs) > 0 || hasSaved {
|
||
b.WriteByte('\n')
|
||
}
|
||
b.WriteString(viewSubhead(viewCompactText(i18n.M.ListMemoryArchived, viewBudget(width, 2))) + "\n")
|
||
for _, f := range archived {
|
||
meta := string(f.Type)
|
||
if !f.ArchivedAt.IsZero() {
|
||
meta += " · " + f.ArchivedAt.Format("2006-01-02 15:04:05Z")
|
||
}
|
||
name := viewCompactText(f.Name, viewBudget(width, 2))
|
||
fmt.Fprintf(&b, " %s %s\n", name, viewMeta(viewCompactText(meta, min(48, viewBudget(width, 2+visibleWidth(name)+2)))))
|
||
fmt.Fprintf(&b, " %s\n", viewCompactPath(f.Path, viewBudget(width, 4)))
|
||
}
|
||
}
|
||
if (hasSaved || len(archived) > 0) && set.Store.Dir != "" {
|
||
fmt.Fprintf(&b, " %s\n", viewCompactText(strings.TrimSpace(fmt.Sprintf(i18n.M.MemoryStoredUnderFmt, set.Store.Dir)), viewBudget(width, 2)))
|
||
}
|
||
b.WriteString("\n")
|
||
b.WriteString(viewHint(viewCompactText(i18n.M.MemoryEditHint, viewBudget(width, 2))))
|
||
return strings.TrimRight(b.String(), "\n")
|
||
}
|