summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schlachter <t480-debian-git@schlachter.ca>2026-01-08 01:41:28 -0500
committerDavid Schlachter <t480-debian-git@schlachter.ca>2026-01-08 01:41:28 -0500
commitb21350357e8471952d2bd15d15ea77220d3caf21 (patch)
treef20a74794d2648cac156cba9cdf5857fecf02903
parent9567725cc98b6706d25230a2558a8faf1e0794b9 (diff)
Better error handling
-rw-r--r--main.go21
1 files changed, 17 insertions, 4 deletions
diff --git a/main.go b/main.go
index c018275..f1a4076 100644
--- a/main.go
+++ b/main.go
@@ -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 {