diff options
| author | David Schlachter <t480-debian-git@schlachter.ca> | 2026-01-08 01:41:28 -0500 |
|---|---|---|
| committer | David Schlachter <t480-debian-git@schlachter.ca> | 2026-01-08 01:41:28 -0500 |
| commit | b21350357e8471952d2bd15d15ea77220d3caf21 (patch) | |
| tree | f20a74794d2648cac156cba9cdf5857fecf02903 /main.go | |
| parent | 9567725cc98b6706d25230a2558a8faf1e0794b9 (diff) | |
Better error handling
Diffstat (limited to 'main.go')
| -rw-r--r-- | main.go | 21 |
1 files changed, 17 insertions, 4 deletions
@@ -4,6 +4,7 @@ package main import ( "database/sql" + "errors" "fmt" "log" "net/http" @@ -59,7 +60,7 @@ func initialModel(c *http.Client, db *sql.DB) model { err: nil, db: db, c: c, - wordAddStatus: "(Press 'Enter' to add this word and its definition to Anki)", + wordAddStatus: "", p: *bluemonday.StrictPolicy(), vp: vp, } @@ -75,6 +76,9 @@ func lookupWord(db *sql.DB, word string) tea.Cmd { row := db.QueryRow(`select definition from words where word = ? limit 1`, word) err := row.Scan(&definition) if err != nil { + if errors.Is(err, sql.ErrNoRows) { + return definitionMsg("") + } return errMsg(fmt.Errorf("looking up '%s': %s", word, err)) } return definitionMsg(definition) @@ -89,10 +93,12 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case definitionMsg: m.currentDefinition = string(msg) + m.err = nil m.vp.SetContent(formatDefinitionForDisplay(m.p, m.currentDefinition)) return m, nil case wordAddedMsg: m.wordAddStatus = fmt.Sprintf("✅ Added '%s' to Anki", string(msg)) + m.err = nil case tea.KeyMsg: switch msg.Type { case tea.KeyCtrlC: @@ -129,10 +135,10 @@ var whitespaceTrimmerRe = regexp.MustCompile(`^[ \t]*$`) func (m model) View() string { return fmt.Sprintf( - "Look up a word:\n\n%s\n\n%s\n%s\n\n%s\n%s", + "Look up a word:\n\n%s\n\nStatus: %s\n\n%s\n\n%s\n%s", m.wordInput.View(), - m.wordAddStatus, - "(ctrl-c to quit, esc to clear)", + formatStatus(m.err, m.wordAddStatus), + "(ctrl-c to quit, esc to clear, enter to add to Anki)", "Current definition:\n", m.vp.View(), ) + "\n" @@ -152,6 +158,13 @@ func formatDefinitionForDisplay(policy bluemonday.Policy, definition string) str ) } +func formatStatus(lastError error, lastSuccess string) string { + if lastError == nil { + return lastSuccess + } + return fmt.Sprintf("\x1b[0;31;49m%s\x1b[0m", lastError.Error()) +} + func main() { db, err := setupDatabase() if err != nil { |
