Commit ca29d5a9 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Поправил проблему с отключением соединения: могли поставить lock для...

Поправил проблему с отключением соединения: могли поставить lock для сохранения и не снять его из-за потери соединения, а также могли потерять данные пользователя (т.е. не дошел saveChanges).
Теперь lock с сохранения снимается автоматически при сохранении (и присылается callback, если он не приходит, то пробуем сохранить еще раз).

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@58569 954022d7-b5bf-4e40-9824-e11837661b57
parent e39931fd
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
'use strict'; 'use strict';
var asc = window["Asc"]; var asc = window["Asc"];
var asc_coAuthV = '3.0.2'; var asc_coAuthV = '3.0.3';
// Класс надстройка, для online и offline работы // Класс надстройка, для online и offline работы
function CDocsCoApi (options) { function CDocsCoApi (options) {
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
// Callback есть пользователей больше 1 // Callback есть пользователей больше 1
this._CoAuthoringApi.onStartCoAuthoring = function (e) {t.callback_OnStartCoAuthoring(e);}; this._CoAuthoringApi.onStartCoAuthoring = function (e) {t.callback_OnStartCoAuthoring(e);};
this._CoAuthoringApi.onEndCoAuthoring = function (e) {t.callback_OnEndCoAuthoring(e);}; this._CoAuthoringApi.onEndCoAuthoring = function (e) {t.callback_OnEndCoAuthoring(e);};
this._CoAuthoringApi.onUnSaveLock = function (e) {t.callback_OnUnSaveLock(e);}; this._CoAuthoringApi.onUnSaveLock = function () {t.callback_OnUnSaveLock();};
this._CoAuthoringApi.init(user, docid, token, callback, editorType, documentFormatSave, isViewer); this._CoAuthoringApi.init(user, docid, token, callback, editorType, documentFormatSave, isViewer);
this._onlineWork = true; this._onlineWork = true;
...@@ -120,12 +120,6 @@ ...@@ -120,12 +120,6 @@
} }
}; };
CDocsCoApi.prototype.unSaveChanges = function () {
if (this._CoAuthoringApi && this._onlineWork) {
this._CoAuthoringApi.unSaveChanges();
}
};
CDocsCoApi.prototype.saveChanges = function (arrayChanges, deleteIndex) { CDocsCoApi.prototype.saveChanges = function (arrayChanges, deleteIndex) {
if (this._CoAuthoringApi && this._onlineWork) { if (this._CoAuthoringApi && this._onlineWork) {
this._CoAuthoringApi.saveChanges(arrayChanges, null, deleteIndex); this._CoAuthoringApi.saveChanges(arrayChanges, null, deleteIndex);
...@@ -236,9 +230,9 @@ ...@@ -236,9 +230,9 @@
this.onEndCoAuthoring(e); this.onEndCoAuthoring(e);
}; };
CDocsCoApi.prototype.callback_OnUnSaveLock = function (e) { CDocsCoApi.prototype.callback_OnUnSaveLock = function () {
if (this.onUnSaveLock) if (this.onUnSaveLock)
this.onUnSaveLock(e); this.onUnSaveLock();
}; };
/** States /** States
...@@ -275,6 +269,7 @@ ...@@ -275,6 +269,7 @@
this._msgBuffer = []; this._msgBuffer = [];
this._lockCallbacks = {}; this._lockCallbacks = {};
this._saveCallback = []; this._saveCallback = [];
this.saveLockCallbackErrorTimeOutId = null;
this.saveCallbackErrorTimeOutId = null; this.saveCallbackErrorTimeOutId = null;
this._id = ""; this._id = "";
this._indexuser = -1; this._indexuser = -1;
...@@ -401,12 +396,12 @@ ...@@ -401,12 +396,12 @@
} }
// Очищаем предыдущий таймер // Очищаем предыдущий таймер
if (null !== this.saveCallbackErrorTimeOutId) if (null !== this.saveLockCallbackErrorTimeOutId)
clearTimeout(this.saveCallbackErrorTimeOutId); clearTimeout(this.saveLockCallbackErrorTimeOutId);
// Проверим состояние, если мы не подсоединились, то сразу отправим ошибку // Проверим состояние, если мы не подсоединились, то сразу отправим ошибку
if (-1 === this.get_state()) { if (-1 === this.get_state()) {
this.saveCallbackErrorTimeOutId = window.setTimeout(function () { this.saveLockCallbackErrorTimeOutId = window.setTimeout(function () {
if (callback && _.isFunction(callback)) { if (callback && _.isFunction(callback)) {
// Фиктивные вызовы // Фиктивные вызовы
callback({error: "No connection"}); callback({error: "No connection"});
...@@ -420,8 +415,8 @@ ...@@ -420,8 +415,8 @@
this._saveCallback[indexCallback] = callback; this._saveCallback[indexCallback] = callback;
//Set reconnectTimeout //Set reconnectTimeout
window.setTimeout(function () { this.saveLockCallbackErrorTimeOutId = window.setTimeout(function () {
t.saveCallbackErrorTimeOutId = null; t.saveLockCallbackErrorTimeOutId = null;
var oTmpCallback = t._saveCallback[indexCallback]; var oTmpCallback = t._saveCallback[indexCallback];
if (oTmpCallback) { if (oTmpCallback) {
t._saveCallback[indexCallback] = null; t._saveCallback[indexCallback] = null;
...@@ -433,10 +428,6 @@ ...@@ -433,10 +428,6 @@
this._send({"type": "isSaveLock"}); this._send({"type": "isSaveLock"});
}; };
DocsCoApi.prototype.unSaveChanges = function () {
this._send({"type": "unSaveLock"});
};
DocsCoApi.prototype.releaseLocks = function (blockId) { DocsCoApi.prototype.releaseLocks = function (blockId) {
if (this._locks[blockId] && 2 === this._locks[blockId].state /*lock is ours*/) { if (this._locks[blockId] && 2 === this._locks[blockId].state /*lock is ours*/) {
//Ask //Ask
...@@ -444,6 +435,10 @@ ...@@ -444,6 +435,10 @@
} }
}; };
DocsCoApi.prototype._reSaveChanges = function () {
this.saveChanges(this.arrayChanges, this.currentIndex);
};
DocsCoApi.prototype.saveChanges = function (arrayChanges, currentIndex, deleteIndex) { DocsCoApi.prototype.saveChanges = function (arrayChanges, currentIndex, deleteIndex) {
if (null === currentIndex) { if (null === currentIndex) {
this.deleteIndex = deleteIndex; this.deleteIndex = deleteIndex;
...@@ -461,6 +456,13 @@ ...@@ -461,6 +456,13 @@
} }
} }
//Set errorTimeout
var t = this;
this.saveCallbackErrorTimeOutId = window.setTimeout(function () {
t.saveCallbackErrorTimeOutId = null;
t._reSaveChanges();
}, 5000);
this._send({"type": "saveChanges", "changes": JSON.stringify(arrayChanges.slice(startIndex, endIndex)), this._send({"type": "saveChanges", "changes": JSON.stringify(arrayChanges.slice(startIndex, endIndex)),
"startSaveChanges": (startIndex === 0), "endSaveChanges": (endIndex === arrayChanges.length), "startSaveChanges": (startIndex === 0), "endSaveChanges": (endIndex === arrayChanges.length),
"isCoAuthoring": this.isCoAuthoring, "isExcel": this._isExcel, "deleteIndex": this.deleteIndex, "isCoAuthoring": this.isCoAuthoring, "isExcel": this._isExcel, "deleteIndex": this.deleteIndex,
...@@ -637,8 +639,8 @@ ...@@ -637,8 +639,8 @@
var oTmpCallback = this._saveCallback[indexCallback]; var oTmpCallback = this._saveCallback[indexCallback];
if (oTmpCallback) { if (oTmpCallback) {
// Очищаем предыдущий таймер // Очищаем предыдущий таймер
if (null !== this.saveCallbackErrorTimeOutId) if (null !== this.saveLockCallbackErrorTimeOutId)
clearTimeout(this.saveCallbackErrorTimeOutId); clearTimeout(this.saveLockCallbackErrorTimeOutId);
this._saveCallback[indexCallback] = null; this._saveCallback[indexCallback] = null;
oTmpCallback(data); oTmpCallback(data);
...@@ -647,6 +649,10 @@ ...@@ -647,6 +649,10 @@
}; };
DocsCoApi.prototype._onUnSaveLock = function () { DocsCoApi.prototype._onUnSaveLock = function () {
// Очищаем предыдущий таймер
if (null !== this.saveCallbackErrorTimeOutId)
clearTimeout(this.saveCallbackErrorTimeOutId);
if (this.onUnSaveLock) if (this.onUnSaveLock)
this.onUnSaveLock(); this.onUnSaveLock();
}; };
...@@ -686,7 +692,11 @@ ...@@ -686,7 +692,11 @@
}; };
DocsCoApi.prototype._onSavePartChanges = function () { DocsCoApi.prototype._onSavePartChanges = function () {
this.saveChanges (this.arrayChanges, this.currentIndex + 1); // Очищаем предыдущий таймер
if (null !== this.saveCallbackErrorTimeOutId)
clearTimeout(this.saveCallbackErrorTimeOutId);
this.saveChanges(this.arrayChanges, this.currentIndex + 1);
}; };
DocsCoApi.prototype._onPreviousLocks = function (locks, previousLocks) { DocsCoApi.prototype._onPreviousLocks = function (locks, previousLocks) {
...@@ -907,7 +917,7 @@ ...@@ -907,7 +917,7 @@
case 'connectState' : t._onConnectionStateChanged(dataObject); break; case 'connectState' : t._onConnectionStateChanged(dataObject); break;
case 'saveChanges' : t._onSaveChanges(dataObject); break; case 'saveChanges' : t._onSaveChanges(dataObject); break;
case 'saveLock' : t._onSaveLock(dataObject); break; case 'saveLock' : t._onSaveLock(dataObject); break;
case 'unSaveLock' : t._onUnSaveLock(dataObject); break; case 'unSaveLock' : t._onUnSaveLock(); break;
case 'savePartChanges' : t._onSavePartChanges(); break; case 'savePartChanges' : t._onSavePartChanges(); break;
case 'drop' : t._onDrop(dataObject); break; case 'drop' : t._onDrop(dataObject); break;
case 'waitAuth' : /*Ждем, когда придет auth, документ залочен*/break; case 'waitAuth' : /*Ждем, когда придет auth, документ залочен*/break;
......
...@@ -576,24 +576,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -576,24 +576,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
this.CoAuthoringApi.askSaveChanges (function (e) { t.onSaveCallback (e); }); this.CoAuthoringApi.askSaveChanges (function (e) { t.onSaveCallback (e); });
}; };
spreadsheet_api.prototype.asc_OnSaveEnd = function (isDocumentSaved) {
var t = this;
this.CoAuthoringApi.onUnSaveLock = function () {
t.CoAuthoringApi.onUnSaveLock = null;
t.canSave = true;
t.isAutoSave = false;
t.lastSaveTime = null;
t.asc_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
// Обновляем состояние возможности сохранения документа
t.onUpdateDocumentModified(false);
};
this.CoAuthoringApi.unSaveChanges();
if (!isDocumentSaved)
this.CoAuthoringApi.disconnect();
};
spreadsheet_api.prototype.asc_Print = function(adjustPrint){ spreadsheet_api.prototype.asc_Print = function(adjustPrint){
if (adjustPrint) if (adjustPrint)
this.adjustPrint = adjustPrint; this.adjustPrint = adjustPrint;
...@@ -1052,11 +1034,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1052,11 +1034,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
oAdditionalData["savetype"] = "completeall"; oAdditionalData["savetype"] = "completeall";
data = oBinaryFileWriter.Write(); data = oBinaryFileWriter.Write();
if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandSave_CSV'] (data);
this.asc_OnSaveEnd(true);
return;
}
oAdditionalData["data"] = data; oAdditionalData["data"] = data;
var t = this; var t = this;
this._asc_sendCommand (function (incomeObject) { this._asc_sendCommand (function (incomeObject) {
...@@ -1156,7 +1133,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1156,7 +1133,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
if (undefined != window['appBridge']) { if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandSave_CSV'] (data); window['appBridge']['dummyCommandSave_CSV'] (data);
this.asc_OnSaveEnd(true);
return; return;
} }
} }
...@@ -1940,15 +1916,26 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1940,15 +1916,26 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
// Cбросим флаги модификации // Cбросим флаги модификации
History.Save(); History.Save();
// Пересылаем всегда, но чистим только если началось совместное редактирование this.CoAuthoringApi.onUnSaveLock = function () {
// Пересылаем свои изменения t.CoAuthoringApi.onUnSaveLock = null;
this.collaborativeEditing.sendChanges();
if (this.collaborativeEditing.getCollaborativeEditing()) { if (t.collaborativeEditing.getCollaborativeEditing()) {
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно заблокировать toolbar // Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно заблокировать toolbar
this.wb._onWSSelectionChanged(/*info*/null); t.wb._onWSSelectionChanged(/*info*/null);
} }
this.asc_OnSaveEnd(true); t.canSave = true;
t.isAutoSave = false;
t.lastSaveTime = null;
t.asc_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
// Обновляем состояние возможности сохранения документа
t.onUpdateDocumentModified(false);
};
// Пересылаем всегда, но чистим только если началось совместное редактирование
// Пересылаем свои изменения
this.collaborativeEditing.sendChanges();
} else { } else {
nState = t.CoAuthoringApi.get_state(); nState = t.CoAuthoringApi.get_state();
if (3 === nState) { if (3 === nState) {
...@@ -3301,17 +3288,10 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -3301,17 +3288,10 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
oAdditionalData["savetype"] = "completeall"; oAdditionalData["savetype"] = "completeall";
var data = oBinaryFileWriter.Write(); var data = oBinaryFileWriter.Write();
t.asc_OnSaveEnd(true);
return data; return data;
} }
} }
if (!window['scriptBridge']['saveEnd']) {
window['scriptBridge']['saveEnd'] = function() {
t.asc_OnSaveEnd(true);
}
}
if (!window['scriptBridge']['showAdvancedOptionsDialog']) { if (!window['scriptBridge']['showAdvancedOptionsDialog']) {
window['scriptBridge']['showAdvancedOptionsDialog'] = function(codepages) { window['scriptBridge']['showAdvancedOptionsDialog'] = function(codepages) {
var cp = JSON.parse(codepages); var cp = JSON.parse(codepages);
...@@ -3619,7 +3599,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -3619,7 +3599,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
prot["asc_LoadEmptyDocument"] = prot.asc_LoadEmptyDocument; prot["asc_LoadEmptyDocument"] = prot.asc_LoadEmptyDocument;
prot["asc_DownloadAs"] = prot.asc_DownloadAs; prot["asc_DownloadAs"] = prot.asc_DownloadAs;
prot["asc_Save"] = prot.asc_Save; prot["asc_Save"] = prot.asc_Save;
prot["asc_OnSaveEnd"] = prot.asc_OnSaveEnd;
prot["asc_Print"] = prot.asc_Print; prot["asc_Print"] = prot.asc_Print;
prot["asc_Resize"] = prot.asc_Resize; prot["asc_Resize"] = prot.asc_Resize;
prot["asc_Copy"] = prot.asc_Copy; prot["asc_Copy"] = prot.asc_Copy;
......
...@@ -1420,22 +1420,16 @@ asc_docs_api.prototype.Share = function(){ ...@@ -1420,22 +1420,16 @@ asc_docs_api.prototype.Share = function(){
}; };
function OnSave_Callback2(e) function OnSave_Callback(e) {
{ if (false == e["saveLock"]) {
if ( false == e["saveLock"] )
{
editor.sync_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save); editor.sync_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
if ( c_oAscCollaborativeMarksShowType.LastChanges === editor.CollaborativeMarksShowType ) if (c_oAscCollaborativeMarksShowType.LastChanges === editor.CollaborativeMarksShowType)
CollaborativeEditing.Clear_CollaborativeMarks(); CollaborativeEditing.Clear_CollaborativeMarks();
// Принимаем чужие изменения // Принимаем чужие изменения
//safe_Apply_Changes();
CollaborativeEditing.Apply_Changes(); CollaborativeEditing.Apply_Changes();
// Пересылаем свои изменения
CollaborativeEditing.Send_Changes();
editor.CoAuthoringApi.onUnSaveLock = function () { editor.CoAuthoringApi.onUnSaveLock = function () {
editor.CoAuthoringApi.onUnSaveLock = null; editor.CoAuthoringApi.onUnSaveLock = null;
...@@ -1448,12 +1442,18 @@ function OnSave_Callback2(e) ...@@ -1448,12 +1442,18 @@ function OnSave_Callback2(e)
editor._onUpdateDocumentCanSave(); editor._onUpdateDocumentCanSave();
}; };
// Снимаем лок с функции сохранения на сервере // Пересылаем свои изменения
editor.CoAuthoringApi.unSaveChanges(); CollaborativeEditing.Send_Changes();
} else {
var nState = editor.CoAuthoringApi.get_state();
if (3 === nState) {
// Отключаемся от сохранения, соединение потеряно
editor.canSave = true;
} else {
setTimeout(function () {
editor.CoAuthoringApi.askSaveChanges(OnSave_Callback);
}, 1000);
} }
else
{
setTimeout( function(){ editor.CoAuthoringApi.askSaveChanges( OnSave_Callback2 ); }, 1000 );
} }
} }
...@@ -1461,23 +1461,9 @@ asc_docs_api.prototype.asc_Save = function () { ...@@ -1461,23 +1461,9 @@ asc_docs_api.prototype.asc_Save = function () {
if (true === this.canSave) if (true === this.canSave)
{ {
this.canSave = false; this.canSave = false;
this.CoAuthoringApi.askSaveChanges(OnSave_Callback2); this.CoAuthoringApi.askSaveChanges(OnSave_Callback);
} }
}; };
asc_docs_api.prototype.asc_OnSaveEnd = function (isDocumentSaved) {
var t = this;
this.CoAuthoringApi.onUnSaveLock = function () {
t.CoAuthoringApi.onUnSaveLock = null;
t.sync_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
t.canSave = true;
// Обновляем состояние возможности сохранения документа
t._onUpdateDocumentCanSave();
};
this.CoAuthoringApi.unSaveChanges();
if (!isDocumentSaved)
this.CoAuthoringApi.disconnect();
};
asc_docs_api.prototype.processSavedFile = function(url, bInner){ asc_docs_api.prototype.processSavedFile = function(url, bInner){
if(bInner) if(bInner)
editor.asc_fireCallback("asc_onSaveUrl", url, function(hasError){}); editor.asc_fireCallback("asc_onSaveUrl", url, function(hasError){});
...@@ -1803,61 +1789,6 @@ asc_docs_api.prototype.sync_InitEditorTableStyles = function(styles){ ...@@ -1803,61 +1789,6 @@ asc_docs_api.prototype.sync_InitEditorTableStyles = function(styles){
this.asc_fireCallback("asc_onInitTableTemplates",styles); this.asc_fireCallback("asc_onInitTableTemplates",styles);
}; };
function safe_Apply_Changes()
{
try
{
CollaborativeEditing.Apply_Changes();
}
catch(err)
{
}
}
asc_docs_api.prototype.onSaveCallback = function (e) {
var t = this;
var nState;
if (false == e["saveLock"]) {
// Принимаем чужие изменения
safe_Apply_Changes();
// Сохраняем файл на сервер
/*var data = this.WordControl.SaveDocument();
var oAdditionalData = {};
oAdditionalData["c"] = "save";
oAdditionalData["id"] = documentId;
oAdditionalData["userid"] = documentUserId;
oAdditionalData["vkey"] = documentVKey;
oAdditionalData["outputformat"] = documentFormatSave;
oAdditionalData["innersave"] = true;
oAdditionalData["savetype"] = "completeall";
oAdditionalData["data"] = data;
sendCommand(editor, function(incomeObject){
if(null != incomeObject && "save" == incomeObject["type"])
editor.processSavedFile(incomeObject["data"], true);
}, oAdditionalData);*/
// Пересылаем свои изменения (ToDo)
CollaborativeEditing.Send_Changes();
//Обратно выставляем, что документ не модифицирован
t.SetUnchangedDocument();
t.asc_OnSaveEnd(true);
} else {
nState = t.CoAuthoringApi.get_state();
if (3 === nState) {
// Отключаемся от сохранения, соединение потеряно
t.sync_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
t.canSave = true;
} else {
// Если автосохранение, то не будем ждать ответа, а просто перезапустим таймер на немного
setTimeout(function () {
t.CoAuthoringApi.askSaveChanges(function (event) { t.onSaveCallback(event); });
}, 1000);
}
}
};
/*----------------------------------------------------------------*/ /*----------------------------------------------------------------*/
/*functions for working with paragraph*/ /*functions for working with paragraph*/
/*setters*/ /*setters*/
......
...@@ -3660,7 +3660,7 @@ function CEditorPage(api) ...@@ -3660,7 +3660,7 @@ function CEditorPage(api)
{ {
if (History.Have_Changes() == true) if (History.Have_Changes() == true)
{ {
oWordControl.m_oApi.asc_Save2(); oWordControl.m_oApi.asc_Save();
} }
oWordControl.m_nLastAutosaveTime = _curTime; oWordControl.m_nLastAutosaveTime = _curTime;
} }
......
...@@ -9738,7 +9738,7 @@ CDocument.prototype = ...@@ -9738,7 +9738,7 @@ CDocument.prototype =
} }
else if ( e.KeyCode == 83 && false === editor.isViewMode && true === e.CtrlKey ) // Ctrl + S - save else if ( e.KeyCode == 83 && false === editor.isViewMode && true === e.CtrlKey ) // Ctrl + S - save
{ {
this.DrawingDocument.m_oWordControl.m_oApi.asc_Save2(); this.DrawingDocument.m_oWordControl.m_oApi.asc_Save();
bRetValue = true; bRetValue = true;
} }
else if ( e.KeyCode == 85 && false === editor.isViewMode && true === e.CtrlKey ) // Ctrl + U - делаем текст подчеркнутым else if ( e.KeyCode == 85 && false === editor.isViewMode && true === e.CtrlKey ) // Ctrl + U - делаем текст подчеркнутым
......
...@@ -2731,32 +2731,16 @@ asc_docs_api.prototype.Share = function(){ ...@@ -2731,32 +2731,16 @@ asc_docs_api.prototype.Share = function(){
} }
asc_docs_api.prototype.asc_Save2 = function() function OnSave_Callback(e) {
{ if (false == e["saveLock"]) {
if (true === this.canSave)
{
this.canSave = false;
this.CoAuthoringApi.askSaveChanges(OnSave_Callback2);
}
}
function OnSave_Callback2(e)
{
if ( false == e["saveLock"] )
{
editor.sync_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save); editor.sync_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
if ( c_oAscCollaborativeMarksShowType.LastChanges === editor.CollaborativeMarksShowType ) if (c_oAscCollaborativeMarksShowType.LastChanges === editor.CollaborativeMarksShowType)
CollaborativeEditing.Clear_CollaborativeMarks(); CollaborativeEditing.Clear_CollaborativeMarks();
// Принимаем чужие изменения // Принимаем чужие изменения
//safe_Apply_Changes();
CollaborativeEditing.Apply_Changes(); CollaborativeEditing.Apply_Changes();
// Пересылаем свои изменения
CollaborativeEditing.Send_Changes();
editor.CoAuthoringApi.onUnSaveLock = function () { editor.CoAuthoringApi.onUnSaveLock = function () {
editor.CoAuthoringApi.onUnSaveLock = null; editor.CoAuthoringApi.onUnSaveLock = null;
...@@ -2768,111 +2752,30 @@ function OnSave_Callback2(e) ...@@ -2768,111 +2752,30 @@ function OnSave_Callback2(e)
// Обновляем состояние возможности сохранения документа // Обновляем состояние возможности сохранения документа
editor._onUpdateDocumentCanSave(); editor._onUpdateDocumentCanSave();
}; };
// Снимаем лок с функции сохранения на сервере
editor.CoAuthoringApi.unSaveChanges(); // Пересылаем свои изменения
CollaborativeEditing.Send_Changes();
} else {
var nState = editor.CoAuthoringApi.get_state();
if (3 === nState) {
// Отключаемся от сохранения, соединение потеряно
editor.canSave = true;
} else {
setTimeout(function () {
editor.CoAuthoringApi.askSaveChanges(OnSave_Callback);
}, 1000);
} }
else
{
setTimeout( function(){ editor.CoAuthoringApi.askSaveChanges( OnSave_Callback2 ); }, 1000 );
} }
} }
asc_docs_api.prototype.asc_Save = function () asc_docs_api.prototype.asc_Save = function ()
{ {
this.asc_Save2(); if (true === this.canSave)
// if(true === this.canSave) {
// this.canSave = false;
// this.sync_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
//
// this.CoAuthoringApi.askSaveChanges(OnSave_Callback);
// }
};
asc_docs_api.prototype.asc_OnSaveEnd = function (isDocumentSaved) {
var t = this;
this.CoAuthoringApi.onUnSaveLock = function () {
t.CoAuthoringApi.onUnSaveLock = null;
t.canSave = true;
t.sync_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
// Обновляем состояние возможности сохранения документа
t._onUpdateDocumentCanSave();
};
this.CoAuthoringApi.unSaveChanges();
if (!isDocumentSaved)
this.CoAuthoringApi.disconnect();
};
function safe_Apply_Changes()
{
try
{
CollaborativeEditing.Apply_Changes();
}
catch(err)
{ {
this.canSave = false;
this.CoAuthoringApi.askSaveChanges(OnSave_Callback);
} }
} };
//_*function*_ OnSave_Callback(e)
//{
// var nState;
// if ( false == e["saveLock"] ) {
//
// if ( c_oAscCollaborativeMarksShowType.LastChanges === editor.CollaborativeMarksShowType )
// CollaborativeEditing.Clear_CollaborativeMarks();
//
// // Принимаем чужие изменения
// safe_Apply_Changes();
//
// // Сохраняем файл на сервер
// var oBinaryFileWriter = new BinaryFileWriter(editor.WordControl.m_oLogicDocument);
//
// if (undefined != window['qtDocBridge']) {
// var data = oBinaryFileWriter.Write();
// // push data to native QT code
// window['qtDocBridge']['savedDocument'] (data);
//
// } else {
// /*var oAdditionalData = {};
// oAdditionalData["c"] = "save";
// oAdditionalData["id"] = documentId;
// oAdditionalData["userid"] = documentUserId;
// oAdditionalData["vkey"] = documentVKey;
// oAdditionalData["outputformat"] = documentFormatSave;
// if(c_oAscFileType.TXT == documentFormatSaveTxtCodepage)
// oAdditionalData["codepage"] = documentFormatSaveTxtCodepage;
// oAdditionalData["innersave"] = true;
// var data = oBinaryFileWriter.Write();
// oAdditionalData["savetype"] = "completeall";
// ////uncoment to save changes only instead send file complete
// //var data = JSON.stringify( CollaborativeEditing.Get_SelfChanges() );
// //oAdditionalData["savetype"] = "changes";
// oAdditionalData["data"] = data;
// sendCommand(editor, function(incomeObject){
// if(null != incomeObject && "save" == incomeObject["type"])
// editor.processSavedFile(incomeObject["data"], true);
// }, oAdditionalData);*/
// }
//
// // Пересылаем свои изменения
// CollaborativeEditing.Send_Changes();
// //Обратно выставляем, что документ не модифицирован
// editor.SetUnchangedDocument();
//
// editor.asc_OnSaveEnd(true);
// } else {
// nState = editor.CoAuthoringApi.get_state();
// if (3 === nState) {
// // Отключаемся от сохранения, соединение потеряно
// editor.sync_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
// editor.canSave = true;
// } else {
// setTimeout( function(){ editor.CoAuthoringApi.askSaveChanges( OnSave_Callback ); }, 1000 );
// }
// }
//}
asc_docs_api.prototype.asc_DownloadAs = function(typeFile){//передаем число соответствующее своему формату. asc_docs_api.prototype.asc_DownloadAs = function(typeFile){//передаем число соответствующее своему формату.
this.sync_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.DownloadAs); this.sync_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.DownloadAs);
...@@ -7340,15 +7243,6 @@ function sendCommand(editor, fCallback, rdata){ ...@@ -7340,15 +7243,6 @@ function sendCommand(editor, fCallback, rdata){
setTimeout( function(){sendCommand(editor, fCallback, rData)}, 3000); setTimeout( function(){sendCommand(editor, fCallback, rData)}, 3000);
break; break;
case "changes":
//rData = {"id":documentId, "c":"sfc", "outputformat": c_oAscFileType.DOCX};
//sendCommand(editor, fCallback, rData);
if(fCallback)
fCallback(incomeObject);
// Важно: потом сверху этот эвент придти не должен (т.е. мы не отправляем ссылку на документ наверх)
editor.asc_OnSaveEnd(/*isDocumentSaved*/true);
break;
case "save": case "save":
if(fCallback) if(fCallback)
fCallback(incomeObject); fCallback(incomeObject);
...@@ -7487,14 +7381,6 @@ function _isDocumentModified2 () ...@@ -7487,14 +7381,6 @@ function _isDocumentModified2 ()
{ {
return editor.isDocumentModified(); return editor.isDocumentModified();
} }
function _asc_Save2 ()
{
editor.asc_Save();
}
function _asc_SavingEnd ()
{
editor.asc_OnSaveEnd(true);
}
function _asc_scrollTo (x,y) function _asc_scrollTo (x,y)
{ {
editor.WordControl.m_oScrollHorApi.scrollToX(x); editor.WordControl.m_oScrollHorApi.scrollToX(x);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment