aboutsummaryrefslogtreecommitdiffstats
path: root/commands/msgview/next.go
diff options
context:
space:
mode:
Diffstat (limited to 'commands/msgview/next.go')
-rw-r--r--commands/msgview/next.go40
1 files changed, 26 insertions, 14 deletions
diff --git a/commands/msgview/next.go b/commands/msgview/next.go
index 6341f931..5df7847d 100644
--- a/commands/msgview/next.go
+++ b/commands/msgview/next.go
@@ -5,7 +5,9 @@ import (
"git.sr.ht/~rjarry/aerc/commands/account"
"git.sr.ht/~rjarry/aerc/lib"
+ "git.sr.ht/~rjarry/aerc/models"
"git.sr.ht/~rjarry/aerc/widgets"
+ "git.sr.ht/~rjarry/aerc/worker/types"
)
type NextPrevMsg struct{}
@@ -37,20 +39,30 @@ func (NextPrevMsg) Execute(aerc *widgets.Aerc, args []string) error {
if err != nil {
return err
}
- nextMsg := store.Selected()
- if nextMsg == nil {
- aerc.RemoveTab(mv)
- return nil
+ executeNextPrev := func(nextMsg *models.MessageInfo) {
+ lib.NewMessageStoreView(nextMsg, mv.MessageView().SeenFlagSet(),
+ 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)
+ })
}
- lib.NewMessageStoreView(nextMsg, mv.MessageView().SeenFlagSet(),
- 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)
- })
+ if nextMsg := store.Selected(); nextMsg != nil {
+ executeNextPrev(nextMsg)
+ } else {
+ store.FetchHeaders([]uint32{store.SelectedUid()},
+ func(msg types.WorkerMessage) {
+ if m, ok := msg.(*types.MessageInfo); ok {
+ executeNextPrev(m.Info)
+ }
+ })
+ }
+
return nil
}