mirror of
https://github.com/element-hq/synapse
synced 2024-09-01 01:40:20 +00:00
Add a better _store_room_member_txn() method that takes separated fields instead of an event object; also add FIXME comment about a big bug in the logic
This commit is contained in:
parent
aaf9ab68c6
commit
249e8f2277
1 changed files with 21 additions and 8 deletions
|
@ -27,36 +27,49 @@ logger = logging.getLogger(__name__)
|
||||||
class RoomMemberStore(SQLBaseStore):
|
class RoomMemberStore(SQLBaseStore):
|
||||||
|
|
||||||
def _store_room_member_from_event_txn(self, txn, event):
|
def _store_room_member_from_event_txn(self, txn, event):
|
||||||
|
self._store_room_member_txn(txn,
|
||||||
|
target_user_id=event.state_key,
|
||||||
|
sender_user_id=event.user_id,
|
||||||
|
room_id=event.room_id,
|
||||||
|
event_id=event.event_id,
|
||||||
|
membership=event.membership,
|
||||||
|
)
|
||||||
|
|
||||||
|
def _store_room_member_txn(self, txn, target_user_id, sender_user_id,
|
||||||
|
room_id, event_id, membership):
|
||||||
"""Store a room member in the database.
|
"""Store a room member in the database.
|
||||||
"""
|
"""
|
||||||
target_user_id = event.state_key
|
|
||||||
domain = self.hs.parse_userid(target_user_id).domain
|
domain = self.hs.parse_userid(target_user_id).domain
|
||||||
|
|
||||||
self._simple_insert_txn(
|
self._simple_insert_txn(
|
||||||
txn,
|
txn,
|
||||||
"room_memberships",
|
"room_memberships",
|
||||||
{
|
{
|
||||||
"event_id": event.event_id,
|
"event_id": event_id,
|
||||||
"user_id": target_user_id,
|
"user_id": target_user_id,
|
||||||
"sender": event.user_id,
|
"sender": sender_user_id,
|
||||||
"room_id": event.room_id,
|
"room_id": room_id,
|
||||||
"membership": event.membership,
|
"membership": membership,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
# Update room hosts table
|
# Update room hosts table
|
||||||
if event.membership == Membership.JOIN:
|
# TODO(paul): This code is massively broken currently as it doesn't
|
||||||
|
# count users per room - meaning it'll delete on the FIRST user to
|
||||||
|
# have a membership other than JOIN - say, LEAVE, or even INVITE.
|
||||||
|
# FIXME
|
||||||
|
if membership == Membership.JOIN:
|
||||||
sql = (
|
sql = (
|
||||||
"INSERT OR IGNORE INTO room_hosts (room_id, host) "
|
"INSERT OR IGNORE INTO room_hosts (room_id, host) "
|
||||||
"VALUES (?, ?)"
|
"VALUES (?, ?)"
|
||||||
)
|
)
|
||||||
txn.execute(sql, (event.room_id, domain))
|
txn.execute(sql, (room_id, domain))
|
||||||
else:
|
else:
|
||||||
sql = (
|
sql = (
|
||||||
"DELETE FROM room_hosts WHERE room_id = ? AND host = ?"
|
"DELETE FROM room_hosts WHERE room_id = ? AND host = ?"
|
||||||
)
|
)
|
||||||
|
|
||||||
txn.execute(sql, (event.room_id, domain))
|
txn.execute(sql, (room_id, domain))
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_room_member(self, user_id, room_id):
|
def get_room_member(self, user_id, room_id):
|
||||||
|
|
Loading…
Reference in a new issue