summaryrefslogtreecommitdiff
path: root/worker
diff options
context:
space:
mode:
authorTim Culverhouse <tim@timculverhouse.com>2022-07-05 14:48:37 -0500
committerRobin Jarry <robin@jarry.cc>2022-07-10 21:15:12 +0200
commitf0c76fad7299c2c43f5891becd4f0327e0e26df5 (patch)
tree360de71aa1cef4f2c84cc0014aa86dffffd34e4b /worker
parenta8879d79c67f2631388e244548f7499b367e93ce (diff)
downloadaerc-f0c76fad7299c2c43f5891becd4f0327e0e26df5.zip
threading: add backend capabilities to workers
This patch provides a method to report backend capabilities to the UI. The intial capabilities included in the report are Sort and Thread. Having these available to the UI enables the client to better handle server side threading. Signed-off-by: Koni Marti <koni.marti@gmail.com> Signed-off-by: Tim Culverhouse <tim@timculverhouse.com> Acked-by: Robin Jarry <robin@jarry.cc>
Diffstat (limited to 'worker')
-rw-r--r--worker/imap/checkmail.go1
-rw-r--r--worker/imap/worker.go14
-rw-r--r--worker/maildir/worker.go5
-rw-r--r--worker/notmuch/worker.go5
4 files changed, 25 insertions, 0 deletions
diff --git a/worker/imap/checkmail.go b/worker/imap/checkmail.go
index d9dcfd3..57af3af 100644
--- a/worker/imap/checkmail.go
+++ b/worker/imap/checkmail.go
@@ -31,6 +31,7 @@ func (w *IMAPWorker) handleCheckMailMessage(msg *types.CheckMail) {
Exists: int(status.Messages),
Recent: int(status.Recent),
Unseen: int(status.Unseen),
+ Caps: w.caps,
},
SkipSort: true,
}, nil)
diff --git a/worker/imap/worker.go b/worker/imap/worker.go
index 7debd88..3ed646d 100644
--- a/worker/imap/worker.go
+++ b/worker/imap/worker.go
@@ -66,6 +66,8 @@ type IMAPWorker struct {
idler *idler
observer *observer
cache *leveldb.DB
+
+ caps *models.Capabilities
}
func NewIMAPWorker(worker *types.Worker) (types.Backend, error) {
@@ -75,6 +77,7 @@ func NewIMAPWorker(worker *types.Worker) (types.Backend, error) {
selected: &imap.MailboxStatus{},
idler: newIdler(imapConfig{}, worker),
observer: newObserver(imapConfig{}, worker),
+ caps: &models.Capabilities{},
}, nil
}
@@ -83,6 +86,16 @@ func (w *IMAPWorker) newClient(c *client.Client) {
w.client = &imapClient{c, sortthread.NewThreadClient(c), sortthread.NewSortClient(c)}
w.idler.SetClient(w.client)
w.observer.SetClient(w.client)
+ sort, err := w.client.sort.SupportSort()
+ if err == nil && sort {
+ w.caps.Sort = true
+ w.worker.Logger.Println("Server Capability found: Sort")
+ }
+ thread, err := w.client.thread.SupportThread()
+ if err == nil && thread {
+ w.caps.Thread = true
+ w.worker.Logger.Println("Server Capability found: Thread")
+ }
}
func (w *IMAPWorker) handleMessage(msg types.WorkerMessage) error {
@@ -226,6 +239,7 @@ func (w *IMAPWorker) handleImapUpdate(update client.Update) {
Exists: int(status.Messages),
Recent: int(status.Recent),
Unseen: int(status.Unseen),
+ Caps: w.caps,
},
}, nil)
case *client.MessageUpdate:
diff --git a/worker/maildir/worker.go b/worker/maildir/worker.go
index cf2970e..0862838 100644
--- a/worker/maildir/worker.go
+++ b/worker/maildir/worker.go
@@ -186,6 +186,11 @@ func (w *Worker) getDirectoryInfo(name string) *models.DirectoryInfo {
Unseen: 0,
AccurateCounts: false,
+
+ Caps: &models.Capabilities{
+ Sort: true,
+ Thread: false,
+ },
}
dir := w.c.Dir(name)
diff --git a/worker/notmuch/worker.go b/worker/notmuch/worker.go
index 51e8298..35e6840 100644
--- a/worker/notmuch/worker.go
+++ b/worker/notmuch/worker.go
@@ -228,6 +228,11 @@ func (w *worker) gatherDirectoryInfo(name string, query string) (
// total unread
Unseen: count.Unread,
AccurateCounts: true,
+
+ Caps: &models.Capabilities{
+ Sort: true,
+ Thread: true,
+ },
},
}
return info, nil