75 lines
2.1 KiB
Java
75 lines
2.1 KiB
Java
package org.jcnc.jnotepad.controller;
|
|
|
|
import org.jcnc.jnotepad.controller.config.PluginConfigController;
|
|
import org.jcnc.jnotepad.controller.i18n.LocalizationController;
|
|
import org.jcnc.jnotepad.exception.AppException;
|
|
import org.jcnc.jnotepad.plugin.PluginLoader;
|
|
import org.jcnc.jnotepad.util.LogUtil;
|
|
import org.slf4j.Logger;
|
|
|
|
import java.io.IOException;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.util.stream.Stream;
|
|
|
|
/**
|
|
* 资源控制器:用于加载程序所需的资源
|
|
*
|
|
* @author gewuyou
|
|
*/
|
|
public class ResourceController {
|
|
private static final ResourceController INSTANCE = new ResourceController();
|
|
Logger logger = LogUtil.getLogger(this.getClass());
|
|
|
|
private ResourceController() {
|
|
}
|
|
|
|
|
|
public static ResourceController getInstance() {
|
|
return INSTANCE;
|
|
}
|
|
|
|
public void loadResources() {
|
|
// 1. 加载语言
|
|
LocalizationController.initLocal();
|
|
// 2. 加载插件
|
|
loadPlugins();
|
|
}
|
|
|
|
/**
|
|
* 装载插件
|
|
*
|
|
* @since 2023/9/15 21:39
|
|
*/
|
|
public void loadPlugins() {
|
|
// 扫描并装载插件
|
|
scanLoadPlugins(PluginConfigController.getInstance().getPlungsPath());
|
|
}
|
|
|
|
|
|
/**
|
|
* 扫描插件
|
|
*
|
|
* @param pluginsPath 插件路径
|
|
* @apiNote 扫描所有插件,更新配置文件中的插件信息
|
|
* @since 2023/9/16 0:21
|
|
*/
|
|
|
|
private void scanLoadPlugins(Path pluginsPath) {
|
|
if (!Files.isDirectory(pluginsPath)) {
|
|
try {
|
|
Files.createDirectory(pluginsPath);
|
|
} catch (IOException e) {
|
|
throw new AppException("这不是一个有效的路径!");
|
|
}
|
|
}
|
|
// 获取插件加载器
|
|
PluginLoader pluginLoader = PluginLoader.getInstance();
|
|
try (Stream<Path> pathStream = Files.walk(pluginsPath)) {
|
|
pathStream.filter(path -> path.toString().endsWith(".jar")).forEach(path -> pluginLoader.loadPluginByPath(path.toString()));
|
|
} catch (Exception e) {
|
|
logger.error(e.getMessage(), e);
|
|
}
|
|
}
|
|
}
|