mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-02-28 13:53:00 +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
|
@ -21,7 +21,6 @@ import (
|
|||
|
||||
"github.com/matrix-org/dendrite/clientapi/jsonerror"
|
||||
"github.com/matrix-org/dendrite/syncapi/storage"
|
||||
"github.com/matrix-org/dendrite/syncapi/sync"
|
||||
"github.com/matrix-org/dendrite/userapi/api"
|
||||
"github.com/matrix-org/gomatrixserverlib"
|
||||
"github.com/matrix-org/util"
|
||||
|
@ -105,7 +104,7 @@ func PutFilter(
|
|||
limitRes := gjson.GetBytes(body, "room.timeline.limit")
|
||||
if !limitRes.Exists() {
|
||||
util.GetLogger(req.Context()).Infof("missing timeline limit, using default")
|
||||
filter.Room.Timeline.Limit = sync.DefaultTimelineLimit
|
||||
filter.Room.Timeline.Limit = gomatrixserverlib.DefaultRoomEventFilter().Limit
|
||||
}
|
||||
|
||||
// Validate generates a user-friendly error
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -367,7 +367,7 @@ func newTestSyncRequest(userID, deviceID string, since types.StreamingToken) syn
|
|||
timeout: 1 * time.Minute,
|
||||
since: since,
|
||||
wantFullState: false,
|
||||
limit: DefaultTimelineLimit,
|
||||
limit: gomatrixserverlib.DefaultRoomEventFilter().Limit,
|
||||
log: util.GetLogger(context.TODO()),
|
||||
ctx: context.TODO(),
|
||||
}
|
||||
|
|
|
@ -31,7 +31,6 @@ import (
|
|||
|
||||
const defaultSyncTimeout = time.Duration(0)
|
||||
const defaultIncludeLeave = false
|
||||
const DefaultTimelineLimit = 20
|
||||
|
||||
// syncRequest represents a /sync request, with sensible defaults/sanity checks applied.
|
||||
type syncRequest struct {
|
||||
|
|
Loading…
Reference in a new issue