Fix checkpoint issues with integrated OO apps

This commit is contained in:
yflory 2024-05-15 11:17:25 +02:00
parent 6eee39be5f
commit 3940b9c4be
3 changed files with 37 additions and 11 deletions

View File

@ -392,6 +392,10 @@ define([
};
var onUploaded = function (ev, data, err) {
if (!ev && err) {
console.error(err);
return void UI.warn(Messages.error);
}
if (ev.newTemplate) {
if (err) {
console.error(err);
@ -549,7 +553,7 @@ define([
var saveToServer = function (blob, title) {
if (APP.cantCheckpoint) { return; } // TOO_LARGE
var text = getContent();
var text = !blob && getContent();
if (!text && !blob) {
setEditable(false, true);
sframeChan.query('Q_CLEAR_CACHE_CHANNELS', [
@ -3154,9 +3158,9 @@ Uncaught TypeError: Cannot read property 'calculatedType' of null
return void UI.errorLoadingScreen(Messages.error);
}
var blob = new Blob([bin], {type: 'text/plain'});
var file = getFileType();
resetData(blob, file);
//saveToServer(blob, title);
//var file = getFileType();
//resetData(blob, file);
saveToServer(blob, title);
Title.updateTitle(title);
UI.removeLoadingScreen();
});
@ -3205,7 +3209,7 @@ Uncaught TypeError: Cannot read property 'calculatedType' of null
cb();
});
});
if (privateData.initialState) {
if (privateData.initialState && (!content || !content.hashes)) {
var blob = privateData.initialState;
let title = `document.${cfg.fileType}`;
console.error(blob, title);

View File

@ -467,6 +467,19 @@ define([
});
};
var initTempRpc = (clientId, cb) => {
if (store.rpc) { return void cb(store.rpc); }
var kp = Crypto.Nacl.sign.keyPair();
var keys = {
edPublic: Crypto.Nacl.util.encodeBase64(kp.publicKey),
edPrivate: Crypto.Nacl.util.encodeBase64(kp.secretKey)
};
Pinpad.create(store.network, keys, function (e, call) {
if (e) { return void cb({error: e}); }
store.rpc = call;
cb(call);
});
};
var initRpc = function (clientId, data, cb) {
if (!store.loggedIn) { return cb(); }
if (store.rpc) { return void cb(account); }
@ -3149,7 +3162,7 @@ define([
// If we load CryptPad for the first time from an existing pad, don't create a
// drive automatically.
var onNoDrive = function (clientId, cb) {
var onNoDrive = function (clientId, cb, initRpc) {
var andThen = function () {
// To be able to use all the features inside the pad, we need to
// initialize the chat (messenger) and the cursor modules.
@ -3160,9 +3173,16 @@ define([
store.messenger = store.modules['messenger'];
// And now we're ready
initAnonRpc(null, null, function () {
cb({});
});
let getAnon = () => {
initAnonRpc(null, null, function () {
cb({});
});
};
if (initRpc) {
return initTempRpc(clientId, getAnon);
}
getAnon();
};
// We need an anonymous RPC to be able to check if the pad exists and to get
@ -3245,7 +3265,7 @@ define([
// First tab, no user hash, no anon hash and this app doesn't need a drive
// ==> don't create a drive
// Or "neverDrive" (integration into another platform?)
// ==> don't create a drive
// ==> don't create a drive BUT create temp RPC (we may need to upload)
if (data.neverDrive || (data.noDrive && !data.userHash && !data.anonHash)) {
return void onNoDrive(clientId, function (obj) {
if (obj && obj.error) {
@ -3259,7 +3279,7 @@ define([
}
Feedback.send("NO_DRIVE", true);
callback(obj);
});
}, !!data.neverDrive);
}
initialized = true;

View File

@ -188,6 +188,7 @@
chan.on('ON_DOWNLOADAS', blob => {
let url = URL.createObjectURL(blob);
if (!config.events.onDownloadAs) { return; }
config.events.onDownloadAs({
data: {
fileType: config.document && config.document.fileType,
@ -198,6 +199,7 @@
chan.on('SAVE', function (data, cb) {
blob = data;
if (!config.events.onSave) { return void cb(); }
config.events.onSave(data, cb);
});
chan.on('RELOAD', function () {