BetterDiscordApp-rauenzi/renderer/src/structs/builtin.js

100 lines
2.8 KiB
JavaScript

import Logger from "common/logger";
import Events from "../modules/emitter";
import Settings from "../modules/settingsmanager";
import Patcher from "../modules/patcher";
export default class BuiltinModule {
get name() {return "Unnamed Builtin";}
get collection() {return "settings";}
get category() {return "general";}
get id() {return "None";}
async initialize() {
if (Settings.get(this.collection, this.category, this.id)) await this.enable();
Events.on("setting-updated", (collection, category, id, enabled) => {
if (collection != this.collection || category !== this.category || id !== this.id) return;
if (enabled) this.enable();
else this.disable();
});
this.initialized = true;
}
registerSetting(collection, category, id, onEnable, onDisable) {
if (arguments.length == 4) {
collection = this.collection;
category = arguments[0];
id = arguments[1];
onEnable = arguments[2];
onDisable = arguments[3];
}
else if (arguments.length == 3) {
collection = this.collection;
category = this.category;
id = arguments[0];
onEnable = arguments[1];
onDisable = arguments[2];
}
return Settings.on(collection, category, id, (value) => {
if (value) onEnable();
else onDisable();
});
}
get(collection, category, id) {
if (arguments.length == 2) {
collection = this.collection;
category = arguments[0];
id = arguments[1];
}
else if (arguments.length == 1) {
collection = this.collection;
category = this.category;
id = arguments[0];
}
return Settings.get(collection, category, id);
}
async enable() {
this.log("Enabled");
try {await this.enabled();}
catch (e) {this.stacktrace("Could not be enabled", e);}
}
async disable() {
this.log("Disabled");
try {await this.disabled();}
catch (e) {this.stacktrace("Could not be disabled", e);}
}
async enabled() {}
async disabled() {}
log(...message) {
Logger.log(this.name, ...message);
}
warn(...message) {
Logger.warn(this.name, ...message);
}
error(...message) {
Logger.err(this.name, ...message);
}
stacktrace(message, error) {
Logger.stacktrace(this.name, message, error);
}
before(object, func, callback) {
return Patcher.before(this.name, object, func, callback);
}
after(object, func, callback) {
return Patcher.after(this.name, object, func, callback);
}
unpatchAll() {
return Patcher.unpatchAll(this.name);
}
}