Decode email when reading it for quoting

This commit is contained in:
Drew DeVault 2019-05-16 14:09:57 -04:00
parent 08855f23ec
commit 5701b6e949
2 changed files with 26 additions and 2 deletions

View File

@ -7,8 +7,11 @@ import (
"io" "io"
"strings" "strings"
"git.sr.ht/~sircmpwn/getopt" "github.com/emersion/go-message"
_ "github.com/emersion/go-message/charset"
"github.com/emersion/go-message/mail"
"github.com/emersion/go-imap" "github.com/emersion/go-imap"
"git.sr.ht/~sircmpwn/getopt"
"git.sr.ht/~sircmpwn/aerc2/widgets" "git.sr.ht/~sircmpwn/aerc2/widgets"
) )
@ -106,8 +109,28 @@ func Reply(aerc *widgets.Aerc, args []string) error {
if quote { if quote {
// TODO: something more intelligent than fetching the 0th part // TODO: something more intelligent than fetching the 0th part
store.FetchBodyPart(msg.Uid, 0, func(reader io.Reader) { store.FetchBodyPart(msg.Uid, 0, func(reader io.Reader) {
header := message.Header{}
header.SetText(
"Content-Transfer-Encoding", msg.BodyStructure.Encoding)
header.SetContentType(
msg.BodyStructure.MIMEType, msg.BodyStructure.Params)
header.SetText("Content-Description", msg.BodyStructure.Description)
entity, err := message.New(header, reader)
if err != nil {
// TODO: Do something with the error
addTab()
return
}
mreader := mail.NewReader(entity)
part, err := mreader.NextPart()
if err != nil {
// TODO: Do something with the error
addTab()
return
}
pipeout, pipein := io.Pipe() pipeout, pipein := io.Pipe()
scanner := bufio.NewScanner(reader) scanner := bufio.NewScanner(part.Body)
go composer.SetContents(pipeout) go composer.SetContents(pipeout)
// TODO: Let user customize the date format used here // TODO: Let user customize the date format used here
io.WriteString(pipein, fmt.Sprintf("On %s %s wrote:\n", io.WriteString(pipein, fmt.Sprintf("On %s %s wrote:\n",

View File

@ -129,6 +129,7 @@ func (c *Composer) Defaults(defaults map[string]string) *Composer {
func (c *Composer) SetContents(reader io.Reader) *Composer { func (c *Composer) SetContents(reader io.Reader) *Composer {
c.email.Seek(0, os.SEEK_SET) c.email.Seek(0, os.SEEK_SET)
io.Copy(c.email, reader) io.Copy(c.email, reader)
c.email.Sync()
c.email.Seek(0, os.SEEK_SET) c.email.Seek(0, os.SEEK_SET)
return c return c
} }