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 };