~sircmpwn/aerc

1f23868652a2ce0e81bddd048e3e828efaff2d69 — Drew DeVault 2 years ago 5d0402a
Pull BodyStructure up from IMAP worker
3 files changed, 40 insertions(+), 10 deletions(-)

M lib/msgstore.go
M worker/imap/fetch.go
M worker/types/messages.go
M lib/msgstore.go => lib/msgstore.go +15 -1
@@ 1,6 1,8 @@
package lib

import (
	"time"

	"github.com/emersion/go-imap"
	"github.com/mohamedattahri/mail"



@@ 91,10 93,22 @@ func (store *MessageStore) FetchBodies(uids []uint32,
func (store *MessageStore) merge(
	to *types.MessageInfo, from *types.MessageInfo) {

	// TODO: Merge more shit
	if from.BodyStructure != nil {
		to.BodyStructure = from.BodyStructure
	}
	if from.Envelope != nil {
		to.Envelope = from.Envelope
	}
	if len(from.Flags) != 0 {
		to.Flags = from.Flags
	}
	if from.Size != 0 {
		to.Size = from.Size
	}
	var zero time.Time
	if from.InternalDate != zero {
		to.InternalDate = from.InternalDate
	}
}

func (store *MessageStore) Update(msg types.WorkerMessage) {

M worker/imap/fetch.go => worker/imap/fetch.go +6 -4
@@ 12,6 12,7 @@ func (imapw *IMAPWorker) handleFetchMessageHeaders(

	imapw.worker.Logger.Printf("Fetching message headers")
	items := []imap.FetchItem{
		imap.FetchBodyStructure,
		imap.FetchEnvelope,
		imap.FetchInternalDate,
		imap.FetchFlags,


@@ 57,10 58,11 @@ func (imapw *IMAPWorker) handleFetchMessages(
					}, nil)
				} else {
					imapw.worker.PostMessage(&types.MessageInfo{
						Envelope:     _msg.Envelope,
						Flags:        _msg.Flags,
						InternalDate: _msg.InternalDate,
						Uid:          _msg.Uid,
						BodyStructure: _msg.BodyStructure,
						Envelope:      _msg.Envelope,
						Flags:         _msg.Flags,
						InternalDate:  _msg.InternalDate,
						Uid:           _msg.Uid,
					}, nil)
				}
			}

M worker/types/messages.go => worker/types/messages.go +19 -5
@@ 2,6 2,7 @@ package types

import (
	"crypto/x509"
	"io"
	"time"

	"github.com/emersion/go-imap"


@@ 86,6 87,12 @@ type FetchMessageBodies struct {
	Uids imap.SeqSet
}

type FetchMessageBodyPart struct {
	Message
	Uid  uint32
	Part int
}

type DeleteMessages struct {
	Message
	Uids imap.SeqSet


@@ 120,11 127,12 @@ type DirectoryContents struct {

type MessageInfo struct {
	Message
	Envelope     *imap.Envelope
	Flags        []string
	InternalDate time.Time
	Size         uint32
	Uid          uint32
	BodyStructure *imap.BodyStructure
	Envelope      *imap.Envelope
	Flags         []string
	InternalDate  time.Time
	Size          uint32
	Uid           uint32
}

type MessageBody struct {


@@ 133,6 141,12 @@ type MessageBody struct {
	Uid  uint32
}

type MessageBodyPart struct {
	Message
	Reader *io.Reader
	Uid    uint32
}

type MessagesDeleted struct {
	Message
	Uids []uint32