summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/msgstore.go16
-rw-r--r--worker/imap/fetch.go10
-rw-r--r--worker/types/messages.go24
3 files changed, 40 insertions, 10 deletions
diff --git a/lib/msgstore.go b/lib/msgstore.go
index 3c77c49..c6cd2c3 100644
--- a/lib/msgstore.go
+++ b/lib/msgstore.go
@@ -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) {
diff --git a/worker/imap/fetch.go b/worker/imap/fetch.go
index 884ab73..d229126 100644
--- a/worker/imap/fetch.go
+++ b/worker/imap/fetch.go
@@ -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)
}
}
diff --git a/worker/types/messages.go b/worker/types/messages.go
index f38bb22..b1d1485 100644
--- a/worker/types/messages.go
+++ b/worker/types/messages.go
@@ -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