Commit graph

300 commits

Author SHA1 Message Date
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
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
Travis Ralston
e9afb4b86e Fix ordering of recent rooms in the new room list
Fixes https://github.com/vector-im/riot-web/issues/14009
2020-06-15 20:04:32 -06:00
Travis Ralston
4186070489 Support list collapsing and jumping
Fixes https://github.com/vector-im/riot-web/issues/14036
2020-06-15 19:47:43 -06:00
Travis Ralston
6de6d94f7c Fix return type 2020-06-12 08:40:08 -06:00
Travis Ralston
6b54c3a492 Throw if the update cause is unsupported 2020-06-12 08:39:59 -06:00
Travis Ralston
fd029e8e80 Dumb down list algorithms in favour of smarter tags
This commit is a bit involved, as it factors the tag specific handling out of `/list-ordering` (and moves the `Algorithm` class one higher as a result), leaving it in the `Algorithm`. The algorithms for list ordering now only know how to handle a single tag, and this is managed by the `Algorithm` class - which is also no longer the base class for the list ordering. The list ordering algorithms now inherit from a generic `OrderingAlgorithm` base class which handles some rudimentary things.

Overall the logic hasn't changed much: the tag-specific stuff has been moved into the `Algorithm`, and the list ordering algorithms essentially just removed the iteration on tags. The `RoomListStore2` still shovels a bunch of information over to the `Algorithm`, which can lead to an awkward code flow however this commit is meant to keep the number of surfaces touched to a minimum.

The RoomListStore has also gained the ability to set per-list (tag) ordering and sorting, which is required for the new room list. The assumption that it defaults from the account-level settings is not reviewed by design, yet. This decision is deferred.
2020-06-11 22:02:09 -06:00
Travis Ralston
52b26deb2e Move room list store docs to docs directory
This pulls it away from the code, but the code is sufficiently involved enough where it doesn't need another file near it.
2020-06-11 16:56:12 -06:00
Travis Ralston
966e2cad7e Update documentation for how this refactoring will go 2020-06-11 16:52:47 -06:00
Travis Ralston
a3391d9a08 Merge branch 'develop' into travis/room-list/hover-state 2020-06-10 07:42:41 -06:00
Travis Ralston
78e1db9d30
Merge pull request #4741 from matrix-org/travis/room-list/resize-handle
Update resize handle for new designs in new room list
2020-06-10 07:40:34 -06:00
Travis Ralston
111394df6d Add hover states and basic context menu to new room list
The 'sort by' radio buttons are blocked by https://github.com/matrix-org/matrix-react-sdk/pull/4731 as it contains the styles needed.

The 'unread rooms' checkbox is intentionally not hooked up. This is a more complicated refactoring that needs to be done.

The message preview checkbox works, though the previews remain hardcoded in this change. The primary intent of this change is to have a good enough context menu and the hover states.

The hover states are as described in the design.
2020-06-09 21:12:49 -06:00
Travis Ralston
5f8b7187cf Update resize handle for new designs
The diff should have information on what this does and how it is supposed to work.
2020-06-09 19:48:31 -06:00
Travis Ralston
84174cc440 Remove 1 extra line 2020-06-09 15:30:03 -06:00
Travis Ralston
c360800631 Add token.remove() handling to room list temp proxy
Fixes https://github.com/vector-im/riot-web/issues/13930
2020-06-09 15:26:13 -06:00
Travis Ralston
db23aaad83 Destroy old CommunityFilterConditions when they aren't needed
Fixes https://github.com/vector-im/riot-web/issues/13971
2020-06-09 15:22:37 -06:00
Travis Ralston
eefc40e0f8 Use IDestroyable instead of IDisposable
For consistency within our project
2020-06-09 08:08:47 -06:00
Travis Ralston
3fcd5505b3 Support prioritized room list filters
This is to fix an issue where when using both the community filter panel and the search box it's an AND rather than further refining the results.

This makes the search box further refine the community filter panel results.
2020-06-08 21:38:56 -06:00
Travis Ralston
000c92a53f Merge branch 'develop' into travis/room-list/css-layout 2020-06-08 09:40:21 -06:00
Travis Ralston
760333a0ae Move function to a private function 2020-06-07 13:08:25 -06:00
Travis Ralston
a7fe7cb28d Merge remote-tracking branch 'origin/develop' into travis/room-list/sticky 2020-06-07 13:06:30 -06:00
Travis Ralston
9b928b5a5d Handle remaining cases for room updates in new room list
For https://github.com/vector-im/riot-web/issues/13635

This adds support for:
* Tag changes
* DM changes
* Marking our own rooms as read
* Our own membership changes

The remaining branch we didn't need was the alternate 'new room' branch, so it was removed.

This is not optimized - optimization is deferred.
2020-06-05 20:12:32 -06:00
Travis Ralston
0bb1eefdea Remove view_room listener as it isn't needed
We use the RoomViewStore
2020-06-05 19:47:15 -06:00
Travis Ralston
6548748d7c Introduce sticky rooms to the new room list
Originally this was intended to be done only in the importance algorithm, however it is clear that all algorithms will need to deal with this. As such, it has been put into the base class to deal with as we may override it in the future. 

This commit should be self-documenting enough to describe what is going on, though the major highlight is that the handling of the sticky room is done by lying to the underlying algorithm.

This has not been optimized for performance yet.

For https://github.com/vector-im/riot-web/issues/13635
2020-06-05 18:44:38 -06:00
Travis Ralston
ea6b0a60ab Merge branch 'develop' into travis/room-list/css-layout 2020-06-05 13:19:00 -06:00
Travis Ralston
e93a41c5fb Minor clarity 2020-06-05 13:14:44 -06:00
Travis Ralston
0c15b2bdb6 Simple structuring of the room list itself
This covers the larger parts of the design, but doesn't deal with the nuances of hover states, badge sizing, etc.
2020-06-04 21:21:04 -06:00
Travis Ralston
83df79aab9 Try variable resizing 2020-06-04 09:19:03 -06:00
Travis Ralston
dbf996439b Wedge t3chguy's resizer prototype into the sublist 2020-06-03 21:17:51 -06:00
Travis Ralston
c07b5ebe9a Initial experiments with resizing of room lists 2020-06-03 21:17:18 -06:00
Travis Ralston
bc2fbefb5c Remove iteratorToArray 2020-06-03 11:29:06 -06:00
Travis Ralston
73a8e77d32 Add initial filtering support to new room list
For https://github.com/vector-im/riot-web/issues/13635

This is an incomplete implementation and is mostly dumped in this state for review purposes. The remainder of the features/bugs are expected to be in more bite-sized chunks.

This exposes the RoomListStore on the window for easy access to things like the new filter functions (used in debugging).

This also adds initial handling of "new rooms" to the client, though the support is poor.

Known bugs:
* [ ] Regenerates the entire room list when a new room is seen.
* [ ] Doesn't handle 2+ filters at the same time very well (see gif. will need a priority/ordering of some sort).
* [ ] Doesn't handle room order changes within a tag yet, despite the docs implying it does.
2020-06-01 16:49:22 -06:00
Travis Ralston
a9c54153ee Update badge counts in new room list as needed 2020-05-26 14:16:33 -06:00
Travis Ralston
e3c0b47116 Hyphenize algorithm directories 2020-05-21 11:56:04 -06:00
Travis Ralston
a11985f239 Which component? The room list! 2020-05-21 11:54:38 -06:00
Travis Ralston
b7ba9b3c41 Replace ChaoticAlgorithm with NaturalAlgorithm for list behaviour 2020-05-14 14:16:26 -06:00
Travis Ralston
91a997da14 Replace ChaoticAlgorithm for tag sorting with deterministic behaviour
aka: implement the algorithms.
2020-05-14 14:06:48 -06:00
Travis Ralston
6cb1efc1a4 Use the new TS dispatcher 2020-05-14 13:45:17 -06:00
Travis Ralston
8e047c3731 Update README for room list store 2020-05-14 13:26:17 -06:00
Travis Ralston
aafbd7f208 Update misc documentation and spell indices correctly 2020-05-14 13:01:51 -06:00
Travis Ralston
9f0810240f Clean up imports and other minor lints 2020-05-14 12:46:16 -06:00
Travis Ralston
e88788f4e9 Handle event decryption too 2020-05-14 12:46:16 -06:00
Travis Ralston
4a0d14e322 Make missing rooms throw instead
For now at least. We shouldn't encounter this case until we get around to adding support for newly-joined rooms.
2020-05-14 12:46:16 -06:00
Travis Ralston
e1fab9a5b6 Work out the new category index for each room update
See comments within for details on what this means.
2020-05-14 12:46:16 -06:00
Travis Ralston
5dda7f02cf Early handling of dispatched events
A possible approach to handling the various triggers for recategorizing rooms.
2020-05-14 12:46:16 -06:00
Travis Ralston
ecf8090b75 Handle DMs 2020-05-14 12:44:49 -06:00
Travis Ralston
d244eeb5d5 Break up algorithms and use the new layering
Sorting and ordering has now been split apart. The ImportanceAlgorithm also finally makes use of the sorting.

So far metrics look okay at 3ms for a simple account, though this could potentially get worse due to the multiple loops involved (one for tags, one for categories, one for ordering). We might be able to feed a whole list of rooms into the thing and have it regenerate the lists on demand.
2020-05-14 12:44:49 -06:00
Travis Ralston
e7fffee175 Remove the need for a tag manager
Instead putting the tag handling in the Algorithm class
2020-05-14 12:44:49 -06:00
Travis Ralston
9c0422691a Add another thought
Maybe we can speed up the algorithm if we know why we're doing the update.
2020-05-14 12:44:49 -06:00
Travis Ralston
00d400b516 Possible framework for a proof of concept
This is the fruits of about 3 attempts to write code that works. None of those attempts are here, but how edition 4 could work is at least documented now.
2020-05-14 12:44:49 -06:00
Travis Ralston
becaddeb80 Categorize rooms by effective membership 2020-05-14 12:44:49 -06:00
Travis Ralston
861268d39f Invent an AsyncStore and use it for room lists
This is to get around the problem of a slow dispatch loop. Instead of slowing the whole app down to deal with room lists, we'll just raise events to say we're ready.

Based upon the EventEmitter class.
2020-05-14 12:44:29 -06:00
Travis Ralston
08419d195e Initial breakout for room list rewrite
This does a number of things (sorry):
* Estimates the type changes needed to the dispatcher (later to be replaced by https://github.com/matrix-org/matrix-react-sdk/pull/4593)
* Sets up the stack for a whole new room list store, and later components for usage.
* Create a proxy class to ensure the app still functions as expected when the various stores are enabled/disabled
* Demonstrates a possible structure for algorithms
2020-05-14 12:44:29 -06:00