alps/plugins/base/viewer.go
2020-02-12 15:41:00 +01:00

38 lines
1 KiB
Go

package koushinbase
import (
"fmt"
"git.sr.ht/~emersion/koushin"
"github.com/emersion/go-message"
)
// ErrViewUnsupported is returned by Viewer.ViewMessagePart when the message
// part isn't supported.
var ErrViewUnsupported = fmt.Errorf("cannot generate message view: unsupported part")
// Viewer is a message part viewer.
type Viewer interface {
// ViewMessagePart renders a message part. The returned value is displayed
// in a template. ErrViewUnsupported is returned if the message part isn't
// supported.
ViewMessagePart(*koushin.Context, *IMAPMessage, *message.Entity) (interface{}, error)
}
var viewers []Viewer
// RegisterViewer registers a message part viewer.
func RegisterViewer(viewer Viewer) {
viewers = append(viewers, viewer)
}
func viewMessagePart(ctx *koushin.Context, msg *IMAPMessage, part *message.Entity) (interface{}, error) {
for _, viewer := range viewers {
v, err := viewer.ViewMessagePart(ctx, msg, part)
if err == ErrViewUnsupported {
continue
}
return v, err
}
return nil, ErrViewUnsupported
}