feat(GODT-2569): Support multiple externalID matching if we send one of it when looking for parentID.

Change behavior of `getParentID`: when `getParentID` gets called on an
external ID and more than one message with that ID is found, inspect the
metadata flags and if only one of those messages is `MessageFlagSent`,
then choose that as the parent.
This commit is contained in:
y86-dev
2023-04-03 22:01:40 +02:00
committed by Romain Le Jeune
parent c49b42060e
commit 7002806999

View File

@ -300,7 +300,9 @@ func getParentID(
}
// If no parent was found, try to find it in the last external reference.
// There can be multiple messages with the same external ID; in this case, we don't pick any parent.
// There can be multiple messages with the same external ID; in this case, we first look if
// there is a single one sent by this account (with the `MessageFlagSent` flag set), if yes,
// then pick that, otherwise don't pick any parent.
if parentID == "" && len(external) > 0 {
var addrID string
@ -316,8 +318,25 @@ func getParentID(
return "", fmt.Errorf("failed to get message metadata: %w", err)
}
if len(metadata) == 1 {
switch len(metadata) {
case 1:
// found exactly one parent
parentID = metadata[0].ID
case 0:
// found no parents
default:
// found multiple parents, search through metadata to try to find a singular parent that
// was sent by this account.
found_sent_by_us := false
for _, metadata := range metadata {
if metadata.Flags.Has(proton.MessageFlagSent) {
if found_sent_by_us == true {
parentID = ""
}
parentID = metadata.ID
found_sent_by_us = true
}
}
}
}