mirror of
https://github.com/mautrix/whatsapp.git
synced 2026-05-15 02:06:53 -04:00
Compare commits
1 commit
main
...
nick/fix-m
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a2f5fc0f51 |
2 changed files with 21 additions and 8 deletions
|
|
@ -264,6 +264,18 @@ func (evt *WAMessageEvent) GetType() bridgev2.RemoteEventType {
|
||||||
func (evt *WAMessageEvent) HandleExisting(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, existing []*database.Message) (bridgev2.UpsertResult, error) {
|
func (evt *WAMessageEvent) HandleExisting(ctx context.Context, portal *bridgev2.Portal, intent bridgev2.MatrixAPI, existing []*database.Message) (bridgev2.UpsertResult, error) {
|
||||||
if existing[0].Metadata.(*waid.MessageMetadata).Error == waid.MsgErrDecryptionFailed {
|
if existing[0].Metadata.(*waid.MessageMetadata).Error == waid.MsgErrDecryptionFailed {
|
||||||
evt.wa.trackUndecryptableResolved(evt.MsgEvent)
|
evt.wa.trackUndecryptableResolved(evt.MsgEvent)
|
||||||
|
if existing[0].HasFakeMXID() {
|
||||||
|
// The undecryptable message was hidden (decrypt_fail=hide), so no Matrix
|
||||||
|
// event was sent. Delete the placeholder DB entry and let the framework
|
||||||
|
// handle this as a brand-new message so a real Matrix event is created.
|
||||||
|
zerolog.Ctx(ctx).Debug().
|
||||||
|
Msg("Received decryptable version of previously hidden undecryptable message, re-handling as new message")
|
||||||
|
err := portal.Bridge.DB.Message.DeleteAllParts(ctx, portal.Receiver, evt.GetID())
|
||||||
|
if err != nil {
|
||||||
|
return bridgev2.UpsertResult{}, fmt.Errorf("failed to delete hidden placeholder message: %w", err)
|
||||||
|
}
|
||||||
|
return bridgev2.UpsertResult{ContinueMessageHandling: true}, nil
|
||||||
|
}
|
||||||
zerolog.Ctx(ctx).Debug().
|
zerolog.Ctx(ctx).Debug().
|
||||||
Stringer("existing_mxid", existing[0].MXID).
|
Stringer("existing_mxid", existing[0].MXID).
|
||||||
Msg("Received decryptable version of previously undecryptable message")
|
Msg("Received decryptable version of previously undecryptable message")
|
||||||
|
|
@ -320,6 +332,7 @@ func (evt *WANowDecryptableMessage) GetType() bridgev2.RemoteEventType {
|
||||||
type WAUndecryptableMessage struct {
|
type WAUndecryptableMessage struct {
|
||||||
*MessageInfoWrapper
|
*MessageInfoWrapper
|
||||||
Type events.UnavailableType
|
Type events.UnavailableType
|
||||||
|
Hidden bool
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -369,6 +382,7 @@ func (evt *WAUndecryptableMessage) ConvertMessage(ctx context.Context, portal *b
|
||||||
Type: event.EventMessage,
|
Type: event.EventMessage,
|
||||||
Content: content,
|
Content: content,
|
||||||
Extra: extra,
|
Extra: extra,
|
||||||
|
DontBridge: evt.Hidden,
|
||||||
DBMetadata: &waid.MessageMetadata{
|
DBMetadata: &waid.MessageMetadata{
|
||||||
SenderDeviceID: evt.Info.Sender.Device,
|
SenderDeviceID: evt.Info.Sender.Device,
|
||||||
Error: waid.MsgErrDecryptionFailed,
|
Error: waid.MsgErrDecryptionFailed,
|
||||||
|
|
|
||||||
|
|
@ -406,18 +406,17 @@ func (wa *WhatsAppClient) handleWAUndecryptableMessage(ctx context.Context, evt
|
||||||
Str("decrypt_fail", string(evt.DecryptFailMode)).
|
Str("decrypt_fail", string(evt.DecryptFailMode)).
|
||||||
Msg("Received undecryptable WhatsApp message")
|
Msg("Received undecryptable WhatsApp message")
|
||||||
wa.trackUndecryptable(evt)
|
wa.trackUndecryptable(evt)
|
||||||
if evt.DecryptFailMode == events.DecryptFailHide {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if evt.Info.Chat == types.StatusBroadcastJID && !wa.Main.Config.EnableStatusBroadcast {
|
if evt.Info.Chat == types.StatusBroadcastJID && !wa.Main.Config.EnableStatusBroadcast {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
hidden := evt.DecryptFailMode == events.DecryptFailHide
|
||||||
res := wa.UserLogin.QueueRemoteEvent(&WAUndecryptableMessage{
|
res := wa.UserLogin.QueueRemoteEvent(&WAUndecryptableMessage{
|
||||||
MessageInfoWrapper: &MessageInfoWrapper{
|
MessageInfoWrapper: &MessageInfoWrapper{
|
||||||
Info: evt.Info,
|
Info: evt.Info,
|
||||||
wa: wa,
|
wa: wa,
|
||||||
},
|
},
|
||||||
Type: evt.UnavailableType,
|
Type: evt.UnavailableType,
|
||||||
|
Hidden: hidden,
|
||||||
})
|
})
|
||||||
return res.Success
|
return res.Success
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue