mirror of
https://github.com/matrix-org/sliding-sync.git
synced 2025-03-10 13:37:11 +00:00
Refactor server to put events in events
and event IDs elsewhere
No LRU cache yet
This commit is contained in:
parent
6c58ee96d6
commit
74a591d913
@ -1,9 +1,12 @@
|
||||
package streams
|
||||
|
||||
import "encoding/json"
|
||||
|
||||
type Response struct {
|
||||
Next string `json:"next_batch"`
|
||||
Typing *TypingResponse `json:"typing,omitempty"`
|
||||
ToDevice *ToDeviceResponse `json:"to_device,omitempty"`
|
||||
RoomMember *RoomMemberResponse `json:"room_member,omitempty"`
|
||||
RoomList *RoomListResponse `json:"room_list,omitempty"`
|
||||
Next string `json:"next_batch"`
|
||||
Typing *TypingResponse `json:"typing,omitempty"`
|
||||
ToDevice *ToDeviceResponse `json:"to_device,omitempty"`
|
||||
RoomMember *RoomMemberResponse `json:"room_member,omitempty"`
|
||||
RoomList *RoomListResponse `json:"room_list,omitempty"`
|
||||
Events map[string]json.RawMessage `json:"events,omitempty"`
|
||||
}
|
||||
|
@ -30,6 +30,10 @@ const (
|
||||
// Sort rooms by the calculated room name server-side
|
||||
// https://spec.matrix.org/unstable/client-server-api/#calculating-the-display-name-for-a-room
|
||||
SortRoomListByName RoomListSortOrder = "by_name"
|
||||
|
||||
// Sort according to unread notifications
|
||||
SortRoomListByHighlightCount RoomListSortOrder = "by_highlight_count"
|
||||
SortRoomListByNotificationCount RoomListSortOrder = "by_notification_count"
|
||||
)
|
||||
|
||||
// FilterRoomList represents a filter on the RoomList stream
|
||||
@ -76,10 +80,9 @@ type RoomListResponse struct {
|
||||
}
|
||||
|
||||
type RoomListEntry struct {
|
||||
RoomID string `json:"room_id"`
|
||||
Name string `json:"name"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
Tag interface{} `json:"tag"`
|
||||
RoomID string `json:"room_id"`
|
||||
Name string `json:"name"`
|
||||
Timestamp int64 `json:"timestamp"`
|
||||
// MemberCount TODO
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,7 @@ type RoomMemberResponse struct {
|
||||
// Negotiated: The actual limit the server used.
|
||||
Limit int `json:"limit"`
|
||||
// The m.room.member events
|
||||
Events []json.RawMessage `json:"events"`
|
||||
Events []string `json:"events"`
|
||||
// The pagination parameters to request the next page, can be empty if all members fit on one page.
|
||||
NextPage string `json:"next_page,omitempty"`
|
||||
}
|
||||
@ -75,9 +75,10 @@ func membershipEnumForString(s string) membershipEnum {
|
||||
}
|
||||
|
||||
type memberEvent struct {
|
||||
PL int64 // for sorting by PL
|
||||
Name string // for sorting by Name
|
||||
Membership membershipEnum // for sorting by Membership
|
||||
PL int64 // for sorting by PL
|
||||
Name string // for sorting by Name
|
||||
Membership membershipEnum // for sorting by Membership
|
||||
ID string
|
||||
JSON json.RawMessage // The data
|
||||
}
|
||||
|
||||
@ -195,6 +196,7 @@ func (s *RoomMember) paginatedDataAtPoint(session *sync3.Session, pos int64, sor
|
||||
Name: strings.ToLower(name),
|
||||
Membership: membershipEnumForString(evJSON.Get("content.membership").Str),
|
||||
PL: plContent.UserLevel(stateKey),
|
||||
ID: ev.ID,
|
||||
JSON: ev.JSON,
|
||||
}
|
||||
members = append(members, mem)
|
||||
@ -250,9 +252,10 @@ func (s *RoomMember) paginatedDataAtPoint(session *sync3.Session, pos int64, sor
|
||||
}
|
||||
result := members[startIndex:endIndex]
|
||||
resp.RoomMember = &RoomMemberResponse{}
|
||||
resp.RoomMember.Events = make([]json.RawMessage, len(result))
|
||||
resp.RoomMember.Events = make([]string, len(result))
|
||||
for i := range result {
|
||||
resp.RoomMember.Events[i] = result[i].JSON
|
||||
resp.Events[result[i].ID] = result[i].JSON
|
||||
resp.RoomMember.Events[i] = result[i].ID
|
||||
}
|
||||
if endIndex != len(members) {
|
||||
// we aren't at the end
|
||||
@ -269,6 +272,11 @@ func (s *RoomMember) streamingDataInRange(session *sync3.Session, fromExcl, toIn
|
||||
return 0, err
|
||||
}
|
||||
resp.RoomMember = &RoomMemberResponse{}
|
||||
resp.RoomMember.Events = events
|
||||
resp.RoomMember.Events = make([]string, len(events))
|
||||
for i := range events {
|
||||
eventID := gjson.GetBytes(events[i], "event_id").Str
|
||||
resp.Events[eventID] = events[i]
|
||||
resp.RoomMember.Events[i] = eventID
|
||||
}
|
||||
return upTo, nil
|
||||
}
|
||||
|
4
v3.go
4
v3.go
@ -216,7 +216,9 @@ func (h *SyncV3Handler) serve(w http.ResponseWriter, req *http.Request) *handler
|
||||
}
|
||||
|
||||
// start making the response
|
||||
resp := streams.Response{}
|
||||
resp := streams.Response{
|
||||
Events: make(map[string]json.RawMessage),
|
||||
}
|
||||
|
||||
// invoke streams to get responses
|
||||
for _, stream := range h.streams {
|
||||
|
@ -831,7 +831,8 @@ func TestHandlerRoomMember(t *testing.T) {
|
||||
t.Fatalf("got %d room members, want %d - test case: %v", len(v3resp.RoomMember.Events), len(req.WantUserIDs), tc.Name)
|
||||
}
|
||||
for i := range req.WantUserIDs {
|
||||
gotUserID := gjson.GetBytes(v3resp.RoomMember.Events[i], "state_key").Str
|
||||
eventID := v3resp.RoomMember.Events[i]
|
||||
gotUserID := gjson.GetBytes(v3resp.Events[eventID], "state_key").Str
|
||||
if gotUserID != req.WantUserIDs[i] {
|
||||
t.Errorf("position %d got %v want %v - test case: %v", i, gotUserID, req.WantUserIDs[i], tc.Name)
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user