Docs and indents

This commit is contained in:
Erik Johnston 2016-04-04 18:02:48 +01:00
parent 92ab45a330
commit 0c53d750e7
3 changed files with 31 additions and 14 deletions

View File

@ -400,7 +400,10 @@ class RoomMemberHandler(BaseHandler):
@defer.inlineCallbacks
def get_inviter(self, user_id, room_id):
invite = yield self.store.get_inviter(user_id=user_id, room_id=room_id)
invite = yield self.store.get_invite_for_user_in_room(
user_id=user_id,
room_id=room_id,
)
if invite:
defer.returnValue(UserID.from_string(invite.sender))

View File

@ -66,11 +66,15 @@ class RoomMemberStore(SQLBaseStore):
self.get_invited_rooms_for_user.invalidate, (event.state_key,)
)
is_mine = self.hs.is_mine_id(event.state_key)
# We update the local_invites table only if the event is "current",
# i.e., its something that has just happened.
# The only current event that can also be an outlier is if its an
# invite that has come in across federation.
is_new_state = not backfilled and (
not event.internal_metadata.is_outlier()
or event.internal_metadata.is_invite_from_remote()
)
is_mine = self.hs.is_mine_id(event.state_key)
if is_new_state and is_mine:
if event.membership == Membership.INVITE:
self._simple_insert_txn(
@ -163,7 +167,17 @@ class RoomMemberStore(SQLBaseStore):
)
@defer.inlineCallbacks
def get_inviter(self, user_id, room_id):
def get_invite_for_user_in_room(self, user_id, room_id):
"""Gets the invite for the given user and room
Args:
user_id (str)
room_id (str)
Returns:
Deferred: Resolves to either a RoomsForUser or None if no invite was
found.
"""
invites = yield self.get_invited_rooms_for_user(user_id)
for invite in invites:
if invite.room_id == room_id:

View File

@ -26,17 +26,17 @@ CREATE TABLE local_invites(
-- Insert all invites for local users into new `invites` table
INSERT INTO local_invites SELECT
stream_ordering as stream_id,
sender as inviter,
state_key as invitee,
event_id,
room_id,
NULL as locally_rejected,
NULL as replaced_by
FROM events
NATURAL JOIN current_state_events
NATURAL JOIN room_memberships
WHERE membership = 'invite' AND state_key IN (SELECT name FROM users);
stream_ordering as stream_id,
sender as inviter,
state_key as invitee,
event_id,
room_id,
NULL as locally_rejected,
NULL as replaced_by
FROM events
NATURAL JOIN current_state_events
NATURAL JOIN room_memberships
WHERE membership = 'invite' AND state_key IN (SELECT name FROM users);
CREATE INDEX local_invites_id ON local_invites(stream_id);
CREATE INDEX local_invites_for_user_idx ON local_invites(invitee, locally_rejected, replaced_by, room_id);