feat(mail): wire resolveThreadID into processMessage
- 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:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user