store: extract marking behavior and add tests

Separate the marking functions from the message store and extract the
marking behavior into its own class with tests.

Signed-off-by: Koni Marti <koni.marti@gmail.com>
Acked-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
Koni Marti 2022-08-08 22:21:41 +02:00 committed by Robin Jarry
parent ee961d3b1d
commit cfc19a7ec2
14 changed files with 373 additions and 177 deletions

View file

@ -57,7 +57,8 @@ func (Archive) Execute(aerc *widgets.Aerc, args []string) error {
for _, msg := range msgs {
uids = append(uids, msg.Uid)
}
store.ClearVisualMark()
marker := store.Marker()
marker.ClearVisualMark()
findNextNonDeleted(uids, store)
var uidMap map[string][]uint32
@ -95,7 +96,7 @@ func (Archive) Execute(aerc *widgets.Aerc, args []string) error {
aerc.PushError(msg.Error.Error())
success = false
wg.Done()
store.Remark()
marker.Remark()
}
})
}

View file

@ -56,7 +56,7 @@ func (Copy) Execute(aerc *widgets.Aerc, args []string) error {
switch msg := msg.(type) {
case *types.Done:
aerc.PushStatus("Messages copied.", 10*time.Second)
store.ClearVisualMark()
store.Marker().ClearVisualMark()
case *types.Error:
aerc.PushError(msg.Error.Error())
}

View file

@ -43,9 +43,10 @@ func (Delete) Execute(aerc *widgets.Aerc, args []string) error {
return err
}
sel := store.Selected()
marker := store.Marker()
marker.ClearVisualMark()
// caution, can be nil
next := findNextNonDeleted(uids, store)
store.ClearVisualMark()
store.Delete(uids, func(msg types.WorkerMessage) {
switch msg := msg.(type) {
case *types.Done:
@ -80,11 +81,11 @@ func (Delete) Execute(aerc *widgets.Aerc, args []string) error {
}
}
case *types.Error:
store.Remark()
marker.Remark()
store.Select(sel.Uid)
aerc.PushError(msg.Error.Error())
case *types.Unsupported:
store.Remark()
marker.Remark()
store.Select(sel.Uid)
// notmuch doesn't support it, we want the user to know
aerc.PushError(" error, unsupported for this worker")

View file

@ -31,6 +31,7 @@ func (Mark) Execute(aerc *widgets.Aerc, args []string) error {
if err != nil {
return err
}
marker := store.Marker()
opts, _, err := getopt.Getopts(args, "atv")
if err != nil {
return err
@ -57,9 +58,9 @@ func (Mark) Execute(aerc *widgets.Aerc, args []string) error {
var modFunc func(uint32)
if toggle {
modFunc = store.ToggleMark
modFunc = marker.ToggleMark
} else {
modFunc = store.Mark
modFunc = marker.Mark
}
switch {
case all:
@ -69,7 +70,7 @@ func (Mark) Execute(aerc *widgets.Aerc, args []string) error {
}
return nil
case visual:
store.ToggleVisualMark()
marker.ToggleVisualMark()
return nil
default:
modFunc(selected.Uid)
@ -85,21 +86,21 @@ func (Mark) Execute(aerc *widgets.Aerc, args []string) error {
case all && toggle:
uids := store.Uids()
for _, uid := range uids {
store.ToggleMark(uid)
marker.ToggleMark(uid)
}
return nil
case all && !toggle:
store.ClearVisualMark()
marker.ClearVisualMark()
return nil
default:
store.Unmark(selected.Uid)
marker.Unmark(selected.Uid)
return nil
}
case "remark":
if all || visual || toggle {
return fmt.Errorf("Usage: :remark")
}
store.Remark()
marker.Remark()
return nil
}
return nil // never reached

View file

@ -57,7 +57,7 @@ func (ModifyLabels) Execute(aerc *widgets.Aerc, args []string) error {
switch msg := msg.(type) {
case *types.Done:
aerc.PushStatus("labels updated", 10*time.Second)
store.ClearVisualMark()
store.Marker().ClearVisualMark()
case *types.Error:
aerc.PushError(msg.Error.Error())
}

View file

@ -54,7 +54,8 @@ func (Move) Execute(aerc *widgets.Aerc, args []string) error {
if isMsgView {
aerc.RemoveTab(h.msgProvider)
}
store.ClearVisualMark()
marker := store.Marker()
marker.ClearVisualMark()
findNextNonDeleted(uids, store)
joinedArgs := strings.Join(args[optind:], " ")
store.Move(uids, joinedArgs, createParents, func(
@ -64,7 +65,7 @@ func (Move) Execute(aerc *widgets.Aerc, args []string) error {
case *types.Done:
aerc.PushStatus("Message moved to "+joinedArgs, 10*time.Second)
case *types.Error:
store.Remark()
marker.Remark()
aerc.PushError(msg.Error.Error())
}
})

View file

@ -218,7 +218,7 @@ func (Pipe) Execute(aerc *widgets.Aerc, args []string) error {
}
})
}
provider.Store().ClearVisualMark()
provider.Store().Marker().ClearVisualMark()
return nil
}

View file

@ -175,7 +175,7 @@ func (FlagMsg) Execute(aerc *widgets.Aerc, args []string) error {
wg.Wait()
if success {
aerc.PushStatus(actionName+" flag '"+flagName+"' successful", 10*time.Second)
store.ClearVisualMark()
store.Marker().ClearVisualMark()
}
}()