mirror of
https://git.anonymousland.org/anonymousland/synapse-product.git
synced 2025-05-06 14:35:01 -04:00
Add search by room ID and room alias to List Room admin API (#11099)
Fixes: #10874 Signed-off-by: Dirk Klimpel dirk@klimpel.org
This commit is contained in:
parent
46d0937447
commit
7537201840
4 changed files with 76 additions and 53 deletions
|
@ -412,22 +412,33 @@ class RoomWorkerStore(SQLBaseStore):
|
|||
limit: maximum amount of rooms to retrieve
|
||||
order_by: the sort order of the returned list
|
||||
reverse_order: whether to reverse the room list
|
||||
search_term: a string to filter room names by
|
||||
search_term: a string to filter room names,
|
||||
canonical alias and room ids by.
|
||||
Room ID must match exactly. Canonical alias must match a substring of the local part.
|
||||
Returns:
|
||||
A list of room dicts and an integer representing the total number of
|
||||
rooms that exist given this query
|
||||
"""
|
||||
# Filter room names by a string
|
||||
where_statement = ""
|
||||
search_pattern = []
|
||||
if search_term:
|
||||
where_statement = "WHERE LOWER(state.name) LIKE ?"
|
||||
where_statement = """
|
||||
WHERE LOWER(state.name) LIKE ?
|
||||
OR LOWER(state.canonical_alias) LIKE ?
|
||||
OR state.room_id = ?
|
||||
"""
|
||||
|
||||
# Our postgres db driver converts ? -> %s in SQL strings as that's the
|
||||
# placeholder for postgres.
|
||||
# HOWEVER, if you put a % into your SQL then everything goes wibbly.
|
||||
# To get around this, we're going to surround search_term with %'s
|
||||
# before giving it to the database in python instead
|
||||
search_term = "%" + search_term.lower() + "%"
|
||||
search_pattern = [
|
||||
"%" + search_term.lower() + "%",
|
||||
"#%" + search_term.lower() + "%:%",
|
||||
search_term,
|
||||
]
|
||||
|
||||
# Set ordering
|
||||
if RoomSortOrder(order_by) == RoomSortOrder.SIZE:
|
||||
|
@ -519,12 +530,9 @@ class RoomWorkerStore(SQLBaseStore):
|
|||
)
|
||||
|
||||
def _get_rooms_paginate_txn(txn):
|
||||
# Execute the data query
|
||||
sql_values = (limit, start)
|
||||
if search_term:
|
||||
# Add the search term into the WHERE clause
|
||||
sql_values = (search_term,) + sql_values
|
||||
txn.execute(info_sql, sql_values)
|
||||
# Add the search term into the WHERE clause
|
||||
# and execute the data query
|
||||
txn.execute(info_sql, search_pattern + [limit, start])
|
||||
|
||||
# Refactor room query data into a structured dictionary
|
||||
rooms = []
|
||||
|
@ -551,8 +559,7 @@ class RoomWorkerStore(SQLBaseStore):
|
|||
# Execute the count query
|
||||
|
||||
# Add the search term into the WHERE clause if present
|
||||
sql_values = (search_term,) if search_term else ()
|
||||
txn.execute(count_sql, sql_values)
|
||||
txn.execute(count_sql, search_pattern)
|
||||
|
||||
room_count = txn.fetchone()
|
||||
return rooms, room_count[0]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue