From 2ee8487cc2fb1da885693f681d6af194afbf4856 Mon Sep 17 00:00:00 2001 From: yflory Date: Mon, 29 Sep 2025 16:41:38 +0200 Subject: [PATCH] Fix backup/restore issue --- www/common/cryptpad-common.js | 8 ++++ www/settings/main.js | 70 ++++++++++++++++++++--------------- 2 files changed, 49 insertions(+), 29 deletions(-) diff --git a/www/common/cryptpad-common.js b/www/common/cryptpad-common.js index af9b61f07..ec1bbc3db 100644 --- a/www/common/cryptpad-common.js +++ b/www/common/cryptpad-common.js @@ -431,6 +431,14 @@ define([ cb(obj); }); }; + common.getAccountObject = function (teamId, cb) { + postMessage("GET", { + teamId: teamId, + key: [] + }, function (obj) { + cb(obj); + }); + }; common.getSharedFolder = function (data, cb) { postMessage("GET_SHARED_FOLDER", data, function (obj) { cb(obj); diff --git a/www/settings/main.js b/www/settings/main.js index 2e3cc86bb..6143e900f 100644 --- a/www/settings/main.js +++ b/www/settings/main.js @@ -23,43 +23,55 @@ define([ }); }); sframeChan.on('Q_SETTINGS_DRIVE_GET', function (d, cb) { + if (d !== "full") { + Cryptpad.getAccountObject(null, function (obj) { + cb(obj); + }); + return; + } Cryptpad.getUserObject(null, function (obj) { if (obj.error) { return void cb(obj); } - if (d === "full") { - // We want shared folders too - var result = { - uo: obj, - sf: {} - }; - if (!obj.drive || !obj.drive.sharedFolders) { return void cb(result); } - Utils.nThen(function (waitFor) { - Object.keys(obj.drive.sharedFolders).forEach(function (id) { - Cryptpad.getSharedFolder({ - id: id - }, waitFor(function (obj) { - result.sf[id] = obj; - })); - }); - }).nThen(function () { - cb(result); + // We want shared folders too + var result = { + uo: obj, + sf: {} + }; + if (!obj.drive || !obj.drive.sharedFolders) { return void cb(result); } + Utils.nThen(function (waitFor) { + Object.keys(obj.drive.sharedFolders).forEach(function (id) { + Cryptpad.getSharedFolder({ + id: id + }, waitFor(function (obj) { + result.sf[id] = obj; + })); }); - return; - } - // We want only the user object - cb(obj); + }).nThen(function () { + cb(result); + }); }); }); sframeChan.on('Q_SETTINGS_DRIVE_SET', function (data, cb) { if (data && data.uo) { data = data.uo; } - var sjson = JSON.stringify(data); - require([ - '/common/cryptget.js', - ], function (Crypt) { - var k = Cryptpad.userHash || Utils.LocalStore.getFSHash(); - Crypt.put(k, sjson, function (err) { - cb(err); + const drive = JSON.parse(JSON.stringify(data.drive || '')); + const todo = () => { + var sjson = JSON.stringify(data); + require([ + '/common/cryptget.js', + ], function (Crypt) { + var k = Cryptpad.userHash || Utils.LocalStore.getFSHash(); + Crypt.put(k, sjson, function (err) { + cb(err); + }); }); - }); + }; + if (Object.keys(data).length === 1 && data.drive) { + return Cryptpad.getAccountObject(null, function (obj) { + data = JSON.parse(JSON.stringify(obj)); + data.drive = drive; + todo(); + }); + } + todo(); }); sframeChan.on('Q_SETTINGS_LOGOUT_PROPERLY', function (data, cb) { Utils.LocalStore.clearLoginToken();