-
-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Scrolling: Ability to scrollback can get stuck #18325
Comments
I don't think I am able to repro. Do you have a repro case? Have you seen this before or is this a regression? |
i've seen it a few times before; i think it is a regression (but could have regressed months ago). will try to repro. |
stuck.scrollback.movvideo of me reproing it. i'm afraid it's in an internal room, so i've had to crop the video comically, but suffice it to say that i'm leaning on page-up in order to rapidly backpaginate, and then when it gets stopped, i have to click on the permalink for the first message in the room for it to let me continue backpaginating again. will rageshake too. |
n.b. there is no spinner when it gets stuck. you just have a big hunk of vertical blank margin which you can't scroll beyond. |
I wonder, this only happens in this room or also other ones? I attempted to repro in a few rooms but I didn't manage to do it |
have seen it in many rooms; basically reproducable in any encrypted room if you start scrolling back aggressively. |
Also happens on desktop 1.9.5 (happened in prior versions as well), same problem as stuck.scrollback.mov, one interesting thing is if i manage to get to an older message using search, while scrolling down it will skip the section that was stuck entirely, messages left there are completely unreadable. This does not happen on the android app and the room history is readable as expected. |
I've seen this happen recently on develop.element.io |
Same on my side... capture.mp4 |
I just repro'd this again, simply by hammering page-up in #NVI. It had a "you do not have permission to view encrypted messages before this point." warning at the top of the page. clicking a permalink unstuck it. |
I think I figured out what this is: When you're paginating back through a room and you hit a reply event that's outside of your current timeline set, the client will fetch the replied to event with the /context endpoint with Then, if you continue to paginate back in the room, eventually you'll have a /messages response that overlaps with the old /context response, and the timelines will be linked together. However, the timeline created from the /context response will still just have the partial room state returned due to the This becomes a problem when we call This function scans through the timline and tries to find when the current logged in user first joined the room by looking for the absense of a join event in the timeline. If we find a decryption error in the timeline before we have a membership for ourself in the timeline, we assume that this means that we're about to show the user a wall of decryption errors, as we've paginated into a portion of the rooom history that pre-dated us joining the room. We artificially stop paginating the room at this point, and only show events after we've "joined" the room. The problem is, this timeline created by the /context endpoint doesn't necessarily have all the members in the room, and if you didn't say anything during this period, the /context endpoint won't include your membership event. This means that if there's a decryption error around this point, and we didn't say anything in the room around this point, The fix for this isn't super clear to me, hence the huge comment and not a PR. We could:
Other ideas? Especially from folks that are more familiar with the timeline code than I? matrix-org/matrix-react-sdk#3881 is the PR that introduced this pagination handling in encrypted rooms, for context. |
@bradtgmurray thanks for tracking this one down :) My bias would be towards option 3 - the timeline created by /context in order to view a reply could definitely be thrown away in favour of the more detailed timeline from /messages when it's returned. we could flag the /context timeline as being dispensable (and not to bother trying to merge with it). alternatively, option 4 could work too, and have the checkForPreJoinUISI just ignore timelines where the members haven't been loaded. |
I just got bitten by this on today's nightly. |
I think @pmaier1 hit this today. Hard to know for sure though, but he failed to scrollback far enough in an encrypted room stating:
|
Fixed by matrix-org/matrix-react-sdk#12464 which removes the |
In an encrypted room, it's possible for scrollback to stop loading, despite you not being at the beginning of the room. A workaround is to click on the timestamp of a message towards the top of your timeline in order to permalink it, which causes it start back-paginating again. However, it obviously shouldn't stop refusing to scrollback in the first place.
The text was updated successfully, but these errors were encountered: