Merge remote-tracking branch 'upstream/master' into add-setting-events
# Conflicts: # client/src/modules/pluginapi.js
This commit is contained in:
commit
d3c3de5a79
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
import { DOM, BdUI, Modals } from 'ui';
|
import { DOM, BdUI, Modals } from 'ui';
|
||||||
import BdCss from './styles/index.scss';
|
import BdCss from './styles/index.scss';
|
||||||
import { Events, CssEditor, Globals, PluginManager, ThemeManager, ModuleManager, WebpackModules, Settings } from 'modules';
|
import { Events, CssEditor, Globals, ExtModuleManager, PluginManager, ThemeManager, ModuleManager, WebpackModules, Settings } from 'modules';
|
||||||
import { ClientLogger as Logger, ClientIPC } from 'common';
|
import { ClientLogger as Logger, ClientIPC } from 'common';
|
||||||
|
|
||||||
class BetterDiscord {
|
class BetterDiscord {
|
||||||
|
@ -30,6 +30,7 @@ class BetterDiscord {
|
||||||
async init() {
|
async init() {
|
||||||
await Settings.loadSettings();
|
await Settings.loadSettings();
|
||||||
await ModuleManager.initModules();
|
await ModuleManager.initModules();
|
||||||
|
await ExtModuleManager.loadAllModules(true);
|
||||||
await PluginManager.loadAllPlugins(true);
|
await PluginManager.loadAllPlugins(true);
|
||||||
await ThemeManager.loadAllThemes(true);
|
await ThemeManager.loadAllThemes(true);
|
||||||
Modals.showContentManagerErrors();
|
Modals.showContentManagerErrors();
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
/**
|
||||||
|
* BetterDiscord External Module Base
|
||||||
|
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
|
||||||
|
* All rights reserved.
|
||||||
|
* https://betterdiscord.net
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
export default class ExtModule {
|
||||||
|
|
||||||
|
constructor(pluginInternals) {
|
||||||
|
this.__pluginInternals = pluginInternals;
|
||||||
|
this.__require = window.require(this.paths.mainPath);
|
||||||
|
this.hasSettings = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
get type() { return 'module' }
|
||||||
|
get configs() { return this.__pluginInternals.configs }
|
||||||
|
get info() { return this.__pluginInternals.info }
|
||||||
|
get icon() { return this.info.icon }
|
||||||
|
get paths() { return this.__pluginInternals.paths }
|
||||||
|
get main() { return this.__pluginInternals.main }
|
||||||
|
get defaultConfig() { return this.configs.defaultConfig }
|
||||||
|
get userConfig() { return this.configs.userConfig }
|
||||||
|
get id() { return this.info.id || this.info.name.replace(/[^a-zA-Z0-9-]/g, '-').replace(/--/g, '-') }
|
||||||
|
get name() { return this.info.name }
|
||||||
|
get authors() { return this.info.authors }
|
||||||
|
get version() { return this.info.version }
|
||||||
|
get pluginPath() { return this.paths.contentPath }
|
||||||
|
get dirName() { return this.paths.dirName }
|
||||||
|
get enabled() { return true }
|
||||||
|
get pluginConfig() { return this.userConfig.config || [] }
|
||||||
|
}
|
|
@ -0,0 +1,53 @@
|
||||||
|
/**
|
||||||
|
* BetterDiscord External Module Manager Module
|
||||||
|
* Copyright (c) 2015-present Jiiks/JsSucks - https://github.com/Jiiks / https://github.com/JsSucks
|
||||||
|
* All rights reserved.
|
||||||
|
* https://betterdiscord.net
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import ContentManager from './contentmanager';
|
||||||
|
import ExtModule from './extmodule';
|
||||||
|
import { ClientLogger as Logger } from 'common';
|
||||||
|
import { Events } from 'modules';
|
||||||
|
|
||||||
|
export default class extends ContentManager {
|
||||||
|
|
||||||
|
static get localModules() {
|
||||||
|
return this.localContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
static get contentType() {
|
||||||
|
return 'module';
|
||||||
|
}
|
||||||
|
|
||||||
|
static get moduleName() {
|
||||||
|
return 'Ext Module Manager';
|
||||||
|
}
|
||||||
|
|
||||||
|
static get pathId() {
|
||||||
|
return 'modules';
|
||||||
|
}
|
||||||
|
|
||||||
|
static get loadAllModules() {
|
||||||
|
return this.loadAllContent;
|
||||||
|
}
|
||||||
|
|
||||||
|
static get refreshModules() { return this.refreshContent }
|
||||||
|
|
||||||
|
static get loadContent() { return this.loadModule }
|
||||||
|
static async loadModule(paths, configs, info, main, type) {
|
||||||
|
return new ExtModule({ configs, info, main, paths: { contentPath: paths.contentPath, dirName: paths.dirName, mainPath: paths.mainPath } });
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static get findModule() { return this.findContent }
|
||||||
|
static get getModuleIndex() { return this.getContentIndex }
|
||||||
|
static get getModuleByName() { return this.getContentByName }
|
||||||
|
static get getModuleById() { return this.getContentById }
|
||||||
|
static get getModuleByPath() { return this.getContentByPath }
|
||||||
|
static get getModuleByDirName() { return this.getContentByDirName }
|
||||||
|
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
export { default as Events } from './events';
|
export { default as Events } from './events';
|
||||||
export { default as Settings } from './settings';
|
export { default as Settings } from './settings';
|
||||||
export { default as CssEditor } from './csseditor';
|
export { default as CssEditor } from './csseditor';
|
||||||
|
export { default as ExtModuleManager } from './extmodulemanager';
|
||||||
export { default as PluginManager } from './pluginmanager';
|
export { default as PluginManager } from './pluginmanager';
|
||||||
export { default as ThemeManager } from './thememanager';
|
export { default as ThemeManager } from './thememanager';
|
||||||
export { default as Globals } from './globals';
|
export { default as Globals } from './globals';
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
import { FileUtils } from 'common';
|
import { FileUtils } from 'common';
|
||||||
import { Modals } from 'ui';
|
import { Modals } from 'ui';
|
||||||
|
|
||||||
export default class {
|
export default class Plugin {
|
||||||
|
|
||||||
constructor(pluginInternals) {
|
constructor(pluginInternals) {
|
||||||
this.__pluginInternals = pluginInternals;
|
this.__pluginInternals = pluginInternals;
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
import { ClientLogger as Logger } from 'common';
|
import { ClientLogger as Logger } from 'common';
|
||||||
import Settings from './settings';
|
import Settings from './settings';
|
||||||
|
import ExtModuleManager from './extmodulemanager';
|
||||||
import PluginManager from './pluginmanager';
|
import PluginManager from './pluginmanager';
|
||||||
import ThemeManager from './thememanager';
|
import ThemeManager from './thememanager';
|
||||||
import Events from './events';
|
import Events from './events';
|
||||||
|
@ -111,7 +112,7 @@ export default class PluginApi {
|
||||||
|
|
||||||
get require() { return this.import }
|
get require() { return this.import }
|
||||||
import(m) {
|
import(m) {
|
||||||
const module = PluginManager.findPlugin(m);
|
const module = ExtModuleManager.findModule(m);
|
||||||
if (module && module.__require) return module.__require;
|
if (module && module.__require) return module.__require;
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,31 +15,6 @@ import Vendor from './vendor';
|
||||||
import { ClientLogger as Logger } from 'common';
|
import { ClientLogger as Logger } from 'common';
|
||||||
import { Events } from 'modules';
|
import { Events } from 'modules';
|
||||||
|
|
||||||
class Module {
|
|
||||||
|
|
||||||
constructor(pluginInternals) {
|
|
||||||
this.__pluginInternals = pluginInternals;
|
|
||||||
this.__require = window.require(this.paths.mainPath);
|
|
||||||
this.hasSettings = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
get type() { return 'module' }
|
|
||||||
get configs() { return this.__pluginInternals.configs }
|
|
||||||
get info() { return this.__pluginInternals.info }
|
|
||||||
get icon() { return this.info.icon }
|
|
||||||
get paths() { return this.__pluginInternals.paths }
|
|
||||||
get main() { return this.__pluginInternals.main }
|
|
||||||
get defaultConfig() { return this.configs.defaultConfig }
|
|
||||||
get userConfig() { return this.configs.userConfig }
|
|
||||||
get id() { return this.info.id || this.info.name.replace(/[^a-zA-Z0-9-]/g, '-').replace(/--/g, '-') }
|
|
||||||
get name() { return this.info.name }
|
|
||||||
get authors() { return this.info.authors }
|
|
||||||
get version() { return this.info.version }
|
|
||||||
get pluginPath() { return this.paths.contentPath }
|
|
||||||
get dirName() { return this.paths.dirName }
|
|
||||||
get enabled() { return true }
|
|
||||||
get pluginConfig() { return this.userConfig.config || [] }
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class extends ContentManager {
|
export default class extends ContentManager {
|
||||||
|
|
||||||
|
@ -62,7 +37,6 @@ export default class extends ContentManager {
|
||||||
static async loadAllPlugins(supressErrors) {
|
static async loadAllPlugins(supressErrors) {
|
||||||
const loadAll = await this.loadAllContent(supressErrors);
|
const loadAll = await this.loadAllContent(supressErrors);
|
||||||
this.localPlugins.forEach(plugin => {
|
this.localPlugins.forEach(plugin => {
|
||||||
if (plugin.type === 'module') return;
|
|
||||||
if (plugin.enabled) plugin.start();
|
if (plugin.enabled) plugin.start();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -72,9 +46,6 @@ export default class extends ContentManager {
|
||||||
|
|
||||||
static get loadContent() { return this.loadPlugin }
|
static get loadContent() { return this.loadPlugin }
|
||||||
static async loadPlugin(paths, configs, info, main, type) {
|
static async loadPlugin(paths, configs, info, main, type) {
|
||||||
|
|
||||||
if (type === 'module') return new Module({ configs, info, main, paths: { contentPath: paths.contentPath, dirName: paths.dirName, mainPath: paths.mainPath } });
|
|
||||||
|
|
||||||
const plugin = window.require(paths.mainPath)(Plugin, new PluginApi(info), Vendor);
|
const plugin = window.require(paths.mainPath)(Plugin, new PluginApi(info), Vendor);
|
||||||
const instance = new plugin({ configs, info, main, paths: { contentPath: paths.contentPath, dirName: paths.dirName, mainPath: paths.mainPath } });
|
const instance = new plugin({ configs, info, main, paths: { contentPath: paths.contentPath, dirName: paths.dirName, mainPath: paths.mainPath } });
|
||||||
return instance;
|
return instance;
|
||||||
|
|
|
@ -24,6 +24,7 @@ const __DEV = {
|
||||||
const __dataPath = path.resolve(__dirname, '..', '..', 'tests', 'data');
|
const __dataPath = path.resolve(__dirname, '..', '..', 'tests', 'data');
|
||||||
const __pluginPath = path.resolve(__dirname, '..', '..', 'tests', 'plugins');
|
const __pluginPath = path.resolve(__dirname, '..', '..', 'tests', 'plugins');
|
||||||
const __themePath = path.resolve(__dirname, '..', '..', 'tests', 'themes');
|
const __themePath = path.resolve(__dirname, '..', '..', 'tests', 'themes');
|
||||||
|
const __modulePath = path.resolve(__dirname, '..', '..', 'tests', 'modules');
|
||||||
|
|
||||||
const { Utils, FileUtils, BDIpc, Config, WindowUtils, CSSEditor } = require('./modules');
|
const { Utils, FileUtils, BDIpc, Config, WindowUtils, CSSEditor } = require('./modules');
|
||||||
const { BrowserWindow, dialog } = require('electron');
|
const { BrowserWindow, dialog } = require('electron');
|
||||||
|
@ -36,7 +37,8 @@ const dummyArgs = {
|
||||||
{ 'id': 'base', 'path': 'basePath' },
|
{ 'id': 'base', 'path': 'basePath' },
|
||||||
{ 'id': 'data', 'path': __dataPath },
|
{ 'id': 'data', 'path': __dataPath },
|
||||||
{ 'id': 'plugins', 'path': __pluginPath },
|
{ 'id': 'plugins', 'path': __pluginPath },
|
||||||
{ 'id': 'themes', 'path': __themePath }
|
{ 'id': 'themes', 'path': __themePath },
|
||||||
|
{ 'id': 'modules', 'path': __modulePath }
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue