summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--models/models.go9
-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
5 files changed, 34 insertions, 0 deletions
diff --git a/models/models.go b/models/models.go
index 96683f2..e7325d2 100644
--- a/models/models.go
+++ b/models/models.go
@@ -51,6 +51,15 @@ type DirectoryInfo struct {
// set to true if the value counts are accurate
AccurateCounts bool
+
+ // Caps contains the backend capabilities
+ Caps *Capabilities
+}
+
+// Capabilities provides the backend capabilities
+type Capabilities struct {
+ Sort bool
+ Thread bool
}
// A MessageInfo holds information about the structure of a message
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