msgviewer: Add Labels as a virtual header

In order to accommodate for that, the headerlayout needed to be rewritten
to pass the filter criteria back to the msgviewer, instead of just using
the normal headers.
This commit is contained in:
Reto Brunner 2019-12-23 12:51:59 +01:00 committed by Drew DeVault
parent 63391b7dca
commit b360cca977
2 changed files with 26 additions and 6 deletions

View file

@ -52,7 +52,16 @@ type PartSwitcher struct {
func NewMessageViewer(acct *AccountView, conf *config.AercConfig,
store *lib.MessageStore, msg *models.MessageInfo) *MessageViewer {
layout := HeaderLayout(conf.Viewer.HeaderLayout).forMessage(msg)
hf := HeaderLayoutFilter{
layout: HeaderLayout(conf.Viewer.HeaderLayout),
keep: func(msg *models.MessageInfo, header string) bool {
if fmtHeader(msg, header, "2") != "" {
return true
}
return false
},
}
layout := hf.forMessage(msg)
header, headerHeight := layout.grid(
func(header string) ui.Drawable {
return &HeaderView{
@ -109,6 +118,8 @@ func fmtHeader(msg *models.MessageInfo, header string, timefmt string) string {
return msg.Envelope.Date.Local().Format(timefmt)
case "Subject":
return msg.Envelope.Subject
case "Labels":
return strings.Join(msg.Labels, ", ")
default:
return msg.RFC822Headers.Get(header)
}
@ -580,6 +591,11 @@ func (pv *PartViewer) attemptCopy() {
"%s: %s\n", fields.Key(), fields.Value())
pv.sink.Write([]byte(field))
}
// virtual header
if len(pv.msg.Labels) != 0 {
labels := fmtHeader(pv.msg, "Labels", "")
pv.sink.Write([]byte(fmt.Sprintf("Labels: %s\n", labels)))
}
pv.sink.Write([]byte{'\n'})
}