message-info: add explicit References field

Add an explicit References field to message info. This is useful for
storing information needed for threading without storing all of the
header values, keeping system RAM usage lower.

Signed-off-by: Tim Culverhouse <tim@timculverhouse.com>
Tested-by: Inwit <inwit@sindominio.net>
Acked-by: Robin Jarry <robin@jarry.cc>
This commit is contained in:
Tim Culverhouse
2022-11-07 10:15:49 -06:00
committed by Robin Jarry
parent ca903d4228
commit 31d2f5be3c
4 changed files with 17 additions and 0 deletions

View File

@@ -71,6 +71,7 @@ type MessageInfo struct {
Labels []string
InternalDate time.Time
RFC822Headers *mail.Header
Refs []string
Size uint32
Uid uint32
Error error
@@ -110,6 +111,9 @@ func (mi *MessageInfo) References() ([]string, error) {
if mi == nil {
return []string{}, errors.New("msg is nil")
}
if mi.Refs != nil {
return mi.Refs, nil
}
if mi.RFC822Headers == nil {
return []string{}, errors.New("header is nil")
}

View File

@@ -118,6 +118,10 @@ func (w *IMAPWorker) getCachedHeaders(msg *types.FetchMessageHeaders) []uint32 {
Uid: ch.Uid,
RFC822Headers: hdr,
}
refs, err := hdr.MsgIDList("references")
if err != nil {
mi.Refs = refs
}
logging.Debugf("located cached header %s.%s", uv, u)
w.worker.PostMessage(&types.MessageInfo{
Message: types.RespondTo(msg),

View File

@@ -62,6 +62,10 @@ func (imapw *IMAPWorker) handleFetchMessageHeaders(
RFC822Headers: header,
Uid: _msg.Uid,
}
refs, err := header.MsgIDList("references")
if err != nil {
info.Refs = refs
}
imapw.worker.PostMessage(&types.MessageInfo{
Message: types.RespondTo(msg),
Info: info,

View File

@@ -348,11 +348,16 @@ func MessageHeaders(raw RawMessage) (*models.MessageInfo, error) {
if err != nil {
return nil, err
}
refs, err := h.MsgIDList("references")
if err != nil {
return nil, err
}
return &models.MessageInfo{
Envelope: env,
Flags: flags,
Labels: labels,
InternalDate: recDate,
Refs: refs,
Size: 0,
Uid: raw.UID(),
Error: parseErr,