Skip to content

Commit 230bb65

Browse files
committed
Merge branch 'main' into appstate-debug
2 parents 0b026ea + 89be06b commit 230bb65

3 files changed

Lines changed: 33 additions & 15 deletions

File tree

client.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ type Client struct {
143143
sessionRecreateHistoryLock sync.Mutex
144144
// GetMessageForRetry is used to find the source message for handling retry receipts
145145
// when the message is not found in the recently sent message cache.
146+
// Note: in DMs, the "to" field may be different from what you originally sent to (LID vs phone number),
147+
// make sure to check both if necessary.
146148
GetMessageForRetry func(requester, to types.JID, id types.MessageID) *waE2E.Message
147149
// PreRetryCallback is called before a retry receipt is accepted.
148150
// If it returns false, the accepting will be cancelled and the retry receipt will be ignored.

internals.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

retry.go

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,25 +64,39 @@ func (cli *Client) addRecentMessage(to types.JID, id types.MessageID, wa *waE2E.
6464

6565
func (cli *Client) getRecentMessage(to types.JID, id types.MessageID) RecentMessage {
6666
cli.recentMessagesLock.RLock()
67-
msg, _ := cli.recentMessagesMap[recentMessageKey{to, id}]
68-
cli.recentMessagesLock.RUnlock()
69-
return msg
67+
defer cli.recentMessagesLock.RUnlock()
68+
return cli.recentMessagesMap[recentMessageKey{to, id}]
7069
}
7170

72-
func (cli *Client) getMessageForRetry(ctx context.Context, receipt *events.Receipt, messageID types.MessageID) (RecentMessage, error) {
71+
func (cli *Client) getMessageForRetry(ctx context.Context, receipt *events.Receipt, messageID types.MessageID) (*RecentMessage, error) {
7372
msg := cli.getRecentMessage(receipt.Chat, messageID)
74-
if msg.IsEmpty() {
75-
waMsg := cli.GetMessageForRetry(receipt.Sender, receipt.Chat, messageID)
76-
if waMsg == nil {
77-
return RecentMessage{}, fmt.Errorf("couldn't find message %s", messageID)
78-
} else {
79-
cli.Log.Debugf("Found message in GetMessageForRetry to accept retry receipt for %s/%s from %s", receipt.Chat, messageID, receipt.Sender)
80-
}
81-
msg = RecentMessage{wa: waMsg}
82-
} else {
73+
if !msg.IsEmpty() {
8374
cli.Log.Debugf("Found message in local cache to accept retry receipt for %s/%s from %s", receipt.Chat, messageID, receipt.Sender)
75+
return &msg, nil
76+
}
77+
var altChat types.JID
78+
var err error
79+
switch receipt.Chat.Server {
80+
case types.DefaultUserServer:
81+
altChat, err = cli.Store.LIDs.GetLIDForPN(ctx, receipt.Chat)
82+
case types.HiddenUserServer:
83+
altChat, err = cli.Store.LIDs.GetPNForLID(ctx, receipt.Chat)
84+
}
85+
if err != nil {
86+
return nil, fmt.Errorf("failed to get alternate JID for %s: %w", receipt.Chat, err)
87+
} else if !altChat.IsEmpty() {
88+
msg = cli.getRecentMessage(altChat, messageID)
89+
if !msg.IsEmpty() {
90+
cli.Log.Debugf("Found message in local cache with alternate chat JID %s to accept retry receipt for %s/%s from %s", altChat, receipt.Chat, messageID, receipt.Sender)
91+
return &msg, nil
92+
}
93+
}
94+
waMsg := cli.GetMessageForRetry(receipt.Sender, receipt.Chat, messageID)
95+
if waMsg != nil {
96+
cli.Log.Debugf("Found message in GetMessageForRetry to accept retry receipt for %s/%s from %s", receipt.Chat, messageID, receipt.Sender)
97+
return &RecentMessage{wa: waMsg}, nil
8498
}
85-
return msg, nil
99+
return nil, nil
86100
}
87101

88102
const recreateSessionTimeout = 1 * time.Hour
@@ -127,6 +141,8 @@ func (cli *Client) handleRetryReceipt(ctx context.Context, receipt *events.Recei
127141
msg, err := cli.getMessageForRetry(ctx, receipt, messageID)
128142
if err != nil {
129143
return err
144+
} else if msg == nil {
145+
return fmt.Errorf("couldn't find message %s", messageID)
130146
}
131147
var fbConsumerMsg *waConsumerApplication.ConsumerApplication
132148
if msg.fb != nil {

0 commit comments

Comments
 (0)