!115 完善插件逻辑

Merge pull request !115 from 格物方能致知/develop
This commit is contained in:
Luke 2023-09-24 03:40:52 +00:00 committed by Gitee
commit 685f9256e2
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
6 changed files with 98 additions and 9 deletions

View File

@ -13,7 +13,7 @@ import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
import org.jcnc.jnotepad.controller.ResourceController;
import org.jcnc.jnotepad.controller.config.PluginConfigController;
import org.jcnc.jnotepad.controller.manager.Controller;
import org.jcnc.jnotepad.plugin.PluginManager;
import org.jcnc.jnotepad.plugin.manager.PluginManager;
import org.jcnc.jnotepad.util.UiUtil;
import org.jcnc.jnotepad.views.manager.RootManager;
import org.jcnc.jnotepad.views.manager.SidebarToolBarManager;

View File

@ -9,6 +9,10 @@ import org.jcnc.jnotepad.plugin.interfaces.Plugin;
* @author gewuyou
*/
public class PluginDescriptor {
/**
* 插件id
*/
private String id;
/**
* 插件名称
*/
@ -79,6 +83,29 @@ public class PluginDescriptor {
@JsonIgnore
private Plugin plugin;
public PluginDescriptor() {
}
public PluginDescriptor(PluginDescriptor pluginDescriptor) {
this.id = pluginDescriptor.getId();
this.name = pluginDescriptor.getName();
this.version = pluginDescriptor.getVersion();
this.enabled = pluginDescriptor.isEnabled();
this.author = pluginDescriptor.getAuthor();
this.category = pluginDescriptor.getCategory();
this.icon = pluginDescriptor.getIcon();
this.size = pluginDescriptor.getSize();
this.description = pluginDescriptor.getDescription();
this.detailedIntroduction = pluginDescriptor.getDetailedIntroduction();
this.log = pluginDescriptor.getLog();
this.pluginUrl = pluginDescriptor.getPluginUrl();
this.mainClass = pluginDescriptor.getMainClass();
this.assetFolder = pluginDescriptor.getAssetFolder();
this.readMe = pluginDescriptor.getReadMe();
this.score = pluginDescriptor.getScore();
this.plugin = pluginDescriptor.getPlugin();
}
public String getName() {
return name;
}
@ -206,4 +233,12 @@ public class PluginDescriptor {
public void setScore(Float score) {
this.score = score;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}

View File

@ -5,6 +5,7 @@ import org.jcnc.jnotepad.controller.config.PluginConfigController;
import org.jcnc.jnotepad.exception.AppException;
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
import org.jcnc.jnotepad.plugin.interfaces.Plugin;
import org.jcnc.jnotepad.plugin.manager.PluginManager;
import org.jcnc.jnotepad.util.JsonUtil;
import org.jcnc.jnotepad.util.LogUtil;
import org.slf4j.Logger;

View File

@ -6,6 +6,7 @@ import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import org.jcnc.jnotepad.plugin.manager.PluginManager;
import org.jcnc.jnotepad.ui.dialog.factory.impl.BasicFileChooserFactory;
import org.jcnc.jnotepad.util.LogUtil;
import org.jcnc.jnotepad.util.PopUpUtil;

View File

@ -1,4 +1,4 @@
package org.jcnc.jnotepad.plugin;
package org.jcnc.jnotepad.plugin.manager;
import org.jcnc.jnotepad.common.manager.ThreadPoolManager;
import org.jcnc.jnotepad.controller.config.PluginConfigController;
@ -35,7 +35,12 @@ public class PluginManager {
/**
* 插件信息
*/
private final List<PluginDescriptor> pluginDescriptors = new ArrayList<>();
private List<PluginDescriptor> pluginDescriptors = new ArrayList<>();
/**
* 插件信息临时集合
*/
private List<PluginDescriptor> temporaryPluginDescriptors;
Logger logger = LogUtil.getLogger(this.getClass());
private PluginManager() {
@ -46,6 +51,13 @@ public class PluginManager {
return INSTANCE;
}
/**
* 初始化插件临时集合
*/
public void initializeTemporaryPluginDescriptors() {
temporaryPluginDescriptors = new ArrayList<>(pluginDescriptors.size());
pluginDescriptors.forEach(pluginDescriptor -> temporaryPluginDescriptors.add(new PluginDescriptor(pluginDescriptor)));
}
/**
* 卸载插件
@ -149,6 +161,15 @@ public class PluginManager {
return pluginDescriptors;
}
public List<PluginDescriptor> getTemporaryPluginDescriptors() {
return temporaryPluginDescriptors;
}
public void setTemporaryPluginDescriptors(List<PluginDescriptor> temporaryPluginDescriptors) {
this.temporaryPluginDescriptors = temporaryPluginDescriptors;
}
/**
* 启用插件
*
@ -157,4 +178,26 @@ public class PluginManager {
public void enablePlugIn(PluginDescriptor pluginDescriptor) {
pluginDescriptor.setEnabled(true);
}
/**
* 保存插件设置并退出
*/
public void saveAndExitSettings() {
pluginDescriptors = temporaryPluginDescriptors;
clearTemporarySettings();
}
/**
* 保存插件设置但不退出
*/
public void saveNotExitSettings() {
pluginDescriptors = temporaryPluginDescriptors;
}
/**
* 清除插件临时设置
*/
public void clearTemporarySettings() {
temporaryPluginDescriptors = null;
}
}

View File

@ -25,7 +25,7 @@ import javafx.stage.Stage;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;
import org.jcnc.jnotepad.model.entity.PluginDescriptor;
import org.jcnc.jnotepad.plugin.PluginManager;
import org.jcnc.jnotepad.plugin.manager.PluginManager;
import org.jcnc.jnotepad.ui.module.CustomSetButton;
import org.jcnc.jnotepad.util.LogUtil;
import org.slf4j.Logger;
@ -82,6 +82,8 @@ public class PluginManagementPane extends BorderPane {
* 初始化插件管理面板
*/
private void initialize() {
// 初始化插件临时集合
pluginManager.initializeTemporaryPluginDescriptors();
// 创建选项卡面板
TabPane rootTabPane = new TabPane();
@ -149,18 +151,26 @@ public class PluginManagementPane extends BorderPane {
bottomBox.setPadding(new Insets(7, 15, 7, 0));
Button confirmButton = new Button(" 确认 ");
confirmButton.setTextFill(Color.WHITE);
confirmButton.getStyleClass().addAll(Styles.SMALL);
confirmButton.setStyle("-fx-background-color: rgb(54,88,128);");
confirmButton.setOnAction(event -> {
Stage stage = (Stage) confirmButton.getScene().getWindow();
// 保存设置
pluginManager.saveAndExitSettings();
stage.close();
});
CustomSetButton cancelButton = new CustomSetButton(" 取消 ");
cancelButton.setOnAction(event -> {
Stage stage = (Stage) cancelButton.getScene().getWindow();
// 清空临时集合
pluginManager.clearTemporarySettings();
stage.close();
});
cancelButton.getStyleClass().addAll(Styles.SMALL);
Button applicationButton = new Button(" 应用 ");
applicationButton.getStyleClass().addAll(Styles.SMALL);
applicationButton.setOnAction(event -> pluginManager.saveNotExitSettings());
bottomBox.getChildren().addAll(confirmButton, cancelButton, applicationButton);
this.setBottom(bottomBox);
@ -173,8 +183,8 @@ public class PluginManagementPane extends BorderPane {
*/
private ScrollPane getScrollPane() {
List<Tile> tiles = new ArrayList<>();
pluginManager.getPluginDescriptors().forEach(pluginDescriptor -> tiles.add(createPlugInListItem(pluginDescriptor)));
// 将拷贝的插件信息类添加进列表
pluginManager.getTemporaryPluginDescriptors().forEach(pluginDescriptor -> tiles.add(createPlugInListItem(pluginDescriptor)));
// 创建VBox并将插件列表项添加到其中
var box = new VBox();
@ -195,7 +205,6 @@ public class PluginManagementPane extends BorderPane {
/**
* 创建插件列表项Tile
*
* @return 创建的插件列表项Tile
*/
private Tile createPlugInListItem(PluginDescriptor pluginDescriptor) {