feat(mail): wire resolveThreadID into processMessage
CI / fmt (pull_request) Failing after 4m52s
CI / test (pull_request) Successful in 10m50s

- Add references variable to extract References header
- Replace manual inReplyTo handling with resolveThreadID call
- Maintain existing body parsing functionality
- Includes proper lambda function for database lookups

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-28 05:07:40 +07:00
co-authored by Claude Opus 4.7
parent 15e697ddf3
commit c55a27d710
3 changed files with 403 additions and 7 deletions
+7 -7
View File
@@ -366,6 +366,7 @@ func (w *IMAPWatcher) processMessage(c *imapclient.Client, buf *imapclient.Fetch
// 4. Threading: determine thread_id.
threadID := messageID
inReplyTo := ""
references := ""
// Parse body to get In-Reply-To / References headers and plain text.
bodyPlain := ""
@@ -373,10 +374,12 @@ func (w *IMAPWatcher) processMessage(c *imapclient.Client, buf *imapclient.Fetch
if rawBody != nil {
mr, err := gomessage.CreateReader(io.NopCloser(strings.NewReader(string(rawBody))))
if err == nil {
// Extract In-Reply-To header.
if irt, err := mr.Header.Text("In-Reply-To"); err == nil && irt != "" {
inReplyTo = strings.TrimSpace(irt)
}
if refs, err := mr.Header.Text("References"); err == nil && refs != "" {
references = refs
}
// Read body parts for plain text.
for {
@@ -394,12 +397,9 @@ func (w *IMAPWatcher) processMessage(c *imapclient.Client, buf *imapclient.Fetch
}
}
if inReplyTo != "" {
parent, err := database.FindByMessageID(w.db, inReplyTo)
if err == nil && parent != nil {
threadID = parent.ThreadID
}
}
threadID = resolveThreadID(messageID, inReplyTo, references, func(mid string) (*database.Task, error) {
return database.FindByMessageID(w.db, mid)
})
// 5. Save task with status RECEIVED.
taskUUID := uuid.New().String()