1 package edu.jiangxin.apktoolbox.swing.extend.plugin;
2
3 import edu.jiangxin.apktoolbox.swing.extend.listener.IPreChangeMenuCallBack;
4 import org.apache.logging.log4j.LogManager;
5 import org.apache.logging.log4j.Logger;
6
7 import javax.swing.*;
8
9
10
11
12
13
14 public class ChangeMenuPreparePluginController implements IPreparePluginCallback {
15 private static final Logger logger = LogManager.getLogger(ChangeMenuPreparePluginController.class.getSimpleName());
16 private final String pluginFilename;
17 private final boolean isPluginNeedUnzip;
18 private final boolean isPluginNeedUnzipToSeparateDir;
19
20 private final IPreChangeMenuCallBack callBack;
21
22 public static final int RESULT_CHECK_SUCCESS = 0;
23
24 public static final int RESULT_CHECK_ZIP_EXIST = 1;
25
26 public static final int RESULT_CHECK_ZIP_NOT_EXIST = 2;
27
28 public static final int RESULT_DOWNLOAD_SUCCESS = 0;
29
30 public static final int RESULT_DOWNLOAD_FAILED = -1;
31
32 public static final int RESULT_DOWNLOAD_CANCELLED = 1;
33
34 public static final int RESULT_UNZIP_SUCCESS = 0;
35
36 public static final int RESULT_UNZIP_FAILED = -1;
37
38 public static final int RESULT_UNZIP_CANCELLED = 1;
39
40 public ChangeMenuPreparePluginController(String pluginFilename, boolean isPluginNeedUnzip, boolean isPluginNeedUnzipToSeparateDir, IPreChangeMenuCallBack callBack) {
41 this.pluginFilename = pluginFilename;
42 this.isPluginNeedUnzip = isPluginNeedUnzip;
43 this.isPluginNeedUnzipToSeparateDir = isPluginNeedUnzipToSeparateDir;
44 this.callBack = callBack;
45 }
46
47 @Override
48 public void onPrepareStarted() {
49 PluginUtils.checkPlugin(pluginFilename, isPluginNeedUnzip, this);
50 }
51
52 @Override
53 public void onCheckFinished(int result) {
54 switch (result) {
55 case RESULT_CHECK_SUCCESS -> onPrepareFinished();
56 case RESULT_CHECK_ZIP_EXIST -> PluginUtils.unzipPlugin(pluginFilename, isPluginNeedUnzipToSeparateDir, this);
57 case RESULT_CHECK_ZIP_NOT_EXIST -> {
58 int userChoose = JOptionPane.showConfirmDialog(null, "未找到对应插件,是否下载", "提示", JOptionPane.YES_NO_OPTION);
59 if (userChoose == JOptionPane.YES_OPTION) {
60 PluginUtils.downloadPlugin(pluginFilename, this);
61 }
62 }
63 default -> logger.info("onCheckFinished: {}", result);
64 }
65 }
66
67 @Override
68 public void onDownloadFinished(int result) {
69 switch (result) {
70 case RESULT_DOWNLOAD_SUCCESS:
71 if (isPluginNeedUnzip) {
72 PluginUtils.unzipPlugin(pluginFilename, isPluginNeedUnzipToSeparateDir, this);
73 } else {
74 onPrepareFinished();
75 }
76 break;
77 case RESULT_DOWNLOAD_FAILED:
78 JOptionPane.showMessageDialog(null, "下载失败,请检查网络", "错误", JOptionPane.ERROR_MESSAGE);
79 break;
80 case RESULT_DOWNLOAD_CANCELLED:
81 JOptionPane.showMessageDialog(null, "下载取消", "提示", JOptionPane.INFORMATION_MESSAGE);
82 break;
83 default:
84 logger.info("onDownloadFinished: {}", result);
85 break;
86 }
87 }
88
89 @Override
90 public void onUnzipFinished(int result) {
91 switch (result) {
92 case RESULT_UNZIP_SUCCESS -> onPrepareFinished();
93 case RESULT_UNZIP_FAILED -> JOptionPane.showMessageDialog(null, "解压失败", "错误", JOptionPane.ERROR_MESSAGE);
94 case RESULT_UNZIP_CANCELLED -> JOptionPane.showMessageDialog(null, "解压取消", "提示", JOptionPane.INFORMATION_MESSAGE);
95 default -> logger.info("onUnzipFinished: {}", result);
96 }
97 }
98
99 @Override
100 public void onPrepareFinished() {
101 if (callBack != null) {
102 callBack.onPreChangeMenuFinished();
103 }
104 }
105 }