aboutsummaryrefslogtreecommitdiffstats
path: root/worker/notmuch
diff options
context:
space:
mode:
authorKoni Marti <koni.marti@gmail.com>2022-09-29 00:24:56 +0200
committerRobin Jarry <robin@jarry.cc>2022-09-29 16:52:12 +0200
commit0e50f29bf3e2cde36b2c345addbc51527b17e14b (patch)
tree98d470a98d887e7e2513a8f1d05541698c7cf35d /worker/notmuch
parent684ceed2cdc66b34f8dcae97c641778c7117bb66 (diff)
downloadaerc-0e50f29bf3e2cde36b2c345addbc51527b17e14b.tar.gz
notmuch: move logic for dynamic folders to backend
Moves logic for creating dynamic folders from the dirlist widget to the backend. Since dynamic folders are notmuch-specific, the notmuch backend should be responsible for correctly setting up those folders. It does that by sending two DirectoryInfos: the first to create the message store, the second to fetch the directory content. This approach also fixes a deadlock introduced by 716ade8968715 ("worker: lock access to callback maps"). Reported-by: Bence Ferdinandy <bence@ferdinandy.com> Signed-off-by: Koni Marti <koni.marti@gmail.com> Tested-by: Tim Culverhouse <tim@timculverhouse.com>
Diffstat (limited to 'worker/notmuch')
-rw-r--r--worker/notmuch/worker.go14
1 files changed, 9 insertions, 5 deletions
diff --git a/worker/notmuch/worker.go b/worker/notmuch/worker.go
index 2c8cc4f2..1ceaac8d 100644
--- a/worker/notmuch/worker.go
+++ b/worker/notmuch/worker.go
@@ -249,7 +249,7 @@ func (w *worker) buildDirInfo(name string, query string, skipSort bool) (
}
func (w *worker) emitDirectoryInfo(name string) error {
- query := w.queryFromName(name)
+ query, _ := w.queryFromName(name)
info, err := w.gatherDirectoryInfo(name, query)
if err != nil {
return err
@@ -260,19 +260,20 @@ func (w *worker) emitDirectoryInfo(name string) error {
// queryFromName either returns the friendly ID if aliased or the name itself
// assuming it to be the query
-func (w *worker) queryFromName(name string) string {
+func (w *worker) queryFromName(name string) (string, bool) {
// try the friendly name first, if that fails assume it's a query
q, ok := w.nameQueryMap[name]
if !ok {
- return name
+ return name, true
}
- return q
+ return q, false
}
func (w *worker) handleOpenDirectory(msg *types.OpenDirectory) error {
logging.Infof("opening %s", msg.Directory)
// try the friendly name first, if that fails assume it's a query
- w.query = w.queryFromName(msg.Directory)
+ var isQuery bool
+ w.query, isQuery = w.queryFromName(msg.Directory)
w.currentQueryName = msg.Directory
info, err := w.gatherDirectoryInfo(msg.Directory, w.query)
if err != nil {
@@ -280,6 +281,9 @@ func (w *worker) handleOpenDirectory(msg *types.OpenDirectory) error {
}
info.Message = types.RespondTo(msg)
w.w.PostMessage(info, nil)
+ if isQuery {
+ w.w.PostMessage(info, nil)
+ }
w.done(msg)
return nil
}