Merge pull request #3337 from overleaf/jpa-fix-consitency-check

[frontend] Document: fix consistency check

GitOrigin-RevId: d303fe48e4f3460dab609d53e195992920af7b1b
This commit is contained in:
Shane Kilkelly 2020-11-04 09:55:49 +00:00 committed by Copybot
parent 57e9cf2829
commit fc1816b0fc
2 changed files with 23 additions and 22 deletions

View file

@ -1,4 +1,3 @@
import _ from 'lodash'
/* eslint-disable /* eslint-disable
camelcase, camelcase,
handle-callback-err, handle-callback-err,
@ -84,8 +83,8 @@ export default (Document = (function() {
this.connected = this.ide.socket.socket.connected this.connected = this.ide.socket.socket.connected
this.joined = false this.joined = false
this.wantToBeJoined = false this.wantToBeJoined = false
this._checkAceConsistency = _.bind(this._checkConsistency, this, this.ace) this._checkAceConsistency = () => this._checkConsistency(this.ace)
this._checkCMConsistency = _.bind(this._checkConsistency, this, this.cm) this._checkCMConsistency = () => this._checkConsistency(this.cm)
this._bindToEditorEvents() this._bindToEditorEvents()
this._bindToSocketEvents() this._bindToSocketEvents()
} }
@ -140,21 +139,21 @@ export default (Document = (function() {
} }
_checkConsistency(editor) { _checkConsistency(editor) {
return () => { // We've been seeing a lot of errors when I think there shouldn't be
// We've been seeing a lot of errors when I think there shouldn't be // any, which may be related to this check happening before the change is
// any, which may be related to this check happening before the change is // applied. If we use a timeout, hopefully we can reduce this.
// applied. If we use a timeout, hopefully we can reduce this. return setTimeout(() => {
return setTimeout(() => { const editorValue = editor != null ? editor.getValue() : undefined
const editorValue = editor != null ? editor.getValue() : undefined const sharejsValue =
const sharejsValue = this.doc != null ? this.doc.getSnapshot() : undefined
this.doc != null ? this.doc.getSnapshot() : undefined if (editorValue !== sharejsValue) {
if (editorValue !== sharejsValue) { return this._onError(
return this._onError( new Error('Editor text does not match server text'),
new Error('Editor text does not match server text') {},
) editorValue
} )
}, 0) }
} }, 0)
} }
getSnapshot() { getSnapshot() {
@ -653,7 +652,7 @@ export default (Document = (function() {
}) })
} }
_onError(error, meta) { _onError(error, meta, editorContent) {
if (meta == null) { if (meta == null) {
meta = {} meta = {}
} }
@ -682,7 +681,7 @@ export default (Document = (function() {
if (this.doc != null) { if (this.doc != null) {
this.doc.clearInflightAndPendingOps() this.doc.clearInflightAndPendingOps()
} }
this.trigger('error', error, meta) this.trigger('error', error, meta, editorContent)
// The clean up should run after the error is triggered because the error triggers a // The clean up should run after the error is triggered because the error triggers a
// disconnect. If we run the clean up first, we remove our event handlers and miss // disconnect. If we run the clean up first, we remove our event handlers and miss
// the disconnect event, which means we try to leaveDoc when the connection comes back. // the disconnect event, which means we try to leaveDoc when the connection comes back.

View file

@ -246,7 +246,7 @@ export default (EditorManager = (function() {
} }
_bindToDocumentEvents(doc, sharejs_doc) { _bindToDocumentEvents(doc, sharejs_doc) {
sharejs_doc.on('error', (error, meta) => { sharejs_doc.on('error', (error, meta, editorContent) => {
let message let message
if ((error != null ? error.message : undefined) != null) { if ((error != null ? error.message : undefined) != null) {
;({ message } = error) ;({ message } = error)
@ -271,7 +271,9 @@ export default (EditorManager = (function() {
this.ide.showOutOfSyncModal( this.ide.showOutOfSyncModal(
'Out of sync', 'Out of sync',
"Sorry, this file has gone out of sync and we need to do a full refresh. <br> <a href='/learn/Kb/Editor_out_of_sync_problems'>Please see this help guide for more information</a>", "Sorry, this file has gone out of sync and we need to do a full refresh. <br> <a href='/learn/Kb/Editor_out_of_sync_problems'>Please see this help guide for more information</a>",
sharejs_doc.doc._doc.snapshot typeof editorContent === 'string'
? editorContent
: sharejs_doc.doc._doc.snapshot
) )
} }
const removeHandler = this.$scope.$on('project:joined', () => { const removeHandler = this.$scope.$on('project:joined', () => {