aboutsummaryrefslogtreecommitdiff
path: root/worker/jmap/list.go
diff options
context:
space:
mode:
Diffstat (limited to 'worker/jmap/list.go')
-rw-r--r--worker/jmap/list.go53
1 files changed, 44 insertions, 9 deletions
diff --git a/worker/jmap/list.go b/worker/jmap/list.go
index cba3db91..cd11707d 100644
--- a/worker/jmap/list.go
+++ b/worker/jmap/list.go
@@ -11,6 +11,7 @@ import (
func (w *JMAPWorker) handleListDirectories(msg *types.ListDirectories) error {
var req jmap.Request
+ var ids []jmap.ID
w.w.Debugf("listing directories")
@@ -23,8 +24,17 @@ func (w *JMAPWorker) handleListDirectories(msg *types.ListDirectories) error {
for _, inv := range resp.Responses {
switch r := inv.Args.(type) {
case *mailbox.GetResponse:
+ ids = make([]jmap.ID, 0, len(r.List))
for _, mbox := range r.List {
w.mboxes[mbox.ID] = &MailboxState{mbox: mbox}
+ if mbox.Role == "archive" && w.config.useLabels {
+ w.mboxes[""] = &MailboxState{
+ dir: w.config.allMailName,
+ }
+ ids = append(ids, "")
+ } else {
+ ids = append(ids, mbox.ID)
+ }
}
w.mboxState = r.State
}
@@ -34,17 +44,42 @@ func (w *JMAPWorker) handleListDirectories(msg *types.ListDirectories) error {
}
for _, m := range w.mboxes {
+ if m.mbox == nil {
+ w.dir2mbox[m.dir] = ""
+ continue
+ }
m.dir = m.FullPath(w.mboxes)
w.dir2mbox[m.dir] = m.mbox.ID
- w.w.PostMessage(&types.Directory{
- Message: types.RespondTo(msg),
- Dir: &models.Directory{
- Name: m.dir,
- Exists: int(m.mbox.TotalEmails),
- Unseen: int(m.mbox.UnreadEmails),
- Role: jmapRole2aerc[m.mbox.Role],
- },
- }, nil)
+ }
+
+ for _, id := range ids {
+ m := w.mboxes[id]
+ if m.mbox == nil {
+ w.w.PostMessage(&types.Directory{
+ Message: types.RespondTo(msg),
+ Dir: &models.Directory{
+ Name: m.dir,
+ Role: models.AllRole,
+ },
+ }, nil)
+ } else {
+ role := jmapRole2aerc[m.mbox.Role]
+ switch role {
+ case models.ArchiveRole:
+ w.archiveMbox = m.mbox.ID
+ case models.TrashRole:
+ w.trashMbox = m.mbox.ID
+ }
+ w.w.PostMessage(&types.Directory{
+ Message: types.RespondTo(msg),
+ Dir: &models.Directory{
+ Name: m.dir,
+ Exists: int(m.mbox.TotalEmails),
+ Unseen: int(m.mbox.UnreadEmails),
+ Role: role,
+ },
+ }, nil)
+ }
}
go w.monitorChanges()