snappymail/dev/Common/Plugins.js

94 lines
2.3 KiB
JavaScript
Raw Normal View History

2019-07-05 03:19:24 +08:00
import { data as GlobalsData } from 'Common/Globals';
2016-06-16 07:36:44 +08:00
import * as Settings from 'Storage/Settings';
2015-11-15 08:23:16 +08:00
2019-07-05 03:19:24 +08:00
const SIMPLE_HOOKS = {},
2016-07-02 06:49:59 +08:00
USER_VIEW_MODELS_HOOKS = [],
ADMIN_VIEW_MODELS_HOOKS = [];
2015-11-15 08:23:16 +08:00
2016-06-16 07:36:44 +08:00
/**
* @param {string} name
* @param {Function} callback
*/
2019-07-05 03:19:24 +08:00
export function addHook(name, callback) {
if (typeof callback === 'function') {
if (!Array.isArray(SIMPLE_HOOKS[name])) {
2016-06-16 07:36:44 +08:00
SIMPLE_HOOKS[name] = [];
2015-11-15 08:23:16 +08:00
}
2016-06-16 07:36:44 +08:00
SIMPLE_HOOKS[name].push(callback);
2015-11-15 08:23:16 +08:00
}
2016-06-16 07:36:44 +08:00
}
2015-11-15 08:23:16 +08:00
2016-06-16 07:36:44 +08:00
/**
* @param {string} name
* @param {Array=} args = []
*/
2019-07-05 03:19:24 +08:00
export function runHook(name, args = []) {
if (Array.isArray(SIMPLE_HOOKS[name])) {
SIMPLE_HOOKS[name].forEach(callback => {
2016-07-02 06:49:59 +08:00
callback(...args);
2016-06-16 07:36:44 +08:00
});
2015-11-15 08:23:16 +08:00
}
2016-06-16 07:36:44 +08:00
}
2015-11-15 08:23:16 +08:00
2016-06-16 07:36:44 +08:00
/**
* @param {string} name
2016-06-30 08:02:45 +08:00
* @returns {?}
2016-06-16 07:36:44 +08:00
*/
2019-07-05 03:19:24 +08:00
export function mainSettingsGet(name) {
2016-06-16 07:36:44 +08:00
return Settings.settingsGet(name);
}
2015-11-15 08:23:16 +08:00
2016-06-16 07:36:44 +08:00
/**
* @param {Function} callback
* @param {string} action
* @param {Object=} parameters
* @param {?number=} timeout
*/
2019-07-05 03:19:24 +08:00
export function remoteRequest(callback, action, parameters, timeout) {
if (GlobalsData.__APP__) {
2016-06-16 07:36:44 +08:00
GlobalsData.__APP__.remote().defaultRequest(callback, 'Plugin' + action, parameters, timeout);
2015-11-15 08:23:16 +08:00
}
2016-06-16 07:36:44 +08:00
}
2015-11-15 08:23:16 +08:00
2016-06-16 07:36:44 +08:00
/**
* @param {Function} SettingsViewModelClass
* @param {string} labelName
* @param {string} template
* @param {string} route
*/
2019-07-05 03:19:24 +08:00
export function addSettingsViewModel(SettingsViewModelClass, template, labelName, route) {
2016-06-16 07:36:44 +08:00
USER_VIEW_MODELS_HOOKS.push([SettingsViewModelClass, template, labelName, route]);
}
2015-11-15 08:23:16 +08:00
2016-06-16 07:36:44 +08:00
/**
* @param {Function} SettingsViewModelClass
* @param {string} labelName
* @param {string} template
* @param {string} route
*/
2019-07-05 03:19:24 +08:00
export function addSettingsViewModelForAdmin(SettingsViewModelClass, template, labelName, route) {
2016-06-16 07:36:44 +08:00
ADMIN_VIEW_MODELS_HOOKS.push([SettingsViewModelClass, template, labelName, route]);
}
2015-11-15 08:23:16 +08:00
2016-06-16 07:36:44 +08:00
/**
* @param {boolean} admin
*/
2019-07-05 03:19:24 +08:00
export function runSettingsViewModelHooks(admin) {
2016-06-16 07:36:44 +08:00
const Knoin = require('Knoin/Knoin');
(admin ? ADMIN_VIEW_MODELS_HOOKS : USER_VIEW_MODELS_HOOKS).forEach(view => {
2016-06-16 07:36:44 +08:00
Knoin.addSettingsViewModel(view[0], view[1], view[2], view[3]);
});
2015-11-15 08:23:16 +08:00
}
2016-06-16 07:36:44 +08:00
/**
* @param {string} pluginSection
* @param {string} name
2016-06-30 08:02:45 +08:00
* @returns {?}
2016-06-16 07:36:44 +08:00
*/
2019-07-05 03:19:24 +08:00
export function settingsGet(pluginSection, name) {
2016-06-16 07:36:44 +08:00
let plugins = Settings.settingsGet('Plugins');
plugins = plugins && null != plugins[pluginSection] ? plugins[pluginSection] : null;
return plugins ? (null == plugins[name] ? null : plugins[name]) : null;
2016-06-16 07:36:44 +08:00
}