From 9be4eec31c20bdcc22995c8cde0074fe475e86de Mon Sep 17 00:00:00 2001 From: James Hillyerd Date: Mon, 12 Mar 2018 21:13:57 -0700 Subject: [PATCH] storage: eliminate ReadBody, ReadRaw for #69 --- pkg/storage/file/fmessage.go | 61 +++++++-------------------------- pkg/storage/file/fstore_test.go | 2 +- pkg/storage/storage.go | 4 --- 3 files changed, 14 insertions(+), 53 deletions(-) diff --git a/pkg/storage/file/fmessage.go b/pkg/storage/file/fmessage.go index e9df65d..ebe8540 100644 --- a/pkg/storage/file/fmessage.go +++ b/pkg/storage/file/fmessage.go @@ -4,7 +4,6 @@ import ( "bufio" "fmt" "io" - "io/ioutil" "net/mail" "os" "path/filepath" @@ -99,26 +98,6 @@ func (m *Message) rawPath() string { return filepath.Join(m.mailbox.path, m.Fid+".raw") } -// ReadBody opens the .raw portion of a Message and returns a MIMEBody object -func (m *Message) ReadBody() (body *enmime.Envelope, err error) { - file, err := os.Open(m.rawPath()) - if err != nil { - return nil, err - } - defer func() { - if err := file.Close(); err != nil { - log.Errorf("Failed to close %q: %v", m.rawPath(), err) - } - }() - - reader := bufio.NewReader(file) - mime, err := enmime.ReadEnvelope(reader) - if err != nil { - return nil, err - } - return mime, nil -} - // RawReader opens the .raw portion of a Message as an io.ReadCloser func (m *Message) RawReader() (reader io.ReadCloser, err error) { file, err := os.Open(m.rawPath()) @@ -128,26 +107,6 @@ func (m *Message) RawReader() (reader io.ReadCloser, err error) { return file, nil } -// ReadRaw opens the .raw portion of a Message and returns it as a string -func (m *Message) ReadRaw() (raw *string, err error) { - reader, err := m.RawReader() - if err != nil { - return nil, err - } - defer func() { - if err := reader.Close(); err != nil { - log.Errorf("Failed to close %q: %v", m.rawPath(), err) - } - }() - - bodyBytes, err := ioutil.ReadAll(bufio.NewReader(reader)) - if err != nil { - return nil, err - } - bodyString := string(bodyBytes) - return &bodyString, nil -} - // Append data to a newly opened Message, this will fail on a pre-existing Message and // after Close() is called. func (m *Message) Append(data []byte) error { @@ -195,26 +154,32 @@ func (m *Message) Close() error { } } - // Fetch headers - body, err := m.ReadBody() + // Fetch envelope. + // TODO should happen outside of datastore. + r, err := m.RawReader() + if err != nil { + return err + } + env, err := enmime.ReadEnvelope(r) + _ = r.Close() if err != nil { return err } // Only public fields are stored in gob, hence starting with capital F // Parse From address - if address, err := mail.ParseAddress(body.GetHeader("From")); err == nil { + if address, err := mail.ParseAddress(env.GetHeader("From")); err == nil { m.Ffrom = address } else { - m.Ffrom = &mail.Address{Address: body.GetHeader("From")} + m.Ffrom = &mail.Address{Address: env.GetHeader("From")} } - m.Fsubject = body.GetHeader("Subject") + m.Fsubject = env.GetHeader("Subject") // Turn the To header into a slice - if addresses, err := body.AddressList("To"); err == nil { + if addresses, err := env.AddressList("To"); err == nil { m.Fto = addresses } else { - m.Fto = []*mail.Address{{Address: body.GetHeader("To")}} + m.Fto = []*mail.Address{{Address: env.GetHeader("To")}} } // Refresh the index before adding our message diff --git a/pkg/storage/file/fstore_test.go b/pkg/storage/file/fstore_test.go index eb5add1..70aa168 100644 --- a/pkg/storage/file/fstore_test.go +++ b/pkg/storage/file/fstore_test.go @@ -337,7 +337,7 @@ func TestFSMissing(t *testing.T) { assert.Nil(t, err) // Try to read parts of message - _, err = msg.ReadBody() + _, err = msg.RawReader() assert.Error(t, err) if t.Failed() { diff --git a/pkg/storage/storage.go b/pkg/storage/storage.go index 52e50cc..04f237b 100644 --- a/pkg/storage/storage.go +++ b/pkg/storage/storage.go @@ -7,8 +7,6 @@ import ( "net/mail" "sync" "time" - - "github.com/jhillyerd/enmime" ) var ( @@ -41,8 +39,6 @@ type StoreMessage interface { Date() time.Time Subject() string RawReader() (reader io.ReadCloser, err error) - ReadBody() (body *enmime.Envelope, err error) - ReadRaw() (raw *string, err error) Append(data []byte) error Close() error String() string