Commit graph

349 commits

Author SHA1 Message Date
Travis Ralston
cb15bc968c Remove excessive dispatch binding 2019-02-15 23:41:48 -07:00
Travis Ralston
53fa59f5a4 Remove old debugging code
The algorithm is correctly applied when these are removed.
2019-02-15 23:40:23 -07:00
Travis Ralston
45a415f8bf Protection around lack of room for tests 2019-02-13 20:16:47 -07:00
Travis Ralston
a2a13636ed Don't blow up when rooms have no timelines 2019-02-13 20:02:18 -07:00
Travis Ralston
0c7e0a264b Inline documentation 2019-02-13 19:49:28 -07:00
Travis Ralston
b08ab6cd12 Fix boundary math calculations 2019-02-13 19:35:01 -07:00
Travis Ralston
c0b63f986f Implement a cache on _tsOfNewestEvent: ~75% improvement 2019-02-13 19:16:11 -07:00
Travis Ralston
52f48f7422 Order by timestamp within the categorized room lists
When we load the page, all encrypted events arrive well after we've generated our initial grouping which can cause them to jump to the top of their categories wrongly. For direct chats, this meant that people who don't have a lot of unread messages would see ancient rooms bubbling to the top for no reason after the page has loaded.

We still have to track when the last category change was (ie: when we switched from red -> grey) so that when the category doesn't exist in the list we can insert the room at the right place (the start of the last category when we switch beyond the order expected).
2019-02-13 18:19:18 -07:00
Travis Ralston
821b34b487 React to read receipt changes from ourselves
When a room is read on another device, it should be re-sorted
2019-02-13 17:03:27 -07:00
Travis Ralston
2eb80f793c Try to handle direct chats and tag changes
This is a very blunt approach in that it ignores the sticky room.
2019-02-13 14:22:00 -07:00
Travis Ralston
b741b76797 Handle joins/leaves safely 2019-02-13 14:08:19 -07:00
Travis Ralston
b6c1b50fd9 Early support for improved room algorithm
This changes the approach from regenerating every time there's a change to incrementally fixing the room lists. Additionally, this forces the pin options on for people and implements the sticky room behaviour.

Known bugs include newly joined rooms, invites, etc not sorting correctly.
2019-02-13 13:01:03 -07:00
Bruno Windels
e8533beafb guard custom tags with feature flag 2019-02-07 18:07:30 +00:00
Bruno Windels
c0b9d99385 only import throttle fn 2019-02-07 16:03:12 +00:00
Bruno Windels
35d9c02ecd throttle custom tags updating in LLP 2019-02-07 15:28:22 +00:00
Bruno Windels
d2ac434545 no need to update tags when app is booting, wait till sync 2019-02-07 14:41:39 +00:00
Bruno Windels
64bb6d2b1f dont remove tags prop from state on logout as we assume its always there 2019-02-07 14:41:19 +00:00
Bruno Windels
8eb1f15ed4 do more explicit check 2019-02-07 12:18:52 +00:00
Bruno Windels
62cdf40a39 dont assume a user has joined all the rooms in a community 2019-02-07 12:11:16 +00:00
Bruno Windels
87ddb8a453
Merge pull request #2575 from matrix-org/bwindels/customtags
Bring back custom tags, also badges on communities
2019-02-07 11:37:17 +00:00
Bruno Windels
52aab2be98 preserve outer this with arrow function 2019-02-07 11:12:34 +00:00
Bruno Windels
7b23fa7a4f implement PR feedback 2019-02-07 10:49:23 +00:00
Bruno Windels
a222ee33df calculate badges for communities in TagOrderStore 2019-02-06 14:29:40 +00:00
Bruno Windels
77db3ca883 calculate badge count for tags as well 2019-02-06 11:02:12 +00:00
Bruno Windels
137ff984c7 rather unsophisticated attempt at trimming common prefixes for avatar 2019-02-05 19:12:34 +00:00
Bruno Windels
579309c2e3 store for custom tags to share state between tag panel & room list 2019-02-05 17:37:25 +00:00
Bruno Windels
3265fe394d don't filter out custom tags anymore 2019-02-05 17:35:05 +00:00
Travis Ralston
eac50aa800 Remove old user and room settings
This takes out the old user and room settings, replacing the paths with the new dialog editions. The labs setting has been removed in order to support this change.

In addition to removing the old components outright, some older components which were only used by the settings pages have been removed. The exception is the ColorSettings component as it has a high chance of sticking around in the future.

Styles that were shared by the settings components have been broken out to dedicated sections, making it easier to remove the old styles entirely.

Some stability testing of the app has been performed to ensure the app still works, however given the scope of this change there is a possibility of some broken functionality.
2019-02-04 13:40:21 -07:00
Travis Ralston
728748c9cd Disable old settings, making tabbed settings the default
This is intentionally not removing the labs flag or other supporting structures of the old settings to make a revert as easy as possible in the event that needs to happen. All of the cruft left behind (TempTab, temp styles, labs flag, old components, etc) will be removed in the very near future.
2019-02-01 10:29:13 -07:00
Travis Ralston
243feb9b13 Early tab structure and profile changes (name/avatar/topic) 2019-01-28 13:54:56 -07:00
Travis Ralston
535d42684f Initial structure for new room settings 2019-01-25 13:09:44 -07:00
J. Ryan Stinnett
29be3ee4b5 Rename login directory to auth 2019-01-21 17:45:55 -06:00
Bruno Windels
8c30d05eb8 Revert "Merge pull request #2348 from matrix-org/bwindels/roomgridview-experimental"
This reverts commit ece5cb1fcc, reversing
changes made to 64a3d2521c.
2019-01-17 10:29:37 +01:00
Bruno Windels
ece5cb1fcc
Merge pull request #2348 from matrix-org/bwindels/roomgridview-experimental
Tiled room UI
2019-01-09 17:25:08 +00:00
Bruno Windels
254427461d fix PR feedback 2019-01-09 12:48:13 +01:00
Travis Ralston
66cd8475b5 Don't reset cached room list values when they are falsey
`unread` and `unread-muted` store booleans in the cache, and can easily be `false`. Without this patch, both of those cached types would be cleared from the object where a later call to `getRoomState` would try and re-populate them. `getRoomState` is supposed to use the cache where possible to avoid making the more expensive calls required to calculate those booleans.

On my account in a test environment, this brings the `generateRoomLists` execution time down from ~250ms to just ~30ms. 

This still does not solve the whole issue, but should solve the more common case of performance woes for people.
2019-01-07 17:46:32 -07:00
Bruno Windels
aedc220b62 fix (some) lint warnings 2019-01-07 16:33:23 +01:00
Bruno Windels
290dc9d8fb Merge branch 'experimental' into bwindels/roomgridview-experimental 2019-01-07 14:17:57 +01:00
Travis Ralston
8017f0a4a1 Merge remote-tracking branch 'origin/experimental' into travis/develop-for-real 2019-01-03 16:00:23 -07:00
David Baker
f928be6f59 Revert "Merge pull request #2395 from matrix-org/dbkr/merge_develop_experimental"
This reverts commit ad47144355.
2019-01-03 15:37:03 -07:00
David Baker
7d161de35b Partial merge of develop to experimental
Does not include #2336 as the file has been moved out from underneath it:
will do this separately
2019-01-03 15:02:58 +00:00
Bruno Windels
532fb6ea78 update comment as well 2018-12-17 13:58:36 +01:00
Bruno Windels
4fffb55cc5 ignore any unknown tags 2018-12-17 13:52:32 +01:00
Bruno Windels
7b6c863377 fix lint 2018-12-14 15:53:52 +01:00
Bruno Windels
04bb13bb7b emit join error over own dispatcher, meh 2018-12-13 13:02:35 +01:00
Bruno Windels
368ef9e8e8 hack so we don't revert to single room view when viewing grid 2018-12-13 13:02:35 +01:00
Bruno Windels
9a24249fb5 emit focus_composer after updating the active room in GroupGridView
also change the active room from there so RoomView is oblivious
to grid view stuff
2018-12-13 13:01:59 +01:00
Bruno Windels
fbfbefe4fe also forward actions from room dispatcher to global one
avoiding replay if the action would be forwarded back to
the same room dispatcher

also some fixing & renaming in OpenRoomsStore
2018-12-13 13:01:59 +01:00
Bruno Windels
cf0f75cad4 allow changing active room in grid by clicking it 2018-12-13 13:01:59 +01:00
Bruno Windels
6ec6303b97 support opening all rooms of a group in OpenRoomsStore
using new view_group_grid action
2018-12-13 13:01:59 +01:00
Bruno Windels
d7924ad1a8 less ambigious name for local dispatcher 2018-12-13 13:01:59 +01:00
Bruno Windels
f95b26179f make copy of initial state, as there can be multiple instances now 2018-12-13 13:01:59 +01:00
Bruno Windels
869c81eb90 cram OpenRoomsStore between RoomViewStore and dispatcher
the idea is that it will keep a RoomViewStore for every
room on the screen, and also keep track of which one is
the current one.

For now, it just replicates the existing functionality of
having just 1 room on the screen.

Since the RoomViewStore just has access to a local dispatcher
and not the global anymore, all dispatching of actions
needs to be moved to the OpenRoomsStore, so room alias resolving,
event forwarding, ... is moved there.
2018-12-13 12:59:18 +01:00
David Baker
d7319d7e4f
Merge pull request #2330 from matrix-org/travis/fix-pinned-rooms
Fix pinning of rooms without badges
2018-12-07 17:44:36 +00:00
Travis Ralston
216fc6412a Fix pinning of rooms without badges
Fixes https://github.com/vector-im/riot-web/issues/7723

This adds consideration for rooms that are "mentions only" (or "unread-muted" as internally referenced).
2018-12-05 13:52:27 -07:00
Travis Ralston
c46bae59b2
Merge branch 'develop' into travis/cors-on-join 2018-12-05 11:30:19 -07:00
Travis Ralston
7e817f4aa9
Add a helpful comment 2018-12-05 11:29:53 -07:00
J. Ryan Stinnett
5fc25fd6ba Only mark group as failed to load for summary
Currently, any error in the `GroupStore`s several requests can cause the whole
`GroupView` component to hide and be mark the group as failed to load.

Since it is known that group members may fail to load in some cases, let's only
show failed to load for the whole group when the summary fails.

This also strengthens the `GroupView` test by ensuring we wait for multiple
updates for checking results.

Signed-off-by: J. Ryan Stinnett <jryans@gmail.com>
2018-12-04 18:32:16 -06:00
Travis Ralston
2b027b716f Suppress CORS errors in the 'failed to join room' dialog
This isn't pretty, but it does address https://github.com/vector-im/riot-web/issues/7526

Tested with Chrome and Firefox to ensure the message is stable enough to parse.
2018-11-27 14:23:28 -07:00
Travis Ralston
f9d5c11d8d Regenerate the room list when m.fully_read is issued
Not doing so results in the RoomListStore tracking stale data when the user reads messages on another device. The visual effect of this is rooms being incorrectly pinned in places they shouldn't be, such as the top of the list. This also fixes another visual bug where rooms don't move down once their timelines are read. This second issue is mot prominent when multiple rooms have been pinned to the top, and the middle one is read ahead of the others - it'll stick around until some other condition decides to wipe the room's cached state.

Fixes https://github.com/vector-im/riot-web/issues/7653
2018-11-04 19:47:24 -07:00
Travis Ralston
3960ae2fcd Add more commentary around how the roomCache works 2018-11-01 17:17:01 -06:00
Travis Ralston
a713cc5c52 Compare the right types of events 2018-11-01 17:07:05 -06:00
Travis Ralston
122868e32f Removing timing/performance tracking on room list store
This was used to verify the fix was actually making improvements and can be safely taken out.
2018-11-01 16:30:48 -06:00
Travis Ralston
0c7aadb92b Improve room list sort performance by caching common variables
This won't help much if the user is in a ton of highly active rooms, but for the most part this will help those in thousands of rooms, many of which are likely to be quiet. 

Fixes https://github.com/vector-im/riot-web/issues/7646
Fixes https://github.com/vector-im/riot-web/issues/7645 (due to timestamp ordering)
2018-11-01 16:28:13 -06:00
Travis Ralston
272acfa2f5 Appease the linter 2018-11-01 14:46:39 -06:00
Travis Ralston
5558b7a3b2 Avoid hitting the SettingsStore thousands of times when generating room lists
Should fix https://github.com/vector-im/riot-web/issues/7646 to some degree
2018-11-01 14:43:15 -06:00
Travis Ralston
57b99893e5
Merge pull request #1936 from turt2live/travis/pinned-room-list
Add options to pin unread/mentioned rooms to the top of the room list
2018-11-01 08:04:12 -06:00
Aaron Raimist
49ce4ef117
eslint --fix src/
Signed-off-by: Aaron Raimist <aaron@raim.ist>
2018-10-26 22:50:38 -05:00
Travis Ralston
3d8f0adf56 Move pinned rooms check to the RoomListStore 2018-10-12 14:35:54 -06:00
Bruno Windels
2ed414494f use Room.myMembership event instead of RoomMember.membership for me
This is more reliable with LL enabled as the syncing user is
only known when it was active in the current timeline
or when the members have been loaded
2018-09-17 19:14:52 +02:00
Bruno Windels
fe734b944e remove obsolete warning as peeking will cause the membership to be null 2018-09-13 18:45:38 +02:00
Bruno Windels
9a3717a274 only dispatch an action for self-membership
as everything listens to the dispatcher, dispatching an action can be quite slow,
especially when only matched in one listener, and the rest all having to be called
to just say "no, thanks". This is especially the case for the RoomMember.membership
event being put on the dispatcher, as there can be thousands of these events
when the room members are loading.

Since the RoomMember.membership action is only used on one place,
and only for the syncing user, change it to just that and only dispatch
in that case. This saves 100-300ms when setting the OOB members in
a big room (7000k members)

Maybe later on we can back this by room.getMyMembership() and avoid the
listener even...
2018-09-07 19:53:01 +02:00
David Baker
54620591cc Don't crash if the value of a room tag is null
We were checking that the order was not null, but not the object
itself.
2018-08-23 12:05:09 +01:00
David Baker
941a3cfa53 Support M_INCOMPATIBLE_ROOM_VERSION
For https://github.com/vector-im/riot-web/issues/7164
2018-08-21 18:33:25 +01:00
David Baker
94c7ae2bf5
Merge pull request #2098 from matrix-org/dbkr/destroy_widget
Destroy non-persistent widgets when switching room
2018-08-17 09:53:41 +01:00
David Baker
e3643bd74c Lint 2018-08-17 09:42:23 +01:00
Bruno Windels
cead4096d8
Merge pull request #2118 from matrix-org/bwindels/feature_lazyloading
Lazy loading of room members
2018-08-16 18:14:55 +02:00
Bruno Windels
440ebd187d getMyMembership() doesn't take id anymore 2018-08-14 11:47:05 +02:00
David Baker
f44cc8e66e
Merge pull request #2112 from matrix-org/dbkr/recognise_server_notices_room
Recognise server notices room(s)
2018-08-07 09:52:25 +01:00
David Baker
b5ce1ac5e1 Recognise server notices room(s)
and put them in their own section at the bottom
2018-08-06 18:00:40 +01:00
David Baker
b2302af708 Update room tags behaviour to match spec more
Fix Riot's behaviour with room tags after my cleanup in
https://github.com/matrix-org/matrix-doc/pull/1457 . Although, reading
it again, it's not clear how you're supposed to tell the difference
between a reverse-dns tag name and a legacy freeform text tag
(contains a '.'?) - I've left it detecting these as freeform text
for now.
2018-08-06 16:58:54 +01:00
David Baker
7875d37c8e Destroy non-persistent widgets when switching room 2018-08-01 15:01:11 +01:00
Bruno Windels
cfd20c7e85 fix error/tests 2018-07-25 16:10:49 +02:00
Bruno Windels
d87d34030a fix dm detection and conf call code with lazy loading 2018-07-25 16:10:49 +02:00
Bruno Windels
7ea913ccec fall back to synced membership when own membership is not yet available (due to lazy loading) 2018-07-25 16:10:49 +02:00
Bruno Windels
8529bc55e3 use helper method for knowing whether a user was kicked
mainly for readability, but also to discourage grabbing into the member
because of lazy loading changes
2018-07-25 16:10:49 +02:00
Bruno Windels
de3e143a8f only lazy load the members when viewing a joined room 2018-07-25 16:10:49 +02:00
Bruno Windels
8c985bd049 ask client to lazy load room members when viewing a room 2018-07-25 16:10:49 +02:00
David Baker
cdd73e6e1f Check matrix client exists when stopping 2018-07-24 16:55:45 +01:00
David Baker
7044410a13 Move destroyPersistentWidget to store 2018-07-24 16:50:34 +01:00
David Baker
ec4c7ffb71 Make ActiveWidgetStore clear persistent widgets
ActiveWidgetStore is now reponsible for removing the current
persistent widget from the store if it's been removed from whatever
room it was in. As per comment, this leaves us with the store updating
itself in this case but in all other cases, views call setters on the
store to update its state. We should make it so the store keeps itself
up to date and views aren't responsible for keeping the store up to date.

The store now emits events so it can notify PersistentApp when it changes.

Fixes https://github.com/vector-im/riot-web/issues/7076
2018-07-24 16:21:43 +01:00
David Baker
7aab6fa6f1 Merge remote-tracking branch 'origin/develop' into dbkr/widget_echo 2018-07-18 09:35:57 +01:00
Matthew Hodgson
02c3bc9476
Merge pull request #2069 from matrix-org/t3chguy/slate_cont2
Moar Slate Fixes
2018-07-17 17:15:01 +01:00
Michael Telatynski
23b6abf8b7
no point saving history at this point, maybe future supported
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2018-07-17 09:27:11 +01:00
Michael Telatynski
cbe5944ff0
preserve selection and history between room changes and refreshes
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2018-07-16 22:04:42 +01:00
David Baker
a79caed0c9 Merge remote-tracking branch 'origin/develop' into dbkr/tiny_jitsi_follows_you_between_rooms 2018-07-16 17:21:51 +01:00
David Baker
379d65bd6c
Merge pull request #2064 from matrix-org/t3chguy/slate_cont2
simplify MessageComposerStore and improve its performance
2018-07-16 17:20:48 +01:00
Michael Telatynski
2f1779751b
make the MessageComposerStore stateless for better performance
and inter-tab composition (by simplifying it. WIN-WIN)

Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2018-07-16 16:56:08 +01:00
David Baker
d16ac4d80c
Merge pull request #1890 from matrix-org/matthew/slate
Replace Draft with Slate
2018-07-16 14:16:25 +01:00
David Baker
4c6419a3c5 Merge remote-tracking branch 'origin/develop' into dbkr/widget_echo 2018-07-16 13:24:13 +01:00