From f0c76fad7299c2c43f5891becd4f0327e0e26df5 Mon Sep 17 00:00:00 2001 From: Tim Culverhouse Date: Tue, 5 Jul 2022 14:48:37 -0500 Subject: 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 Signed-off-by: Tim Culverhouse Acked-by: Robin Jarry --- worker/imap/worker.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'worker/imap/worker.go') 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: -- cgit v1.2.3