From 8d216ab10e6d43c44ca47ccd44fe7f3d40f1b1c3 Mon Sep 17 00:00:00 2001 From: Reto Brunner Date: Sat, 15 Feb 2020 14:14:46 +0100 Subject: notmuch: add internal event loop --- worker/notmuch/worker.go | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) (limited to 'worker/notmuch/worker.go') diff --git a/worker/notmuch/worker.go b/worker/notmuch/worker.go index 43d60e2..7480124 100644 --- a/worker/notmuch/worker.go +++ b/worker/notmuch/worker.go @@ -28,6 +28,7 @@ var errUnsupported = fmt.Errorf("unsupported command") type worker struct { w *types.Worker + nmEvents chan eventType query string uidStore *uidstore.Store nameQueryMap map[string]string @@ -38,23 +39,34 @@ type worker struct { // NewWorker creates a new maildir worker with the provided worker. func NewWorker(w *types.Worker) (types.Backend, error) { - return &worker{w: w}, nil + events := make(chan eventType, 20) + return &worker{w: w, + nmEvents: events}, nil } // Run starts the worker's message handling loop. func (w *worker) Run() { for { - action := <-w.w.Actions - msg := w.w.ProcessAction(action) - if err := w.handleMessage(msg); err == errUnsupported { - w.w.PostMessage(&types.Unsupported{ - Message: types.RespondTo(msg), - }, nil) - } else if err != nil { - w.w.PostMessage(&types.Error{ - Message: types.RespondTo(msg), - Error: err, - }, nil) + select { + case action := <-w.w.Actions: + msg := w.w.ProcessAction(action) + if err := w.handleMessage(msg); err == errUnsupported { + w.w.PostMessage(&types.Unsupported{ + Message: types.RespondTo(msg), + }, nil) + w.w.Logger.Printf("ProcessAction(%T) unsupported: %v", msg, err) + } else if err != nil { + w.w.PostMessage(&types.Error{ + Message: types.RespondTo(msg), + Error: err, + }, nil) + w.w.Logger.Printf("ProcessAction(%T) failure: %v", msg, err) + } + case nmEvent := <-w.nmEvents: + err := w.handleNotmuchEvent(nmEvent) + if err != nil { + w.w.Logger.Printf("notmuch event failure: %v", err) + } } } } -- cgit v1.2.3