msg/reply: fix encoding issues for quoted reply.
This commit is contained in:
parent
13a6a3fa71
commit
cff4476f3b
2 changed files with 33 additions and 12 deletions
|
@ -107,9 +107,10 @@ func (Recall) Execute(aerc *widgets.Aerc, args []string) error {
|
||||||
part *models.BodyStructure
|
part *models.BodyStructure
|
||||||
)
|
)
|
||||||
if len(msgInfo.BodyStructure.Parts) != 0 {
|
if len(msgInfo.BodyStructure.Parts) != 0 {
|
||||||
part, path = findPlaintext(msgInfo.BodyStructure, path)
|
path = findPlaintext(msgInfo.BodyStructure, path)
|
||||||
}
|
}
|
||||||
if part == nil {
|
part, err = msgInfo.BodyStructure.PartAtIndex(path)
|
||||||
|
if part == nil || err != nil {
|
||||||
part = msgInfo.BodyStructure
|
part = msgInfo.BodyStructure
|
||||||
path = []int{1}
|
path = []int{1}
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,7 +165,16 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error {
|
||||||
template = aerc.Config().Templates.QuotedReply
|
template = aerc.Config().Templates.QuotedReply
|
||||||
}
|
}
|
||||||
|
|
||||||
store.FetchBodyPart(msg.Uid, []int{1}, func(reader io.Reader) {
|
part := findPlaintext(msg.BodyStructure, nil)
|
||||||
|
if part == nil {
|
||||||
|
//mkey... let's get the first thing that isn't a container
|
||||||
|
part := findFirstNonMultipart(msg.BodyStructure, nil)
|
||||||
|
if part == nil {
|
||||||
|
// give up, use whatever is first
|
||||||
|
part = []int{1}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
store.FetchBodyPart(msg.Uid, part, func(reader io.Reader) {
|
||||||
buf := new(bytes.Buffer)
|
buf := new(bytes.Buffer)
|
||||||
buf.ReadFrom(reader)
|
buf.ReadFrom(reader)
|
||||||
original.Text = buf.String()
|
original.Text = buf.String()
|
||||||
|
@ -188,22 +197,33 @@ func (reply) Execute(aerc *widgets.Aerc, args []string) error {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO (RPB): unused function
|
func findPlaintext(bs *models.BodyStructure, path []int) []int {
|
||||||
func findPlaintext(bs *models.BodyStructure,
|
|
||||||
path []int) (*models.BodyStructure, []int) {
|
|
||||||
|
|
||||||
for i, part := range bs.Parts {
|
for i, part := range bs.Parts {
|
||||||
cur := append(path, i+1)
|
cur := append(path, i+1)
|
||||||
if strings.ToLower(part.MIMEType) == "text" &&
|
if strings.ToLower(part.MIMEType) == "text" &&
|
||||||
strings.ToLower(part.MIMESubType) == "plain" {
|
strings.ToLower(part.MIMESubType) == "plain" {
|
||||||
return part, cur
|
return cur
|
||||||
}
|
}
|
||||||
if strings.ToLower(part.MIMEType) == "multipart" {
|
if strings.ToLower(part.MIMEType) == "multipart" {
|
||||||
if part, path := findPlaintext(part, cur); path != nil {
|
if path := findPlaintext(part, cur); path != nil {
|
||||||
return part, path
|
return path
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
return nil, 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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue