Files
Multi-Hoster-Upload/lib/settings-backup.js
T
2026-09-01 15:43:20 +02:00

66 lines
2.3 KiB
JavaScript

const fs = require('node:fs');
const path = require('node:path');
function clone(value) {
return JSON.parse(JSON.stringify(value));
}
function validateSettings(value) {
if (
!value
|| typeof value !== 'object'
|| Array.isArray(value)
|| !value.hosters
|| typeof value.hosters !== 'object'
|| Array.isArray(value.hosters)
|| !value.hosterSettings
|| typeof value.hosterSettings !== 'object'
|| Array.isArray(value.hosterSettings)
|| !value.globalSettings
|| typeof value.globalSettings !== 'object'
|| Array.isArray(value.globalSettings)
) {
throw new Error('Backup hat eine ungültige Struktur');
}
}
function createPortableSettingsSnapshot(config) {
validateSettings(config);
const snapshot = {
hosters: clone(config.hosters),
hosterSettings: clone(config.hosterSettings),
globalSettings: clone(config.globalSettings),
history: []
};
snapshot.globalSettings.pendingQueue = null;
snapshot.globalSettings.uploadRecovery = null;
snapshot.globalSettings.lastBrowseDirectory = '';
if (snapshot.globalSettings.folderMonitor && typeof snapshot.globalSettings.folderMonitor === 'object') {
snapshot.globalSettings.folderMonitor.paused = false;
snapshot.globalSettings.folderMonitor.pausedAt = null;
delete snapshot.globalSettings.folderMonitor.telemetry;
}
return snapshot;
}
function prepareImportedSettings(value, options = {}) {
validateSettings(value);
const imported = createPortableSettingsSnapshot(value);
const pathExists = options.pathExists || fs.existsSync;
const pathDirname = options.pathDirname || path.dirname;
const warnings = Array.isArray(options.warnings) ? options.warnings : null;
const globalSettings = imported.globalSettings;
if (globalSettings.logFilePath && !pathExists(pathDirname(globalSettings.logFilePath))) {
warnings?.push('Log-Dateipfad (Ordner nicht gefunden)');
}
if (globalSettings.folderMonitor && typeof globalSettings.folderMonitor === 'object') {
if (globalSettings.folderMonitor.folderPath && !pathExists(globalSettings.folderMonitor.folderPath)) {
globalSettings.folderMonitor.enabled = false;
warnings?.push('Ordnerüberwachung (Ordner nicht gefunden und deaktiviert)');
}
}
return imported;
}
module.exports = { createPortableSettingsSnapshot, prepareImportedSettings };