plugins/base: fix mailbox unread count
This commit is contained in:
parent
37be46c047
commit
3036cc4436
2 changed files with 29 additions and 12 deletions
|
@ -27,16 +27,6 @@ func (mbox *MailboxInfo) URL() *url.URL {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type MailboxStatus struct {
|
|
||||||
*imap.MailboxStatus
|
|
||||||
}
|
|
||||||
|
|
||||||
func (mbox *MailboxStatus) URL() *url.URL {
|
|
||||||
return &url.URL{
|
|
||||||
Path: fmt.Sprintf("/mailbox/%v", url.PathEscape(mbox.Name)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func listMailboxes(conn *imapclient.Client) ([]MailboxInfo, error) {
|
func listMailboxes(conn *imapclient.Client) ([]MailboxInfo, error) {
|
||||||
ch := make(chan *imap.MailboxInfo, 10)
|
ch := make(chan *imap.MailboxInfo, 10)
|
||||||
done := make(chan error, 1)
|
done := make(chan error, 1)
|
||||||
|
@ -65,6 +55,29 @@ func listMailboxes(conn *imapclient.Client) ([]MailboxInfo, error) {
|
||||||
return mailboxes, nil
|
return mailboxes, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type MailboxStatus struct {
|
||||||
|
*imap.MailboxStatus
|
||||||
|
}
|
||||||
|
|
||||||
|
func (mbox *MailboxStatus) URL() *url.URL {
|
||||||
|
return &url.URL{
|
||||||
|
Path: fmt.Sprintf("/mailbox/%v", url.PathEscape(mbox.Name)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func getMailboxStatus(conn *imapclient.Client, name string) (*MailboxStatus, error) {
|
||||||
|
items := []imap.StatusItem{
|
||||||
|
imap.StatusMessages,
|
||||||
|
imap.StatusUidValidity,
|
||||||
|
imap.StatusUnseen,
|
||||||
|
}
|
||||||
|
status, err := conn.Status(name, items)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to get mailbox status: %v", err)
|
||||||
|
}
|
||||||
|
return &MailboxStatus{status}, nil
|
||||||
|
}
|
||||||
|
|
||||||
type mailboxType int
|
type mailboxType int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -111,7 +111,9 @@ func handleGetMailbox(ctx *alps.Context) error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
mbox = &MailboxStatus{c.Mailbox()}
|
if mbox, err = getMailboxStatus(c, mboxName); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -213,7 +215,9 @@ func handleGetPart(ctx *alps.Context, raw bool) error {
|
||||||
if msg, part, err = getMessagePart(c, mboxName, uid, partPath); err != nil {
|
if msg, part, err = getMessagePart(c, mboxName, uid, partPath); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
mbox = &MailboxStatus{c.Mailbox()}
|
if mbox, err = getMailboxStatus(c, mboxName); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in a new issue