Release / Build and publish (push) Successful in 35s
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
65 lines
1.7 KiB
Go
65 lines
1.7 KiB
Go
package app
|
|
|
|
import (
|
|
"errors"
|
|
"slices"
|
|
"strings"
|
|
"time"
|
|
|
|
"git.kebcloud.no/keb/lazysecrets/internal/provider"
|
|
"git.kebcloud.no/keb/lazysecrets/internal/ui/panes"
|
|
)
|
|
|
|
// The status pane lists this session's errors, newest first: what a pane
|
|
// showed (a list that couldn't load) and what the footer flashed (a copy
|
|
// that failed), which go when you move on. Only the first line of each,
|
|
// and never kept after quitting.
|
|
|
|
// maxErrors is how many errors are kept.
|
|
const maxErrors = 20
|
|
|
|
type loggedErr struct {
|
|
at time.Time
|
|
text string
|
|
}
|
|
|
|
// logErr records text; an error already there moves to the top, with
|
|
// the time it happened again.
|
|
func (m *Model) logErr(text string) {
|
|
text, _, _ = strings.Cut(strings.TrimSpace(text), "\n")
|
|
if text == "" {
|
|
return
|
|
}
|
|
m.errLog = slices.DeleteFunc(m.errLog, func(e loggedErr) bool { return e.text == text })
|
|
m.errLog = append([]loggedErr{{m.now(), text}}, m.errLog[:min(len(m.errLog), maxErrors-1)]...)
|
|
}
|
|
|
|
// logErrOf records err, about what, except a sign-in, which the footer
|
|
// and the account's details say.
|
|
func (m *Model) logErrOf(what string, err error) {
|
|
var auth *provider.AuthError
|
|
if !errors.As(err, &auth) {
|
|
m.logErr(what + ": " + err.Error())
|
|
}
|
|
}
|
|
|
|
// logFlash records an error the footer is showing, once.
|
|
func (m *Model) logFlash() {
|
|
if m.flash.isErr && m.flash.text != m.loggedFlash {
|
|
m.logErr(m.flash.text)
|
|
}
|
|
m.loggedFlash = m.flash.text
|
|
}
|
|
|
|
// errorFields are the status pane's rows for them.
|
|
func (m Model) errorFields() []panes.Field {
|
|
out := make([]panes.Field, len(m.errLog))
|
|
for i, e := range m.errLog {
|
|
out[i] = panes.Field{Value: e.at.Format("15:04") + " " + e.text, Err: true}
|
|
}
|
|
if len(out) > 0 {
|
|
out[0].Label = "errors"
|
|
}
|
|
return out
|
|
}
|