Commit 02a53ba9 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Добавил в c_oAscAsyncAction тип PrepareToSave (Подготовка к сохранению)

Добавил автосохранение:
autoSaveGap - Интервал автосохранения (0 - означает, что автосохранения нет)
autoSaveGapAsk - Константа для повторного запуска автосохранения, если не смогли сделать сразу lock (только при автосохранении)

В функцию asc_Save добавил параметр isAutoSave - это если мы запускаем функцию из автосохранения
Переделал порядок сохранения. Теперь мы не ждем ответа от сервера сохранения документа, чтобы отослать всем свои изменения. Мы их отправляем сразу. Но не даем сохранять никому, пока сервер не сохранит документ. В связи с этим переделал информационные эвенты.

Убрал из _startOpenDocument asc_StartAction о загрузке шрифтов (это избыточный эвент)
Добавил asc_getCellEditMode для получения состояния редактируем мы ячейку или нет

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@48658 954022d7-b5bf-4e40-9824-e11837661b57
parent 117eaf43
...@@ -104,6 +104,14 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -104,6 +104,14 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
this.CoAuthoringApi = new CDocsCoApi(); this.CoAuthoringApi = new CDocsCoApi();
this.collaborativeEditing = null; this.collaborativeEditing = null;
this.isCoAuthoringEnable = true; this.isCoAuthoringEnable = true;
// AutoSave
this.autoSaveGap = 0; // Интервал автосохранения (0 - означает, что автосохранения нет)
this.autoSaveTimeOutId = null; // Идентификатор таймаута
this.isAutoSave = false; // Флаг, означает что запущено автосохранение
this.autoSaveGapAsk = 5000; // Константа для повторного запуска автосохранения, если не смогли сделать сразу lock (только при автосохранении)
this.canSave = true; //Флаг нужен чтобы не происходило сохранение пока не завершится предыдущее сохранение
// Режим вставки диаграмм в редакторе документов // Режим вставки диаграмм в редакторе документов
this.isChartEditor = false; this.isChartEditor = false;
...@@ -429,39 +437,38 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -429,39 +437,38 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
}, true); }, true);
}, },
asc_Save : function(){ asc_Save : function (isAutoSave) {
if (undefined != window['appBridge']) { if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandSave'] (); // TEST window['appBridge']['dummyCommandSave'] (); // TEST
return; return;
} }
if (this.collaborativeEditing.m_bGlobalLock || this.isChartEditor) if (!this.canSave || this.isChartEditor)
return; return;
this.asc_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Save);
// Не даем пользователю сохранять, пока не закончится сохранение
this.canSave = false;
this.isAutoSave = !!isAutoSave;
if (!this.isAutoSave) {
this.asc_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
this.asc_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
}
// Нужно закрыть редактор // Нужно закрыть редактор
this.asc_closeCellEditor(); this.asc_closeCellEditor();
var t = this;
// Не даем пользователю что-нибудь менять пока не закончится сохранение
this.collaborativeEditing.m_bGlobalLock = true;
var t = this;
this.CoAuthoringApi.askSaveChanges (function (e) { t.onSaveCallback (e); }); this.CoAuthoringApi.askSaveChanges (function (e) { t.onSaveCallback (e); });
}, },
asc_OnSaveEnd : function (isDocumentSaved) { asc_OnSaveEnd : function (isDocumentSaved) {
this.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Save); this.canSave = true;
// Cбросим флаги модификации this.isAutoSave = false;
History.Save(); this.asc_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
this.CoAuthoringApi.unSaveChanges();
if (isDocumentSaved) { if (isDocumentSaved) {
// Пересылаем свои изменения // Запускаем таймер автосохранения
this.collaborativeEditing.sendChanges(); this.autoSaveInit();
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно заблокировать toolbar
this.wb._onWSSelectionChanged(/*info*/null);
this.CoAuthoringApi.unSaveChanges();
} else { } else {
this.CoAuthoringApi.unSaveChanges();
this.CoAuthoringApi.disconnect(); this.CoAuthoringApi.disconnect();
} }
}, },
...@@ -922,10 +929,12 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -922,10 +929,12 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
asc_StartAction: function (type, id) { asc_StartAction: function (type, id) {
this.handlers.trigger("asc_onStartAction", type, id); this.handlers.trigger("asc_onStartAction", type, id);
//console.log("asc_onStartAction: type = " + type + " id = " + id);
}, },
asc_EndAction: function (type, id) { asc_EndAction: function (type, id) {
this.handlers.trigger("asc_onEndAction", type, id); this.handlers.trigger("asc_onEndAction", type, id);
//console.log("asc_onEndAction: type = " + type + " id = " + id);
}, },
asc_registerCallback: function (name, callback, replaceOldCallback) { asc_registerCallback: function (name, callback, replaceOldCallback) {
...@@ -1054,8 +1063,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1054,8 +1063,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
_startOpenDocument: function (response) { _startOpenDocument: function (response) {
if (response.returnCode !== 0) {return;} if (response.returnCode !== 0) {return;}
this.asc_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.LoadDocumentFonts);
this.wbModel = response.val; this.wbModel = response.val;
...@@ -1475,6 +1482,9 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1475,6 +1482,9 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
if (undefined != window['appBridge']) { if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandOpenDocumentProgress'] (10000); window['appBridge']['dummyCommandOpenDocumentProgress'] (10000);
} }
// Запускаем таймер автосохранения
this.autoSaveInit();
}, },
// Переход на диапазон в листе // Переход на диапазон в листе
...@@ -1502,20 +1512,47 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -1502,20 +1512,47 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
var t = this; var t = this;
var nState; var nState;
if (false == e["savelock"]) { if (false == e["savelock"]) {
// Снимаем глобальный lock if (this.isAutoSave) {
this.collaborativeEditing.m_bGlobalLock = false; this.asc_StartAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
this.asc_StartAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
}
// Принимаем чужие изменения // Принимаем чужие изменения
t.collaborativeEditing.applyChanges(); t.collaborativeEditing.applyChanges();
// Сохраняем файл на сервер // Сохраняем файл на сервер
this._asc_save(); this._asc_save();
// Cбросим флаги модификации
History.Save();
// Пересылаем свои изменения
this.collaborativeEditing.sendChanges();
// Шлем update для toolbar-а, т.к. когда select в lock ячейке нужно заблокировать toolbar
this.wb._onWSSelectionChanged(/*info*/null);
// Заканчиваем сохранение, т.к. мы хотим дать пользователю продолжать набирать документ
// Но сохранять до прихода ответа от сервера не сможет
this.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
} else { } else {
nState = t.CoAuthoringApi.get_state(); nState = t.CoAuthoringApi.get_state();
if (3 === nState) { if (3 === nState) {
// Отключаемся от сохранения, соединение потеряно // Отключаемся от сохранения, соединение потеряно
this.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.Save); if (!this.isAutoSave) {
this.asc_EndAction(c_oAscAsyncActionType.BlockInteraction, c_oAscAsyncAction.PrepareToSave);
this.asc_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
}
this.isAutoSave = false;
this.canSave = true;
} else { } else {
// Если автосохранение, то не будем ждать ответа, а просто перезапустим таймер на немного
if (this.isAutoSave) {
this.isAutoSave = false;
this.canSave = true;
this.autoSaveInit(this.autoSaveGapAsk);
return;
}
setTimeout(function () { setTimeout(function () {
t.CoAuthoringApi.askSaveChanges(function (event) { t.CoAuthoringApi.askSaveChanges(function (event) {
// Функция может быть долгой (и в IE10 происходит disconnect). Поэтому вызовем через timeout // Функция может быть долгой (и в IE10 происходит disconnect). Поэтому вызовем через timeout
...@@ -2212,6 +2249,11 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -2212,6 +2249,11 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
return this.wb.getWorksheet().getActiveCellCoord(); return this.wb.getWorksheet().getActiveCellCoord();
}, },
// Получаем свойство: редактируем мы сейчас или нет
asc_getCellEditMode: function () {
return this.wb.getCellEditMode();
},
asc_setCellFontName: function (fontName) { asc_setCellFontName: function (fontName) {
var t = this; var t = this;
t._loadFonts([fontName], function () { t._loadFonts([fontName], function () {
...@@ -2621,6 +2663,28 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS"; ...@@ -2621,6 +2663,28 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
return; // Error return; // Error
this.CoAuthoringApi.disconnect(); this.CoAuthoringApi.disconnect();
}, },
/////////////////////////////////////////////////////////////////////////
////////////////////////////AutoSave api/////////////////////////////////
/////////////////////////////////////////////////////////////////////////
autoSaveInit: function (autoSaveGap) {
if (autoSaveGap || this.autoSaveGap) {
// Очищаем предыдущий таймер
if (null !== this.autoSaveTimeOutId)
clearTimeout(this.autoSaveTimeOutId);
var t = this;
this.autoSaveTimeOutId = setTimeout(function () {
t.autoSaveTimeOutId = null;
if (t.asc_isDocumentModified()) {
// Если мы редактируем ячейку, то запустим автосохранение чуть позднее
if (t.asc_getCellEditMode())
t.autoSaveInit(t.autoSaveGapAsk);
else
t.asc_Save(/*isAutoSave*/true);
} else
t.autoSaveInit();
}, (autoSaveGap || this.autoSaveGap));
}
},
// offline mode // offline mode
......
...@@ -71,17 +71,18 @@ var c_oAscAsyncActionType = { ...@@ -71,17 +71,18 @@ var c_oAscAsyncActionType = {
}; };
var c_oAscAsyncAction = { var c_oAscAsyncAction = {
Open:0, // открытие документа Open : 0, // открытие документа
Save:1, Save : 1,
LoadDocumentFonts:2, // загружаем фонты документа (сразу после открытия) LoadDocumentFonts : 2, // загружаем фонты документа (сразу после открытия)
LoadDocumentImages:3, // загружаем картинки документа (сразу после загрузки шрифтов) LoadDocumentImages : 3, // загружаем картинки документа (сразу после загрузки шрифтов)
LoadFont:4, // подгрузка нужного шрифта LoadFont : 4, // подгрузка нужного шрифта
LoadImage:5, // подгрузка картинки LoadImage : 5, // подгрузка картинки
DownloadAs:6, DownloadAs : 6,
Print:7,//конвертация в PDF и сохранение у пользователя Print : 7, //конвертация в PDF и сохранение у пользователя
UploadImage:8, UploadImage : 8,
Recalc:9, Recalc : 9,
SlowOperation: 10 SlowOperation : 10,
PrepareToSave : 11 // Подготовка к сохранению
}; };
var c_oAscAlignType = { var c_oAscAlignType = {
......
...@@ -1060,6 +1060,11 @@ ...@@ -1060,6 +1060,11 @@
this.showWorksheet(undefined, true); this.showWorksheet(undefined, true);
}, },
// Получаем свойство: редактируем мы сейчас или нет
getCellEditMode: function () {
return this.controller.isCellEditMode;
},
getZoom: function () { getZoom: function () {
return this.drawingCtx.getZoom(); return this.drawingCtx.getZoom();
}, },
......
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