about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorReto Brunner <reto@labrat.space>2020-02-15 14:14:47 +0100
committerDrew DeVault <sir@cmpwn.com>2020-02-16 10:41:19 -0500
commit78dd043057af9ccf82d1d7ea1f316f2d55b769c2 (patch)
treed745dd8e30d399a7fed1757d35cec4dfed0ea140
parent8d216ab10e6d43c44ca47ccd44fe7f3d40f1b1c3 (diff)
downloadaerc-78dd043057af9ccf82d1d7ea1f316f2d55b769c2.tar.gz
notmuch: refresh dirlist in background
-rw-r--r--worker/notmuch/eventhandlers.go15
-rw-r--r--worker/notmuch/events.go4
-rw-r--r--worker/notmuch/worker.go9
3 files changed, 27 insertions, 1 deletions
diff --git a/worker/notmuch/eventhandlers.go b/worker/notmuch/eventhandlers.go
index 39027b6..e279dbc 100644
--- a/worker/notmuch/eventhandlers.go
+++ b/worker/notmuch/eventhandlers.go
@@ -2,8 +2,21 @@ package notmuch
 
 func (w *worker) handleNotmuchEvent(et eventType) error {
 	switch ev := et.(type) {
+	case *updateDirCounts:
+		return w.handleUpdateDirCounts(ev)
 	default:
-		_ = ev
 		return errUnsupported
 	}
 }
+
+func (w *worker) handleUpdateDirCounts(ev eventType) error {
+	for name, query := range w.nameQueryMap {
+		info, err := w.gatherDirectoryInfo(name, query)
+		if err != nil {
+			w.w.Logger.Printf("could not gather DirectoryInfo: %v\n", err)
+			continue
+		}
+		w.w.PostMessage(info, nil)
+	}
+	return nil
+}
diff --git a/worker/notmuch/events.go b/worker/notmuch/events.go
index df35b21..896befa 100644
--- a/worker/notmuch/events.go
+++ b/worker/notmuch/events.go
@@ -3,3 +3,7 @@ package notmuch
 type eventType interface{}
 
 type event struct{}
+
+type updateDirCounts struct {
+	event
+}
diff --git a/worker/notmuch/worker.go b/worker/notmuch/worker.go
index 7480124..dfcfa77 100644
--- a/worker/notmuch/worker.go
+++ b/worker/notmuch/worker.go
@@ -9,6 +9,7 @@ import (
 	"os"
 	"path/filepath"
 	"strings"
+	"time"
 
 	"git.sr.ht/~sircmpwn/aerc/config"
 	"git.sr.ht/~sircmpwn/aerc/lib/uidstore"
@@ -26,6 +27,8 @@ func init() {
 
 var errUnsupported = fmt.Errorf("unsupported command")
 
+const backgroundRefreshDelay = 1 * time.Minute
+
 type worker struct {
 	w                   *types.Worker
 	nmEvents            chan eventType
@@ -168,6 +171,12 @@ func (w *worker) handleConnect(msg *types.Connect) error {
 	}
 	w.done(msg)
 	w.emitLabelList()
+	go func() {
+		for {
+			w.nmEvents <- &updateDirCounts{}
+			time.Sleep(backgroundRefreshDelay)
+		}
+	}()
 	return nil
 }