about summary refs log tree commit diff stats
path: root/commands/msg/utils.go
diff options
context:
space:
mode:
Diffstat (limited to 'commands/msg/utils.go')
-rw-r--r--commands/msg/utils.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/commands/msg/utils.go b/commands/msg/utils.go
index cad0f82..5eb5fe5 100644
--- a/commands/msg/utils.go
+++ b/commands/msg/utils.go
@@ -2,6 +2,7 @@ package msg
 
 import (
 	"errors"
+	"strings"
 
 	"git.sr.ht/~sircmpwn/aerc/commands"
 	"git.sr.ht/~sircmpwn/aerc/lib"
@@ -48,3 +49,34 @@ func (h *helper) messages() ([]*models.MessageInfo, error) {
 	}
 	return commands.MsgInfoFromUids(store, uid)
 }
+
+func findPlaintext(bs *models.BodyStructure, path []int) []int {
+	for i, part := range bs.Parts {
+		cur := append(path, i+1)
+		if strings.ToLower(part.MIMEType) == "text" &&
+			strings.ToLower(part.MIMESubType) == "plain" {
+			return cur
+		}
+		if strings.ToLower(part.MIMEType) == "multipart" {
+			if path := findPlaintext(part, cur); path != nil {
+				return path
+			}
+		}
+	}
+	return nil
+}
+
+func findFirstNonMultipart(bs *models.BodyStructure, path []int) []int {
+	for i, part := range bs.Parts {
+		cur := append(path, i+1)
+		mimetype := strings.ToLower(part.MIMEType)
+		if mimetype != "multipart" {
+			return path
+		} else if mimetype == "multipart" {
+			if path := findPlaintext(part, cur); path != nil {
+				return path
+			}
+		}
+	}
+	return nil
+}