Commit graph

3593 commits

Author SHA1 Message Date
Robert Swain
aa82be1fb1 Merge branch 'develop' into rob/electron-screensharing 2017-09-12 10:54:20 +02:00
David Baker
3c70b86668 Merge pull request #1375 from matrix-org/dbkr/active_room_observer
Avoid re-rendering RoomList on room switch
2017-09-11 18:52:09 +01:00
David Baker
7e1886c2ab Merge pull request #1376 from matrix-org/dbkr/fix_failed_to_load_timeline_pos
Fix 'Failed to load timeline position' regression
2017-09-11 18:51:41 +01:00
David Baker
6cb98d7196 Hopefully make comment clearer 2017-09-11 18:39:30 +01:00
David Baker
531fc3ac54 Fix 'Failed to load timeline position' regression
Ignore the update that comes in from the RoomViewStore when the
current room changes or we save our scoll state against the new
room rather than the old one.

Fixes https://github.com/vector-im/riot-web/issues/5010
2017-09-11 17:57:52 +01:00
David Baker
be8f0991a6 Avoid re-rendering RoomList on room switch
Introduce a class that consumes updates from the RoomViewStore and
announces to listeners if the active room ID is now or is no longer
the room ID they specified. Naming suggestions welcome: it's
currently called ActiveRoomObserver.

Avoids passing the selectedRoomId down from MatrixChat all the way
through the LeftPanel / RoomList / RoomSubList to the RoomTiles.

Also introduce a CallPreview class that listens directly for
RoomViewStore changes as the call preview in the left panel needs
to know when the room changes, so this allows this component to
update without having to update the entire left panel.
2017-09-11 16:59:09 +01:00
David Baker
7617788345 Merge pull request #1372 from matrix-org/dbkr/emoji_fast_path
Fast path for emojifying strings
2017-09-10 17:44:02 +01:00
David Baker
05a986334d Separate function to add code copy button
For neatness and also so it can show up separately in the profiler.
2017-09-10 15:58:17 +01:00
David Baker
876257f4e2 Consolidate the code copy button
Adding the code code button was done by manipulating the HTML of
the event body to add a span tag, then adding the onclick handler
after the thing was mounted. Apart from splitting the code between
two places, adding the span tag was, according to Chrome's
profiler, taking up quite a lot of CPU cycles (apparently as soon
as you set the innerHTML on a div). Instead, just build the whole
lot together after the component mounts.
2017-09-10 14:23:33 +01:00
David Baker
ea5726aa4e Copyright 2017-09-08 23:14:06 +01:00
David Baker
ec3ff529e7 Fast path for emojifying strings
Emojione's regex for detecting emoji is *enourmous* and we were
running it on every display name, room name, message etc every time
those components mounted. Add a much simpler regex to rule out the
majority of strings that contain no emoji and fast-path them.

Makes room switching about 10% faster (in my tests with all the
profiling turned on).
2017-09-08 23:05:27 +01:00
Matthew Hodgson
0e8bd856bc remove obsolete this._roomViewStoreToken.remove(); 2017-09-08 20:14:27 +02:00
David Baker
663dc3e513 Don't re-render matrixchat unnecessarily
...on room switch. We were setting most of the state in viewRoom,
but getting the current room ID from the RoomViewStore, but this
meant we did one setState from the RoomViewStore updating,
re-rendered and then setState again in viewRoom causing another
render. This just sets the room ID in viewRoom.
2017-09-08 18:56:57 +01:00
David Baker
aee2f3cdef Rename onHaveRoom
And move some code out of it which didn't really have any reason
to be hanging out there rather than just be where we set the room
a few lines above.
2017-09-08 18:11:13 +01:00
David Baker
bf982004f6 Give onHaveRoom the info it needs explicitly
Rather than giving it a state object which is not actually the
whole state but happens to be everything it actually wants
(currently)
2017-09-08 17:56:53 +01:00
David Baker
03dcded72f Blank line to make comment clearer 2017-09-08 17:39:10 +01:00
David Baker
1be35a77ec Don't wait for setState to run onHaveRoom
onHaveRoom sets some more state (among other things) so putting it
in the setState callback so it could observe the new state caused
us to have to re-render again unnecessarily. Just give it the new
state as a parameter.
2017-09-08 17:06:46 +01:00
David Baker
984d639a37 Merge remote-tracking branch 'origin/develop' into dbkr/scroll_state_store 2017-09-08 15:58:38 +01:00
David Baker
13b094a3f6 Merge pull request #1369 from matrix-org/dbkr/dont_always_paginate
Don't always paginate when mounting a ScrollPanel
2017-09-08 15:51:55 +01:00
David Baker
78a2e49705 Don't always paginate when mounting a ScrollPanel
Calling just checkFill on DidMount did not initially set the
scrollTop which meant that one back pagination request is always
performed regardless. This meant we would end up rending the
first batch of events, then paginating and re-rendering again
after the pagination got another batch, causing unnecessary render
churn.
2017-09-08 15:41:19 +01:00
David Baker
59c54d3756 Remove redundant code 2017-09-08 13:39:22 +01:00
David Baker
82d1afcc47 Correct comment 2017-09-07 17:16:32 +01:00
David Baker
408b8c18ea Introduce a RoomScrollStateStore
to keep the place we're scrolled to in rooms. This mainly eleimates
the extra, superfluous onRoomViewStoreUpdate callback that
happened when the previous room saved back its scroll state.
Moving the scroll state to a separate store means we can have this
not emit events because nothing needs to know when the scroll state
changes.
2017-09-07 17:08:36 +01:00
David Baker
d71f15adf4 Remove unused scrollStateMap from LoggedinView 2017-09-06 22:51:10 +01:00
David Baker
609d61d53c Revert "Implement sticky date separators" 2017-09-06 17:40:58 +01:00
David Baker
262d66f579 Merge pull request #1353 from matrix-org/luke/feature-sticky-date-separators
Implement sticky date separators
2017-09-05 14:15:47 +01:00
David Baker
79ee41351c Fix typo 2017-09-04 15:45:28 +01:00
Robert Swain
53574541c3 AppTile: Add Jitsi electron screensharing support 2017-09-04 09:31:25 +02:00
Luke Barnard
c9c0771355 Spelling 2017-08-31 16:29:45 +01:00
Luke Barnard
cdb28f956e Add comment for StickyContainer extension 2017-08-31 16:29:31 +01:00
David Baker
a2f2070966 Put setSate in the promise constructor
Avoids local variables. Also typo in comment.
2017-08-30 21:44:10 +01:00
David Baker
225fe67586 Fix room change sometimes being very slow
If the js-sdk had a lot of history in memory for a particular room,
riot would paginate all that history into the DOM and render it
when switching to that room (before then removing it all again).
This obviously made switching to that room very slow.

This was caused by the fact that we relied on the setState that
happens in TimelinePanel after the pagination taking effect such
that ScrollPanel sees that it no longer needs to paginate, but
in some situations (as far as I can see, in electron...?) this
setState would not take effect until the pagination stopped
fulfiling requests from memory and hit the network.

Fix: don't resolve the promise returned by the pagination request
until the setState has actually happened.
2017-08-30 19:14:26 +01:00
Luke Barnard
a29e7da06b Merge branch 'develop' into luke/feature-sticky-date-separators 2017-08-30 14:06:06 +01:00
David Baker
32b33c66b9 Merge pull request #1346 from matrix-org/t3chguy/shouldHideEvent_RoomStatusBar
apply shouldHideEvent fn to onRoomTimeline for RoomStatusBar
2017-08-30 13:58:40 +01:00
Luke Barnard
d516906b36 Implement sticky date separators
Use `react-sticky` to implement sticky date separators. This will pin a date separator to the top of the timeline panel when the separator scrolls out of the top of the view.

A known issue of this is that the spinner, which is in line with event tiles in the timeline, will appear to push the stuck date separator down. In reality the first date separator after the spinner is in line with event tiles and is not stuck because the spinner forces the timeline to be scrolled slightly further down than it would be otherwise. But also, date separators in the timeline (not "stuck") have a greater height.

Ideally the date separator would be suppressed whilst back paginating, but this will cause the stuck separator to flicker on and off. This is why the suppression has been removed.
2017-08-30 13:52:46 +01:00
David Baker
22bb635ff3 Merge pull request #1352 from matrix-org/fix_hide_rr_regression
separate concepts of showing and managing RRs to fix regression
2017-08-30 13:50:44 +01:00
Michael Telatynski
05c232c8c3
revert fancy indents
Signed-off-by: Michael Telatynski <7t3chguy@gmail.com>
2017-08-30 13:32:07 +01:00
Michael Telatynski
282618d5a1
separate concepts of showing and managing RRs to fix regression 2017-08-30 13:18:14 +01:00
Richard Lewis
84481f1a1e Merge pull request #1350 from matrix-org/rxl881/scalarTokenFix
Make staging widgets work with live and vice versa.
2017-08-30 11:04:50 +01:00
Richard Lewis
2ff1888054 Make staging widgets work with live and vice versa. 2017-08-30 10:36:22 +01:00
Richard van der Hoff
b9e047f0ff Avoid breaking /sync with uncaught exceptions
For reasons I don't fully understand, it appears that sometimes the
ReadReceiptMarker has no offsetParent. Rather than dying with an uncaught
exception when that happens (and taking out half of React as well as the /sync
handler), log a warning and suppress the animation.
2017-08-30 10:01:45 +01:00
Luke Barnard
5e98aa4850 Merge pull request #1343 from matrix-org/t3chguy/fix_two_roomlist_regressions
we need to pass whether it is an invite RoomSubList explicitly (i18n)
2017-08-29 16:33:48 +01:00
Luke Barnard
3f11f9148f Merge pull request #1348 from matrix-org/dbkr/fix_forgot_password_percent_encode
Percent encoding isn't a valid thing within _t
2017-08-29 15:02:26 +01:00
David Baker
6d5b1b7a55 Percent encoding isn't a valid thing within _t
Just use a plain apostrophe
2017-08-29 14:18:24 +01:00
David Baker
ec983b838a Unbreak password reset with a non-default HS
Broken by the change from onHsUrlChanged to onServerConfigChanged
in https://github.com/matrix-org/matrix-react-sdk/pull/811 where
ForgotPassword got missed.
2017-08-29 14:07:43 +01:00
Michael Telatynski
315f7a3ae7
apply shouldHideEvent fn to onRoomTimeline for RoomStatusBar
prevents N new message(s) when a hidden message comes in.
2017-08-28 13:46:09 +01:00
Michael Telatynski
edb449dfe5
we need to pass whether it is an invite RoomSubList explicitly (i18n) 2017-08-27 23:38:25 +01:00
Michael Telatynski
cd1e58cb61
_tJsx returns a React Object, the sub fn must return a React Object
not a string
2017-08-26 08:18:55 +01:00
David Baker
5cfec247f0 Merge pull request #1331 from matrix-org/luke/fix-completion-click-to-insert
Fix click to insert completion
2017-08-24 14:56:15 +01:00
David Baker
814e08d843 Merge pull request #1334 from matrix-org/dbkr/update_on_event_decrypted
Force update on timelinepanel when event decrypted
2017-08-24 13:35:39 +01:00