Commit 860b5869 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Реализовал быстрое автосохранение (когда человек один) и медленное, когда совместно редактируют.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@56972 954022d7-b5bf-4e40-9824-e11837661b57
parent c02bd8cf
......@@ -2715,7 +2715,6 @@ function DrawingObjects() {
var api = asc["editor"];
var worksheet = null;
var asc_Range = asc.Range;
var asc_applyFunction = asc.applyFunction;
var chartRender = null;
if ( typeof ChartRender !== "undefined" )
......@@ -2752,7 +2751,6 @@ function DrawingObjects() {
// Task timer
var aDrawTasks = [];
var drawTaskTimerId = null;
function drawTaskFunction() {
......@@ -2764,6 +2762,8 @@ function DrawingObjects() {
_this.showDrawingObjectsEx(lastTask.params.clearCanvas, lastTask.params.graphicOption, lastTask.params.printOptions);
aDrawTasks.splice(0, (taskLen - 1 > 0) ? taskLen - 1 : 1);
}
api._autoSave();
}
//-----------------------------------------------------------------------------------
......
......@@ -98,12 +98,14 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
this.isCoAuthoringEnable = true;
// AutoSave
this.autoSaveGap = 0; // Интервал автосохранения (0 - означает, что автосохранения нет) в милесекундах
this.autoSaveTimeOutId = null; // Идентификатор таймаута
this.isAutoSave = false; // Флаг, означает что запущено автосохранение
this.autoSaveGapAsk = 5000; // Константа для повторного запуска автосохранения, если не смогли сделать сразу lock (только при автосохранении) в милесекундах
this.lastSaveTime = null; // Время последнего сохранения
this.autoSaveGapFast = 5000; // Интервал быстрого автосохранения (когда человек один) - 5 сек.
this.autoSaveGapSlow = 10 * 60 * 1000; // Интервал медленного автосохранения (когда совместно) - 10 минут
this.canSave = true; //Флаг нужен чтобы не происходило сохранение пока не завершится предыдущее сохранение
this.autoSaveGap = 0; // Интервал автосохранения (0 - означает, что автосохранения нет) в милесекундах
this.isAutoSave = false; // Флаг, означает что запущено автосохранение
this.canSave = true; //Флаг нужен чтобы не происходило сохранение пока не завершится предыдущее сохранение
// Режим вставки диаграмм в редакторе документов
this.isChartEditor = false;
......@@ -589,13 +591,10 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
this.asc_EndAction(c_oAscAsyncActionType.Information, c_oAscAsyncAction.Save);
this.canSave = true;
this.isAutoSave = false;
this.lastSaveTime = null;
this.CoAuthoringApi.unSaveChanges();
if (isDocumentSaved) {
// Запускаем таймер автосохранения
this.autoSaveInit();
} else {
if (!isDocumentSaved)
this.CoAuthoringApi.disconnect();
}
},
asc_Print: function(adjustPrint){
......@@ -672,7 +671,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
asc_setAutoSaveGap: function (autoSaveGap) {
if (typeof autoSaveGap === "number") {
this.autoSaveGap = autoSaveGap * 1000; // Нам выставляют в секундах
this.autoSaveInit();
}
},
......@@ -1870,9 +1868,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
if (undefined != window['appBridge']) {
window['appBridge']['dummyCommandOpenDocumentProgress'] (10000);
}
// Запускаем таймер автосохранения
this.autoSaveInit();
},
// Переход на диапазон в листе
......@@ -1944,7 +1939,6 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
if (this.isAutoSave) {
this.isAutoSave = false;
this.canSave = true;
this.autoSaveInit(this.autoSaveGapAsk);
return;
}
......@@ -3214,36 +3208,18 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
/////////////////////////////////////////////////////////////////////////
////////////////////////////AutoSave api/////////////////////////////////
/////////////////////////////////////////////////////////////////////////
autoSaveInit: function (autoSaveGap) {
// Очищаем предыдущий таймер
if (null !== this.autoSaveTimeOutId)
clearTimeout(this.autoSaveTimeOutId);
if (autoSaveGap || this.autoSaveGap) {
var t = this;
this.autoSaveTimeOutId = setTimeout(function () {
t.autoSaveTimeOutId = null;
if (t.asc_getViewerMode()) {
/*
1) При загрузке файла на просмотре при совместном редактировании загрузится
файл уже с последними изменениями.
2) Далее при срабатывании автосохранения должны накатываться новые изменения
(это надо делать) при этом файл отсылаться не должен, т.к. изменений во вьювере нет.
3) Если пользователь отключил автосохранение, то изменения к нему приходить не
будут, поскольку это его решение.
*/
// Принимаем чужие изменения
t.collaborativeEditing.applyChanges();
t.autoSaveInit();
} else if (t.asc_isDocumentModified()) {
// Если мы редактируем ячейку, то запустим автосохранение чуть позднее
if (t.asc_getCellEditMode())
t.autoSaveInit(t.autoSaveGapAsk);
else
t.asc_Save(/*isAutoSave*/true);
} else
t.autoSaveInit();
}, (autoSaveGap || this.autoSaveGap));
_autoSave: function () {
if (0 === this.autoSaveGap || this.asc_getCellEditMode() || !History.Is_Modified() || !this.canSave)
return;
if (null === this.lastSaveTime) {
this.lastSaveTime = new Date();
return;
}
var isFastSave = !this.collaborativeEditing.getCollaborativeEditing();
var gap = new Date() - this.lastSaveTime - (isFastSave ? this.autoSaveGapFast : this.autoSaveGapSlow);
if (0 <= gap) {
//isFastSave ? this.onSaveCallback() : this.asc_Save(true);
this.asc_Save(true);
}
},
......
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