Fix issues with trim history in spreadsheets

This commit is contained in:
yflory
2020-03-23 12:32:03 +01:00
parent a13561eb8d
commit 8e8b371690
5 changed files with 26 additions and 1 deletions

View File

@@ -803,6 +803,17 @@ define([
var chan = [data.channel]; var chan = [data.channel];
if (data.rtChannel) { chan.push(data.rtChannel); } if (data.rtChannel) { chan.push(data.rtChannel); }
if (data.lastVersion) { chan.push(Hash.hrefToHexChannelId(data.lastVersion)); } if (data.lastVersion) { chan.push(Hash.hrefToHexChannelId(data.lastVersion)); }
var channels = chan.filter(function (c) { return c.length === 32; }).map(function (id) {
if (id === data.rtChannel && data.lastVersion && data.lastCpHash) {
return {
channel: id,
lastKnownHash: data.lastCpHash
};
}
return {
channel: id
};
});
var history = common.makeUniversal('history'); var history = common.makeUniversal('history');
var trimChannels = []; var trimChannels = [];
NThen(function (waitFor) { NThen(function (waitFor) {
@@ -819,7 +830,7 @@ define([
if (!owned) { return; } if (!owned) { return; }
history.execCommand('GET_HISTORY_SIZE', { history.execCommand('GET_HISTORY_SIZE', {
pad: true, pad: true,
channels: chan.filter(function (c) { return c.length === 32; }), channels: channels,
teamId: typeof(owned) === "number" && owned teamId: typeof(owned) === "number" && owned
}, waitFor(function (obj) { }, waitFor(function (obj) {
if (obj && obj.error) { return; } if (obj && obj.error) { return; }

View File

@@ -3867,6 +3867,7 @@ define([
var opts = {}; var opts = {};
opts.href = Hash.getRelativeHref(data.href || data.roHref); opts.href = Hash.getRelativeHref(data.href || data.roHref);
opts.channel = data.channel;
if (manager.isSharedFolder(el)) { if (manager.isSharedFolder(el)) {
var ro = folders[el] && folders[el].version >= 2; var ro = folders[el] && folders[el].version >= 2;

View File

@@ -325,6 +325,7 @@ define([
body: $('body'), body: $('body'),
onUploaded: function (ev, data) { onUploaded: function (ev, data) {
if (!data || !data.url) { return; } if (!data || !data.url) { return; }
data.hash = ev.hash;
sframeChan.query('Q_OO_SAVE', data, function (err) { sframeChan.query('Q_OO_SAVE', data, function (err) {
onUploaded(ev, data, err); onUploaded(ev, data, err);
}); });
@@ -1556,6 +1557,7 @@ define([
content = hjson.content || content; content = hjson.content || content;
var newLatest = getLastCp(); var newLatest = getLastCp();
sframeChan.query('Q_OO_SAVE', { sframeChan.query('Q_OO_SAVE', {
hash: newLatest.hash,
url: newLatest.file url: newLatest.file
}, function () { }); }, function () { });
newDoc = !content.hashes || Object.keys(content.hashes).length === 0; newDoc = !content.hashes || Object.keys(content.hashes).length === 0;
@@ -1649,6 +1651,7 @@ define([
var newLatest = getLastCp(); var newLatest = getLastCp();
if (newLatest.index > latest.index) { if (newLatest.index > latest.index) {
sframeChan.query('Q_OO_SAVE', { sframeChan.query('Q_OO_SAVE', {
hash: newLatest.hash,
url: newLatest.file url: newLatest.file
}, function () { }); }, function () { });
} }

View File

@@ -61,6 +61,7 @@ define([
if (e) { return void cb(e); } if (e) { return void cb(e); }
Cryptpad.setPadAttribute('lastVersion', data.url, cb); Cryptpad.setPadAttribute('lastVersion', data.url, cb);
}); });
Cryptpad.setPadAttribute('lastCpHash', data.hash, cb);
}); });
sframeChan.on('Q_OO_OPENCHANNEL', function (data, cb) { sframeChan.on('Q_OO_OPENCHANNEL', function (data, cb) {
Cryptpad.getPadAttribute('rtChannel', function (err, res) { Cryptpad.getPadAttribute('rtChannel', function (err, res) {

View File

@@ -36,6 +36,7 @@ define([
return void cb(); return void cb();
} }
var txid = Math.floor(Math.random() * 1000000);
var onOpen = function (wc) { var onOpen = function (wc) {
ctx.channels[channel] = ctx.channels[channel] || { ctx.channels[channel] = ctx.channels[channel] || {
@@ -91,6 +92,7 @@ define([
var hk = network.historyKeeper; var hk = network.historyKeeper;
var cfg = { var cfg = {
txid: txid,
lastKnownHash: chan.lastKnownHash || chan.lastCpHash, lastKnownHash: chan.lastKnownHash || chan.lastCpHash,
metadata: { metadata: {
validateKey: obj.validateKey, validateKey: obj.validateKey,
@@ -121,6 +123,8 @@ define([
} catch (e) {} } catch (e) {}
if (!parsed) { return; } if (!parsed) { return; }
// If there is a txid, make sure it's ours or abort
if (parsed.txid && parsed.txid !== txid) { return; }
// Keep only metadata messages for the current channel // Keep only metadata messages for the current channel
if (parsed.channel && parsed.channel !== channel) { return; } if (parsed.channel && parsed.channel !== channel) { return; }
@@ -138,6 +142,11 @@ define([
} }
if (parsed.error && parsed.channel) { return; } if (parsed.error && parsed.channel) { return; }
// If there is a txid, make sure it's ours or abort
if (Array.isArray(parsed) && parsed[0] && parsed[0] !== txid) {
return;
}
msg = parsed[4]; msg = parsed[4];
// Keep only the history for our channel // Keep only the history for our channel