UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

192 lines 13.4 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.SettingsManager = void 0; const model_react_1 = require("model-react"); const SettingsContext_1 = require("../../settings/SettingsContext"); const SettingsFile_1 = require("../../settings/storage/fileTypes/SettingsFile"); const path_1 = __importDefault(require("path")); const createFileMenuItem_1 = require("../../menus/items/inputs/types/createFileMenuItem"); const createGlobalKeyPatternMenuItem_1 = require("../../menus/items/inputs/types/createGlobalKeyPatternMenuItem"); /** * Manages the settings within LaunchMenu */ class SettingsManager { /** * Creates a new settings manager, which auto loads the settings of the passed applets * @param LM The LaunchMenu instance to pass to settings * @param settingsDirectory The directory to load the settings for the applets from * @param dataDirectory The directory that LM data is stored in */ constructor(LM, settingsDirectory, dataDirectory = path_1.default.join(settingsDirectory, "data")) { this.extraFiles = new model_react_1.Field([]); this.destroyed = new model_react_1.Field(false); this.appletSettings = new model_react_1.Field([]); /** * Retrieves the settings files that are dirty */ this.dirtySettingsData = new model_react_1.DataCacher(h => { const settingsData = this.getAllSettingsData(h); return settingsData.filter(({ file }) => file.isDirty(h)); }); this.LM = LM; this.settingsDirectory = settingsDirectory; this.dataDirectory = dataDirectory; } /** * Disposes of all data */ destroy() { if (!this.destroyed.get()) { [...this.extraFiles.get(), ...this.appletSettings.get()].forEach(({ file }) => file.destroy()); } this.destroyed.set(true); } // Getters /** * Retrieves the settings data with a given ID * @param ID The ID of the data to retrieve * @param hook A hook to subscribe to changes * @returns The settings data */ getSettingsData(ID, hook) { var _a; return (_a = this.getAllSettingsData(hook).find(({ ID: OID }) => OID == ID)) !== null && _a !== void 0 ? _a : null; } /** * Retrieves the settings data in the manager * @param hook A hook to subscribe to changes * @returns The settings data */ getAllSettingsData(hook) { return [...this.extraFiles.get(hook), ...this.appletSettings.get(hook)]; } /** * Retrieves the settings data in the manager for all files that have unsaved changes * @param hook A hook to subscribe to changes * @returns The settings data that hasn't been saved */ getAllDirtySettingsData(hook) { return this.dirtySettingsData.get(hook); } /** * Retrieves a settings context that contains all settings in this manager * @param hook A hook to subscribe to changes * @returns The context that includes all settings */ getSettingsContext(hook) { const data = {}; this.getAllSettingsData(hook).forEach(({ ID, file }) => { data[ID] = file.settings; }); return new SettingsContext_1.SettingsContext(data); } // Settings management /** * Adds the specified settings to the manager * @param ID The identifier for the settings * @param settings The settings to be added * @param applet An applet that the settings are connected to */ addSettings(ID, settings, applet) { this.extraFiles.set([ ...this.extraFiles.get(), { ID, file: settings, applet, }, ]); settings.load(); // TODO: add check whether not already loaded } /** * Updates the specified settings, removing the old version * @param ID The identifier for the settings * @param settings The settings to be updated * @param applet An applet that the settings are connected to */ updateSettings(ID, settings, applet) { const files = this.extraFiles.get(); this.extraFiles.set([ ...files.filter(({ ID: OID }) => OID != ID), { ID, file: settings, applet, }, ]); settings.load(); // TODO: add check whether not already loaded } /** * Removes the settings with the specified id * @param ID The ID of the settings to remove */ removeSettings(ID) { const files = this.extraFiles.get(); this.extraFiles.set(files.filter(({ ID: OID }) => OID != ID)); } // Setting methods /** * Reloads all the settings */ async reloadAll() { await Promise.all(this.getAllDirtySettingsData().map(({ file }) => file.load())); } /** * Saves all settings in the session */ async saveAll() { await Promise.all(this.getAllDirtySettingsData().map(({ file }) => file.save())); } // Applet settings management /** * Updates the settings for a given applet, used by the applet manager * @param appletData The applet data to update * @param version The new version of the applet * @returns The tree of settings for this applet */ updateAppletSettings(applet, version) { this.destroyAppletSetting(applet.ID); const settings = applet.settings; settings.ID = applet.ID; // Create the settings file at the correct file path const settingsFile = new SettingsFile_1.SettingsFile({ ...settings, path: path_1.default.join(this.settingsDirectory, "applets", applet.ID + ".json"), }); // Inject the base directory for file settings to use settingsFile.configure({ [createFileMenuItem_1.fileInputBasePathConfigurationSymbol]: path_1.default.join(this.dataDirectory, "appletData", `${applet.ID}`), [createGlobalKeyPatternMenuItem_1.LMConfigurationSymbol]: this.LM, }); // Load the settings from the file if present settingsFile.load(); this.appletSettings.set([ ...this.appletSettings.get(), { ID: applet.ID, file: settingsFile, appletVersion: version, applet, }, ]); // Return the settings tree return settingsFile.fields; } /** * Removes the settings of an applet * @param appletID The ID of the applet to remove */ destroyAppletSetting(appletID) { const allSettings = this.appletSettings.get(); const settings = allSettings.find(({ ID }) => appletID == ID); if (settings) { settings.file.destroy(); this.appletSettings.set(allSettings.filter(({ ID }) => ID != appletID)); } } } exports.SettingsManager = SettingsManager; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2V0dGluZ3NNYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3NldHRpbmdzL1NldHRpbmdzTWFuYWdlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw2Q0FBeUQ7QUFDekQsb0VBQStEO0FBQy9ELGdGQUEyRTtBQUszRSxnREFBd0I7QUFDeEIsMEZBQXVHO0FBR3ZHLGtIQUFvRztBQUVwRzs7R0FFRztBQUNILE1BQWEsZUFBZTtJQVV4Qjs7Ozs7T0FLRztJQUNILFlBQ0ksRUFBYyxFQUNkLGlCQUF5QixFQUN6QixnQkFBd0IsY0FBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLENBQUM7UUFkdEQsZUFBVSxHQUFHLElBQUksbUJBQUssQ0FBQyxFQUFxQixDQUFDLENBQUM7UUFFOUMsY0FBUyxHQUFHLElBQUksbUJBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixtQkFBYyxHQUFHLElBQUksbUJBQUssQ0FBQyxFQUFxQixDQUFDLENBQUM7UUEyRDVEOztXQUVHO1FBQ08sc0JBQWlCLEdBQUcsSUFBSSx3QkFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRCxPQUFPLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFDLElBQUksRUFBQyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDLENBQUM7UUFwREMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDYixJQUFJLENBQUMsaUJBQWlCLEdBQUcsaUJBQWlCLENBQUM7UUFDM0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNWLElBQUksQ0FB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