Commit graph

212 commits

Author SHA1 Message Date
Travis Ralston
d2c7a55fa0 Ensure tag changes (leaving rooms) causes rooms to move between lists
Fixes https://github.com/vector-im/riot-web/issues/14442

Turns out that we are so good at moving a room that when it flows through as a TIMELINE update the algorithm no-ops and does nothing, so don't do that.
2020-07-13 12:00:56 -06:00
Travis Ralston
40ab3e23c6 Add a null guard on the client 2020-07-13 10:09:46 -06:00
Travis Ralston
9a3744ebb2 Fix default sorting mechanics for new room list
Fixes https://github.com/vector-im/riot-web/issues/14445
2020-07-13 09:54:15 -06:00
Travis Ralston
0908e813fb Merge branch 'develop' into travis/room-list/enable 2020-07-12 22:50:27 -06:00
Travis Ralston
1c52c2777e
Merge pull request #4949 from matrix-org/travis/room-list/mute-floats
Convert ImportanceAlgorithm over to using NotificationColor instead
2020-07-12 11:00:18 -06:00
Travis Ralston
31f1fbd962
Merge pull request #4951 from matrix-org/travis/room-list/fix-sublist-menu
Internalize algorithm updates in the new room list store
2020-07-11 12:15:53 -06:00
Travis Ralston
b924dcc6ad
Merge pull request #4950 from matrix-org/travis/room-list/cleanup-resizing
Remove now-dead code from sublist resizing
2020-07-11 12:11:51 -06:00
Travis Ralston
0e49c4343c Internalize algorithm updates in the new room list store
Fixes https://github.com/vector-im/riot-web/issues/14411

The act of setting/changing the algorithm was causing the update function to be marked, meaning we wouldn't trigger an update until something else happened later. To get around this, and still support internal functions spamming calls without multiple updates, we simply move the guts to an internalized function and make the public interface do a trigger.
2020-07-10 21:59:12 -06:00
Travis Ralston
c153232575 Merge branch 'develop' into travis/room-list/enable 2020-07-10 21:33:35 -06:00
Travis Ralston
cfc39dc4a9 Remove now-dead code from sublist resizing 2020-07-10 16:10:05 -06:00
Travis Ralston
3062d14a78 Convert ImportanceAlgorithm over to using NotificationColor instead
Fixes https://github.com/vector-im/riot-web/issues/14362 implicitly

By re-using constructs we already have, we don't need to invent code which figures it out.
2020-07-10 16:07:40 -06:00
Travis Ralston
87120c6c26 Ensure triggered updates get fired for filters in the new room list
Fixes https://github.com/vector-im/riot-web/issues/14404
2020-07-10 15:58:39 -06:00
Travis Ralston
bb6d46f926 When the algorithm changes, re-add the filter listener 2020-07-10 15:57:05 -06:00
Travis Ralston
bdb641279a Merge branch 'develop' into travis/room-list/enable 2020-07-10 11:11:25 -06:00
Travis Ralston
9e76a2cebf Handle off-cycle filtering updates in the new room list 2020-07-10 11:07:47 -06:00
Travis Ralston
477472c178 Merge branch 'develop' into travis/room-list/showmore2 2020-07-10 10:57:17 -06:00
Travis Ralston
314250a6e4 Add a test mode flag to the store 2020-07-10 10:38:07 -06:00
Travis Ralston
f8db0a4637 Resolve complex merge conflicts 2020-07-10 10:21:00 -06:00
Travis Ralston
bf0a503e44 [WITH CONFLICTS] Merge branch 'develop' into travis/room-list/enable 2020-07-10 10:18:12 -06:00
Travis Ralston
26427817f2 Fix potential listener conflict with RVS
If the RVS ever emits something that contains `trigger: false`, we're pretty screwed, so avoid that.
2020-07-10 08:18:40 -06:00
Travis Ralston
a5ba0cad1f Rename to trigger and add docs 2020-07-10 08:13:23 -06:00
Travis Ralston
ef18cd5ca1 Merge branch 'develop' into travis/room-list/perf/dedupe-recalc 2020-07-10 07:18:12 -06:00
Travis Ralston
75dbd5f1d4 Merge branch 'develop' into travis/room-list/enable 2020-07-09 22:28:16 -06:00
Travis Ralston
cf154ec9cf Add an option to disable room list logging, and improve logging
For https://github.com/vector-im/riot-web/issues/14035

**This option is not recommended as it completely obliterates all chances of being able to support someone with a broken room list. It is intended for specific testing scenarios only.**
2020-07-09 18:19:38 -06:00
Travis Ralston
8624e8beeb Break up the event loop tasks for the room list
The room list does a hefty amount of work, so instead of blocking the event loop with a `/sync` request and a bunch of room updates (as we can get multiple per sync) we can instead run it over several smaller tasks. The smaller tasks help the event loop do other things between our tasks, ensuring we don't inadvertently block the UI from rendering too slowly.

On my account and machine, this cuts the time to render in half (~30ms, down from ~60ms) .
2020-07-09 15:11:21 -06:00
Travis Ralston
1315f34662 Dedupe room list store updates by marking for updates
The core of this is in the MarkedExecution class, with the remainder of the commit ensuring that the right marks and triggers are in place to do the firing.

Because everything is async/await and run through the RoomListStore, we don't have to worry about self-fed updates in the algorithm classes. This also means we have to trigger pretty much all the time. 

Changes to tag ordering / list sorting get hit through two paths, so we mark before we do a bulk update and otherwise assume the call is coming in from outside.
2020-07-09 14:53:14 -06:00
Travis Ralston
859f65659c Attempt to support a hard cutoff with the show more button
Known issues:
* Causes scroll jumps when the button gets added to DOM
* Resize handle is invisible when there's a show more button

TODO:
* Clean up comments
* Clean up useless code (all the padding stuff isn't needed)
2020-07-09 13:07:13 -06:00
Bruno Windels
ce68314de9 Revert "Merge pull request #4932 from matrix-org/travis/room-list/invisible-show-more"
This reverts commit f58a0a7538.
2020-07-09 12:13:12 -06:00
Travis Ralston
f8e1996e2f Handle NewRoom and PossibleTagChange updates correctly
For new rooms, we need to append to our list of known rooms. For tag changes, we need to be sure to update our cache when the tag can reasonably be assumed to have changed.

Fixes https://github.com/vector-im/riot-web/issues/14389
2020-07-09 12:08:40 -06:00
Travis Ralston
00fc34924c Fix rooms disappearing that were created by the user
Fixes https://github.com/vector-im/riot-web/issues/14388

We were receiving a read receipt before a room object, leading to the algorithm to assume the room is archived (no membership), which was causing later index issues when the room tried to get moved from archived to untagged.

To prevent this, we just ignore nonsensical updates.
2020-07-09 11:39:40 -06:00
Bruno Windels
f58a0a7538
Merge pull request #4932 from matrix-org/travis/room-list/invisible-show-more
Potential solution to supporting transparent 'show more' buttons
2020-07-09 14:43:20 +00:00
Travis Ralston
62b4596c04 Be consistent with other stores 2020-07-08 18:36:56 -06:00
Travis Ralston
c8f90be81d Ensure the map gets cleared upon logout 2020-07-08 18:32:12 -06:00
Travis Ralston
c5812d6c27 Move list layout management to its own store
This is more general maintenance than performance as the RoomList doesn't need to be generating layouts for the sublists, and it certainly doesn't need to be creating a bunch of extra ones. 

The sublists are perfectly capable of getting their own layout instance and using it, and we are perfectly able to limit the number of these things we create through the session's lifespan.
2020-07-08 18:28:21 -06:00
Travis Ralston
8972cf9378 Potential solution to supporting transparent 'show more' buttons
In this demonstration, we remove the cutting line (as it collides with the tile in a weird spot) and instead replace the tile with a placeholder when the text is about to collide with the avatar in the tile. We use a `round()` for this because through some amazing coincidence the collision happens at 0.47, which is close enough to 0.5 for people not to notice.
2020-07-08 16:09:45 -06:00
Travis Ralston
9b48130f4f Protect rooms from getting lost due to complex transitions
Fixes https://github.com/vector-im/riot-web/issues/14378

Rooms transitioning between multiple states are often at risk of going missing due to the sticky room handling. We now protect that transition by bluntly ensuring the room can't go missing, and by always ensuring we have an updated reference to the room.
2020-07-08 11:48:34 -06:00
Travis Ralston
3912f2d21c Merge remote-tracking branch 'origin/develop' into travis/room-list/resizable 2020-07-08 07:55:10 -06:00
Travis Ralston
b4f3b8ab11 Use the right variables when detecting max height 2020-07-08 07:53:55 -06:00
Michael Telatynski
5ef93686d9
Merge pull request #4925 from matrix-org/t3chguy/room-list/14352
Use html innerText for org.matrix.custom.html m.room.message room list previews
2020-07-08 13:23:58 +01:00
Michael Telatynski
8d5d3b1c92 Use html innerText for org.matrix.custom.html m.room.message room list previews
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-08 08:50:25 +01:00
Travis Ralston
15b6a273c9 Swap out the resizer lib for something more stable
react-resizer appears to be okay at tracking state, but it often desyncs from reality. re-resizer is more maintained and more broadly used (160k downloads vs 110k), and appears to generally do a better job of tracking the cursor.

The new library has some oddities though, such as deltas, touch support (hence the polyfill), and calling handles "Enable".

For https://github.com/vector-im/riot-web/issues/14022
2020-07-07 22:21:00 -06:00
Travis Ralston
8357461c9b Merge branch 'develop' into travis/room-list/enable 2020-07-07 16:20:38 -06:00
Travis Ralston
774e32ecf0 Fix DM handling in new room list 2020-07-07 16:16:46 -06:00
Travis Ralston
0b83926201 Merge branch 'develop' into travis/room-list/enable 2020-07-07 15:46:05 -06:00
Travis Ralston
f89fcd1fe9 Fix tests and add general safety
We don't need the fake clock anymore, but we do have to wait for async actions to complete before moving forward.

This also exposes a number of functions for the store to be puppetted with.
2020-07-07 15:45:59 -06:00
Travis Ralston
85e018111b
Merge pull request #4918 from matrix-org/travis/room-list/respect-old-settings
Respect and fix understanding of legacy options in new room list
2020-07-07 15:19:56 -06:00
Travis Ralston
3dfb9711ed
Merge pull request #4916 from matrix-org/travis/room-list/dm-handle
Ensure DMs are not lost in the new room list, and clean up tag logging
2020-07-07 15:14:27 -06:00
Travis Ralston
a59a8b76a9 Update TODO comments to point to new issue 2020-07-07 14:51:43 -06:00
Travis Ralston
a4ef5909f9 Respect and fix understanding of legacy options
Fixes https://github.com/vector-im/riot-web/issues/14372

We read/use the options in multiple places, and those places were not in sync. Now when algorithms change and on initial load, both will come to the same conclusions about how to order & sort the rooms.
2020-07-07 14:45:08 -06:00
Travis Ralston
8ef4b1b2e7 Replace labs flag with a real setting 2020-07-07 13:56:46 -06:00
Travis Ralston
34ea8342fb Remove comment claiming encrypted rooms are handled incorrectly
Fixes https://github.com/vector-im/riot-web/issues/14238

The encrypted rooms are loaded on startup (eventually), so we don't need to worry about the problem described.
2020-07-07 13:49:36 -06:00
Travis Ralston
2488520263 Clean up tag logging in setKnownRooms
We don't need this anymore
2020-07-07 13:46:29 -06:00
Travis Ralston
be1b2fddaf Ensure DMs are not lost in the new room list
Fixes https://github.com/vector-im/riot-web/issues/14236
2020-07-07 13:46:10 -06:00
Travis Ralston
7173ea71a5
Merge pull request #4905 from matrix-org/travis/room-list/room-safety
Improve room safety in the new room list
2020-07-07 06:59:59 -06:00
Travis Ralston
b3b404f121
Merge pull request #4906 from matrix-org/travis/room-list/invites-list
Fix a number of issues with the new room list's invites
2020-07-07 06:55:30 -06:00
Travis Ralston
2c502ed2fe Decrease default visible rooms down to 5 2020-07-06 20:48:49 -06:00
Travis Ralston
56333ae017 Ensure the recents algorithm is aware of invites 2020-07-06 20:42:43 -06:00
Travis Ralston
8739e2f781 Fix room duplication when the sticky room reference changes 2020-07-06 20:12:25 -06:00
Travis Ralston
34bd59c151 Remove the lock around the algorithm
This isn't needed
2020-07-06 19:38:13 -06:00
Travis Ralston
70e5da677b Clean up debug logging 2020-07-06 19:38:13 -06:00
Travis Ralston
dd833f4f2f Ensure the sticky room changes if the tag changes
This fixes a case where a user accepts an invite, which causes a tag change, but the room stays stuck in the invites list. The tag change additionally gets swallowed when the user moves away, causing the room to get lost. 

By moving it when we see it, potentially during a sticky room change itself (though extremely rare), we avoid having the room get lost in the wrong lists. A side effect of this is that accepting an invite puts it at the top of the tag it's going to (usually untagged), however this feels like the best option for the user.

A rare case of a tag change happening during a sticky room change is when a leave event comes in for the sticky room, but because it's come through as a tag change it can get swallowed. If it does get swallowed and the user clicks away, the tag change will happen when the room is re-introduced to the list (fake NewRoom event).
2020-07-06 19:38:13 -06:00
Travis Ralston
4345f972e0 Handle sticky room to avoid accidental removal
Plus a bunch of logging.

This fixes a case where switching rooms would cause the last room you were on to disappear due to an optimization where known NewRoom fires would be translated to tag change fires, which wouldn't re-add the room to the underlying tag algorithm.

By tracking the last sticky room, we can identify when we're about to do this and avoid it. 

This commit also adds a check to ensure that we have the latest reference of a room stored as rooms changing from invite -> join change references.

This commit additionally updates the PossibleTagChange handling to be faster and smarter, leading to a more stable generation of the room list. We convert the update cause to a Timeline update in order to indicate it is a change within the same tag rather than having to jump tags. This also means that PossibleTagChange should no longer make it as far as the underlying algorithm.

New logging has also been added to aid debugging.
2020-07-06 19:38:13 -06:00
Travis Ralston
18df29b627 Flag & add some debugging 2020-07-06 19:38:13 -06:00
Travis Ralston
0b6f744a58 Wrap handleRoomUpdate in a lock
Dev note: this is removed in a later commit
2020-07-06 19:38:13 -06:00
Travis Ralston
9c1efe728c
Revert "Remove a bunch of noisy logging from the room list" 2020-07-03 08:54:54 -06:00
Travis Ralston
98ce1dafee Remove a bunch of noisy logging from the room list
None of these logs are actually needed for troubleshooting anymore.
2020-07-02 16:39:36 -06:00
Travis Ralston
ae076a7439 Add a null guard for message event previews 2020-07-02 16:23:38 -06:00
Travis Ralston
b65972d44f Fix indentation 2020-07-02 13:23:20 -06:00
Travis Ralston
43db4b98df Merge branch 'develop' into joriks/room-list-breadcrumbs 2020-07-02 13:22:51 -06:00
Travis Ralston
b7aa8203b6 Wedge community invites into the new room list
Fixes https://github.com/vector-im/riot-web/issues/14179

Disclaimer: this is all of the horrible because it's not meant to be here. Invites in general are likely to move out of the room list, which means this is temporary. Additionally, the communities rework will take care of this more correctly. For now, we support the absolute bare minimum to have them shown.
2020-07-02 09:04:38 -06:00
Jorik Schellekens
1c0d46b6e1 Make breadcrumbs respsect setting 2020-07-02 15:26:51 +01:00
Travis Ralston
2cd6fae2ce
Merge pull request #4865 from matrix-org/travis/room-list/default-vis
Improve resizing interactions in the new room list
2020-07-01 11:59:54 -06:00
Travis Ralston
fed0c327d5
Merge pull request #4866 from matrix-org/travis/room-list/rm-ordering-options
Disable use of account-level ordering options in new room list
2020-07-01 07:25:04 -06:00
Travis Ralston
5a43acd42a Fix reaction event crashes in message previews
Fixes https://github.com/vector-im/riot-web/issues/14224
2020-06-30 19:51:28 -06:00
Travis Ralston
d402808101 Disable use of account-level ordering options in new room list
Fixes https://github.com/vector-im/riot-web/issues/14069

We can't drop them completely for compatibility with the old room list.
2020-06-30 19:31:59 -06:00
Travis Ralston
8cfbfd4221 Increase RESIZER_BOX_FACTOR to account for overlap from handle
Fixes https://github.com/vector-im/riot-web/issues/14136

The resizer handle wasn't being considered in this. 78% is both verified through mathematics and playing with it manually.
2020-06-30 19:20:11 -06:00
Travis Ralston
7674030c6e Show 'show more' when there are less tiles than the default
For example, if you only have 3/10 rooms required for the default then resize smaller, we should have a 'show more' button.

This works by changing the rendering to be slightly more efficient and only looping over what is seen (renderVisibleTiles(), using this.numTiles in place of tiles.length) and using a new setVisibleTilesWithin() function on the layout. Previously resizing the 3/10 case would be setting visibleTiles to ~8 instead of ~1 like it should (because the getter returns a default).
2020-06-30 19:14:36 -06:00
Travis Ralston
8cfe12b817 Add a layout reset function
For https://github.com/vector-im/riot-web/issues/14265

Intended to be accessed via `mx_RoomListStore2.resetLayout()`
2020-06-30 18:52:44 -06:00
Travis Ralston
f935303eeb Change default number of rooms visible to 10
Fixes https://github.com/vector-im/riot-web/issues/14266
2020-06-30 18:51:59 -06:00
Jorik Schellekens
0904ae8c7a Bug fixes 2020-06-30 23:35:59 +01:00
Jorik Schellekens
dcd51b5be3 Implement breadcrumb notifications and scrolling 2020-06-30 23:24:46 +01:00
Travis Ralston
9de42513dc Handle sticky rooms when regenerating lists
`setKnownRooms` is called to regenerate the room list, and if we don't take the sticky room out of the equation we end up with the room being duplicated. So, to make this easy, we simply remove the sticky room and handle it after the fact.
2020-06-30 15:04:47 -06:00
Travis Ralston
da2fd35094 Add sanity check to ensure we don't accidentally proliferate rooms
This small check just ensures that we aren't about to blindly accept that the calling code knows what it is doing. There are some unknown cases where NewRoom gets fired for rooms we already know about, so in those cases we just change it to a PossibleTagChange which is what the caller likely intended. 

Many of the edge cases are unknown, though this can happen for an invite being accepted (for example). It's easier to handle it here instead of tracking down every single possibility and fixing it higher up.
2020-06-30 14:36:11 -06:00
Travis Ralston
6a191ea3ee Handle room invites as new rooms
We wouldn't have seen them before, so might as well treat them as new instead of tag changes.
2020-06-30 14:23:00 -06:00
Travis Ralston
223ee0dbdb Add locking to avoid index corruption
When a new room is added there's a fairly good chance that the other events being dispatched will happen in the middle of (for example) the room list being re-sorted. This commit wraps the entire handleRoomUpdate() function for the underlying algorithms in a lock so that if we're unlucky enough to get an update while we're sorting (as the ImportanceAlgorithm splices out what it is sorting) we won't scream about invalid index errors.
2020-06-30 13:55:53 -06:00
Travis Ralston
c7a83e65f0 Fix proliferation when joining upgraded rooms
We have to do a bit of a dance to return the sticky room to the list so we can remove it, if needed, and ensure that we generally swap the rooms out of the list.
2020-06-30 13:55:15 -06:00
Jorik Schellekens
b110639c76 Merge remote-tracking branch 'origin' into joriks/eslint-config 2020-06-29 16:49:33 +01:00
Travis Ralston
ee2c216c4d Clean up TODO comments for new room list
All relevant TODOs should still be present, and reference an issue for easy finding.
2020-06-28 20:03:04 -06:00
Travis Ralston
67cc84d00d Merge branch 'develop' into travis/room-list/preview-copy 2020-06-26 07:29:49 -06:00
Travis Ralston
acf56559e1 Introduce an entirely new system for handling message preview copy
This reverts earlier changes made to textForEvent as they are no longer needed.

This also implements an entire tree of textForEvent-like behaviour as the previews need to be different, which is easiest done with its own stack.
2020-06-25 16:26:49 -06:00
Travis Ralston
5efa5d2c80 Implement new resize handle for dogfooding
Smaller handle width, small shadow on the top of the show more button if there's more rooms to be shown. The resize handle also only shows when you're hovering in the area now.

The original design called for the shadow to show up only if the user is cutting a tile or dragging, however that is complicated implementation-wise. For speed and encouraging a dogfooding pattern we're going ahead with this behaviour instead.
2020-06-25 10:08:44 -06:00
Travis Ralston
37a415693f Allow the user to resize the new sublists to 1 tile
For dogfooding https://github.com/vector-im/riot-web/issues/14137

To change the default: `localStorage.setItem("mx_dogfood_rl_defTiles", 4);`
2020-06-24 20:08:26 -06:00
Travis Ralston
752b2acc56 Move MessagePreviewStore into the room list namespace 2020-06-24 19:51:55 -06:00
Travis Ralston
c047a76f1d Update the filtering for the right tag 2020-06-24 10:36:43 -06:00
Travis Ralston
f93d67fc65 Fix sticky room disappearing/jumping in search results
Fixes https://github.com/vector-im/riot-web/issues/14124
Fixes https://github.com/vector-im/riot-web/issues/14154 (which was technically supposed to say that the sticky room when filtering was always last)

This is all a bit complicated, but the theory is that we end up with a stable list even through filtering. There's some notes within, though I suspect it'll be difficult to understand :(
2020-06-23 16:49:39 -06:00
Jorik Schellekens
7699aafcaf Use new eslint package- fix lint issues in ts and js 2020-06-23 17:01:19 +01:00
Travis Ralston
fc5ee64fce Fix read receipt handling in the new room list
Fixes https://github.com/vector-im/riot-web/issues/14064
Fixes https://github.com/vector-im/riot-web/issues/14082

Turns out the event doesn't reference a room, so we need to use the accompanied room reference instead.
2020-06-22 15:12:30 -06:00
Jorik Schellekens
ba0bc8f29c Resolve "The Great Conflict" 2020-06-18 14:55:24 +01:00
Jorik Schellekens
291997421b Merge branch 'develop' of github.com:matrix-org/matrix-react-sdk into joriks/semicolon 2020-06-18 14:54:20 +01:00
Travis Ralston
b857c9d199
Merge pull request #4786 from matrix-org/travis/room-list/show-n-reliability
Fix show less/more button occluding the list automatically
2020-06-18 07:46:13 -06:00