aerc/commands/msgview/next.go
Koni Marti e4d418eed1 viewer: option to not mark message as seen
Add option to open a message in the message viewer without setting the
seen flag. Enables the message viewer to be used as a preview pane
without changing the message flags unintentionally. Before, the message
viewer would set the seen flag by default. The IMAP backend will now
always fetch the message body with the peek option enabled (same as we
fetch the headers).

An "auto-mark-read" option is added to the ui config which is set to
true by default. If set the false, the seen flag is not set by the
message viewer.

Co-authored-by: "James Cook" <falsifian@falsifian.org>
Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
2022-10-04 09:43:58 +02:00

56 lines
1.2 KiB
Go

package msgview
import (
"errors"
"git.sr.ht/~rjarry/aerc/commands/account"
"git.sr.ht/~rjarry/aerc/lib"
"git.sr.ht/~rjarry/aerc/widgets"
)
type NextPrevMsg struct{}
func init() {
register(NextPrevMsg{})
}
func (NextPrevMsg) Aliases() []string {
return []string{"next", "next-message", "prev", "prev-message"}
}
func (NextPrevMsg) Complete(aerc *widgets.Aerc, args []string) []string {
return nil
}
func (NextPrevMsg) Execute(aerc *widgets.Aerc, args []string) error {
n, pct, err := account.ParseNextPrevMessage(args)
if err != nil {
return err
}
mv, _ := aerc.SelectedTabContent().(*widgets.MessageViewer)
acct := mv.SelectedAccount()
if acct == nil {
return errors.New("No account selected")
}
store := mv.Store()
err = account.ExecuteNextPrevMessage(args, acct, pct, n)
if err != nil {
return err
}
nextMsg := store.Selected()
if nextMsg == nil {
aerc.RemoveTab(mv)
return nil
}
lib.NewMessageStoreView(nextMsg, acct.UiConfig().AutoMarkRead,
store, aerc.Crypto, aerc.DecryptKeys,
func(view lib.MessageView, err error) {
if err != nil {
aerc.PushError(err.Error())
return
}
nextMv := widgets.NewMessageViewer(acct, aerc.Config(), view)
aerc.ReplaceTab(mv, nextMv, nextMsg.Envelope.Subject)
})
return nil
}