mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-16 18:43:10 -06:00
Query state events with and without filter
This commit is contained in:
parent
015876ed76
commit
ad5380ac84
|
|
@ -5,10 +5,11 @@ import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
|
|
||||||
"github.com/matrix-org/dendrite/internal/eventutil"
|
"github.com/matrix-org/dendrite/internal/eventutil"
|
||||||
"github.com/matrix-org/dendrite/syncapi/types"
|
"github.com/matrix-org/dendrite/syncapi/types"
|
||||||
userapi "github.com/matrix-org/dendrite/userapi/api"
|
userapi "github.com/matrix-org/dendrite/userapi/api"
|
||||||
"github.com/matrix-org/gomatrixserverlib"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type DatabaseTransaction struct {
|
type DatabaseTransaction struct {
|
||||||
|
|
@ -311,7 +312,7 @@ func (d *DatabaseTransaction) GetStateDeltas(
|
||||||
}
|
}
|
||||||
|
|
||||||
// get all the state events ever (i.e. for all available rooms) between these two positions
|
// get all the state events ever (i.e. for all available rooms) between these two positions
|
||||||
stateNeeded, eventMap, err := d.OutputEvents.SelectStateInRange(ctx, d.txn, r, stateFilter, allRoomIDs)
|
stateNeeded, eventMap, err := d.OutputEvents.SelectStateInRange(ctx, d.txn, r, nil, allRoomIDs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
return nil, nil, nil
|
return nil, nil, nil
|
||||||
|
|
@ -326,6 +327,22 @@ func (d *DatabaseTransaction) GetStateDeltas(
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// get all the state events ever (i.e. for all available rooms) between these two positions
|
||||||
|
stateNeededFiltered, eventMapFiltered, err := d.OutputEvents.SelectStateInRange(ctx, d.txn, r, stateFilter, allRoomIDs)
|
||||||
|
if err != nil {
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
return nil, nil, nil
|
||||||
|
}
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
stateFiltered, err := d.fetchStateEvents(ctx, d.txn, stateNeededFiltered, eventMapFiltered)
|
||||||
|
if err != nil {
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
return nil, nil, nil
|
||||||
|
}
|
||||||
|
return nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
// find out which rooms this user is peeking, if any.
|
// find out which rooms this user is peeking, if any.
|
||||||
// We do this before joins so any peeks get overwritten
|
// We do this before joins so any peeks get overwritten
|
||||||
peeks, err := d.Peeks.SelectPeeksInRange(ctx, d.txn, userID, device.ID, r)
|
peeks, err := d.Peeks.SelectPeeksInRange(ctx, d.txn, userID, device.ID, r)
|
||||||
|
|
@ -371,6 +388,7 @@ func (d *DatabaseTransaction) GetStateDeltas(
|
||||||
// If our membership is now join but the previous membership wasn't
|
// If our membership is now join but the previous membership wasn't
|
||||||
// then this is a "join transition", so we'll insert this room.
|
// then this is a "join transition", so we'll insert this room.
|
||||||
if prevMembership != membership {
|
if prevMembership != membership {
|
||||||
|
newlyJoinedRooms[roomID] = true
|
||||||
// Get the full room state, as we'll send that down for a newly
|
// Get the full room state, as we'll send that down for a newly
|
||||||
// joined room instead of a delta.
|
// joined room instead of a delta.
|
||||||
var s []types.StreamEvent
|
var s []types.StreamEvent
|
||||||
|
|
@ -383,8 +401,7 @@ func (d *DatabaseTransaction) GetStateDeltas(
|
||||||
|
|
||||||
// Add the information for this room into the state so that
|
// Add the information for this room into the state so that
|
||||||
// it will get added with all of the rest of the joined rooms.
|
// it will get added with all of the rest of the joined rooms.
|
||||||
state[roomID] = s
|
stateFiltered[roomID] = s
|
||||||
newlyJoinedRooms[roomID] = true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// We won't add joined rooms into the delta at this point as they
|
// We won't add joined rooms into the delta at this point as they
|
||||||
|
|
@ -395,7 +412,7 @@ func (d *DatabaseTransaction) GetStateDeltas(
|
||||||
deltas = append(deltas, types.StateDelta{
|
deltas = append(deltas, types.StateDelta{
|
||||||
Membership: membership,
|
Membership: membership,
|
||||||
MembershipPos: ev.StreamPosition,
|
MembershipPos: ev.StreamPosition,
|
||||||
StateEvents: d.StreamEventsToEvents(device, stateStreamEvents),
|
StateEvents: d.StreamEventsToEvents(device, stateFiltered[roomID]),
|
||||||
RoomID: roomID,
|
RoomID: roomID,
|
||||||
})
|
})
|
||||||
break
|
break
|
||||||
|
|
@ -407,7 +424,7 @@ func (d *DatabaseTransaction) GetStateDeltas(
|
||||||
for _, joinedRoomID := range joinedRoomIDs {
|
for _, joinedRoomID := range joinedRoomIDs {
|
||||||
deltas = append(deltas, types.StateDelta{
|
deltas = append(deltas, types.StateDelta{
|
||||||
Membership: gomatrixserverlib.Join,
|
Membership: gomatrixserverlib.Join,
|
||||||
StateEvents: d.StreamEventsToEvents(device, state[joinedRoomID]),
|
StateEvents: d.StreamEventsToEvents(device, stateFiltered[joinedRoomID]),
|
||||||
RoomID: joinedRoomID,
|
RoomID: joinedRoomID,
|
||||||
NewlyJoined: newlyJoinedRooms[joinedRoomID],
|
NewlyJoined: newlyJoinedRooms[joinedRoomID],
|
||||||
})
|
})
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue