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:
parent
ee961d3b1d
commit
cfc19a7ec2
14 changed files with 373 additions and 177 deletions
|
@ -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()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
}
|
||||
})
|
||||
|
|
|
@ -218,7 +218,7 @@ func (Pipe) Execute(aerc *widgets.Aerc, args []string) error {
|
|||
}
|
||||
})
|
||||
}
|
||||
provider.Store().ClearVisualMark()
|
||||
provider.Store().Marker().ClearVisualMark()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
}
|
||||
}()
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue