diff --git a/www/common/onlyoffice/inner.js b/www/common/onlyoffice/inner.js index 4462b5739..2c87135e8 100644 --- a/www/common/onlyoffice/inner.js +++ b/www/common/onlyoffice/inner.js @@ -217,6 +217,26 @@ define([ } }; + // Loading a checkpoint reorder the sheet starting from ID "5". + // We have to reorder it manually when a checkpoint is created + // so that the messages we send to the realtime channel are + // loadable by users joining after the checkpoint + var fixSheets = function () { + try { + var editor = window.frames[0].editor; + var s = editor.GetSheets(); + if (s.length === 0) { return; } + var wb = s[0].worksheet.workbook; + s.forEach(function (obj, i) { + var id = String(i + 5); + obj.worksheet.Id = id; + wb.aWorksheetsById[id] = obj.worksheet; + }); + } catch (e) { + console.error(e); + } + }; + var fmConfig = { noHandlers: true, noStore: true, @@ -237,6 +257,9 @@ define([ oldHashes = JSON.parse(JSON.stringify(content.hashes)); content.saveLock = undefined; APP.onLocal(); + APP.realtime.onSettle(function () { + fixSheets(); + }); sframeChan.query('Q_OO_COMMAND', { cmd: 'UPDATE_HASH', data: ev.hash @@ -891,6 +914,7 @@ define([ openRtChannel(function () { setMyId(); + oldHashes = JSON.parse(JSON.stringify(content.hashes)); loadDocument(newDoc); initializing = false; setEditable(!readOnly); @@ -910,11 +934,13 @@ define([ if (content.hashes) { var latest = getLastCp(true); var newLatest = getLastCp(); - if (newLatest.index >= latest.index) { + if (newLatest.index > latest.index) { + fixSheets(); sframeChan.query('Q_OO_SAVE', { url: newLatest.file }, function () { }); } + oldHashes = JSON.parse(JSON.stringify(content.hashes)); } if (content.ids) { handleNewIds(oldIds, content.ids);