mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-24 07:13:09 -06:00
Check for identical event before sending
Signed-off-by: Devon Johnson <djohnson1865@gmail.com>
This commit is contained in:
parent
640e8c50ec
commit
54a5da5551
|
|
@ -15,6 +15,7 @@
|
|||
package routing
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"net/http"
|
||||
"sync"
|
||||
|
||||
|
|
@ -80,6 +81,29 @@ func SendEvent(
|
|||
return *resErr
|
||||
}
|
||||
|
||||
stateRes := api.QueryLatestEventsAndStateResponse{}
|
||||
if err := rsAPI.QueryLatestEventsAndState(req.Context(), &api.QueryLatestEventsAndStateRequest{
|
||||
RoomID: roomID,
|
||||
StateToFetch: []gomatrixserverlib.StateKeyTuple{},
|
||||
}, &stateRes); err != nil {
|
||||
util.GetLogger(req.Context()).WithError(err).Error("queryAPI.QueryLatestEventsAndState failed")
|
||||
return jsonerror.InternalServerError()
|
||||
}
|
||||
|
||||
// Check that currnet event doesn't match previous events
|
||||
// If so return previous event
|
||||
for _, ev := range stateRes.StateEvents {
|
||||
if ev.Event.Type() == e.Type() &&
|
||||
ev.Event.StateKeyEquals(*stateKey) &&
|
||||
bytes.Equal(ev.Event.Content(), e.Content()) {
|
||||
res := util.JSONResponse{
|
||||
Code: http.StatusOK,
|
||||
JSON: sendEventResponse{ev.EventID()},
|
||||
}
|
||||
return res
|
||||
}
|
||||
}
|
||||
|
||||
var txnAndSessionID *api.TransactionID
|
||||
if txnID != nil {
|
||||
txnAndSessionID = &api.TransactionID{
|
||||
|
|
|
|||
Loading…
Reference in a new issue