Commit graph

101 commits

Author SHA1 Message Date
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
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
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
Jorik Schellekens
05d0309081 Lint a few semicolons 2020-06-18 14:32:43 +01:00
Travis Ralston
8db67743f7 Improve room switching in the new room list
For https://github.com/vector-im/riot-web/issues/14034

One of the largest issues with room switching was that we'd regenerate the entire list when the sticky room changes, which is obviously detrimental on larger accounts (and even some medium accounts). To work through this, we simply handle the NewRoom and RoomRemoved causes (used by the sticky room handling) as splices rather than in-place updates.

Overall this leads to a smoother experience as it means we're doing far less calculations and can even opt out of an update if it isn't required, such as a RoomRemoved cause being fired twice - the second one can result in an update not being required, saving render time.

This commit also includes a fix for handling update causes on the sticky room, as the room list loves to print errors when this happens. We don't need to handle any updates because once the sticky room changes it'll get re-added through NewRoom, causing the underlying algorithm to slot it in where needed, effectively handling all the missed updates.
2020-06-17 22:42:01 -06:00
Travis Ralston
245181cf80 Fix show less/more button occluding the list automatically
When the user would click 'show more' they would be presented with a 'show less' button that occluded the last room. 

Similarly, if they resized the list so that all their rooms would be shown and refreshed the page, they would find their last room covered by the button.

This changes the handling so that showAllClick() sets the height to numTiles + button padding, and adjusts the height calculations on render to deal with relative tiles.

This also removes the conditional padding of the resize handle, as we always occupy the 4px of space. It was leading to rooms getting trimmed slightly by the show N button.
2020-06-17 22:09:59 -06:00
Travis Ralston
d2831ffb0c
Merge pull request #4758 from matrix-org/travis/room-list/sticky
Sticky and collapsing headers for new room list
2020-06-17 08:28:38 -06:00
Travis Ralston
07f13f2ece
Merge pull request #4767 from matrix-org/travis/room-list/tombstone
Handle/hide old rooms in the room list
2020-06-17 08:24:27 -06:00
Travis Ralston
3bdf3be3f4
Merge pull request #4769 from matrix-org/travis/room-list/fuzzy-filter
Match fuzzy filtering a bit more reliably in the new room list
2020-06-17 07:15:36 -06:00
Travis Ralston
17f1fdaf6d Include the sticky room when filtering in the new room list
Fixes https://github.com/vector-im/riot-web/issues/14050
2020-06-16 10:59:42 -06:00
Travis Ralston
bc0281ebdd Match fuzzy filtering a bit more reliably in the new room list
Fixes https://github.com/vector-im/riot-web/issues/14054
2020-06-16 08:36:10 -06:00
Travis Ralston
4a74baf99d
Merge pull request #4768 from matrix-org/travis/room-list/better-filter
Match new room list's text search to old room list
2020-06-15 20:28:31 -06:00
Travis Ralston
f8828014f1 Match new room list's text search to old room list
Fixes https://github.com/vector-im/riot-web/issues/14042
2020-06-15 20:19:16 -06:00
Travis Ralston
776e63c0d8 Handle/hide old rooms in the room list
Fixes https://github.com/vector-im/riot-web/issues/14003
2020-06-15 20:11:06 -06:00