diff options
Diffstat (limited to 'commands')
-rw-r--r-- | commands/msg/utils.go | 17 | ||||
-rw-r--r-- | commands/util.go | 17 |
2 files changed, 25 insertions, 9 deletions
diff --git a/commands/msg/utils.go b/commands/msg/utils.go index ae25535..cad0f82 100644 --- a/commands/msg/utils.go +++ b/commands/msg/utils.go @@ -18,12 +18,7 @@ func newHelper(aerc *widgets.Aerc) *helper { } func (h *helper) markedOrSelectedUids() ([]uint32, error) { - msgs, err := commands.MarkedOrSelected(h.msgProvider) - if err != nil { - return nil, err - } - uids := commands.UidsFromMessageInfos(msgs) - return uids, nil + return commands.MarkedOrSelected(h.msgProvider) } func (h *helper) store() (*lib.MessageStore, error) { @@ -43,5 +38,13 @@ func (h *helper) account() (*widgets.AccountView, error) { } func (h *helper) messages() ([]*models.MessageInfo, error) { - return commands.MarkedOrSelected(h.msgProvider) + uid, err := commands.MarkedOrSelected(h.msgProvider) + if err != nil { + return nil, err + } + store, err := h.store() + if err != nil { + return nil, err + } + return commands.MsgInfoFromUids(store, uid) } diff --git a/commands/util.go b/commands/util.go index 5529edb..e3395fd 100644 --- a/commands/util.go +++ b/commands/util.go @@ -10,6 +10,7 @@ import ( "strings" "time" + "git.sr.ht/~sircmpwn/aerc/lib" "git.sr.ht/~sircmpwn/aerc/models" "git.sr.ht/~sircmpwn/aerc/widgets" "github.com/gdamore/tcell" @@ -152,7 +153,7 @@ func listDir(path string, hidden bool) []string { // MarkedOrSelected returns either all marked messages if any are marked or the // selected message instead -func MarkedOrSelected(pm widgets.ProvidesMessages) ([]*models.MessageInfo, error) { +func MarkedOrSelected(pm widgets.ProvidesMessages) ([]uint32, error) { // marked has priority over the selected message marked, err := pm.MarkedMessages() if err != nil { @@ -165,7 +166,7 @@ func MarkedOrSelected(pm widgets.ProvidesMessages) ([]*models.MessageInfo, error if err != nil { return nil, err } - return []*models.MessageInfo{msg}, nil + return []uint32{msg.Uid}, nil } // UidsFromMessageInfos extracts a uid slice from a slice of MessageInfos @@ -178,3 +179,15 @@ func UidsFromMessageInfos(msgs []*models.MessageInfo) []uint32 { } return uids } + +func MsgInfoFromUids(store *lib.MessageStore, uids []uint32) ([]*models.MessageInfo, error) { + infos := make([]*models.MessageInfo, len(uids)) + for i, uid := range uids { + var ok bool + infos[i], ok = store.Messages[uid] + if !ok { + return nil, fmt.Errorf("uid not found") + } + } + return infos, nil +} |