mirror of
https://github.com/usestrix/strix.git
synced 2026-08-16 09:26:39 +02:00
112 lines
3.3 KiB
Go
112 lines
3.3 KiB
Go
package render
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// ---------------------------------------------------------------------------
|
|
// Notes (notes_renderer.py)
|
|
// ---------------------------------------------------------------------------
|
|
|
|
func renderNote(name string, args map[string]any, result any) string {
|
|
var b strings.Builder
|
|
icon := Col(Gold).Render("◇ ")
|
|
switch name {
|
|
case "create_note":
|
|
category := StringValue(args["category"])
|
|
if category == "" {
|
|
category = "general"
|
|
}
|
|
title, content := strings.TrimSpace(StringValue(args["title"])), strings.TrimSpace(StringValue(args["content"]))
|
|
b.WriteString(icon + Dim().Render("note") + " " + Dim().Render("("+category+")"))
|
|
if title != "" {
|
|
b.WriteString("\n " + title)
|
|
}
|
|
if content != "" {
|
|
b.WriteString("\n " + Dim().Render(content))
|
|
}
|
|
if title == "" && content == "" {
|
|
b.WriteString("\n " + Dim().Render("Capturing..."))
|
|
}
|
|
case "delete_note":
|
|
b.WriteString(icon + Dim().Render("note removed"))
|
|
case "update_note":
|
|
title, content := StringValue(args["title"]), strings.TrimSpace(StringValue(args["content"]))
|
|
b.WriteString(icon + Dim().Render("note updated"))
|
|
if title != "" {
|
|
b.WriteString("\n " + title)
|
|
}
|
|
if content != "" {
|
|
b.WriteString("\n " + Dim().Render(content))
|
|
}
|
|
if title == "" && content == "" {
|
|
b.WriteString("\n " + Dim().Render("Updating..."))
|
|
}
|
|
case "list_notes":
|
|
b.WriteString(icon + Dim().Render("notes"))
|
|
b.WriteString(noteListBody(result))
|
|
case "get_note":
|
|
b.WriteString(icon + Dim().Render("note read"))
|
|
if m, ok := result.(map[string]any); ok && truthy(m["success"]) {
|
|
note, _ := m["note"].(map[string]any)
|
|
renderSingleNote(&b, note)
|
|
} else {
|
|
b.WriteString("\n " + Dim().Render("Loading..."))
|
|
}
|
|
default:
|
|
b.WriteString(icon + Dim().Render(strings.ReplaceAll(name, "_", " ")))
|
|
}
|
|
return b.String()
|
|
}
|
|
|
|
func noteListBody(result any) string {
|
|
var b strings.Builder
|
|
if s, ok := result.(string); ok && strings.TrimSpace(s) != "" {
|
|
return "\n " + Dim().Render(strings.TrimSpace(s))
|
|
}
|
|
m, ok := result.(map[string]any)
|
|
if !ok || !truthy(m["success"]) {
|
|
return "\n " + Dim().Render("Loading...")
|
|
}
|
|
notes, _ := m["notes"].([]any)
|
|
count, _ := NumericValue(m["total_count"])
|
|
if int(count) == 0 || len(notes) == 0 {
|
|
return "\n " + Dim().Render("No notes")
|
|
}
|
|
for _, n := range notes {
|
|
note, _ := n.(map[string]any)
|
|
title := strings.TrimSpace(StringValue(note["title"]))
|
|
if title == "" {
|
|
title = "(untitled)"
|
|
}
|
|
category := StringValue(note["category"])
|
|
if category == "" {
|
|
category = "general"
|
|
}
|
|
content := strings.TrimSpace(StringValue(note["content"]))
|
|
if content == "" {
|
|
content = strings.TrimSpace(StringValue(note["content_preview"]))
|
|
}
|
|
b.WriteString("\n - " + title + Dim().Render(" ("+category+")"))
|
|
if content != "" {
|
|
b.WriteString("\n " + Dim().Render(content))
|
|
}
|
|
}
|
|
return b.String()
|
|
}
|
|
|
|
func renderSingleNote(b *strings.Builder, note map[string]any) {
|
|
title := strings.TrimSpace(StringValue(note["title"]))
|
|
if title == "" {
|
|
title = "(untitled)"
|
|
}
|
|
category := StringValue(note["category"])
|
|
if category == "" {
|
|
category = "general"
|
|
}
|
|
b.WriteString("\n " + title + Dim().Render(" ("+category+")"))
|
|
if content := strings.TrimSpace(StringValue(note["content"])); content != "" {
|
|
b.WriteString("\n " + Dim().Render(content))
|
|
}
|
|
}
|