@@ -27,6 +27,7 @@ const apps = require('./apps.js'),
|
||||
fs = require('fs'),
|
||||
iputils = require('./iputils.js'),
|
||||
manifestFormat = require('cloudron-manifestformat'),
|
||||
mounts = require('./mounts.js'),
|
||||
os = require('os'),
|
||||
path = require('path'),
|
||||
paths = require('./paths.js'),
|
||||
@@ -341,23 +342,41 @@ async function install(app, args, progressCallback) {
|
||||
await progressCallback({ percent: 50, message: 'Creating app data directory' });
|
||||
await createAppDir(app);
|
||||
|
||||
// restore from backup
|
||||
if (!restoreConfig) {
|
||||
if (!restoreConfig) { // install
|
||||
await progressCallback({ percent: 60, message: 'Setting up addons' });
|
||||
await services.setupAddons(app, app.manifest.addons);
|
||||
} else if (!restoreConfig.backupId) { // in-place import
|
||||
} else if (app.installationState === apps.ISTATE_PENDING_IMPORT && !restoreConfig.backupId) { // in-place import
|
||||
await progressCallback({ percent: 60, message: 'Importing addons in-place' });
|
||||
await services.setupAddons(app, app.manifest.addons);
|
||||
await services.clearAddons(app, _.omit(app.manifest.addons, 'localstorage'));
|
||||
await apps.restoreConfig(app);
|
||||
await services.restoreAddons(app, app.manifest.addons);
|
||||
} else {
|
||||
await progressCallback({ percent: 65, message: 'Download backup and restoring addons' });
|
||||
} else if (app.installationState === apps.ISTATE_PENDING_IMPORT) { // import
|
||||
await progressCallback({ percent: 65, message: 'Downloading backup and restoring addons' });
|
||||
await services.setupAddons(app, app.manifest.addons);
|
||||
await services.clearAddons(app, app.manifest.addons);
|
||||
const backupConfig = restoreConfig.backupConfig; // can be null
|
||||
let mountObject = null;
|
||||
if (backupConfig && mounts.isMountProvider(backupConfig.provider)) {
|
||||
await progressCallback({ percent: 70, message: 'Setting up mount for importing' });
|
||||
mountObject = { // keep this in sync with importApp in apps.js
|
||||
name: `appimport-${app.id}`,
|
||||
hostPath: `/mnt/appimport-${app.id}`,
|
||||
mountType: backupConfig.provider,
|
||||
mountOptions: backupConfig.mountOptions
|
||||
};
|
||||
await mounts.tryAddMount(mountObject, { timeout: 10 });
|
||||
}
|
||||
await backuptask.downloadApp(app, restoreConfig, (progress) => { progressCallback({ percent: 75, message: progress.message }); });
|
||||
await apps.restoreConfig(app);
|
||||
if (mountObject) await mounts.removeMount(mountObject);
|
||||
await progressCallback({ percent: 75, message: 'Restoring addons' });
|
||||
await services.restoreAddons(app, app.manifest.addons);
|
||||
} else { // clone and restore
|
||||
await progressCallback({ percent: 65, message: 'Downloading backup and restoring addons' });
|
||||
await services.setupAddons(app, app.manifest.addons);
|
||||
await services.clearAddons(app, app.manifest.addons);
|
||||
await backuptask.downloadApp(app, restoreConfig, (progress) => { progressCallback({ percent: 65, message: progress.message }); });
|
||||
|
||||
if (app.installationState === apps.ISTATE_PENDING_IMPORT) await apps.restoreConfig(app);
|
||||
await progressCallback({ percent: 70, message: 'Restoring addons' });
|
||||
await services.restoreAddons(app, app.manifest.addons);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user