mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-25 15:53: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
|
package routing
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"net/http"
|
"net/http"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
|
@ -80,6 +81,29 @@ func SendEvent(
|
||||||
return *resErr
|
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
|
var txnAndSessionID *api.TransactionID
|
||||||
if txnID != nil {
|
if txnID != nil {
|
||||||
txnAndSessionID = &api.TransactionID{
|
txnAndSessionID = &api.TransactionID{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue