fix(export): fix TypeError while downloading folders from the drive

This commit is contained in:
yflory 2026-03-18 12:04:57 +01:00
parent db9698030b
commit 5cc9d2113a
2 changed files with 22 additions and 15 deletions

View File

@ -1971,7 +1971,7 @@ define([
// It seems we have performance issues when we open and close a lot of channels over
// the same network, maybe a memory leak. To fix this, we kill and create a new
// network every 30 cryptget calls (1 call = 1 channel)
const cgNetworkStatus = {};
let cgNetworkStatus = {};
let cgNetworkId = 0;
let cgNetworkIndex = 0;
let cgNetwork;
@ -1985,7 +1985,7 @@ define([
// Use promises to know when all the cryptget are done
// so that we can disconnect the network
cgNetworkStatus[cgNetworkId] ||= [];
cgNetworkStatus.push(new Promise((res) => {
cgNetworkStatus[cgNetworkId].push(new Promise((res) => {
Cryptget.get(data.hash, function (err, val) {
res(network);
cb({
@ -2033,9 +2033,17 @@ define([
});
});
sframeChan.on('EV_CRYPTGET_DISCONNECT', function () {
if (!cgNetwork) { return; }
cgNetwork.disconnect();
const prom = cgNetworkStatus[cgNetworkId] || [];
Promise.all(prom).then((nw) => {
let network = nw[0];
if (typeof(network?.disconnect) === "function") {
network.disconnect();
}
});
cgNetwork = undefined;
cgNetworkId = 0;
cgNetworkIndex = 0;
cgNetworkStatus = {};
});
if (cfg.addRpc) {

View File

@ -136,7 +136,6 @@ define([
});
});
sframeChan.on('Q_FORM_FETCH_ANSWERS', function (data, _cb) {
var formHref = data.href;
var cb = Utils.Util.once(_cb);
var myKeys = {};
var myFormKeys;
@ -167,19 +166,19 @@ define([
if (myFormKeys.formSeed) {
myFormKeys = Cryptpad.getAnonymousKeys(myFormKeys.formSeed, data.channel, Utils);
}
var keys;
var privateKey, publicKey;
var formData;
let secret, parsed;
if (data.drive) {
var secret = Utils.Hash.getSecrets('form', formHref, data.password);
keys = secret && secret.keys;
formData = Utils.Hash.getFormData(secret);
parsed = Utils.Hash.parseTypeHash('form', data.href);
secret = Utils.Hash.getSecrets('form', data.href, data.password);
} else {
formData = Utils.Hash.getFormData(Utils.secret);
keys = Utils.secret && Utils.secret.keys;
secret = Utils.secret;
}
privateKey = formData?.form_private;
publicKey = formData?.form_public;
let keys = (secret && secret.keys) || {};
let formData = Utils.Hash.getFormData(secret);
const privateKey = parsed.auditorKey || formData?.form_private;
const publicKey = formData?.form_public;
var curvePrivate = privateKey || data.privateKey;
if (!curvePrivate) { return void cb({error: 'EFORBIDDEN'}); }
var cryptoKeys = {