Check for identical event before sending

Signed-off-by: Devon Johnson <djohnson1865@gmail.com>
This commit is contained in:
Devon Johnson 2020-10-17 21:07:15 -07:00
parent 640e8c50ec
commit 54a5da5551

View file

@ -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{