Commit Graph

78 Commits

Author SHA1 Message Date
Travis Ralston
c29da883db Convert room list log setting to a real setting
To debug https://github.com/vector-im/riot-web/issues/14554 and https://github.com/vector-im/riot-web/issues/14508
2020-07-16 14:43:43 -06:00
Michael Telatynski
0097ba24a4 When removing a filter condition, try recalculate in case it wasn't the last one
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-16 05:52:39 +01:00
Travis Ralston
f6b9d44e4b Invert logging 2020-07-14 13:18:06 -06:00
Travis Ralston
d74e803fa9 Remove potential source of room duplication issues
This is an estimated fix as the problem cannot be easily identified. We don't appear to need these lines, unlike what the comment implies.
2020-07-14 12:40:48 -06:00
Travis Ralston
e955feb12d Revert "Merge pull request #4972 from matrix-org/travis/room-list/prelaunch/3-remove-debug"
This reverts commit e1b34acdc8.
2020-07-14 12:02:40 -06:00
Travis Ralston
e1b34acdc8 Merge pull request #4972 from matrix-org/travis/room-list/prelaunch/3-remove-debug
Remove debug logging from new room list
2020-07-14 09:56:17 -06:00
J. Ryan Stinnett
f16962bb41 Merge pull request #4970 from matrix-org/travis/room-list/prelaunch/1-cleanup
Clean up TODOs, comments, and imports in the new room list
2020-07-14 09:38:30 +01:00
Travis Ralston
6632db01cf Remove debug logging from new room list
Fixes https://github.com/vector-im/riot-web/issues/14408

Yes, all the issue references are wrong :(
2020-07-13 20:34:05 -06:00
Travis Ralston
4a8a59c578 Make EffectiveMembership utils generic
Fixes https://github.com/vector-im/riot-web/issues/14460

Just have to move them to utils.
2020-07-13 20:29:46 -06:00
Travis Ralston
bdb136e24e Clean up TODOs, comments, and imports in the new room list
Fixes https://github.com/vector-im/riot-web/issues/14412
2020-07-13 20:25:02 -06:00
Travis Ralston
1f57b85b30 Merge pull request #4962 from matrix-org/travis/room-list/leave-fix
Ensure tag changes (leaving rooms) causes rooms to move between lists
2020-07-13 12:44:23 -06:00
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
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
9e76a2cebf Handle off-cycle filtering updates in the new room list 2020-07-10 11:07:47 -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
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
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
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
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
774e32ecf0 Fix DM handling in new room list 2020-07-07 16:16:46 -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
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
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
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
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
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
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
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
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