Use onlyoffice spreadsheets without ooserver

This commit is contained in:
yflory
2019-01-07 12:02:38 +01:00
parent b2b23446e8
commit 1e672c4a6b
7 changed files with 428 additions and 101 deletions

View File

@@ -3174,6 +3174,7 @@ AscBrowser.convertToRetinaValue = function(value, isScale)
DocsCoApi.prototype._send = function(data) {
if (data !== null && typeof data === "object") {
if (this._state > 0) {
console.log(data);
this.sockjs.send(JSON.stringify(data));
} else {
this._msgBuffer.push(JSON.stringify(data));
@@ -3184,6 +3185,7 @@ AscBrowser.convertToRetinaValue = function(value, isScale)
DocsCoApi.prototype._sendRaw = function(data) {
if (data !== null && typeof data === "string") {
if (this._state > 0) {
console.log(data);
this.sockjs.send(data);
} else {
this._msgBuffer.push(data);
@@ -3755,6 +3757,7 @@ AscBrowser.convertToRetinaValue = function(value, isScale)
var t = this;
var sockjs;
/*
if (window['IS_NATIVE_EDITOR']) {
sockjs = this.sockjs = window['SockJS'];
sockjs.open();
@@ -3763,21 +3766,27 @@ AscBrowser.convertToRetinaValue = function(value, isScale)
//ограничиваем transports WebSocket и XHR / JSONP polling, как и engine.io https://github.com/socketio/engine.io
//при переборе streaming transports у клиента с wirewall происходило зацикливание(не повторялось в версии sock.js 0.3.4)
sockjs = this.sockjs = new (this._getSockJs())(this.sockjs_url, null, {transports: ['websocket', 'xdr-polling', 'xhr-polling', 'iframe-xhr-polling', 'jsonp-polling']});
}
}*/
sockjs = this.sockjs = {};
//t._state = true;
sockjs.onopen = function() {
/*
if (t.reconnectTimeout) {
clearTimeout(t.reconnectTimeout);
t.reconnectTimeout = null;
t.attemptCount = 0;
}
*/
t._state = ConnectionState.WaitAuth;
t.onFirstConnect();
};
sockjs.onopen();
sockjs.onmessage = function(e) {
//TODO: add checks and error handling
//Get data type
console.log(e.data);
var dataObject = JSON.parse(e.data);
switch (dataObject['type']) {
case 'auth' :
@@ -3847,6 +3856,68 @@ AscBrowser.convertToRetinaValue = function(value, isScale)
break;
}
};
sockjs.close = function () {
console.error('Close realtime');
};
var send = function (data) {
setTimeout(function () {
console.log(data);
sockjs.onmessage({
data: JSON.stringify(data)
});
});
};
sockjs.send = function (data) {
console.log(data);
try {
var obj = JSON.parse(data);
} catch (e) {
console.error(e);
return;
}
var msg, msg2;
switch (obj.type) {
case 'auth':
msg = {
"type":"auth",
"result":1,
"sessionId":"08e77705-dc5c-477d-b73a-b1a7cbca1e9b",
"sessionTimeConnect":+new Date(),
"participants":[]
};
msg2 = {
"type":"documentOpen",
"data":{"type":"open","status":"ok","data":{"Editor.bin":obj.openCmd.url}}
};
send(msg);
send(msg2);
break;
case 'getMessages':
msg = {};
break;
}
};
var license = {
type: 'license',
license: {
type: 3,
light: false,
trial: false,
rights: 1,
buildVersion: "4.3.3",
buildNumber: 4,
branding: false
}
};
send(license);
/*
sockjs.onclose = function(evt) {
if (ConnectionState.SaveChanges === t._state) {
// Мы сохраняли изменения и разорвалось соединение
@@ -3871,6 +3942,7 @@ AscBrowser.convertToRetinaValue = function(value, isScale)
t._tryReconnect();
}
};
*/
return sockjs;
};
@@ -3917,7 +3989,8 @@ AscBrowser.convertToRetinaValue = function(value, isScale)
//----------------------------------------------------------export----------------------------------------------------
window['AscCommon'] = window['AscCommon'] || {};
window['AscCommon'].CDocsCoApi = CDocsCoApi;
})(window);
})(window);
/*
* (c) Copyright Ascensio System SIA 2010-2017
*
@@ -9205,7 +9278,6 @@ function saveWithParts(fSendCommand, fCallback, fCallbackRequest, oAdditionalDat
}
function loadFileContent(url, callback) {
console.error(url);
asc_ajax({
url: url,
dataType: "text",
@@ -9228,90 +9300,86 @@ function getImageFromChanges (name) {
}
return null;
}
function openFileCommand(binUrl, changesUrl, Signature, callback) {
var bError = false, oResult = new OpenFileResult(), bEndLoadFile = false, bEndLoadChanges = false;
var onEndOpen = function() {
console.error("this is where we should decrypt");
if (bEndLoadFile && bEndLoadChanges) {
if (callback) {
callback(bError, oResult);
}
}
};
var sFileUrl = binUrl;
sFileUrl = sFileUrl.replace(/\\/g, "/");
if (!window['IS_NATIVE_EDITOR']) {
asc_ajax({
url: sFileUrl,
dataType: "text",
success: function(result) {
//получаем url к папке с файлом
var url;
var nIndex = sFileUrl.lastIndexOf("/");
url = (-1 !== nIndex) ? sFileUrl.substring(0, nIndex + 1) : sFileUrl;
if (0 < result.length) {
oResult.bSerFormat = Signature === result.substring(0, Signature.length);
oResult.data = result;
oResult.url = url;
} else {
bError = true;
}
bEndLoadFile = true;
onEndOpen();
console.error(oResult); // XXX
},
error: function() {
bEndLoadFile = true;
bError = true;
onEndOpen();
}
});
}
if (null != changesUrl) {
console.error("null changesUrl"); // XXX
getJSZipUtils().getBinaryContent(changesUrl, function(err, data) {
bEndLoadChanges = true;
if (err) {
bError = true;
onEndOpen();
return;
}
oZipChanges = new (require('jszip'))(data);
oResult.changes = [];
for (var i in oZipChanges.files) {
if (i.endsWith('.json')) {
// Заглушка на имя файла (стоило его начинать с цифры)
oResult.changes[parseInt(i.slice('changes'.length))] =
JSON.parse(oZipChanges.files[i].asText());
}
}
onEndOpen();
});
} else {
bEndLoadChanges = true;
}
if (window['IS_NATIVE_EDITOR']) {
console.error("is native editor");
var result = window["native"]["openFileCommand"](sFileUrl, changesUrl, Signature);
var url;
var nIndex = sFileUrl.lastIndexOf("/");
url = (-1 !== nIndex) ? sFileUrl.substring(0, nIndex + 1) : sFileUrl;
if (0 < result.length) {
oResult.bSerFormat = Signature === result.substring(0, Signature.length);
oResult.data = result;
oResult.url = url;
} else {
bError = true;
}
bEndLoadFile = true;
onEndOpen();
}
}
function openFileCommand(binUrl, changesUrl, Signature, callback) {
var bError = false, oResult = new OpenFileResult(), bEndLoadFile = false, bEndLoadChanges = false;
var onEndOpen = function() {
if (bEndLoadFile && bEndLoadChanges) {
if (callback) {
callback(bError, oResult);
}
}
};
var sFileUrl = binUrl;
sFileUrl = sFileUrl.replace(/\\/g, "/");
if (!window['IS_NATIVE_EDITOR']) {
asc_ajax({
url: sFileUrl,
dataType: "text",
success: function(result) {
//получаем url к папке с файлом
var url;
var nIndex = sFileUrl.lastIndexOf("/");
url = (-1 !== nIndex) ? sFileUrl.substring(0, nIndex + 1) : sFileUrl;
if (0 < result.length) {
oResult.bSerFormat = Signature === result.substring(0, Signature.length);
oResult.data = result;
oResult.url = url;
} else {
bError = true;
}
bEndLoadFile = true;
onEndOpen();
},
error: function() {
bEndLoadFile = true;
bError = true;
onEndOpen();
}
});
}
if (null != changesUrl) {
getJSZipUtils().getBinaryContent(changesUrl, function(err, data) {
bEndLoadChanges = true;
if (err) {
bError = true;
onEndOpen();
return;
}
oZipChanges = new (require('jszip'))(data);
oResult.changes = [];
for (var i in oZipChanges.files) {
if (i.endsWith('.json')) {
// Заглушка на имя файла (стоило его начинать с цифры)
oResult.changes[parseInt(i.slice('changes'.length))] = JSON.parse(oZipChanges.files[i].asText());
}
}
onEndOpen();
});
} else {
bEndLoadChanges = true;
}
if (window['IS_NATIVE_EDITOR']) {
var result = window["native"]["openFileCommand"](sFileUrl, changesUrl, Signature);
var url;
var nIndex = sFileUrl.lastIndexOf("/");
url = (-1 !== nIndex) ? sFileUrl.substring(0, nIndex + 1) : sFileUrl;
if (0 < result.length) {
oResult.bSerFormat = Signature === result.substring(0, Signature.length);
oResult.data = result;
oResult.url = url;
} else {
bError = true;
}
bEndLoadFile = true;
onEndOpen();
}
}
function sendCommand(editor, fCallback, rdata, dataContainer) {
//json не должен превышать размера 2097152, иначе при его чтении будет exception
var docConnectionId = editor.CoAuthoringApi.getDocId();