aboutsummaryrefslogtreecommitdiffstats
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.tar.gz
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 d9dcfd33..57af3af5 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 7debd883..3ed646df 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 cf2970eb..08628383 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 51e82984..35e68409 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