aboutsummaryrefslogtreecommitdiffstats
path: root/lib/marker
diff options
context:
space:
mode:
Diffstat (limited to 'lib/marker')
-rw-r--r--lib/marker/marker.go48
-rw-r--r--lib/marker/marker_test.go27
2 files changed, 39 insertions, 36 deletions
diff --git a/lib/marker/marker.go b/lib/marker/marker.go
index a0860be9..55f70f42 100644
--- a/lib/marker/marker.go
+++ b/lib/marker/marker.go
@@ -1,13 +1,15 @@
package marker
+import "git.sr.ht/~rjarry/aerc/models"
+
// Marker provides the interface for the marking behavior of messages
type Marker interface {
- Mark(uint32)
- Unmark(uint32)
- ToggleMark(uint32)
+ Mark(models.UID)
+ Unmark(models.UID)
+ ToggleMark(models.UID)
Remark()
- Marked() []uint32
- IsMarked(uint32) bool
+ Marked() []models.UID
+ IsMarked(models.UID) bool
IsVisualMark() bool
ToggleVisualMark(bool)
UpdateVisualMark()
@@ -16,30 +18,30 @@ type Marker interface {
// UIDProvider provides the underlying uids and the selected message index
type UIDProvider interface {
- Uids() []uint32
+ Uids() []models.UID
SelectedIndex() int
}
type controller struct {
uidProvider UIDProvider
- marked map[uint32]struct{}
- lastMarked map[uint32]struct{}
- visualStartUID uint32
+ marked map[models.UID]struct{}
+ lastMarked map[models.UID]struct{}
+ visualStartUID models.UID
visualMarkMode bool
- visualBase map[uint32]struct{}
+ visualBase map[models.UID]struct{}
}
// New returns a new Marker
func New(up UIDProvider) Marker {
return &controller{
uidProvider: up,
- marked: make(map[uint32]struct{}),
- lastMarked: make(map[uint32]struct{}),
+ marked: make(map[models.UID]struct{}),
+ lastMarked: make(map[models.UID]struct{}),
}
}
// Mark markes the uid as marked
-func (mc *controller) Mark(uid uint32) {
+func (mc *controller) Mark(uid models.UID) {
if mc.visualMarkMode {
// visual mode has override, bogus input from user
return
@@ -48,7 +50,7 @@ func (mc *controller) Mark(uid uint32) {
}
// Unmark unmarks the uid
-func (mc *controller) Unmark(uid uint32) {
+func (mc *controller) Unmark(uid models.UID) {
if mc.visualMarkMode {
// user probably wanted to clear the visual marking
mc.ClearVisualMark()
@@ -63,7 +65,7 @@ func (mc *controller) Remark() {
}
// ToggleMark toggles the marked state for the given uid
-func (mc *controller) ToggleMark(uid uint32) {
+func (mc *controller) ToggleMark(uid models.UID) {
if mc.visualMarkMode {
// visual mode has override, bogus input from user
return
@@ -78,7 +80,7 @@ func (mc *controller) ToggleMark(uid uint32) {
// resetMark removes the marking from all messages
func (mc *controller) resetMark() {
mc.lastMarked = mc.marked
- mc.marked = make(map[uint32]struct{})
+ mc.marked = make(map[models.UID]struct{})
}
// removeStaleUID removes uids that are no longer presents in the UIDProvider
@@ -98,15 +100,15 @@ func (mc *controller) removeStaleUID() {
}
// IsMarked checks whether the given uid has been marked
-func (mc *controller) IsMarked(uid uint32) bool {
+func (mc *controller) IsMarked(uid models.UID) bool {
_, marked := mc.marked[uid]
return marked
}
// Marked returns the uids of all marked messages
-func (mc *controller) Marked() []uint32 {
+func (mc *controller) Marked() []models.UID {
mc.removeStaleUID()
- marked := make([]uint32, len(mc.marked))
+ marked := make([]models.UID, len(mc.marked))
i := 0
for uid := range mc.marked {
marked[i] = uid
@@ -132,7 +134,7 @@ func (mc *controller) ToggleVisualMark(clear bool) {
if idx := mc.uidProvider.SelectedIndex(); idx >= 0 && idx < len(uids) {
mc.visualStartUID = uids[idx]
mc.marked[mc.visualStartUID] = struct{}{}
- mc.visualBase = make(map[uint32]struct{})
+ mc.visualBase = make(map[models.UID]struct{})
for key, value := range mc.marked {
mc.visualBase[key] = value
}
@@ -144,7 +146,7 @@ func (mc *controller) ToggleVisualMark(clear bool) {
func (mc *controller) ClearVisualMark() {
mc.resetMark()
mc.visualMarkMode = false
- mc.visualStartUID = 0
+ mc.visualStartUID = ""
}
// UpdateVisualMark updates the index with the currently selected message
@@ -167,13 +169,13 @@ func (mc *controller) UpdateVisualMark() {
uids := mc.uidProvider.Uids()
- var visUids []uint32
+ var visUids []models.UID
if selectedIdx > startIdx {
visUids = uids[startIdx : selectedIdx+1]
} else {
visUids = uids[selectedIdx : startIdx+1]
}
- mc.marked = make(map[uint32]struct{})
+ mc.marked = make(map[models.UID]struct{})
for uid := range mc.visualBase {
mc.marked[uid] = struct{}{}
}
diff --git a/lib/marker/marker_test.go b/lib/marker/marker_test.go
index df9eb2a3..04d3fedc 100644
--- a/lib/marker/marker_test.go
+++ b/lib/marker/marker_test.go
@@ -4,16 +4,17 @@ import (
"testing"
"git.sr.ht/~rjarry/aerc/lib/marker"
+ "git.sr.ht/~rjarry/aerc/models"
)
// mockUidProvider implements the UidProvider interface and mocks the message
// store for testing
type mockUidProvider struct {
- uids []uint32
+ uids []models.UID
idx int
}
-func (mock *mockUidProvider) Uids() []uint32 {
+func (mock *mockUidProvider) Uids() []models.UID {
return mock.uids
}
@@ -23,7 +24,7 @@ func (mock *mockUidProvider) SelectedIndex() int {
func createMarker() (marker.Marker, *mockUidProvider) {
uidProvider := &mockUidProvider{
- uids: []uint32{1, 2, 3, 4},
+ uids: []models.UID{"1", "2", "3", "4"},
idx: 1,
}
m := marker.New(uidProvider)
@@ -32,7 +33,7 @@ func createMarker() (marker.Marker, *mockUidProvider) {
func TestMarker_MarkUnmark(t *testing.T) {
m, _ := createMarker()
- uid := uint32(4)
+ uid := models.UID("4")
m.Mark(uid)
if !m.IsMarked(uid) {
@@ -47,7 +48,7 @@ func TestMarker_MarkUnmark(t *testing.T) {
func TestMarker_ToggleMark(t *testing.T) {
m, _ := createMarker()
- uid := uint32(4)
+ uid := models.UID("4")
if m.IsMarked(uid) {
t.Errorf("ToggleMark: uid should not be marked")
@@ -66,9 +67,9 @@ func TestMarker_ToggleMark(t *testing.T) {
func TestMarker_Marked(t *testing.T) {
m, _ := createMarker()
- expected := map[uint32]struct{}{
- uint32(1): {},
- uint32(4): {},
+ expected := map[models.UID]struct{}{
+ "1": {},
+ "4": {},
}
for uid := range expected {
m.Mark(uid)
@@ -81,7 +82,7 @@ func TestMarker_Marked(t *testing.T) {
for _, uid := range got {
if _, ok := expected[uid]; !ok {
- t.Errorf("Marked: received uid %d as marked but it should not be", uid)
+ t.Errorf("Marked: received uid %q as marked but it should not be", uid)
}
}
}
@@ -93,15 +94,15 @@ func TestMarker_VisualMode(t *testing.T) {
m.ToggleVisualMark(false)
// marking should now fail silently because we're in visual mode
- m.Mark(1)
- if m.IsMarked(1) {
+ m.Mark("1")
+ if m.IsMarked("1") {
t.Errorf("marking in visual mode should not work")
}
// move selection index to last item
up.idx = len(up.uids) - 1
m.UpdateVisualMark()
- expectedMarked := []uint32{2, 3, 4}
+ expectedMarked := []models.UID{"2", "3", "4"}
for _, uidMarked := range expectedMarked {
if !m.IsMarked(uidMarked) {
@@ -128,7 +129,7 @@ func TestMarker_VisualMode(t *testing.T) {
func TestMarker_MarkOutOfBound(t *testing.T) {
m, _ := createMarker()
- outOfBoundUid := uint32(100)
+ outOfBoundUid := models.UID("100")
m.Mark(outOfBoundUid)
for _, markedUid := range m.Marked() {