1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-24 10:27:10 +02:00
joplin/packages/app-mobile/plugins/loadPlugins.ts

56 lines
1.8 KiB
TypeScript

import Setting from '@joplin/lib/models/Setting';
import BasePluginRunner from '@joplin/lib/services/plugins/BasePluginRunner';
import PluginService, { PluginSettings } from '@joplin/lib/services/plugins/PluginService';
import PlatformImplementation from './PlatformImplementation';
import { Store } from 'redux';
import Logger from '@joplin/utils/Logger';
import shim from '@joplin/lib/shim';
const logger = Logger.create('loadPlugins');
type CancelEvent = { cancelled: boolean };
const loadPlugins = async (
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
pluginRunner: BasePluginRunner, pluginSettings: PluginSettings, store: Store<any>, cancel: CancelEvent,
) => {
try {
const pluginService = PluginService.instance();
const platformImplementation = PlatformImplementation.instance();
pluginService.initialize(
platformImplementation.versionInfo.version, platformImplementation, pluginRunner, store,
);
pluginService.isSafeMode = Setting.value('isSafeMode');
// Unload any existing plugins (important for React Native's fast refresh)
logger.debug('Unloading plugins...');
for (const pluginId of pluginService.pluginIds) {
await pluginService.unloadPlugin(pluginId);
if (cancel.cancelled) {
return;
}
}
if (Setting.value('env') === 'dev') {
logger.info('Running dev plugins (if any)...');
await pluginService.loadAndRunDevPlugins(pluginSettings);
}
if (cancel.cancelled) {
return;
}
if (await shim.fsDriver().exists(Setting.value('pluginDir'))) {
logger.info('Running user-installed plugins...');
await pluginService.loadAndRunPlugins(Setting.value('pluginDir'), pluginSettings);
}
} catch (error) {
console.error(error);
throw error;
}
};
export default loadPlugins;