Commit 9f6c1b94 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Делаем проверку при восстановлении соединения (если были изменения, то делаем drop)

Баг http://bugzserver/show_bug.cgi?id=26276
Баг http://bugzserver/show_bug.cgi?id=26277

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@58465 954022d7-b5bf-4e40-9824-e11837661b57
parent c4e6b11e
...@@ -266,7 +266,6 @@ ...@@ -266,7 +266,6 @@
this._locks = {}; this._locks = {};
this._msgBuffer = []; this._msgBuffer = [];
this._lockCallbacks = {}; this._lockCallbacks = {};
this._saveLock = false;
this._saveCallback = []; this._saveCallback = [];
this.saveCallbackErrorTimeOutId = null; this.saveCallbackErrorTimeOutId = null;
this._id = ""; this._id = "";
...@@ -284,6 +283,8 @@ ...@@ -284,6 +283,8 @@
this.deleteIndex = 0; this.deleteIndex = 0;
// Массив изменений // Массив изменений
this.arrayChanges = null; this.arrayChanges = null;
// Время последнего сохранения (для разрыва соединения)
this.lastOtherSaveTime = -1;
this._url = ""; this._url = "";
...@@ -295,6 +296,7 @@ ...@@ -295,6 +296,7 @@
this._docid = null; this._docid = null;
this._token = null; this._token = null;
this._user = "Anonymous"; this._user = "Anonymous";
this._userId = "Anonymous";
this._initCallback = null; this._initCallback = null;
this.ownedLockBlocks = []; this.ownedLockBlocks = [];
this.sockjs_url = null; this.sockjs_url = null;
...@@ -596,6 +598,7 @@ ...@@ -596,6 +598,7 @@
this.onLocksReleasedEnd(); this.onLocksReleasedEnd();
} }
if (data["changes"]) { if (data["changes"]) {
this.lastOtherSaveTime = data["time"];
if (this.onSaveChanges) { if (this.onSaveChanges) {
this.onSaveChanges(JSON.parse(data["changes"]), data["user"]); this.onSaveChanges(JSON.parse(data["changes"]), data["user"]);
} }
...@@ -635,28 +638,36 @@ ...@@ -635,28 +638,36 @@
} }
}; };
DocsCoApi.prototype._onUnSaveLock = function (data) { DocsCoApi.prototype._onUnSaveLock = function () {
this._saveLock = false;
if (this.onUnSaveLock) if (this.onUnSaveLock)
this.onUnSaveLock (); this.onUnSaveLock ();
}; };
DocsCoApi.prototype._checkSaveChangesInDisconnect = function (allServerChanges) {
for (var changeId in allServerChanges) {
var change = allServerChanges[changeId];
var changesOneUser = change["changes"];
if (changesOneUser && change["user"] !== this._userId && this.lastSaveTime !== change["time"])
return true;
}
return false;
};
DocsCoApi.prototype._onFirstLoadChanges = function (allServerChanges) { DocsCoApi.prototype._onFirstLoadChanges = function (allServerChanges) {
var t = this;
if (allServerChanges && this.onFirstLoadChanges) { if (allServerChanges && this.onFirstLoadChanges) {
var hasChanges = false; for (var changeId in allServerChanges) {
for (var changeId in allServerChanges) if (allServerChanges.hasOwnProperty(changeId)){
var change = allServerChanges[changeId]; var change = allServerChanges[changeId];
var changesOneUser = change["changes"]; var changesOneUser = change["changes"];
if (changesOneUser) { if (changesOneUser) {
hasChanges = true; if (change["user"] !== this._userId)
t.onFirstLoadChanges(JSON.parse(changesOneUser), change["user"]); this.lastSaveTime = change["time"];
this.onFirstLoadChanges(JSON.parse(changesOneUser), change["user"]);
} }
} }
// Посылать нужно всегда, т.к. на это рассчитываем при открытии // Посылать нужно всегда, т.к. на это рассчитываем при открытии
if (t.onFirstLoadChangesEnd) if (this.onFirstLoadChangesEnd)
t.onFirstLoadChangesEnd(); this.onFirstLoadChangesEnd();
} }
}; };
...@@ -758,12 +769,16 @@ ...@@ -758,12 +769,16 @@
DocsCoApi.prototype._onDrop = function (data) { DocsCoApi.prototype._onDrop = function (data) {
this.disconnect(); this.disconnect();
this.onDisconnect(data['description'], true, false); this.onDisconnect(data ? data['description'] : '', true, false);
}; };
DocsCoApi.prototype._onAuth = function (data) { DocsCoApi.prototype._onAuth = function (data) {
if (true === this._isAuth) { if (true === this._isAuth) {
// Мы уже авторизовывались, это просто reconnect // Мы уже авторизовывались, это просто reconnect и нужно проверить не было ли изменений пока не было сети
if (this._checkSaveChangesInDisconnect(data["changes"] || [])) {
// делаем drop
this._onDrop();
}
return; return;
} }
if (data["result"] === 1) { if (data["result"] === 1) {
...@@ -781,6 +796,8 @@ ...@@ -781,6 +796,8 @@
this._onSetIndexUser (this._indexuser); this._onSetIndexUser (this._indexuser);
} }
this._userId = this._user.asc_getId() + this._indexuser;
if (data["messages"] && this.onMessage) { if (data["messages"] && this.onMessage) {
this._onMessages(data); this._onMessages(data);
} }
......
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