Skip to content
Snippets Groups Projects
Commit e58a9d78 authored by Erik Johnston's avatar Erik Johnston
Browse files

Filter remote rooms lists locally

parent 74d4cdee
No related branches found
No related tags found
No related merge requests found
...@@ -212,16 +212,7 @@ class RoomListHandler(BaseHandler): ...@@ -212,16 +212,7 @@ class RoomListHandler(BaseHandler):
if avatar_url: if avatar_url:
result["avatar_url"] = avatar_url result["avatar_url"] = avatar_url
logger.info("search_filter: %r", search_filter) if _matches_room_entry(result, search_filter):
if search_filter and search_filter.get("generic_search_term", None):
generic_search_term = search_filter["generic_search_term"]
if generic_search_term in result.get("name", ""):
chunk.append(result)
elif generic_search_term in result.get("topic", ""):
chunk.append(result)
elif generic_search_term in result.get("canonical_alias", ""):
chunk.append(result)
else:
chunk.append(result) chunk.append(result)
yield concurrently_execute(handle_room, rooms_to_scan, 10) yield concurrently_execute(handle_room, rooms_to_scan, 10)
...@@ -291,8 +282,16 @@ class RoomListHandler(BaseHandler): ...@@ -291,8 +282,16 @@ class RoomListHandler(BaseHandler):
search_filter=None): search_filter=None):
res = yield self.hs.get_replication_layer().get_public_rooms( res = yield self.hs.get_replication_layer().get_public_rooms(
server_name, limit=limit, since_token=since_token, server_name, limit=limit, since_token=since_token,
search_filter=search_filter,
) )
if search_filter:
res["chunk"] = [
entry
for entry in dict(res.get("chunk", []))
if _matches_room_entry(entry, search_filter)
]
defer.returnValue(res) defer.returnValue(res)
...@@ -329,3 +328,18 @@ class RoomListNextBatch(namedtuple("RoomListNextBatch", ( ...@@ -329,3 +328,18 @@ class RoomListNextBatch(namedtuple("RoomListNextBatch", (
return self._replace( return self._replace(
**kwds **kwds
) )
def _matches_room_entry(room_entry, search_filter):
if search_filter and search_filter.get("generic_search_term", None):
generic_search_term = search_filter["generic_search_term"]
if generic_search_term in room_entry.get("name", ""):
return True
elif generic_search_term in room_entry.get("topic", ""):
return True
elif generic_search_term in room_entry.get("canonical_alias", ""):
return True
else:
return True
return False
...@@ -376,7 +376,7 @@ class EventFederationStore(SQLBaseStore): ...@@ -376,7 +376,7 @@ class EventFederationStore(SQLBaseStore):
INNER JOIN ( INNER JOIN (
SELECT room_id, MAX(stream_ordering) AS stream_ordering SELECT room_id, MAX(stream_ordering) AS stream_ordering
FROM stream_ordering_to_exterm FROM stream_ordering_to_exterm
WHERE stream_ordering < ? GROUP BY room_id WHERE stream_ordering <= ? GROUP BY room_id
) AS rms USING (room_id, stream_ordering) ) AS rms USING (room_id, stream_ordering)
WHERE room_id = ? WHERE room_id = ?
""") """)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment