mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-08-03 06:32:47 +00:00
Add leave rooms to /sync response
This commit is contained in:
parent
4cf73a5dc2
commit
88374a5cc4
4 changed files with 51 additions and 7 deletions
|
@ -698,7 +698,10 @@ func (d *Database) IncrementalSync(
|
|||
To: toPos.PDUPosition,
|
||||
}
|
||||
|
||||
numRecentEventsPerRoom := filter.Room.Timeline.Limit
|
||||
numRecentEventsPerRoom := gomatrixserverlib.DefaultRoomEventFilter().Limit
|
||||
if filter != nil {
|
||||
numRecentEventsPerRoom = filter.Room.Timeline.Limit
|
||||
}
|
||||
|
||||
joinedRoomIDs, err = d.addPDUDeltaToResponse(
|
||||
ctx, device, r, numRecentEventsPerRoom, wantFullState, res,
|
||||
|
@ -813,11 +816,27 @@ func (d *Database) getResponseWithPDUsForCompleteSync(
|
|||
return
|
||||
}
|
||||
|
||||
// TODO: Add "leave" rooms.
|
||||
|
||||
res.Rooms.Join[roomID] = *jr
|
||||
}
|
||||
|
||||
// Extract room state and recent events for all rooms the user has left
|
||||
leaveRoomIDs, err := d.CurrentRoomState.SelectRoomIDsWithMembership(ctx, txn, userID, gomatrixserverlib.Leave)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
// Build up a /sync response. Add leave rooms.
|
||||
for _, roomID := range leaveRoomIDs {
|
||||
var lr *types.LeaveResponse
|
||||
lr, err = d.getLeaveResponseForCompleteSync(
|
||||
ctx, txn, roomID, r, filter, device,
|
||||
)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
res.Rooms.Leave[roomID] = *lr
|
||||
}
|
||||
|
||||
// Add peeked rooms.
|
||||
peeks, err := d.Peeks.SelectPeeksInRange(ctx, txn, userID, device.ID, r)
|
||||
if err != nil {
|
||||
|
@ -926,6 +945,33 @@ func (d *Database) getJoinResponseForCompleteSync(
|
|||
return jr, nil
|
||||
}
|
||||
|
||||
func (d *Database) getLeaveResponseForCompleteSync(
|
||||
ctx context.Context, txn *sql.Tx,
|
||||
roomID string,
|
||||
r types.Range,
|
||||
filter *gomatrixserverlib.Filter,
|
||||
device userapi.Device,
|
||||
) (lr *types.LeaveResponse, err error) {
|
||||
jr, err := d.getJoinResponseForCompleteSync(
|
||||
ctx,
|
||||
txn,
|
||||
roomID,
|
||||
r,
|
||||
filter,
|
||||
device,
|
||||
)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
lr = types.NewLeaveResponse()
|
||||
lr.Timeline.PrevBatch = jr.Timeline.PrevBatch
|
||||
lr.Timeline.Events = jr.Timeline.Events
|
||||
lr.Timeline.Limited = jr.Timeline.Limited
|
||||
lr.State.Events = jr.State.Events
|
||||
return lr, nil
|
||||
}
|
||||
|
||||
func (d *Database) CompleteSync(
|
||||
ctx context.Context,
|
||||
res *types.Response,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue