summaryrefslogtreecommitdiff
path: root/internal/ui
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-06-22 09:21:06 +0300
committerPaul Buetow <paul@buetow.org>2026-06-22 09:21:06 +0300
commit1888b70cf4981cabaef0b6e33e0ae9982d3a788e (patch)
tree5cec4e67a05547b61ed03ffe7709902a80da3c35 /internal/ui
parent02f5f1419c4cb5fccc47a0ce4dbf3957e73b0e79 (diff)
fix task export timeout for lq0
Diffstat (limited to 'internal/ui')
-rw-r--r--internal/ui/handlers.go4
-rw-r--r--internal/ui/keyactions.go8
-rw-r--r--internal/ui/table.go12
3 files changed, 20 insertions, 4 deletions
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
}