aerc/commands/msg/move.go
Tim Culverhouse 0c85b5a6cf msglist: remove invalidate from commands which remove messages
Archive, delete, and move all remove messages from the message store.
The commands themselves invalidated the message list. The message list
was also invalidated for every MessagesDeleted message received. Remove
the call in the command logic to reduce redraws of the message list

Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
Acked-by: Robin Jarry <robin@jarry.cc>
2022-08-01 10:37:44 +02:00

75 lines
1.4 KiB
Go

package msg
import (
"errors"
"strings"
"time"
"git.sr.ht/~sircmpwn/getopt"
"git.sr.ht/~rjarry/aerc/commands"
"git.sr.ht/~rjarry/aerc/widgets"
"git.sr.ht/~rjarry/aerc/worker/types"
)
type Move struct{}
func init() {
register(Move{})
}
func (Move) Aliases() []string {
return []string{"mv", "move"}
}
func (Move) Complete(aerc *widgets.Aerc, args []string) []string {
return commands.GetFolders(aerc, args)
}
func (Move) Execute(aerc *widgets.Aerc, args []string) error {
if len(args) == 1 {
return errors.New("Usage: mv [-p] <folder>")
}
opts, optind, err := getopt.Getopts(args, "p")
if err != nil {
return err
}
var (
createParents bool
)
for _, opt := range opts {
switch opt.Option {
case 'p':
createParents = true
}
}
h := newHelper(aerc)
store, err := h.store()
if err != nil {
return err
}
uids, err := h.markedOrSelectedUids()
if err != nil {
return err
}
_, isMsgView := h.msgProvider.(*widgets.MessageViewer)
if isMsgView {
aerc.RemoveTab(h.msgProvider)
}
store.ClearVisualMark()
findNextNonDeleted(uids, store)
joinedArgs := strings.Join(args[optind:], " ")
store.Move(uids, joinedArgs, createParents, func(
msg types.WorkerMessage) {
switch msg := msg.(type) {
case *types.Done:
aerc.PushStatus("Message moved to "+joinedArgs, 10*time.Second)
case *types.Error:
store.Remark()
aerc.PushError(msg.Error.Error())
}
})
return nil
}