Refactor the event-tile generation loop to go forwards rather than backwards,
which makes it easier to figure out whether we are displaying a continuation of
the previous event, and whether we need a date separator.
Also only display the date separator at the top of the room if there's no more
scrollback to be shown.
This fixesvector-im/vector-web#431
When the JS SDK encounters a new room it will emit a flurry of events for things
like state and room members. Refreshing the room list on each event is bad for
performance. This is okay initially because the room list is only shown after
the first sync, but when getting archived rooms it locks up for 15-30s as it
thrashes. Add a 1s cap to refreshRoomList() which means that it will refresh
*AT MOST* once every second. If it has been >1s since the last refresh it will
immediately refresh. If it has been <1s it will wait the difference.
* factor out the call to MatrixClient.search to a separate _getSearchBatch (so
that we can reuse it for paginated results in a bit)
* Don't group cross-room searches by room - just display them in timeline
order.
This is preferable to doing the way other QPs are passed (secret, etc) because
the link in the email wants to look like "#/room/<room_id_or_alias>" for guest
read-access (only bouncing you to /login if that room is not readable by guests).
This is hard to do in the current arch because we don't preserve QPs on /room
paths, and we do conditional executions depending on if it is a room ID or
alias. Rather than threading through the email in each section and creating
a fragile mess, just pass the *starting* set of query parameters through to
MatrixChat which can then do the Right Thing when the time comes.
Remove an optimisation which tried to avoid recalculating the scroll on every
render. The problem is that sometimes, when new events, the number of event
tiles remains the same, but we still need to do a scroll, because the height of
the message list changes.
The optimisation was a bit of a waste of time anyway - the actual render will
always be much more difficult than recalculating the scroll position.
Call /forget when the forget button is clicked. Number of shortcomings:
- We need to lazy load the historical list (atm we never get the list of left
rooms; things only go into that list if you leave the room whilst running)
- Once a room is forgotten we need to physically nuke it from the JS SDK.
- Need icon for forget room.