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

Убрал функцию firstLoadChanges (вместо нее saveChanges с аргументом first)

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

Пересчетный индекс теперь передается в одном изменении.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@58708 954022d7-b5bf-4e40-9824-e11837661b57
parent bd865f1e
......@@ -4,7 +4,7 @@
'use strict';
var asc = window["Asc"];
var asc_coAuthV = '3.0.3';
var asc_coAuthV = '3.0.4';
// Класс надстройка, для online и offline работы
function CDocsCoApi (options) {
......@@ -19,7 +19,6 @@
this.onLocksReleased = options.onLocksReleased;
this.onLocksReleasedEnd = options.onLocksReleasedEnd; // ToDo переделать на массив release locks
this.onDisconnect = options.onDisconnect;
this.onFirstLoadChanges = options.onFirstLoadChanges;
this.onFirstLoadChangesEnd = options.onFirstLoadChangesEnd;
this.onConnectionStateChanged = options.onConnectionStateChanged;
this.onSetIndexUser = options.onSetIndexUser;
......@@ -40,11 +39,10 @@
this._CoAuthoringApi.onLocksReleased = function (e, bChanges) {t.callback_OnLocksReleased(e, bChanges);};
this._CoAuthoringApi.onLocksReleasedEnd = function () {t.callback_OnLocksReleasedEnd();};
this._CoAuthoringApi.onDisconnect = function (e, isDisconnectAtAll, isCloseCoAuthoring) {t.callback_OnDisconnect(e, isDisconnectAtAll, isCloseCoAuthoring);};
this._CoAuthoringApi.onFirstLoadChanges = function (e, userId) {t.callback_OnFirstLoadChanges(e, userId);};
this._CoAuthoringApi.onFirstLoadChangesEnd = function () {t.callback_OnFirstLoadChangesEnd();};
this._CoAuthoringApi.onConnectionStateChanged = function (e) {t.callback_OnConnectionStateChanged(e);};
this._CoAuthoringApi.onSetIndexUser = function (e) {t.callback_OnSetIndexUser(e);};
this._CoAuthoringApi.onSaveChanges = function (e, userId) {t.callback_OnSaveChanges(e, userId);};
this._CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad) {t.callback_OnSaveChanges(e, userId, bFirstLoad);};
// Callback есть пользователей больше 1
this._CoAuthoringApi.onStartCoAuthoring = function (e) {t.callback_OnStartCoAuthoring(e);};
this._CoAuthoringApi.onEndCoAuthoring = function (e) {t.callback_OnEndCoAuthoring(e);};
......@@ -197,11 +195,6 @@
this.onDisconnect(e, isDisconnectAtAll, isCloseCoAuthoring);
};
CDocsCoApi.prototype.callback_OnFirstLoadChanges = function (e, userId) {
if (this.onFirstLoadChanges)
this.onFirstLoadChanges(e, userId);
};
CDocsCoApi.prototype.callback_OnFirstLoadChangesEnd = function () {
if (this.onFirstLoadChangesEnd)
this.onFirstLoadChangesEnd();
......@@ -217,9 +210,9 @@
this.onSetIndexUser(e);
};
CDocsCoApi.prototype.callback_OnSaveChanges = function (e, userId) {
CDocsCoApi.prototype.callback_OnSaveChanges = function (e, userId, bFirstLoad) {
if (this.onSaveChanges)
this.onSaveChanges(e, userId);
this.onSaveChanges(e, userId, bFirstLoad);
};
CDocsCoApi.prototype.callback_OnStartCoAuthoring = function (e) {
if (this.onStartCoAuthoring)
......@@ -254,7 +247,6 @@
this.onDisconnect = options.onDisconnect;
this.onConnect = options.onConnect;
this.onSaveChanges = options.onSaveChanges;
this.onFirstLoadChanges = options.onFirstLoadChanges;
this.onFirstLoadChangesEnd = options.onFirstLoadChangesEnd;
this.onConnectionStateChanged = options.onConnectionStateChanged;
this.onUnSaveLock = options.onUnSaveLock;
......@@ -288,6 +280,8 @@
this.arrayChanges = null;
// Время последнего сохранения (для разрыва соединения)
this.lastOtherSaveTime = -1;
// Локальный индекс изменений
this.changesIndex = 0;
this._url = "";
......@@ -442,6 +436,8 @@
DocsCoApi.prototype.saveChanges = function (arrayChanges, currentIndex, deleteIndex) {
if (null === currentIndex) {
this.deleteIndex = deleteIndex;
if (null != this.deleteIndex && -1 !== this.deleteIndex)
this.deleteIndex += this.changesIndex;
this.currentIndex = 0;
this.arrayChanges = arrayChanges;
} else {
......@@ -607,12 +603,7 @@
if (bSendEnd && this.onLocksReleasedEnd)
this.onLocksReleasedEnd();
}
if (data["changes"]) {
this.lastOtherSaveTime = data["time"];
if (this.onSaveChanges) {
this.onSaveChanges(JSON.parse(data["changes"]), data["user"]);
}
}
this._updateChanges(data["changes"], false);
};
DocsCoApi.prototype._onStartCoAuthoring = function (isStartEvent) {
......@@ -648,11 +639,14 @@
}
};
DocsCoApi.prototype._onUnSaveLock = function () {
DocsCoApi.prototype._onUnSaveLock = function (data) {
// Очищаем предыдущий таймер
if (null !== this.saveCallbackErrorTimeOutId)
clearTimeout(this.saveCallbackErrorTimeOutId);
if (-1 !== data['index'])
this.changesIndex = data['index'];
if (this.onUnSaveLock)
this.onUnSaveLock();
};
......@@ -667,21 +661,21 @@
return false;
};
DocsCoApi.prototype._onFirstLoadChanges = function (allServerChanges) {
if (allServerChanges && this.onFirstLoadChanges) {
for (var changeId in allServerChanges) {
var change = allServerChanges[changeId];
var changesOneUser = change["changes"];
DocsCoApi.prototype._updateChanges = function (allServerChanges, bFirstLoad) {
if (this.onSaveChanges) {
if (allServerChanges) {
this.changesIndex = allServerChanges['index'];
var arrChanges = allServerChanges['arrChanges'];
for (var changeId in arrChanges) {
var change = arrChanges[changeId];
var changesOneUser = change["change"];
if (changesOneUser) {
if (change["user"] !== this._userId)
this.lastOtherSaveTime = change["time"];
this.onFirstLoadChanges(JSON.parse(changesOneUser), change["user"]);
this.onSaveChanges(JSON.parse(changesOneUser), change["user"], bFirstLoad);
}
}
}
// Посылать нужно всегда, т.к. на это рассчитываем при открытии
if (this.onFirstLoadChangesEnd)
this.onFirstLoadChangesEnd();
}
};
......@@ -825,8 +819,10 @@
}
this._onGetLock(data);
}
// Нужно послать фиктивное завершение (эта функция означает что мы соединились)
this._onFirstLoadChanges(data["changes"] || []);
this._updateChanges(data["changes"], true);
// Посылать нужно всегда, т.к. на это рассчитываем при открытии
if (this.onFirstLoadChangesEnd)
this.onFirstLoadChangesEnd();
//Send prebuffered
this._sendPrebuffered();
......@@ -892,12 +888,8 @@
},
'locks' : t.ownedLockBlocks,
'sessionId' : t._id,
'server' : {
'https' : 'https:' === window.location.protocol,
'host' : window.location.hostname,
'port' : window.location.port || '',
'path' : g_sMainServiceLocalUrl
},
'server' : window.location.protocol + '//' + window.location.hostname +
(window.location.port || '') + g_sMainServiceLocalUrl,
'documentFormatSave' : t._documentFormatSave,
'isViewer' : t._isViewer,
'version' : asc_coAuthV
......@@ -917,7 +909,7 @@
case 'connectState' : t._onConnectionStateChanged(dataObject); break;
case 'saveChanges' : t._onSaveChanges(dataObject); break;
case 'saveLock' : t._onSaveLock(dataObject); break;
case 'unSaveLock' : t._onUnSaveLock(); break;
case 'unSaveLock' : t._onUnSaveLock(dataObject); break;
case 'savePartChanges' : t._onSavePartChanges(); break;
case 'drop' : t._onDrop(dataObject); break;
case 'waitAuth' : /*Ждем, когда придет auth, документ залочен*/break;
......
......@@ -1618,30 +1618,21 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
worksheet.objectRender.showDrawingObjects(true);
}
};
this.CoAuthoringApi.onSaveChanges = function (e, userId, bSendEvent) {
this.CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad) {
// bSendEvent = false - это означает, что мы загружаем имеющиеся изменения при открытии
var bAddChanges = false;
var nCount = e.length;
var nIndex = 0;
var oElement = null;
var oRecalcIndexColumns = null, oRecalcIndexRows = null;
for (; nIndex < nCount; ++nIndex) {
oElement = e[nIndex];
if (!oElement.hasOwnProperty("type")) {
t.collaborativeEditing.addChanges(oElement);
if (!e.hasOwnProperty("type")) {
t.collaborativeEditing.addChanges(e);
bAddChanges = true;
} else if (false !== bSendEvent) {
if ("0" === oElement["type"]) {
// Это мы получили recalcIndexColumns
oRecalcIndexColumns = t.collaborativeEditing.addRecalcIndex(oElement["type"], oElement["index"]);
} else if ("1" === oElement["type"]) {
// Это мы получили recalcIndexRows
oRecalcIndexRows = t.collaborativeEditing.addRecalcIndex(oElement["type"], oElement["index"]);
} else if (!bFirstLoad) {
if ("10" === e["type"]) {
// Это мы получили recalcIndexColumns и recalcIndexRows
oRecalcIndexColumns = t.collaborativeEditing.addRecalcIndex('0', e['indexCols']);
oRecalcIndexRows = t.collaborativeEditing.addRecalcIndex('1', e['indexRows']);
}
}
}
// Теперь нужно пересчитать индексы для lock-элементов
if (null !== oRecalcIndexColumns || null !== oRecalcIndexRows) {
t.collaborativeEditing._recalcLockArray(c_oAscLockTypes.kLockTypeMine, oRecalcIndexColumns, oRecalcIndexRows);
......@@ -1649,14 +1640,11 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
}
// т.е. если bSendEvent не задан, то посылаем сообщение + если мы уже открыли документ
if (true === bAddChanges && false !== bSendEvent && t.IsSendDocumentLoadCompleate)
if (true === bAddChanges && !bFirstLoad && t.IsSendDocumentLoadCompleate)
t.syncCollaborativeChanges();
};
this.CoAuthoringApi.onFirstLoadChanges = function (e, userId) {
t.CoAuthoringApi.onSaveChanges(e, userId, false);
};
this.CoAuthoringApi.onFirstLoadChangesEnd = function () {
t.asyncServerIdEndLoaded ();
t.asyncServerIdEndLoaded();
};
this.CoAuthoringApi.onSetIndexUser = function (e) {
g_oIdCounter.Set_UserId("" + e);
......@@ -1717,10 +1705,8 @@ var ASC_DOCS_API_USE_EMBEDDED_FONTS = "@@ASC_DOCS_API_USE_EMBEDDED_FONTS";
var arrChanges = this.wbModel.SerializeHistory();
if (this.collaborativeEditing.getCollaborativeEditing()) {
// Пересчетные индексы добавляем только если мы не одни
if (recalcIndexColumns)
arrChanges.push({"index" : recalcIndexColumns, "type" : "0"});
if (recalcIndexRows)
arrChanges.push({"index" : recalcIndexRows, "type" : "1"});
if (recalcIndexColumns || recalcIndexRows)
arrChanges.push({"indexCols" : recalcIndexColumns, "indexRows" : recalcIndexRows, "type" : "10"});
}
if (0 < arrChanges.length || null !== deleteIndex)
this.CoAuthoringApi.saveChanges(arrChanges, deleteIndex);
......
......@@ -554,6 +554,8 @@
};
CCollaborativeEditing.prototype.addRecalcIndex = function (type, oRecalcIndex) {
if (null == oRecalcIndex)
return null;
var nIndex = 0;
var nRecalcType = c_oAscRecalcIndexTypes.RecalcIndexAdd;
var oRecalcIndexElement = null;
......
......@@ -461,24 +461,16 @@ asc_docs_api.prototype._coAuthoringInit = function () {
}
}
};
this.CoAuthoringApi.onSaveChanges = function (e, userId, bSendEvent) {
this.CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad) {
// bSendEvent = false - это означает, что мы загружаем имеющиеся изменения при открытии
var Count = e.length;
for ( var Index = 0; Index < Count; Index++ )
{
var Changes = new CCollaborativeChanges();
Changes.Set_Id( e[Index]["Id"]);
Changes.Set_Data( e[Index]["Data"]);
CollaborativeEditing.Add_Changes( Changes );
}
Changes.Set_Id(e["Id"]);
Changes.Set_Data(e["Data"]);
CollaborativeEditing.Add_Changes(Changes);
// т.е. если bSendEvent не задан, то посылаем сообщение + когда загрузился документ
if ( Count > 0 && false != bSendEvent && t.bInit_word_control )
if (!bFirstLoad && t.bInit_word_control)
t.sync_CollaborativeChanges();
};
this.CoAuthoringApi.onFirstLoadChanges = function (e, userId) {
t.CoAuthoringApi.onSaveChanges(e, userId, false);
//CollaborativeEditing.Apply_Changes();
};
this.CoAuthoringApi.onFirstLoadChangesEnd = function () {
t.asyncServerIdEndLoaded ();
......
......@@ -1442,18 +1442,21 @@ CChatMessage.prototype.get_Message = function() { return this.Message; }
ToDo Register Callback OnCoAuthoringDisconnectUser возвращается userId
*/
// Init CoAuthoring
asc_docs_api.prototype._coAuthoringSetChange = function(change, oColor)
{
var oChange = new CCollaborativeChanges();
oChange.Set_Id( change["Id"] );
oChange.Set_Data( change["Data"] );
oChange.Set_Color( oColor );
CollaborativeEditing.Add_Changes( oChange );
};
asc_docs_api.prototype._coAuthoringSetChanges = function(e, oColor)
{
var Count = e.length;
for ( var Index = 0; Index < Count; Index++ )
{
var Changes = new CCollaborativeChanges();
Changes.Set_Id( e[Index]["Id"] );
Changes.Set_Data( e[Index]["Data"] );
Changes.Set_Color( oColor );
CollaborativeEditing.Add_Changes( Changes );
}
}
for (var Index = 0; Index < Count; ++Index)
this._coAuthoringSetChange(e[Index], oColor);
};
asc_docs_api.prototype._coAuthoringInit = function()
{
......@@ -1565,8 +1568,11 @@ asc_docs_api.prototype._coAuthoringInit = function()
CollaborativeEditing.Remove_NeedLock(Id);
}
};
this.CoAuthoringApi.onSaveChanges = function (e, userId, bSendEvent, bUseColor)
this.CoAuthoringApi.onSaveChanges = function (e, userId, bFirstLoad)
{
var bUseColor;
if (bFirstLoad)
bUseColor = -1 === CollaborativeEditing.m_nUseType;
if (editor.CollaborativeMarksShowType === c_oAscCollaborativeMarksShowType.None)
bUseColor = false;
......@@ -1574,17 +1580,11 @@ asc_docs_api.prototype._coAuthoringInit = function()
var nColor = oUser ? oUser.asc_getColorValue() : null;
var oColor = false === bUseColor ? null : (null !== nColor ? new CDocumentColor( (nColor >> 16) & 0xFF, (nColor >> 8) & 0xFF, nColor & 0xFF ) : new CDocumentColor( 191, 255, 199 ));
t._coAuthoringSetChanges(e, oColor);
var Count = e.length;
t._coAuthoringSetChange(e, oColor);
// т.е. если bSendEvent не задан, то посылаем сообщение + когда загрузился документ
if ( Count > 0 && false != bSendEvent && t.bInit_word_control )
if (!bFirstLoad && t.bInit_word_control)
t.sync_CollaborativeChanges();
};
this.CoAuthoringApi.onFirstLoadChanges = function (e, userId)
{
t.CoAuthoringApi.onSaveChanges(e, userId, false, (-1 === CollaborativeEditing.m_nUseType ? true : false));
//CollaborativeEditing.Apply_Changes();
};
this.CoAuthoringApi.onFirstLoadChangesEnd = function () {
t.asyncServerIdEndLoaded ();
};
......
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