@launchmenu/core
Version:
An environment for visual keyboard controlled applets
192 lines • 13.4 kB
JavaScript
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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
;