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 @defer.inlineCallbacks
def get_inviter(self, user_id, room_id): 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: if invite:
defer.returnValue(UserID.from_string(invite.sender)) 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,) 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 ( is_new_state = not backfilled and (
not event.internal_metadata.is_outlier() not event.internal_metadata.is_outlier()
or event.internal_metadata.is_invite_from_remote() 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 is_new_state and is_mine:
if event.membership == Membership.INVITE: if event.membership == Membership.INVITE:
self._simple_insert_txn( self._simple_insert_txn(
@ -163,7 +167,17 @@ class RoomMemberStore(SQLBaseStore):
) )
@defer.inlineCallbacks @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) invites = yield self.get_invited_rooms_for_user(user_id)
for invite in invites: for invite in invites:
if invite.room_id == room_id: 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 all invites for local users into new `invites` table
INSERT INTO local_invites SELECT INSERT INTO local_invites SELECT
stream_ordering as stream_id, stream_ordering as stream_id,
sender as inviter, sender as inviter,
state_key as invitee, state_key as invitee,
event_id, event_id,
room_id, room_id,
NULL as locally_rejected, NULL as locally_rejected,
NULL as replaced_by NULL as replaced_by
FROM events FROM events
NATURAL JOIN current_state_events NATURAL JOIN current_state_events
NATURAL JOIN room_memberships NATURAL JOIN room_memberships
WHERE membership = 'invite' AND state_key IN (SELECT name FROM users); 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_id ON local_invites(stream_id);
CREATE INDEX local_invites_for_user_idx ON local_invites(invitee, locally_rejected, replaced_by, room_id); CREATE INDEX local_invites_for_user_idx ON local_invites(invitee, locally_rejected, replaced_by, room_id);