From 09480c138a684029bf30c329116e2cbfda624ca2 Mon Sep 17 00:00:00 2001 From: alam0rt Date: Sat, 6 Nov 2021 15:44:55 +1100 Subject: [PATCH] try hacking around some more --- roomserver/internal/helpers/helpers.go | 2 +- roomserver/internal/input/input_events.go | 2 +- .../internal/perform/perform_backfill.go | 2 +- roomserver/internal/query/query.go | 2 +- roomserver/storage/shared/storage.go | 34 ++++++++++++++++++- roomserver/storage/tables/interface.go | 1 - 6 files changed, 37 insertions(+), 6 deletions(-) diff --git a/roomserver/internal/helpers/helpers.go b/roomserver/internal/helpers/helpers.go index a389cc898..207366c76 100644 --- a/roomserver/internal/helpers/helpers.go +++ b/roomserver/internal/helpers/helpers.go @@ -67,7 +67,7 @@ func IsServerCurrentlyInRoom(ctx context.Context, db storage.Database, serverNam return db.GetLocalServerInRoom(ctx, info.RoomNID) } - eventNIDs, err := db.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, true, false) + eventNIDs, err := db.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, "", true, false) if err != nil { return false, err } diff --git a/roomserver/internal/input/input_events.go b/roomserver/internal/input/input_events.go index 2a558c483..96e97ec4b 100644 --- a/roomserver/internal/input/input_events.go +++ b/roomserver/internal/input/input_events.go @@ -256,7 +256,7 @@ func (r *Inputer) calculateAndSetState( stateAtEvent.Overwrite = true var joinEventNIDs []types.EventNID // Request join memberships only for local users only. - if joinEventNIDs, err = r.DB.GetMembershipEventNIDsForRoom(ctx, roomInfo.RoomNID, true, true); err == nil { + if joinEventNIDs, err = r.DB.GetMembershipEventNIDsForRoom(ctx, roomInfo.RoomNID, "", true, true); err == nil { // If we have no local users that are joined to the room then any state about // the room that we have is quite possibly out of date. Therefore in that case // we should overwrite it rather than merge it. diff --git a/roomserver/internal/perform/perform_backfill.go b/roomserver/internal/perform/perform_backfill.go index d9d720f26..bb8f6bfba 100644 --- a/roomserver/internal/perform/perform_backfill.go +++ b/roomserver/internal/perform/perform_backfill.go @@ -537,7 +537,7 @@ func joinEventsFromHistoryVisibility( if err != nil { return nil, err } - joinEventNIDs, err := db.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, true, false) + joinEventNIDs, err := db.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, "", true, false) if err != nil { return nil, err } diff --git a/roomserver/internal/query/query.go b/roomserver/internal/query/query.go index 91018c787..737640444 100644 --- a/roomserver/internal/query/query.go +++ b/roomserver/internal/query/query.go @@ -287,7 +287,7 @@ func (r *Queryer) QueryMembershipsForRoom( var stateEntries []types.StateEntry if stillInRoom { var eventNIDs []types.EventNID - eventNIDs, err = r.DB.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, request.JoinedOnly, false) + eventNIDs, err = r.DB.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, "", request.JoinedOnly, false) if err != nil { return err } diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go index 05daeea50..2d5017250 100644 --- a/roomserver/storage/shared/storage.go +++ b/roomserver/storage/shared/storage.go @@ -6,6 +6,7 @@ import ( "encoding/json" "fmt" "sort" + "strconv" "github.com/matrix-org/dendrite/internal/caching" "github.com/matrix-org/dendrite/internal/sqlutil" @@ -359,7 +360,38 @@ func (d *Database) GetMembershipEventNIDsForRoom( } if len(requestAt) > 0 { - panic("implement me") + var eventNIDs []types.EventNID + var eventNIDsAt []types.EventNID + var err error + var depth int + + depth, err = strconv.Atoi(string(requestAt[1])) + if err != nil { + return nil, err + } + fmt.Printf("XXXXXX %d XXXXXX", depth) + + eventNIDs, err = d.MembershipTable.SelectMembershipsFromRoom(ctx, roomNID, localOnly) + if err != nil { + return nil, err + } + + var eventNIDString []string + for _, nid := range eventNIDs { + eventNIDString = append(eventNIDString, fmt.Sprint(nid)) + } + events, err := d.EventsFromIDs(ctx, eventNIDString) + if err != nil { + return nil, err + } + for _, ev := range events { + fmt.Println(ev) + if ev.Depth() <= int64(depth) { + eventNIDsAt = append(eventNIDsAt, ev.EventNID) + } + } + + return eventNIDsAt, nil } return d.MembershipTable.SelectMembershipsFromRoom(ctx, roomNID, localOnly) diff --git a/roomserver/storage/tables/interface.go b/roomserver/storage/tables/interface.go index 071c6ebaf..8720d4007 100644 --- a/roomserver/storage/tables/interface.go +++ b/roomserver/storage/tables/interface.go @@ -128,7 +128,6 @@ type Membership interface { SelectMembershipForUpdate(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID) (MembershipState, error) SelectMembershipFromRoomAndTarget(ctx context.Context, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID) (types.EventNID, MembershipState, bool, error) SelectMembershipsFromRoom(ctx context.Context, roomNID types.RoomNID, localOnly bool) (eventNIDs []types.EventNID, err error) - SelectMembershipsFromRoomPaginated(ctx context.Context, roomNID types.RoomNID, localOnly bool) (eventNIDs []types.EventNID, err error) SelectMembershipsFromRoomAndMembership(ctx context.Context, roomNID types.RoomNID, membership MembershipState, localOnly bool) (eventNIDs []types.EventNID, err error) UpdateMembership(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID, senderUserNID types.EventStateKeyNID, membership MembershipState, eventNID types.EventNID, forgotten bool) error SelectRoomsWithMembership(ctx context.Context, userID types.EventStateKeyNID, membershipState MembershipState) ([]types.RoomNID, error)