UNPKG

@launchmenu/applet-settings-manager

Version:
67 lines 6.51 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setupAutoSaveHandler = void 0; const model_react_1 = require("model-react"); const _1 = require("."); /** * Sets up automatic file saving if the setting is enabled * @param settingManager The setting manager to extract the settings from * @returns A function to destroy the save handler */ function setupAutoSaveHandler(settingManager) { let settingsDataObserver = null; let settingsFiles = []; const autoSaveObserver = new model_react_1.Observer(h => settingManager.getSettingsContext(h).get(_1.settings).autoSave.get(h)).listen(autoSave => { // Only do something if auto save actually changed if (autoSave != !!settingsDataObserver) { if (autoSave) { // Setup a save handler to react to changes settingsDataObserver = new model_react_1.Observer(h => settingManager.getAllSettingsData(h)).listen(settingsData => { // Obtain all files that were added and removed const files = settingsData.map(({ file }) => file); const added = files.filter(newFile => !settingsFiles.find(({ file }) => newFile == file)); const removed = settingsFiles.filter(({ file }) => !files.includes(file)); // Setup a listener for all added files added.forEach(file => { let timeoutID = null; const listener = () => { if (timeoutID) return; timeoutID = setTimeout(() => { timeoutID = null; if (file.isDirty()) file.save(); }, 100); }; file.addChangeListener(listener); settingsFiles.push({ file, listener }); }); // Destroy the listener for all removed files removed.forEach(({ file, listener }) => { file.removeChangeListener(listener); }); }); // Save all currently dirty files settingManager.getAllDirtySettingsData().forEach(({ file }) => file.save()); } else { // Destroy the observer and all listeners settingsDataObserver === null || settingsDataObserver === void 0 ? void 0 : settingsDataObserver.destroy(); settingsFiles.forEach(({ file, listener }) => { file.removeChangeListener(listener); }); settingsFiles = []; settingsDataObserver = null; } } }, true); return () => { autoSaveObserver.destroy(); settingsDataObserver === null || settingsDataObserver === void 0 ? void 0 : settingsDataObserver.destroy(); settingsFiles.forEach(({ file, listener }) => { file.removeChangeListener(listener); }); }; } exports.setupAutoSaveHandler = setupAutoSaveHandler; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXBBdXRvU2F2ZUhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2V0dXBBdXRvU2F2ZUhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsNkNBQXFDO0FBQ3JDLHdCQUEyQjtBQUUzQjs7OztHQUlHO0FBQ0gsU0FBZ0Isb0JBQW9CLENBQUMsY0FBK0I7SUFDaEUsSUFBSSxvQkFBb0IsR0FBcUMsSUFBSSxDQUFDO0lBQ2xFLElBQUksYUFBYSxHQUFpRCxFQUFFLENBQUM7SUFFckUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLHNCQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDdEMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUNyRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNoQixrREFBa0Q7UUFDbEQsSUFBSSxRQUFRLElBQUksQ0FBQyxDQUFDLG9CQUFvQixFQUFFO1lBQ3BDLElBQUksUUFBUSxFQUFFO2dCQUNWLDJDQUEyQztnQkFDM0Msb0JBQW9CLEdBQUcsSUFBSSxzQkFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3BDLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FDdkMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQ3BCLCtDQUErQztvQkFDL0MsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNqRCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUN0QixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FDOUQsQ0FBQztvQkFDRixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsTUFBTSxDQUNoQyxDQUFDLEVBQUMsSUFBSSxFQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDcEMsQ0FBQztvQkFFRix1Q0FBdUM7b0JBQ3ZDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ2pCLElBQUksU0FBUyxHQUEwQixJQUFJLENBQUM7d0JBQzVDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTs0QkFDbEIsSUFBSSxTQUFTO2dDQUFFLE9BQU87NEJBQ3RCLFNBQVMsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dDQUN4QixTQUFTLEdBQUcsSUFBSSxDQUFDO2dDQUNqQixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7b0NBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDOzRCQUNwQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQ1osQ0FBQyxDQUFDO3dCQUNGLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDakMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsQ0FBQyxDQUFDO29CQUN6QyxDQUFDLENBQUMsQ0FBQztvQkFFSCw2Q0FBNkM7b0JBQzdDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsRUFBRSxFQUFFO3dCQUNqQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2dCQUNQLENBQUMsQ0FBQyxDQUFDO2dCQUVILGlDQUFpQztnQkFDakMsY0FBYyxDQUFDLHVCQUF1QixFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBQyxJQUFJLEVBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7YUFDN0U7aUJBQU07Z0JBQ0gseUNBQXlDO2dCQUN6QyxvQkFBb0IsYUFBcEIsb0JBQW9CLHVCQUFwQixvQkFBb0IsQ0FBRSxPQUFPLEdBQUc7Z0JBQ2hDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBRSxRQUFRLEVBQUMsRUFBRSxFQUFFO29CQUN2QyxJQUFJLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2dCQUVILGFBQWEsR0FBRyxFQUFFLENBQUM7Z0JBQ25CLG9CQUFvQixHQUFHLElBQUksQ0FBQzthQUMvQjtTQUNKO0lBQ0wsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRVQsT0FBTyxHQUFHLEVBQUU7UUFDUixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixvQkFBb0IsYUFBcEIsb0JBQW9CLHVCQUFwQixvQkFBb0IsQ0FBRSxPQUFPLEdBQUc7UUFDaEMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUMsSUFBSSxFQUFFLFFBQVEsRUFBQyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDO0FBQ04sQ0FBQztBQWpFRCxvREFpRUMifQ==