From 1888b70cf4981cabaef0b6e33e0ae9982d3a788e Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Mon, 22 Jun 2026 09:21:06 +0300 Subject: fix task export timeout for lq0 --- internal/ui/handlers.go | 4 +++- internal/ui/keyactions.go | 8 ++++++-- internal/ui/table.go | 12 +++++++++++- 3 files changed, 20 insertions(+), 4 deletions(-) (limited to 'internal/ui') diff --git a/internal/ui/handlers.go b/internal/ui/handlers.go index 971561e..394aa80 100644 --- a/internal/ui/handlers.go +++ b/internal/ui/handlers.go @@ -47,7 +47,9 @@ func (m *Model) handleAnnotationMode(msg tea.KeyPressMsg) (tea.Model, tea.Cmd) { } if m.replaceAnnotations { - if err := task.ReplaceAnnotations(m.annotateID, value); err != nil { + ctx, cancel := taskExportContext() + defer cancel() + if err := task.ReplaceAnnotations(ctx, m.annotateID, value); err != nil { return err } m.replaceAnnotations = false diff --git a/internal/ui/keyactions.go b/internal/ui/keyactions.go index 81ab468..072ea20 100644 --- a/internal/ui/keyactions.go +++ b/internal/ui/keyactions.go @@ -159,7 +159,9 @@ func (m *Model) handleUndo() (tea.Model, tea.Cmd) { } filters = append(filters, "status:"+restore.status) - tasks, err := task.Export(filters...) + ctx, cancel := taskExportContext() + tasks, err := task.Export(ctx, filters...) + cancel() if err == nil && len(tasks) > 0 { id = tasks[0].ID // Also update our local task list @@ -198,7 +200,9 @@ func (m *Model) deleteTaskWithUndo(tsk task.Task) (int, bool, error) { recurring := isRecurringTask(tsk) tasks := []task.Task{tsk} if recurring { - series, err := task.RecurringSeries(recurringRootUUID(tsk)) + ctx, cancel := taskExportContext() + series, err := task.RecurringSeries(ctx, recurringRootUUID(tsk)) + cancel() if err != nil { return 0, true, fmt.Errorf("loading recurring series: %w", err) } diff --git a/internal/ui/table.go b/internal/ui/table.go index 14b5c52..9aeeda1 100644 --- a/internal/ui/table.go +++ b/internal/ui/table.go @@ -1,6 +1,7 @@ package ui import ( + "context" "fmt" "os" "os/exec" @@ -24,6 +25,8 @@ import ( var priorityOptions = []string{"H", "M", "L", ""} +const taskExportTimeout = 30 * time.Second + var ( urlRegex = regexp.MustCompile(`https?://\S+`) searchRegexCache = make(map[string]*regexp.Regexp, 16) @@ -259,6 +262,10 @@ type reloadData struct { ultraFilterIDs []int } +func taskExportContext() (context.Context, context.CancelFunc) { + return context.WithTimeout(context.Background(), taskExportTimeout) +} + // blinkInterval controls how quickly the row flashes when a task changes. // A shorter interval results in a faster blink. const blinkInterval = 150 * time.Millisecond @@ -484,7 +491,10 @@ func (m *Model) fetchTasks() (reloadData, error) { // Always show only pending tasks by default. filters := append([]string(nil), m.filters...) filters = append(filters, "status:pending") - tasks, err := task.Export(filters...) + ctx, cancel := taskExportContext() + defer cancel() + + tasks, err := task.Export(ctx, filters...) if err != nil { return reloadData{}, err } -- cgit v1.2.3