mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-02-01 03:12:42 +01:00
Send commits missed during the reconnect
This commit is contained in:
parent
bf05e9ae89
commit
d41e184a3c
2 changed files with 36 additions and 9 deletions
|
@ -1177,33 +1177,51 @@ function handleClientReady(client, message)
|
||||||
{
|
{
|
||||||
changesetsNeeded.push(r);
|
changesetsNeeded.push(r);
|
||||||
}
|
}
|
||||||
|
callback();
|
||||||
|
},
|
||||||
//get all changesets
|
//get all changesets
|
||||||
async.forEach(changesetsNeeded, function(revNum)
|
function(callback)
|
||||||
|
{
|
||||||
|
async.eachSeries(changesetsNeeded, function(revNum, callback)
|
||||||
{
|
{
|
||||||
pad.getRevisionChangeset(revNum, function(err, value)
|
pad.getRevisionChangeset(revNum, function(err, value)
|
||||||
{
|
{
|
||||||
if(ERR(err)) return;
|
if(ERR(err)) return;
|
||||||
changesets[revNum] = value;
|
changesets[revNum] = value;
|
||||||
|
callback();
|
||||||
});
|
});
|
||||||
|
}, callback);
|
||||||
|
},
|
||||||
|
function(callback)
|
||||||
|
{
|
||||||
|
async.eachSeries(changesetsNeeded, function(revNum, callback)
|
||||||
|
{
|
||||||
pad.getRevisionAuthor(revNum, function(err, value)
|
pad.getRevisionAuthor(revNum, function(err, value)
|
||||||
{
|
{
|
||||||
if(ERR(err)) return;
|
if(ERR(err)) return;
|
||||||
changesetsAuthor[revNum] = value;
|
changesetsAuthor[revNum] = value;
|
||||||
|
callback();
|
||||||
});
|
});
|
||||||
|
}, callback);
|
||||||
|
},
|
||||||
|
function(callback)
|
||||||
|
{
|
||||||
|
async.eachSeries(changesetsNeeded, function(revNum, callback)
|
||||||
|
{
|
||||||
pad.getRevisionDate(revNum, function(err, value)
|
pad.getRevisionDate(revNum, function(err, value)
|
||||||
{
|
{
|
||||||
if(ERR(err)) return;
|
if(ERR(err)) return;
|
||||||
changesetsTimestamp[revNum] = value;
|
changesetsTimestamp[revNum] = value;
|
||||||
|
callback();
|
||||||
});
|
});
|
||||||
});
|
}, callback);
|
||||||
callback(null);
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
//return err and changeset
|
//return err and changeset
|
||||||
function(err)
|
function(err)
|
||||||
{
|
{
|
||||||
if(ERR(err, callback)) return;
|
if(ERR(err, callback)) return;
|
||||||
async.eachSeries(changesetsNeeded, function(r)
|
async.eachSeries(changesetsNeeded, function(r, callback)
|
||||||
{
|
{
|
||||||
var forWire = Changeset.prepareForWire(changesets[r], pad.pool);
|
var forWire = Changeset.prepareForWire(changesets[r], pad.pool);
|
||||||
var wireMsg = {"type":"COLLABROOM",
|
var wireMsg = {"type":"COLLABROOM",
|
||||||
|
@ -1216,6 +1234,7 @@ function handleClientReady(client, message)
|
||||||
currentTime: changesetsTimestamp[r]
|
currentTime: changesetsTimestamp[r]
|
||||||
}};
|
}};
|
||||||
client.json.send(wireMsg);
|
client.json.send(wireMsg);
|
||||||
|
callback();
|
||||||
});
|
});
|
||||||
if (startNum == endNum)
|
if (startNum == endNum)
|
||||||
{
|
{
|
||||||
|
|
|
@ -342,6 +342,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
|
||||||
}
|
}
|
||||||
else if (msg.type == 'CLIENT_RECONNECT')
|
else if (msg.type == 'CLIENT_RECONNECT')
|
||||||
{
|
{
|
||||||
|
// When client has reconnected but there are no pending changes from other clients
|
||||||
if (msg.noChanges)
|
if (msg.noChanges)
|
||||||
{
|
{
|
||||||
socketIOError = false;
|
socketIOError = false;
|
||||||
|
@ -354,19 +355,26 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
|
||||||
var author = (msg.author || '');
|
var author = (msg.author || '');
|
||||||
var apool = msg.apool;
|
var apool = msg.apool;
|
||||||
|
|
||||||
|
|
||||||
if (rev + 1 == currRev)
|
if (rev + 1 == currRev)
|
||||||
{
|
{
|
||||||
if (author == pad.getUserId())
|
if (author == pad.getUserId())
|
||||||
{
|
{
|
||||||
editor.applyPreparedChangesetToBase();
|
editor.applyPreparedChangesetToBase();
|
||||||
setStateIdle();
|
setStateIdle();
|
||||||
|
callCatchingErrors("onInternalAction", function()
|
||||||
|
{
|
||||||
|
callbacks.onInternalAction("commitAcceptedByServer");
|
||||||
|
});
|
||||||
|
callCatchingErrors("onConnectionTrouble", function()
|
||||||
|
{
|
||||||
|
callbacks.onConnectionTrouble("OK");
|
||||||
|
});
|
||||||
|
handleUserChanges();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
editor.applyChangesToBase(changeset, author, apool);
|
editor.applyChangesToBase(changeset, author, apool);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
if (rev + 1 < currRev)
|
if (rev + 1 < currRev)
|
||||||
{
|
{
|
||||||
|
@ -374,8 +382,8 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad)
|
||||||
}
|
}
|
||||||
if (currRev == newRev)
|
if (currRev == newRev)
|
||||||
{
|
{
|
||||||
socketIOError = false;
|
|
||||||
rev = newRev;
|
rev = newRev;
|
||||||
|
socketIOError = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (msg.type == "NO_COMMIT_PENDING")
|
else if (msg.type == "NO_COMMIT_PENDING")
|
||||||
|
|
Loading…
Reference in a new issue