diff options
author | Koni Marti <koni.marti@gmail.com> | 2022-09-29 00:24:56 +0200 |
---|---|---|
committer | Robin Jarry <robin@jarry.cc> | 2022-09-29 16:52:12 +0200 |
commit | 0e50f29bf3e2cde36b2c345addbc51527b17e14b (patch) | |
tree | 98d470a98d887e7e2513a8f1d05541698c7cf35d /worker/notmuch | |
parent | 684ceed2cdc66b34f8dcae97c641778c7117bb66 (diff) | |
download | aerc-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.go | 14 |
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 } |