-
-
Notifications
You must be signed in to change notification settings - Fork 815
Ask to refresh timeline when historical messages are imported (MSC2716) #8354
Ask to refresh timeline when historical messages are imported (MSC2716) #8354
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
clearing code review
Codecov Report
@@ Coverage Diff @@
## develop #8354 +/- ##
===========================================
+ Coverage 30.01% 30.09% +0.07%
===========================================
Files 879 879
Lines 50193 50220 +27
Branches 12783 12791 +8
===========================================
+ Hits 15064 15112 +48
+ Misses 35129 35108 -21
|
| if (timelineSet !== this.props.timelineSet) return; | ||
|
|
||
| if (this.messagePanel.current && this.messagePanel.current.isAtBottom()) { | ||
| if (this.canResetTimeline()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems like a missed refactor. canResetTimeline by name seems applicable here and the logic appears pretty equivalent.
matrix-react-sdk/src/components/structures/RoomView.tsx
Lines 1004 to 1009 in 27118a9
| public canResetTimeline = () => { | |
| if (!this.messagePanel) { | |
| return true; | |
| } | |
| return this.messagePanel.canResetTimeline(); | |
| }; |
| public canResetTimeline = () => this.messagePanel?.current.isAtBottom(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Split out to #10403
See: ``` Error: src/utils/ErrorUtils.tsx(39,5): error TS1016: A required parameter cannot follow an optional parameter. ```
test/components/structures/__snapshots__/RoomView-test.tsx.snap
Outdated
Show resolved
Hide resolved
…msc2716-marker-events-v2 Conflicts: src/components/structures/MessagePanel.tsx src/components/views/rooms/EventTile.tsx src/i18n/strings/en_EN.json test/components/structures/__snapshots__/RoomView-test.tsx.snap
|
What's the state of this change? It looks like a huge amount of work has gone into it, and it's been around for ~6 months! |
|
@andybalaam The implementation on this side has been ready to go since April 20th when it had the review pass. And I've kept it up to date at various points (whenever I merge It's been blocked behind the refresh timeline function in the I'm focusing on other things so I guess it will continue to languish 🗻 |
|
OK so @MadLittleMods it doesn't look like you're blocked on us for anything here - just needing to find time to respond to review requests on matrix-org/matrix-js-sdk#2852 . Let me know if we can help. |
| // The submit debug logs option should *NOT* be shown. | ||
| // | ||
| // We have to use `queryBy` so that it can return `null` for something that does not exist. | ||
| expect(wrapper.queryByTestId('historical-import-detected-error-submit-debug-logs-button]')).toBeNull(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| expect(wrapper.queryByTestId('historical-import-detected-error-submit-debug-logs-button]')).toBeNull(); | |
| expect(wrapper.queryByTestId('historical-import-detected-error-submit-debug-logs-button')).toBeNull(); |
| if (this.state.refreshError) { | ||
| let errorTextContent; | ||
| let submitDebugLogsTextContent; | ||
| if (this.state.refreshError.name === "ConnectionError") { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See the pattern we ended up with in #10405
|
Abandoning PR as I don't see MSC2716 going further now that Gitter has fully migrated to Matrix |
… (nonsense to screenreaders) (#10402) And the other content like the title already describe what's going on sufficiently. Split out from matrix-org/matrix-react-sdk#8354
Ask to refresh timeline when historical messages are imported (MSC2716)
Associated
matrix-js-sdkPR: matrix-org/matrix-js-sdk#2299Loading state:

Error state for network errors (no need to submit debug logs):

Error state for other errors you can submit debug logs:

Beware: edge case
There is one edge case where the "History import detected" banner can re-appear after you have refreshed the timeline.
matrix-js-sdkonly persists/syncdata to IndexDB every 5 minutes which means it can have a stalenext_batchpagination token compared to the latest events you might be seeing on screen. So if you receive amarkerevent, it will show the banner to refresh the timeline. You can then use the button to refresh your timeline and the banner will disappear as expected. Then if you restart your entire Element client (like refreshing the entire browser), Element willsyncFromCachewith the/syncresponse from 5 minutes ago and query/syncwith that old pagination token which will fetch themarkerevent again and show the banner again.Testing strategy
homeserver.yaml, enableexperimental_features->msc2716_enabled: truePOST http://localhost:8008/_matrix/client/v3/createRoomwith{ "preset": "public_chat", "name": "test-msc2716", "room_version": "org.matrix.msc2716v3", "invite": ["@erictroupetester:my.synapse.server"] }?prev_event_idparameter for the batch send request:POST http://localhost:8008/_matrix/client/unstable/org.matrix.msc2716/rooms/{roomId}/batch_send?prev_event_id={someEventId}with{ "state_events_at_start": [ { "content": { "displayname": "some-display-name-for-@maria-01234:my.synapse.server", "membership": "join" }, "origin_server_ts": 1642055555924, "sender": "@maria-01234:my.synapse.server", "state_key": "@maria-01234:my.synapse.server", "type": "m.room.member" } ], "events": [ { "content": { "body": "Historical 0 (batch=0)", "msgtype": "m.text", "org.matrix.msc2716.historical": true }, "origin_server_ts": 1642055555924, "sender": "@maria-01234:my.synapse.server", "type": "m.room.message" }, { "content": { "body": "Historical 1 (batch=0)", "msgtype": "m.text", "org.matrix.msc2716.historical": true }, "origin_server_ts": 1642055555925, "sender": "@maria-01234:my.synapse.server", "type": "m.room.message" }, { "content": { "body": "Historical 2 (batch=0)", "msgtype": "m.text", "org.matrix.msc2716.historical": true }, "origin_server_ts": 1642055555926, "sender": "@maria-01234:my.synapse.server", "type": "m.room.message" }, { "content": { "body": "Historical 3 (batch=0)", "msgtype": "m.text", "org.matrix.msc2716.historical": true }, "origin_server_ts": 1642055555927, "sender": "@maria-01234:my.synapse.server", "type": "m.room.message" } ] }base_insertion_event_idfrom the batch send response in theorg.matrix.msc2716.marker.insertionfield in the JSON body:PUT http://localhost:8008/_matrix/client/r0/rooms/{roomId}/state/org.matrix.msc2716.marker{ "org.matrix.msc2716.marker.insertion": "$jxIsfEXmnUtl6KroclFmselixa1FEzQfBgKWlqV3Bfg", }Refresh timelinebuttonDev notes
First reviewed in #8303
Generic apply
data-xxxattributes to to child components (based off of https://stackoverflow.com/a/65656589/796832):Cypress
Clean up Synapse Docker instances from Cypress
Can't queue within
cy.interceptcallbacksError:
Snippet without
asyncstill fails ❌Snippet with async use case fails too ❌
Related issues:
cy.intercept(..., { forceNetworkError: true })does not play well with multiple matching requests or overridingBut if you try to override a
cy.interceptthat usesforceNetworkError, the second match will always fail. Both of the following examples work if you just switch it out for{ statusCode: 500 }instead of the network failureSnippet trying to override intercepts ❌
Snippet trying to conditionally fail/passthrough request ❌
Related issues:
Debugging Synapse in the Cypress e2e tests
In
cypress/plugins/synapsedocker/index.ts#L124, change the image that thesynapsedockerCypress plugin is using to spin up Synapse instances tomatrixdotorg/synapse:latest. Restart your Cypress process.In your local Synapse checkout, make any changes and build the image:
docker build -t matrixdotorg/synapse -f docker/Dockerfile .Logging code in Synapse to generate the tabulated events from the room you're interested in:
Example output:
Todo
matrix-js-sdkto actually refresh the timeline, Ask to refresh timeline when historical messages are imported (MSC2716) #8303 (comment)Here's what your changelog entry will look like:
✨ Features
Preview: https://pr8354--matrix-react-sdk.netlify.app
⚠️ Do you trust the author of this PR? Maybe this build will steal your keys or give you malware. Exercise caution. Use test accounts.