package jmap import ( "errors" "git.sr.ht/~rjarry/aerc/models" "git.sr.ht/~rjarry/aerc/worker/types" "git.sr.ht/~rockorager/go-jmap" "git.sr.ht/~rockorager/go-jmap/mail/mailbox" ) func (w *JMAPWorker) handleListDirectories(msg *types.ListDirectories) error { var req jmap.Request w.w.Debugf("listing directories") req.Invoke(&mailbox.Get{Account: w.accountId()}) resp, err := w.client.Do(&req) if err != nil { return err } for _, inv := range resp.Responses { switch r := inv.Args.(type) { case *mailbox.GetResponse: for _, mbox := range r.List { w.mboxes[mbox.ID] = &MailboxState{mbox: mbox} } w.mboxState = r.State } } if w.mboxes == nil || len(w.mboxes) == 0 { return errors.New("no mailboxes") } for _, m := range w.mboxes { 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) } go w.monitorChanges() return nil }