@launchmenu/applet-settings-manager
Version:
An applet to manage settings
67 lines • 6.51 kB
JavaScript
;
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==