Use gomatrixserverlib.ClientEvent

This commit is contained in:
Kegan Dougal 2017-04-13 15:02:19 +01:00
parent 15ee4a374c
commit 97d7a0bc34
3 changed files with 26 additions and 67 deletions

View file

@ -1,38 +0,0 @@
package events
import (
"encoding/json"
"github.com/matrix-org/gomatrixserverlib"
)
// ClientEvent is an event which is fit for consumption by clients, in accordance with the specification.
type ClientEvent struct {
Content json.RawMessage `json:"content"`
Sender string `json:"sender"`
Type string `json:"type"`
StateKey *string `json:"state_key,omitempty"`
Unsigned json.RawMessage `json:"unsigned,omitempty"`
OriginServerTS int64 `json:"origin_server_ts"`
EventID string `json:"event_id"`
}
// ToClientEvents converts server events to client events
func ToClientEvents(serverEvs []gomatrixserverlib.Event) []ClientEvent {
evs := make([]ClientEvent, len(serverEvs))
for i, se := range serverEvs {
evs[i] = ToClientEvent(se)
}
return evs
}
// ToClientEvent converts a single server event to a client event
func ToClientEvent(se gomatrixserverlib.Event) ClientEvent {
return ClientEvent{
Content: json.RawMessage(se.Content()),
Sender: se.Sender(),
Type: se.Type(),
StateKey: se.StateKey(),
// TODO: No unsigned / origin_server_ts fields?
EventID: se.EventID(),
}
}

View file

@ -8,7 +8,6 @@ import (
log "github.com/Sirupsen/logrus"
"github.com/matrix-org/dendrite/clientapi/auth"
"github.com/matrix-org/dendrite/clientapi/events"
"github.com/matrix-org/dendrite/clientapi/httputil"
"github.com/matrix-org/dendrite/clientapi/jsonerror"
"github.com/matrix-org/dendrite/syncserver/storage"
@ -149,9 +148,9 @@ func (rp *RequestPool) currentSyncForUser(req syncRequest) (*types.Response, err
res.NextBatch = pos.String()
for roomID, d := range data {
jr := types.NewJoinResponse()
jr.Timeline.Events = events.ToClientEvents(d.RecentEvents)
jr.Timeline.Events = gomatrixserverlib.ToClientEvents(d.RecentEvents, gomatrixserverlib.FormatSync)
jr.Timeline.Limited = true
jr.State.Events = events.ToClientEvents(d.State)
jr.State.Events = gomatrixserverlib.ToClientEvents(d.State, gomatrixserverlib.FormatSync)
res.Rooms.Join[roomID] = *jr
}
return res, nil
@ -180,7 +179,7 @@ func (rp *RequestPool) currentSyncForUser(req syncRequest) (*types.Response, err
// for now, dump everything as join timeline events
for _, ev := range evs {
roomData := res.Rooms.Join[ev.RoomID()]
roomData.Timeline.Events = append(roomData.Timeline.Events, events.ToClientEvent(ev))
roomData.Timeline.Events = append(roomData.Timeline.Events, gomatrixserverlib.ToClientEvent(ev, gomatrixserverlib.FormatSync))
res.Rooms.Join[ev.RoomID()] = roomData
}

View file

@ -1,10 +1,8 @@
package types
import (
"strconv"
"github.com/matrix-org/dendrite/clientapi/events"
"github.com/matrix-org/gomatrixserverlib"
"strconv"
)
// StreamPosition represents the offset in the sync stream a client is at.
@ -25,10 +23,10 @@ type RoomData struct {
type Response struct {
NextBatch string `json:"next_batch"`
AccountData struct {
Events []events.ClientEvent `json:"events"`
Events []gomatrixserverlib.ClientEvent `json:"events"`
} `json:"account_data"`
Presence struct {
Events []events.ClientEvent `json:"events"`
Events []gomatrixserverlib.ClientEvent `json:"events"`
} `json:"presence"`
Rooms struct {
Join map[string]JoinResponse `json:"join"`
@ -50,8 +48,8 @@ func NewResponse() *Response {
// TODO: We really shouldn't have to do all this to coerce encoding/json to Do The Right Thing. We should
// really be using our own Marshal/Unmarshal implementations otherwise this may prove to be a CPU bottleneck.
// This also applies to NewJoinResponse, NewInviteResponse and NewLeaveResponse.
res.AccountData.Events = make([]events.ClientEvent, 0)
res.Presence.Events = make([]events.ClientEvent, 0)
res.AccountData.Events = make([]gomatrixserverlib.ClientEvent, 0)
res.Presence.Events = make([]gomatrixserverlib.ClientEvent, 0)
return &res
}
@ -59,61 +57,61 @@ func NewResponse() *Response {
// JoinResponse represents a /sync response for a room which is under the 'join' key.
type JoinResponse struct {
State struct {
Events []events.ClientEvent `json:"events"`
Events []gomatrixserverlib.ClientEvent `json:"events"`
} `json:"state"`
Timeline struct {
Events []events.ClientEvent `json:"events"`
Limited bool `json:"limited"`
PrevBatch string `json:"prev_batch"`
Events []gomatrixserverlib.ClientEvent `json:"events"`
Limited bool `json:"limited"`
PrevBatch string `json:"prev_batch"`
} `json:"timeline"`
Ephemeral struct {
Events []events.ClientEvent `json:"events"`
Events []gomatrixserverlib.ClientEvent `json:"events"`
} `json:"ephemeral"`
AccountData struct {
Events []events.ClientEvent `json:"events"`
Events []gomatrixserverlib.ClientEvent `json:"events"`
} `json:"account_data"`
}
// NewJoinResponse creates an empty response with initialised arrays.
func NewJoinResponse() *JoinResponse {
res := JoinResponse{}
res.State.Events = make([]events.ClientEvent, 0)
res.Timeline.Events = make([]events.ClientEvent, 0)
res.Ephemeral.Events = make([]events.ClientEvent, 0)
res.AccountData.Events = make([]events.ClientEvent, 0)
res.State.Events = make([]gomatrixserverlib.ClientEvent, 0)
res.Timeline.Events = make([]gomatrixserverlib.ClientEvent, 0)
res.Ephemeral.Events = make([]gomatrixserverlib.ClientEvent, 0)
res.AccountData.Events = make([]gomatrixserverlib.ClientEvent, 0)
return &res
}
// InviteResponse represents a /sync response for a room which is under the 'invite' key.
type InviteResponse struct {
InviteState struct {
Events []events.ClientEvent
Events []gomatrixserverlib.ClientEvent
} `json:"invite_state"`
}
// NewInviteResponse creates an empty response with initialised arrays.
func NewInviteResponse() *InviteResponse {
res := InviteResponse{}
res.InviteState.Events = make([]events.ClientEvent, 0)
res.InviteState.Events = make([]gomatrixserverlib.ClientEvent, 0)
return &res
}
// LeaveResponse represents a /sync response for a room which is under the 'leave' key.
type LeaveResponse struct {
State struct {
Events []events.ClientEvent `json:"events"`
Events []gomatrixserverlib.ClientEvent `json:"events"`
} `json:"state"`
Timeline struct {
Events []events.ClientEvent `json:"events"`
Limited bool `json:"limited"`
PrevBatch string `json:"prev_batch"`
Events []gomatrixserverlib.ClientEvent `json:"events"`
Limited bool `json:"limited"`
PrevBatch string `json:"prev_batch"`
} `json:"timeline"`
}
// NewLeaveResponse creates an empty response with initialised arrays.
func NewLeaveResponse() *LeaveResponse {
res := LeaveResponse{}
res.State.Events = make([]events.ClientEvent, 0)
res.Timeline.Events = make([]events.ClientEvent, 0)
res.State.Events = make([]gomatrixserverlib.ClientEvent, 0)
res.Timeline.Events = make([]gomatrixserverlib.ClientEvent, 0)
return &res
}