EmbyCrackedClient/web/native/interop/pluginloader.js

72 lines
2 KiB
JavaScript
Raw Normal View History

2025-06-25 11:46:04 +08:00
define(['pluginManager', 'globalize', 'appRouter'], function (pluginManager, globalize, appRouter) {
'use strict';
function loadStrings(plugin) {
const strings = plugin.getTranslations ? plugin.getTranslations() : [];
return globalize.loadStrings({
name: plugin.id || plugin.packageName,
strings: strings
});
}
function definePluginRoute(route, plugin) {
route.path = '/' + route.path;
route.contentPath = route.path;
////route.contentPath = pluginManager.mapPath(plugin, route.path);
////route.path = pluginManager.mapRoute(plugin, route);
appRouter.addRoute(route);
}
function loadPlugin(url) {
if (url.startsWith('./') && url.endsWith('.js')) {
console.log('Loading plugin module: ' + url);
return Emby.importModule(url).then(function (f) {
return pluginManager.loadPlugin(f, url);
});
}
return pluginManager.loadPluginFromUrl(url);
}
function loadPlugins(forcedPlugins) {
let hostPlugins = globalThis.NativePluginLoader.getFileSourcedPluginPaths();
let paths = forcedPlugins.concat(hostPlugins);
return Promise.all(paths.map(loadPlugin)).then(function() {
let hostObjectPlugins = globalThis.NativePluginLoader.getHostObjectPlugins();
for (let i = 0; i < hostObjectPlugins.length; i++) {
let plugin = hostObjectPlugins[i];
let hostObject = globalThis[plugin.hostObjectName];
Object.assign(hostObject, plugin);
pluginManager.register(hostObject);
if (hostObject.getRoutes) {
hostObject.getRoutes().forEach(function (route) {
definePluginRoute(route, hostObject);
});
}
loadStrings(hostObject);
}
return Promise.resolve();
});
}
return {
loadPlugins: loadPlugins
};
});