aboutsummaryrefslogtreecommitdiff
path: root/roomserver/api
diff options
context:
space:
mode:
authorKegsay <kegan@matrix.org>2020-06-11 19:50:40 +0100
committerGitHub <noreply@github.com>2020-06-11 19:50:40 +0100
commitec7718e7f842fa0fc5198489c904de21003db4c2 (patch)
treee267fe8dae227b274381213ef3e8a3f34fbf0f26 /roomserver/api
parent25cd2dd1c925fa0c1eeb27a3cd71e668344102ad (diff)
Roomserver API changes (#1118)
* s/QueryBackfill/PerformBackfill/g * OutputEvent now includes AddStateEvents which contain the full event of extra state events * Only include adds not the current event * Get adding state right
Diffstat (limited to 'roomserver/api')
-rw-r--r--roomserver/api/api.go6
-rw-r--r--roomserver/api/output.go27
-rw-r--r--roomserver/api/perform.go29
-rw-r--r--roomserver/api/query.go29
4 files changed, 59 insertions, 32 deletions
diff --git a/roomserver/api/api.go b/roomserver/api/api.go
index 3a2ad059..967f58ba 100644
--- a/roomserver/api/api.go
+++ b/roomserver/api/api.go
@@ -89,10 +89,10 @@ type RoomserverInternalAPI interface {
) error
// Query a given amount (or less) of events prior to a given set of events.
- QueryBackfill(
+ PerformBackfill(
ctx context.Context,
- request *QueryBackfillRequest,
- response *QueryBackfillResponse,
+ request *PerformBackfillRequest,
+ response *PerformBackfillResponse,
) error
// Asks for the default room version as preferred by the server.
diff --git a/roomserver/api/output.go b/roomserver/api/output.go
index 92a468a9..2bbd97af 100644
--- a/roomserver/api/output.go
+++ b/roomserver/api/output.go
@@ -63,6 +63,13 @@ type OutputNewRoomEvent struct {
// Together with RemovesStateEventIDs this allows the receiver to keep an up to date
// view of the current state of the room.
AddsStateEventIDs []string `json:"adds_state_event_ids"`
+ // All extra newly added state events. This is only set if there are *extra* events
+ // other than `Event`. This can happen when forks get merged because state resolution
+ // may decide a bunch of state events on one branch are now valid, so they will be
+ // present in this list. This is useful when trying to maintain the current state of a room
+ // as to do so you need to include both these events and `Event`.
+ AddStateEvents []gomatrixserverlib.HeaderedEvent `json:"adds_state_events"`
+
// The state event IDs that were removed from the state of the room by this event.
RemovesStateEventIDs []string `json:"removes_state_event_ids"`
// The ID of the event that was output before this event.
@@ -112,6 +119,26 @@ type OutputNewRoomEvent struct {
TransactionID *TransactionID `json:"transaction_id"`
}
+// AddsState returns all added state events from this event.
+//
+// This function is needed because `AddStateEvents` will not include a copy of
+// the original event to save space, so you cannot use that slice alone.
+// Instead, use this function which will add the original event if it is present
+// in `AddsStateEventIDs`.
+func (ore *OutputNewRoomEvent) AddsState() []gomatrixserverlib.HeaderedEvent {
+ includeOutputEvent := false
+ for _, id := range ore.AddsStateEventIDs {
+ if id == ore.Event.EventID() {
+ includeOutputEvent = true
+ break
+ }
+ }
+ if !includeOutputEvent {
+ return ore.AddStateEvents
+ }
+ return append(ore.AddStateEvents, ore.Event)
+}
+
// An OutputNewInviteEvent is written whenever an invite becomes active.
// Invite events can be received outside of an existing room so have to be
// tracked separately from the room events themselves.
diff --git a/roomserver/api/perform.go b/roomserver/api/perform.go
index 1cf54144..3e5cae1b 100644
--- a/roomserver/api/perform.go
+++ b/roomserver/api/perform.go
@@ -2,6 +2,7 @@ package api
import (
"github.com/matrix-org/gomatrixserverlib"
+ "github.com/matrix-org/util"
)
type PerformJoinRequest struct {
@@ -22,3 +23,31 @@ type PerformLeaveRequest struct {
type PerformLeaveResponse struct {
}
+
+// PerformBackfillRequest is a request to PerformBackfill.
+type PerformBackfillRequest struct {
+ // The room to backfill
+ RoomID string `json:"room_id"`
+ // A map of backwards extremity event ID to a list of its prev_event IDs.
+ BackwardsExtremities map[string][]string `json:"backwards_extremities"`
+ // The maximum number of events to retrieve.
+ Limit int `json:"limit"`
+ // The server interested in the events.
+ ServerName gomatrixserverlib.ServerName `json:"server_name"`
+}
+
+// PrevEventIDs returns the prev_event IDs of all backwards extremities, de-duplicated in a lexicographically sorted order.
+func (r *PerformBackfillRequest) PrevEventIDs() []string {
+ var prevEventIDs []string
+ for _, pes := range r.BackwardsExtremities {
+ prevEventIDs = append(prevEventIDs, pes...)
+ }
+ prevEventIDs = util.UniqueStrings(prevEventIDs)
+ return prevEventIDs
+}
+
+// PerformBackfillResponse is a response to PerformBackfill.
+type PerformBackfillResponse struct {
+ // Missing events, arbritrary order.
+ Events []gomatrixserverlib.HeaderedEvent `json:"events"`
+}
diff --git a/roomserver/api/query.go b/roomserver/api/query.go
index c9a46ae9..b1525342 100644
--- a/roomserver/api/query.go
+++ b/roomserver/api/query.go
@@ -18,7 +18,6 @@ package api
import (
"github.com/matrix-org/gomatrixserverlib"
- "github.com/matrix-org/util"
)
// QueryLatestEventsAndStateRequest is a request to QueryLatestEventsAndState
@@ -204,34 +203,6 @@ type QueryStateAndAuthChainResponse struct {
AuthChainEvents []gomatrixserverlib.HeaderedEvent `json:"auth_chain_events"`
}
-// QueryBackfillRequest is a request to QueryBackfill.
-type QueryBackfillRequest struct {
- // The room to backfill
- RoomID string `json:"room_id"`
- // A map of backwards extremity event ID to a list of its prev_event IDs.
- BackwardsExtremities map[string][]string `json:"backwards_extremities"`
- // The maximum number of events to retrieve.
- Limit int `json:"limit"`
- // The server interested in the events.
- ServerName gomatrixserverlib.ServerName `json:"server_name"`
-}
-
-// PrevEventIDs returns the prev_event IDs of all backwards extremities, de-duplicated in a lexicographically sorted order.
-func (r *QueryBackfillRequest) PrevEventIDs() []string {
- var prevEventIDs []string
- for _, pes := range r.BackwardsExtremities {
- prevEventIDs = append(prevEventIDs, pes...)
- }
- prevEventIDs = util.UniqueStrings(prevEventIDs)
- return prevEventIDs
-}
-
-// QueryBackfillResponse is a response to QueryBackfill.
-type QueryBackfillResponse struct {
- // Missing events, arbritrary order.
- Events []gomatrixserverlib.HeaderedEvent `json:"events"`
-}
-
// QueryRoomVersionCapabilitiesRequest asks for the default room version
type QueryRoomVersionCapabilitiesRequest struct{}