mirror of
https://mau.dev/maunium/synapse.git
synced 2024-12-15 07:13:49 +01:00
Make snapshot_all_rooms return results in the correct form, including start and end tokens.
This commit is contained in:
parent
709a92cee8
commit
4eb8f84aa8
2 changed files with 28 additions and 6 deletions
|
@ -269,11 +269,16 @@ class MessageHandler(BaseHandler):
|
||||||
if event.membership != Membership.JOIN:
|
if event.membership != Membership.JOIN:
|
||||||
continue
|
continue
|
||||||
try:
|
try:
|
||||||
messages = yield self.store.get_recent_events_for_room(
|
messages, token = yield self.store.get_recent_events_for_room(
|
||||||
event.room_id,
|
event.room_id,
|
||||||
limit=50,
|
limit=50,
|
||||||
)
|
)
|
||||||
d["messages"] = [m.get_dict() for m in messages]
|
|
||||||
|
d["messages"] = {
|
||||||
|
"chunk": [m.get_dict() for m in messages],
|
||||||
|
"start": token[0],
|
||||||
|
"end": token[1],
|
||||||
|
}
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
|
@ -104,19 +104,36 @@ class StreamStore(SQLBaseStore):
|
||||||
def get_recent_events_for_room(self, room_id, limit, with_feedback=False):
|
def get_recent_events_for_room(self, room_id, limit, with_feedback=False):
|
||||||
# TODO (erikj): Handle compressed feedback
|
# TODO (erikj): Handle compressed feedback
|
||||||
|
|
||||||
|
end_token = yield self.get_room_events_max_id()
|
||||||
|
|
||||||
sql = (
|
sql = (
|
||||||
"SELECT * FROM events WHERE room_id = ? "
|
"SELECT * FROM events WHERE "
|
||||||
"ORDER BY token_ordering, rowid DESC LIMIT ? "
|
"WHERE room_id = ? AND token_ordering <= ? "
|
||||||
|
"ORDER BY topological_ordering, rowid DESC LIMIT ? "
|
||||||
)
|
)
|
||||||
|
|
||||||
rows = yield self._execute_and_decode(
|
rows = yield self._execute_and_decode(
|
||||||
sql,
|
sql,
|
||||||
room_id, limit
|
room_id, end_token, limit
|
||||||
)
|
)
|
||||||
|
|
||||||
rows.reverse() # As we selected with reverse ordering
|
rows.reverse() # As we selected with reverse ordering
|
||||||
|
|
||||||
defer.returnValue([self._parse_event_from_row(r) for r in rows])
|
if rows:
|
||||||
|
topo = rows[0]["topological_ordering"]
|
||||||
|
row_id = rows[0]["rowid"]
|
||||||
|
start_token = "p%s-%s" % (topo, row_id)
|
||||||
|
|
||||||
|
token = (start_token, end_token)
|
||||||
|
else:
|
||||||
|
token = ("START", end_token)
|
||||||
|
|
||||||
|
defer.returnValue(
|
||||||
|
(
|
||||||
|
[self._parse_event_from_row(r) for r in rows],
|
||||||
|
token
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def get_room_events_max_id(self):
|
def get_room_events_max_id(self):
|
||||||
|
|
Loading…
Reference in a new issue