Commit graph

300 commits

Author SHA1 Message Date
Travis Ralston
746856ed10 Appease the linter 2021-03-31 23:40:25 -06:00
Travis Ralston
70db749430 Restabilize room list ordering with prefiltering on spaces/communities
Fixes https://github.com/vector-im/element-web/issues/16799

This change replaces the "relative priority" system for filters with a kind model. The kind is used to differentiate and optimize when/where a filter condition is applied, resulting in a more stable ordering of the room list. The included documentation describes what this means in detail.

This also introduces a way to inhibit updates being emitted from the Algorithm class given what we're doing to the poor thing will cause it to do a bunch of recalculation. Inhibiting the update and implicitly applying it (as part of our updateFn.mark()/trigger steps) results in much better performance.

This has been tested on my own account with both communities and spaces of varying complexity: it feels faster, though the measurements appear to be within an error tolerance of each other (read: there's no performance impact of this).
2021-03-31 23:36:36 -06:00
Robin Townsend
b13dae1fc6 Ignore punctuation when filtering rooms
Signed-off-by: Robin Townsend <robin@robin.town>
2021-03-31 22:45:53 -04:00
Germain Souquet
3f33060cdd increase default visible tiles for room sublists 2021-03-31 11:15:16 +01:00
Travis Ralston
1d43c8b791 Remove forgotten rooms from the room list once forgotten
Fixes https://github.com/vector-im/element-web/issues/15559

This isn't exactly perfect as an implementation: if the user refreshes immediately after forgetting then there is a good chance the room re-appears because of the sync accumulator. At the very least this change makes it so in *most* cases the room goes away, which is probably good enough until https://github.com/vector-im/element-web/issues/14038 can be implemented properly.
2021-03-18 23:28:59 -06:00
J. Ryan Stinnett
0583ea6a25 Ignore to-device decryption in the room list store
This avoids meaningless warnings about "unknown" rooms.
2021-03-10 12:11:48 +00:00
Michael Telatynski
e6370a970b Tweak call handler stuff to not explode the room list on unsupported servers 2021-03-09 14:03:58 +00:00
Michael Telatynski
6a5efad142 Show suggested rooms from the selected space 2021-03-08 15:52:21 +00:00
Michael Telatynski
bfe3d648e2
Update src/stores/room-list/algorithms/Algorithm.ts
Co-authored-by: Travis Ralston <travpc@gmail.com>
2021-02-26 22:08:36 +00:00
Michael Telatynski
f21aedc6cf Add Space Panel with Room List filtering 2021-02-26 10:41:26 +00:00
Michael Telatynski
79daf615e4 First special treatment of space-rooms 2021-02-19 14:20:57 +00:00
Michael Telatynski
6b3f05a3cd Switch RoomListStore to only including the filtered subset
Without this it'd include notification counts from Community B when Community A is selected and such.
2021-02-19 14:10:36 +00:00
Michael Telatynski
63d95706e9 Create setHasDiff helper and use it
The usage here is identical to how it'll work in Spaces
2021-02-19 12:58:23 +00:00
Michael Telatynski
8fc244452c Prevent error being thrown so that we can throw our own better one 2021-02-18 18:06:26 +00:00
Travis Ralston
64974eb3ee
Merge pull request #5661 from matrix-org/travis/clear-preview
Clear message previews when the maximum limit is reached for history
2021-02-18 07:31:54 -07:00
Travis Ralston
47d73bef57 Clear message previews when the maximum limit is reached for history 2021-02-17 22:36:26 -07:00
David Baker
6130bdf0d2 Use creation content to signal virtual-ness
This makes things a lot simpler.
2021-02-17 18:51:21 +00:00
David Baker
79455d99b4 Unused import 2021-02-15 19:38:17 +00:00
David Baker
89b2dae035 Send onNewInvitedRoom via VisibilityProvider 2021-02-15 18:13:13 +00:00
David Baker
196507a730 VoIP virtual rooms, mk II
Does a thirdparty protocol lookup to the homeserver to get the
corresponding native/virtual user for a matrix ID. Stores the
mappings in room account data. Involves some slightly nasty workarounds
for that fact that room account data has no local echo.
2021-02-12 20:55:54 +00:00
J. Ryan Stinnett
84b1f2e6c6 Resolve typing errors after TypeScript upgrade 2021-01-27 12:42:37 +00:00
David Baker
f703383ab6
Merge pull request #5560 from matrix-org/dbkr/voip_user_mapper
Add VoIP user mapper
2021-01-22 14:12:08 +00:00
David Baker
0a90c982c7 Add VoIP user mapper
The accompanying element-web PR with the config documentation should
explain what this is & why. Internally, this breaks the assumption
that call.roomId is the room that the call appears in for the user.
call.roomId may now be a 'virtual' room while the react SDK actually
displays it in a different room. React SDK always stores the calls
under the user-facing rooms, and provides a function to get the
user-facing room for a given call.
2021-01-21 19:20:35 +00:00
Travis Ralston
ab51404421 Appease the tests? 2021-01-18 21:07:44 -07:00
Travis Ralston
6d770cb4d1 Appease the linter 2 2021-01-18 21:00:47 -07:00
Travis Ralston
6227d3c183 Appease the linters 2021-01-18 20:53:15 -07:00
J. Ryan Stinnett
729356394e Use room-specific listeners for message previews
This should be a bit faster (since we now only notify one tile instead of all
for each update). It also resolves the max listener warning.

Fixes https://github.com/vector-im/element-web/issues/15121
2021-01-15 14:21:21 +00:00
Travis Ralston
c2c328e23c Appease the linter 2020-11-26 08:06:48 -07:00
Travis Ralston
b9c57f47b0 Remove example 2020-11-26 08:01:38 -07:00
Travis Ralston
80b93e0843 Mute all updates from rooms that are invisible 2020-11-25 20:03:58 -07:00
Travis Ralston
b9af446c1b Make it possible in-code to hide rooms from the room list
Fixes https://github.com/vector-im/element-web/issues/15745

This was surprisingly easy given the number of errors I remember last time, but here it is. This also includes an over-engineered VisibilityProvider with the intention that it'll get used in the future for things like Spaces and other X as Rooms stuff.
2020-11-25 19:42:57 -07:00
Michael Telatynski
0da23e2cbd Fix copy for call hangup previews 2020-11-03 15:22:23 +00:00
Travis Ralston
3edb6b2234
Merge pull request #5309 from RinkiyaKeDad/fix-final-10
Renamed TagPanel and TagOrderStore
2020-10-14 16:33:31 -06:00
Travis Ralston
dccea97762 Fix/clarify boolean logic for reaction previews 2020-10-14 08:56:08 -06:00
RinkiyaKeDad
f5a40eff4b updated TagFilterStore 2020-10-10 18:02:58 +05:30
Travis Ralston
96087d61f6 Convert feature setting usages to regular settings 2020-08-17 13:12:18 -06:00
Michael Telatynski
50b9da7597 Put message previews for Emoji behind Labs 2020-08-13 16:40:18 +01:00
J. Ryan Stinnett
ce226ab534 Replace Riot with Element in docs and comments
This only covers the simple cases of references to issues and repos. More
complex areas, such as deployment scripts, will be handled separately.

Part of https://github.com/vector-im/element-web/issues/14864
2020-08-03 18:33:36 +01:00
Travis Ralston
7022d86a3c Handle tag changes in sticky room updates
Fixes https://github.com/vector-im/element-web/issues/14848

When we're filtering the sticky room will be excluded from the filtered set, and thus won't even appear in the `getOrderedRoomsWithoutSticky()` result. Further, we will likely have to update the position ourselves to ensure the sticky room can be placed appropriately in the list.
2020-07-31 16:26:03 -06:00
Travis Ralston
49abfc1fb2 Ensure sublists are updated when rooms are removed from them
Fixes https://github.com/vector-im/riot-web/issues/14798 (part 2)

This is in two parts itself: The `RoomSublist` needs to break its references to the `RoomListStore`, so it now clones the room arrays. The `Algorithm` is the other part, which is slightly more complicated.

It turns out that we weren't handling splicing as a change in the `ImportanceAlgorithm`, therefore the `Algorithm` wasn't really feeling like it needed to change anything. Further, the `Algorithm` was using the wrong reference to where it should be dumping rooms (`this.cachedRooms` is a getter which returns a different object depending on conditions), so having fixed that we need to ensure that the filtered and sticky maps are also updated when we remove a room. Because we send the new tag through a Timeline update, we'll end up updating the tag later on and don't need to update the filter and sticky collections.
2020-07-30 15:06:04 -06:00
Travis Ralston
900c234434 Internalize notification state handling for lists
This reduces the update cost of rooms changing, and fixes a bug where when a sublist became filtered it would change the notification count of the sublist.

This does change the expected usage of the state store to ensuring that only one place updates the rooms on the list states, which is currently the room list store. Ideally the state store could listen to the room list store to update itself, however due to a complicated require() loop it is not possible.
2020-07-27 17:33:27 -06:00
Travis Ralston
a15aae4daf Apply a throttle to filter condition updates 2020-07-27 16:35:48 -06:00
Travis Ralston
42498d32cc Move community filtering into the sublist
This is a step towards the room list not having to concern itself with the search parameters.
2020-07-27 16:35:48 -06:00
Travis Ralston
fd15fc3984 Ensure message previews update when needed
In 9969b01c5f we stopped updating the sublist whenever we felt like it, which indirectly froze message previews for room tiles (badges, unread state, etc were unaffected because that is managed by a different store). To fix this, we simply have to listen for changes and perform an update.
2020-07-23 22:24:07 -06:00
Travis Ralston
c22cb6c325 Short-circuit room list store dispatch handling if not ready
We were taking 0.2ms to handle the registration of a timer per event during startup, even before the app is visible to the user. These timers would be short-circuited too, leading to a bunch of wasted time.

0.2ms isn't a lot of time, but multiplied by thousands of events at startup it's pretty significant.

On my account this reduces the full page spinner time from ~50 seconds to just over 20 seconds.
2020-07-22 13:35:41 -06:00
Travis Ralston
f27afc6ff8 Fix message previews not updating on their own 2020-07-22 12:43:10 -06:00
Travis Ralston
d593d24aea Switch to an internal Map for previews
This means we're abusing the AsyncStoreWithClient to get access to a lifecycle, but overall that seems like a minor crime compared to the time spend abusing the store's state as a map.

With thousands of rooms shown, we can save on average 743ms per preview. The new preview time is 0.12ms on average.
2020-07-22 10:50:54 -06:00
Travis Ralston
67fd6e6122
Merge pull request #5034 from matrix-org/travis/fix-perf
Mixed bag of performance improvements: ScrollPanel and notifications
2020-07-22 08:24:04 -06:00
Michael Telatynski
6bb9be56cd
Merge pull request #5025 from matrix-org/t3chguy/room-list/14662
Update message previews
2020-07-22 10:03:30 +01:00
Travis Ralston
c9da1e1874 Remove even more tags from the notification state fetching for a room 2020-07-21 20:58:59 -06:00
Travis Ralston
6a38833a2b Ensure incremental updates to the ImportanceAlgorithm trigger A-Z order
Fixes https://github.com/vector-im/riot-web/issues/14475

Background: Sticky rooms are actually a pair of lies to the underlying algorithm as a combination of REMOVE_ROOM/NEW_ROOM calls so they don't get considered as needing to be sorted. When a room is added under the importance algorithm, it is expected that the category it is being added to will be re-sorted to account for the change, however we weren't doing that since we optimized the NewRoom path to be a splice operation.
2020-07-21 14:12:58 -06:00
Jorik Schellekens
a06cc77411 Remove unused imports 2020-07-21 15:34:00 +01:00
Jorik Schellekens
501e0c29ca Merge remote-tracking branch 'origin' into joriks/eslint-config 2020-07-21 15:32:50 +01:00
Jorik Schellekens
be5db851ca Revert unsafe rename and use boolean coercion 2020-07-21 10:29:05 +01:00
Michael Telatynski
193a0d89af Prefix message previews for emotes with a *
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-21 09:31:22 +01:00
Michael Telatynski
eb0e9ecab4 Remove message previews for state events
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-21 09:28:27 +01:00
Travis Ralston
a0b2859436 Support custom tags in the room list again
Fixes https://github.com/vector-im/riot-web/issues/14091

Design needs work, however this is behind labs anyways. This re-implements the behaviour of the old room list.

The implementation ended up being a lot easier due to early confusion with what the TagOrderStore and TagPanel take care of. Turns out they don't deal with tags, but groups. As such, we don't need to do anything with filtering (though we keep some sanity checks in place for safety), and just have to wire up the CustomRoomTagPanel and CustomRoomTagStore.
2020-07-20 16:51:16 -06:00
Jorik Schellekens
6433e163f7 Use variable name instead of _ 2020-07-20 20:55:35 +01:00
Jorik Schellekens
4ba1f91a2b Fix lint issues in new code 2020-07-20 20:43:55 +01:00
Jorik Schellekens
b3fa855bd8 Merge branch 'develop' of github.com:matrix-org/matrix-react-sdk into joriks/eslint-config 2020-07-20 16:22:32 +01:00
Michael Telatynski
29defa3e57 Tag Watcher don't create new filter if not needed, confuses references
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-20 14:36:12 +01:00
Travis Ralston
7fc5ba50c8 Update references to issues 2020-07-17 16:22:33 -06:00
Travis Ralston
1cce6e2e32 Enable new room list store forever 2020-07-17 15:14:58 -06:00
Travis Ralston
2b15ba21dd Rename RoomListStore file 2020-07-17 15:11:34 -06:00
Travis Ralston
209a5d2220 Rename RoomListStore2 class name
We use `RoomListStore` as a singleton, and don't want the ugly `2` at the end of the actual store instance, so here we rename it to something half-decent.
2020-07-17 15:10:30 -06:00
Travis Ralston
62b58e18e9 Remove the temporary room list store proxy 2020-07-17 14:25:56 -06:00
Travis Ralston
1810711380 Dismantle usage of the proxy store class 2020-07-17 14:25:09 -06:00
Travis Ralston
06336a88b3 Remove setting for old room list 2020-07-17 14:06:30 -06:00
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
725fa7df9b
Merge pull request #4997 from matrix-org/t3chguy/fix/14526
Fix filtering by community not showing DM rooms with community members
2020-07-16 12:41:50 +01:00
Michael Telatynski
b1d57ca13e
Merge pull request #4996 from matrix-org/t3chguy/room-list/14491
Fix enter in new room list filter breaking things
2020-07-16 12:41:39 +01:00
Michael Telatynski
3498922882 Fix filtering by community not showing DM rooms with community members
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-16 09:13:23 +01:00
Michael Telatynski
2f959a974a Fix enter in new room list filter breaking things
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2020-07-16 06:31:06 +01: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
945dab6b1f Revert "Turn previews on for DMs and ensure they get rendered"
This reverts commit b19ae3ac93.
2020-07-14 13:36:28 -06:00
Travis Ralston
f6b9d44e4b Invert logging 2020-07-14 13:18:06 -06:00
Travis Ralston
b19ae3ac93 Turn previews on for DMs and ensure they get rendered 2020-07-14 12:49:29 -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
19500cf96a Allow the tests to force a MatrixClient 2020-07-13 13:24:02 -06:00
Travis Ralston
eb78b1b328 Export the matrix client from the store 2020-07-13 13:18:01 -06:00
Travis Ralston
a8829f09d0 Ensure RoomListStore2 gets reset when the client becomes invalidated
Fixes https://github.com/vector-im/riot-web/issues/14384

We also make use of the new AsyncStore type to handle this more safely.
2020-07-13 13:15:44 -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
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