about summary refs log tree commit diff stats
path: root/commands/util.go
diff options
context:
space:
mode:
Diffstat (limited to 'commands/util.go')
-rw-r--r--commands/util.go30
1 files changed, 30 insertions, 0 deletions
diff --git a/commands/util.go b/commands/util.go
index a5c30af..5529edb 100644
--- a/commands/util.go
+++ b/commands/util.go
@@ -10,6 +10,7 @@ import (
 	"strings"
 	"time"
 
+	"git.sr.ht/~sircmpwn/aerc/models"
 	"git.sr.ht/~sircmpwn/aerc/widgets"
 	"github.com/gdamore/tcell"
 	"github.com/mitchellh/go-homedir"
@@ -148,3 +149,32 @@ func listDir(path string, hidden bool) []string {
 
 	return filtered
 }
+
+// MarkedOrSelected returns either all marked messages if any are marked or the
+// selected message instead
+func MarkedOrSelected(pm widgets.ProvidesMessages) ([]*models.MessageInfo, error) {
+	// marked has priority over the selected message
+	marked, err := pm.MarkedMessages()
+	if err != nil {
+		return nil, err
+	}
+	if len(marked) > 0 {
+		return marked, nil
+	}
+	msg, err := pm.SelectedMessage()
+	if err != nil {
+		return nil, err
+	}
+	return []*models.MessageInfo{msg}, nil
+}
+
+// UidsFromMessageInfos extracts a uid slice from a slice of MessageInfos
+func UidsFromMessageInfos(msgs []*models.MessageInfo) []uint32 {
+	uids := make([]uint32, len(msgs))
+	i := 0
+	for _, msg := range msgs {
+		uids[i] = msg.Uid
+		i++
+	}
+	return uids
+}