Skip to content

Commit

Permalink
Merge pull request #6054 from nextcloud/fix/6050-do-not-reopen-connec…
Browse files Browse the repository at this point in the history
…tion

fix(sync): reuse open connection
  • Loading branch information
max-nextcloud authored Jul 18, 2024
2 parents 4ca7cbe + 67cb647 commit 143f743
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 2 deletions.
6 changes: 6 additions & 0 deletions cypress/e2e/sync.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ describe('Sync', () => {

it('recovers from a lost and closed connection', () => {
let reconnect = false
// block all requests until the session is closed and reopened
cy.intercept('**/apps/text/session/*/*', (req) => {
if (req.url.includes('close') || req.url.includes('create') || reconnect) {
req.continue()
Expand All @@ -108,6 +109,11 @@ describe('Sync', () => {
cy.get('#editor-container .document-status', { timeout: 30000 })
.should('contain', 'Document could not be loaded.')

// Reconnect button works - it closes and reopens the session
cy.get('#editor-container .document-status a.button')
.contains('Reconnect')
.click()

cy.wait('@syncAfterRecovery', { timeout: 60000 })

cy.get('#editor-container .document-status', { timeout: 30000 })
Expand Down
6 changes: 4 additions & 2 deletions src/services/SyncService.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,12 +89,14 @@ class SyncService {
}

async open({ fileId, initialSession }) {

if (this.#connection && !this.#connection.isClosed) {
// We're already connected.
return
}
const connect = initialSession
? Promise.resolve(new Connection({ data: initialSession }, {}))
: this._api.open({ fileId, baseVersionEtag: this.baseVersionEtag })
.catch(error => this._emitError(error))

this.#connection = await connect
if (!this.#connection) {
// Error was already emitted in connect
Expand Down

0 comments on commit 143f743

Please sign in to comment.