Split out sending the room alias events from creating the alias so that we can do them in the right point when creating a room

This commit is contained in:
Mark Haines 2014-11-18 15:03:01 +00:00
parent c571dd4f0e
commit a5b88c489e
4 changed files with 31 additions and 27 deletions

View File

@ -56,17 +56,11 @@ class DirectoryHandler(BaseHandler):
if not servers: if not servers:
raise SynapseError(400, "Failed to get server list") raise SynapseError(400, "Failed to get server list")
try: yield self.store.create_room_alias_association(
yield self.store.create_room_alias_association( room_alias,
room_alias, room_id,
room_id, servers
servers )
)
except sqlite3.IntegrityError:
defer.returnValue("Already exists")
# TODO: Send the room event.
yield self._update_room_alias_events(user_id, room_id)
@defer.inlineCallbacks @defer.inlineCallbacks
def delete_association(self, user_id, room_alias): def delete_association(self, user_id, room_alias):
@ -136,7 +130,7 @@ class DirectoryHandler(BaseHandler):
}) })
@defer.inlineCallbacks @defer.inlineCallbacks
def _update_room_alias_events(self, user_id, room_id): def send_room_alias_update_event(self, user_id, room_id):
aliases = yield self.store.get_aliases_for_room(room_id) aliases = yield self.store.get_aliases_for_room(room_id)
event = self.event_factory.create_event( event = self.event_factory.create_event(

View File

@ -106,6 +106,15 @@ class RoomCreationHandler(BaseHandler):
if not room_id: if not room_id:
raise StoreError(500, "Couldn't generate a room ID.") raise StoreError(500, "Couldn't generate a room ID.")
if room_alias:
directory_handler = self.hs.get_handlers().directory_handler
yield directory_handler.create_association(
user_id=user_id,
room_id=room_id,
room_alias=room_alias,
servers=[self.hs.hostname],
)
user = self.hs.parse_userid(user_id) user = self.hs.parse_userid(user_id)
creation_events = self._create_events_for_new_room( creation_events = self._create_events_for_new_room(
user, room_id, is_public=is_public user, room_id, is_public=is_public
@ -180,13 +189,7 @@ class RoomCreationHandler(BaseHandler):
if room_alias: if room_alias:
result["room_alias"] = room_alias.to_string() result["room_alias"] = room_alias.to_string()
directory_handler = self.hs.get_handlers().directory_handler directory_handler.send_room_alias_update_event(user_id, room_id)
yield directory_handler.create_association(
user_id=user_id,
room_id=room_id,
room_alias=room_alias,
servers=[self.hs.hostname],
)
defer.returnValue(result) defer.returnValue(result)

View File

@ -70,9 +70,11 @@ class ClientDirectoryServer(RestServlet):
dir_handler = self.handlers.directory_handler dir_handler = self.handlers.directory_handler
try: try:
user_id = user.to_string()
yield dir_handler.create_association( yield dir_handler.create_association(
user.to_string(), room_alias, room_id, servers user_id, room_alias, room_id, servers
) )
yield dir_handler.send_room_alias_update_event(user_id, room_id)
except SynapseError as e: except SynapseError as e:
raise e raise e
except: except:

View File

@ -75,13 +75,18 @@ class DirectoryStore(SQLBaseStore):
Returns: Returns:
Deferred Deferred
""" """
yield self._simple_insert( try:
"room_aliases", yield self._simple_insert(
{ "room_aliases",
"room_alias": room_alias.to_string(), {
"room_id": room_id, "room_alias": room_alias.to_string(),
}, "room_id": room_id,
) },
)
except sqlite3.IntegrityError:
raise SynapseError(
409, "Room alias %s already exists" % room_alias.to_string()
)
for server in servers: for server in servers:
# TODO(erikj): Fix this to bulk insert # TODO(erikj): Fix this to bulk insert