A webmail client. Forked from https://git.sr.ht/~migadu/alps
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

39 lines
1.0 KiB

  1. package alpsbase
  2. import (
  3. "fmt"
  4. "git.sr.ht/~migadu/alps"
  5. "github.com/emersion/go-message"
  6. )
  7. // ErrViewUnsupported is returned by Viewer.ViewMessagePart when the message
  8. // part isn't supported.
  9. var ErrViewUnsupported = fmt.Errorf("cannot generate message view: unsupported part")
  10. // Viewer is a message part viewer.
  11. type Viewer interface {
  12. // ViewMessagePart renders a message part. The returned value is displayed
  13. // in a template. ErrViewUnsupported is returned if the message part isn't
  14. // supported.
  15. ViewMessagePart(*alps.Context, *IMAPMessage, *message.Entity) (interface{}, error)
  16. }
  17. var viewers []Viewer
  18. // RegisterViewer registers a message part viewer.
  19. func RegisterViewer(viewer Viewer) {
  20. viewers = append(viewers, viewer)
  21. }
  22. func viewMessagePart(ctx *alps.Context, msg *IMAPMessage, part *message.Entity) (interface{}, error) {
  23. for _, viewer := range viewers {
  24. v, err := viewer.ViewMessagePart(ctx, msg, part)
  25. if err == ErrViewUnsupported {
  26. continue
  27. }
  28. return v, err
  29. }
  30. return nil, ErrViewUnsupported
  31. }