c574a838fa
Aerc usually used the path []int{1} if it didn't know what the proper path is. However this only works for multipart messages and breaks if it isn't one. This patch removes all the hard coding and extracts the necessary helpers to lib.
50 lines
1.1 KiB
Go
50 lines
1.1 KiB
Go
package msg
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"git.sr.ht/~sircmpwn/aerc/commands"
|
|
"git.sr.ht/~sircmpwn/aerc/lib"
|
|
"git.sr.ht/~sircmpwn/aerc/models"
|
|
"git.sr.ht/~sircmpwn/aerc/widgets"
|
|
)
|
|
|
|
type helper struct {
|
|
msgProvider widgets.ProvidesMessages
|
|
}
|
|
|
|
func newHelper(aerc *widgets.Aerc) *helper {
|
|
return &helper{aerc.SelectedTab().(widgets.ProvidesMessages)}
|
|
}
|
|
|
|
func (h *helper) markedOrSelectedUids() ([]uint32, error) {
|
|
return commands.MarkedOrSelected(h.msgProvider)
|
|
}
|
|
|
|
func (h *helper) store() (*lib.MessageStore, error) {
|
|
store := h.msgProvider.Store()
|
|
if store == nil {
|
|
return nil, errors.New("Cannot perform action. Messages still loading")
|
|
}
|
|
return store, nil
|
|
}
|
|
|
|
func (h *helper) account() (*widgets.AccountView, error) {
|
|
acct := h.msgProvider.SelectedAccount()
|
|
if acct == nil {
|
|
return nil, errors.New("No account selected")
|
|
}
|
|
return acct, nil
|
|
}
|
|
|
|
func (h *helper) messages() ([]*models.MessageInfo, error) {
|
|
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)
|
|
}
|