diff options
| author | Reto Brunner <reto@labrat.space> | 2020-01-04 21:13:53 +0100 | 
|---|---|---|
| committer | Drew DeVault <sir@cmpwn.com> | 2020-01-05 16:02:46 -0500 | 
| commit | da6fb1a1551767609e1d5a97631bdaffdc301f4c (patch) | |
| tree | cff4182395d046c219ebb6171a65ce03044ed4c8 | |
| parent | 3d85f75d9c38d2ddd34325ea4343423c9f3431fb (diff) | |
maildir/notmuch: don't re-encode readers
| -rw-r--r-- | worker/lib/parse.go | 41 | 
1 files changed, 4 insertions, 37 deletions
diff --git a/worker/lib/parse.go b/worker/lib/parse.go index eed39cb..288dade 100644 --- a/worker/lib/parse.go +++ b/worker/lib/parse.go @@ -2,10 +2,8 @@ package lib  import (  	"bytes" -	"encoding/base64"  	"fmt"  	"io" -	"mime/quotedprintable"  	"strings"  	"git.sr.ht/~sircmpwn/aerc/models" @@ -29,7 +27,7 @@ func FetchEntityPartReader(e *message.Entity, index []int) (io.Reader, error) {  			if idx == index[0] {  				rest := index[1:]  				if len(rest) < 1 { -					return fetchEntityReader(part) +					return bufReader(part)  				}  				return FetchEntityPartReader(part, index[1:])  			} @@ -38,46 +36,15 @@ func FetchEntityPartReader(e *message.Entity, index []int) (io.Reader, error) {  	if index[0] != 1 {  		return nil, fmt.Errorf("cannont return non-first part of non-multipart")  	} -	return fetchEntityReader(e) +	return bufReader(e)  } -// fetchEntityReader makes an io.Reader for the given entity. Since the -// go-message package decodes the body for us, and the UI expects to deal with -// a reader whose bytes are encoded with the part's encoding, we are in the -// interesting position of needing to re-encode the reader before sending it -// off to the UI layer. -// -// TODO: probably change the UI to expect an already-decoded reader and decode -// in the IMAP worker. -func fetchEntityReader(e *message.Entity) (io.Reader, error) { -	enc := e.Header.Get("content-transfer-encoding") +//TODO: the UI doesn't seem to like readers which aren't buffers +func bufReader(e *message.Entity) (io.Reader, error) {  	var buf bytes.Buffer - -	// base64 -	if strings.EqualFold(enc, "base64") { -		wc := base64.NewEncoder(base64.StdEncoding, &buf) -		defer wc.Close() -		if _, err := io.Copy(wc, e.Body); err != nil { -			return nil, fmt.Errorf("could not base64 encode: %v", err) -		} -		return &buf, nil -	} - -	// quoted-printable -	if strings.EqualFold(enc, "quoted-printable") { -		wc := quotedprintable.NewWriter(&buf) -		defer wc.Close() -		if _, err := io.Copy(wc, e.Body); err != nil { -			return nil, fmt.Errorf("could not quoted-printable encode: %v", err) -		} -		return &buf, nil -	} - -	// other general encoding  	if _, err := io.Copy(&buf, e.Body); err != nil {  		return nil, err  	} -  	return &buf, nil  }  | 
