Selaa lähdekoodia

plugins/base: wrap MailboxInfo and MailboxStatus

This allows us to extend these and expose helpers for templates and
plugins.
master
Simon Ser 4 vuotta sitten
vanhempi
commit
5af6c6adc1
No known key found for this signature in database GPG Key ID: FDE7BE0E88F5E48
2 muutettua tiedostoa jossa 35 lisäystä ja 15 poistoa
  1. +25
    -5
      plugins/base/imap.go
  2. +10
    -10
      plugins/base/routes.go

+ 25
- 5
plugins/base/imap.go Näytä tiedosto

@@ -17,16 +17,36 @@ import (
"github.com/emersion/go-message/textproto"
)

func listMailboxes(conn *imapclient.Client) ([]*imap.MailboxInfo, error) {
type MailboxInfo struct {
*imap.MailboxInfo
}

func (mbox *MailboxInfo) URL() *url.URL {
return &url.URL{
Path: fmt.Sprintf("/mailbox/%v", url.PathEscape(mbox.Name)),
}
}

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) {
ch := make(chan *imap.MailboxInfo, 10)
done := make(chan error, 1)
go func() {
done <- conn.List("", "*", ch)
}()

var mailboxes []*imap.MailboxInfo
var mailboxes []MailboxInfo
for mbox := range ch {
mailboxes = append(mailboxes, mbox)
mailboxes = append(mailboxes, MailboxInfo{mbox})
}

if err := <-done; err != nil {
@@ -46,7 +66,7 @@ const (
mailboxDrafts
)

func getMailboxByType(conn *imapclient.Client, mboxType mailboxType) (*imap.MailboxInfo, error) {
func getMailboxByType(conn *imapclient.Client, mboxType mailboxType) (*MailboxInfo, error) {
ch := make(chan *imap.MailboxInfo, 10)
done := make(chan error, 1)
go func() {
@@ -91,7 +111,7 @@ func getMailboxByType(conn *imapclient.Client, mboxType mailboxType) (*imap.Mail
return nil, fmt.Errorf("failed to get mailbox with attribute %q: %v", attr, err)
}

return best, nil
return &MailboxInfo{best}, nil
}

func ensureMailboxSelected(conn *imapclient.Client, mboxName string) error {


+ 10
- 10
plugins/base/routes.go Näytä tiedosto

@@ -65,8 +65,8 @@ func registerRoutes(p *koushin.GoPlugin) {

type MailboxRenderData struct {
koushin.BaseRenderData
Mailbox *imap.MailboxStatus
Mailboxes []*imap.MailboxInfo
Mailbox *MailboxStatus
Mailboxes []MailboxInfo
Messages []IMAPMessage
PrevPage, NextPage int
Query string
@@ -94,9 +94,9 @@ func handleGetMailbox(ctx *koushin.Context) error {

query := ctx.QueryParam("query")

var mailboxes []*imap.MailboxInfo
var mailboxes []MailboxInfo
var msgs []IMAPMessage
var mbox *imap.MailboxStatus
var mbox *MailboxStatus
var total int
err = ctx.Session.DoIMAP(func(c *imapclient.Client) error {
var err error
@@ -111,7 +111,7 @@ func handleGetMailbox(ctx *koushin.Context) error {
if err != nil {
return err
}
mbox = c.Mailbox()
mbox = &MailboxStatus{c.Mailbox()}
return nil
})
if err != nil {
@@ -176,8 +176,8 @@ func handleLogout(ctx *koushin.Context) error {

type MessageRenderData struct {
koushin.BaseRenderData
Mailboxes []*imap.MailboxInfo
Mailbox *imap.MailboxStatus
Mailboxes []MailboxInfo
Mailbox *MailboxStatus
Message *IMAPMessage
Part *IMAPPartNode
View interface{}
@@ -201,10 +201,10 @@ func handleGetPart(ctx *koushin.Context, raw bool) error {
}
messagesPerPage := settings.MessagesPerPage

var mailboxes []*imap.MailboxInfo
var mailboxes []MailboxInfo
var msg *IMAPMessage
var part *message.Entity
var mbox *imap.MailboxStatus
var mbox *MailboxStatus
err = ctx.Session.DoIMAP(func(c *imapclient.Client) error {
var err error
if mailboxes, err = listMailboxes(c); err != nil {
@@ -213,7 +213,7 @@ func handleGetPart(ctx *koushin.Context, raw bool) error {
if msg, part, err = getMessagePart(c, mboxName, uid, partPath); err != nil {
return err
}
mbox = c.Mailbox()
mbox = &MailboxStatus{c.Mailbox()}
return nil
})
if err != nil {


Ladataan…
Peruuta
Tallenna