Use the invite table to list the active invites for a user

This commit is contained in:
Mark Haines 2017-09-20 11:29:00 +01:00
parent 37fcb77768
commit ddd9841cb2
3 changed files with 17 additions and 9 deletions

View file

@ -140,7 +140,10 @@ func (s *currentRoomStateStatements) selectJoinedUsers(
// SelectRoomIDsWithMembership returns the list of room IDs which have the given user in the given membership state. // SelectRoomIDsWithMembership returns the list of room IDs which have the given user in the given membership state.
func (s *currentRoomStateStatements) selectRoomIDsWithMembership( func (s *currentRoomStateStatements) selectRoomIDsWithMembership(
ctx context.Context, txn *sql.Tx, userID, membership string, ctx context.Context,
txn *sql.Tx,
userID string,
membership string, // nolint: unparam
) ([]string, error) { ) ([]string, error) {
stmt := common.TxStmt(txn, s.selectRoomIDsWithMembershipStmt) stmt := common.TxStmt(txn, s.selectRoomIDsWithMembershipStmt)
rows, err := stmt.QueryContext(ctx, userID, membership) rows, err := stmt.QueryContext(ctx, userID, membership)

View file

@ -4,6 +4,8 @@ import (
"context" "context"
"database/sql" "database/sql"
"github.com/matrix-org/dendrite/common"
"github.com/matrix-org/gomatrixserverlib" "github.com/matrix-org/gomatrixserverlib"
) )
@ -67,11 +69,10 @@ func (s *inviteEventsStatements) insertInviteEvent(
// selectInviteEventsInRange returns a map of room ID to invite event for the // selectInviteEventsInRange returns a map of room ID to invite event for the
// active invites for the target user ID in the supplied range. // active invites for the target user ID in the supplied range.
func (s *inviteEventsStatements) selectInviteEventsInRange( func (s *inviteEventsStatements) selectInviteEventsInRange(
ctx context.Context, targetUserID string, startPos, endPos int64, ctx context.Context, txn *sql.Tx, targetUserID string, startPos, endPos int64,
) (map[string]gomatrixserverlib.Event, error) { ) (map[string]gomatrixserverlib.Event, error) {
rows, err := s.selectInviteEventsInRangeStmt.QueryContext( stmt := common.TxStmt(txn, s.selectInviteEventsInRangeStmt)
ctx, targetUserID, startPos, endPos, rows, err := stmt.QueryContext(ctx, targetUserID, startPos, endPos)
)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View file

@ -367,16 +367,20 @@ func (d *SyncServerDatabase) UpsertAccountData(
func (d *SyncServerDatabase) addInvitesToResponse( func (d *SyncServerDatabase) addInvitesToResponse(
ctx context.Context, txn *sql.Tx, ctx context.Context, txn *sql.Tx,
userID string, userID string,
_, _ types.StreamPosition, fromPos, toPos types.StreamPosition,
res *types.Response, res *types.Response,
) error { ) error {
// Add invites - TODO: This will break over federation as they won't be in the current state table according to Mark. invites, err := d.invites.selectInviteEventsInRange(
roomIDs, err := d.roomstate.selectRoomIDsWithMembership(ctx, txn, userID, "invite") ctx, txn, userID, int64(fromPos), int64(toPos),
)
if err != nil { if err != nil {
return err return err
} }
for _, roomID := range roomIDs { for roomID, inviteEvent := range invites {
ir := types.NewInviteResponse() ir := types.NewInviteResponse()
ir.InviteState.Events = gomatrixserverlib.ToClientEvents(
[]gomatrixserverlib.Event{inviteEvent}, gomatrixserverlib.FormatSync,
)
// TODO: invite_state. The state won't be in the current state table in cases where you get invited over federation // TODO: invite_state. The state won't be in the current state table in cases where you get invited over federation
res.Rooms.Invite[roomID] = *ir res.Rooms.Invite[roomID] = *ir
} }