diff --git a/CHANGELOG.MD b/CHANGELOG.MD index 9e753e5..60ff54f 100644 --- a/CHANGELOG.MD +++ b/CHANGELOG.MD @@ -253,5 +253,7 @@ Others: ## 1.5 更新内容: +- [important] 提供MacOS的APP版本 #141 - [important] [feat] 支持拖拽xray文件加载 #140 -- [bug] CPU占用较高问题RAD修复不完善 #139 \ No newline at end of file +- [bug] CPU占用较高问题RAD修复不完善 #139 +- [feat] 增加一键修复/还原的功能 #143 \ No newline at end of file diff --git a/src/main/java/com/chaitin/xray/form/MainForm.java b/src/main/java/com/chaitin/xray/form/MainForm.java index 0c100be..fd54f09 100644 --- a/src/main/java/com/chaitin/xray/form/MainForm.java +++ b/src/main/java/com/chaitin/xray/form/MainForm.java @@ -1990,6 +1990,67 @@ private static JMenu createAboutMenu() { } }); + JMenuItem repairItem = new JMenuItem("自动修复"); + is = MainForm.class.getClassLoader().getResourceAsStream("fix.png"); + if (is == null) { + return null; + } + imageIcon = new ImageIcon(ImageIO.read(is)); + repairItem.setIcon(imageIcon); + aboutMenu.add(repairItem); + + repairItem.addActionListener(e -> { + int i = JOptionPane.showConfirmDialog(instance.SuperXray, + "修复将会删除所有相关的数据,你确定吗?"); + if (i == 2 || i == 1) { + return; + } + + instance.outputTextArea.setText(null); + + instance.outputTextArea.append("正在停止所有进程...\n"); + + instance.stop = true; + if (instance.radInstance != null) { + instance.radInstance.stop = true; + } + if (instance.subdomainInstance != null) { + instance.subdomainInstance.stop = true; + } + if (instance.ajpInstance != null) { + instance.ajpInstance.stop = true; + } + try { + Thread.sleep(1000); + } catch (Exception ignored) { + } + + String p = instance.xrayPathTextField.getText(); + if (StringUtil.notEmpty(p)) { + instance.outputTextArea.append("删除xray临时文件...\n"); + String tp = Paths.get(p).toFile().getParent(); + XrayUtil.rmAllConfig(tp); + try { + Files.delete(Paths.get(tp + Const.ConfigYaml)); + } catch (Exception ignored) { + } + } + + try { + instance.outputTextArea.append("删除xray配置文件...\n"); + Files.delete(Paths.get(Const.ConfigYaml)); + } catch (Exception ignored) { + } + + try { + instance.outputTextArea.append("删除保存的数据...\n"); + Files.delete(Paths.get(Const.DBFile)); + } catch (Exception ignored) { + } + + instance.outputTextArea.append("修复完毕请重启...\n"); + }); + return aboutMenu; } catch (Exception ex) { return null; diff --git a/src/main/java/com/chaitin/xray/model/Const.java b/src/main/java/com/chaitin/xray/model/Const.java index 6a6e3cd..76a5b7d 100644 --- a/src/main/java/com/chaitin/xray/model/Const.java +++ b/src/main/java/com/chaitin/xray/model/Const.java @@ -14,4 +14,5 @@ public interface Const { String XrayYaml = String.format(".%s%s", File.separator, "xray.yaml"); String PluginXrayYaml = String.format(".%s%s", File.separator, "plugin.xray.yaml"); String ConfigYaml = String.format(".%s%s", File.separator, "config.yaml"); + String DBFile = String.format(".%s%s", File.separator, "super-xray.db"); } diff --git a/src/main/resources/fix.png b/src/main/resources/fix.png new file mode 100644 index 0000000..59fab06 Binary files /dev/null and b/src/main/resources/fix.png differ