|
|
@@ -33,15 +33,17 @@ class Plugin {
|
|
|
String description;
|
|
|
String icon;
|
|
|
String command;
|
|
|
+ String mode;
|
|
|
List<PluginInput> inputs;
|
|
|
String jsCode;
|
|
|
|
|
|
- public Plugin(String id, String name, String description, String icon, String command, List<PluginInput> inputs, String jsCode) {
|
|
|
+ public Plugin(String id, String name, String description, String icon, String command, String mode, List<PluginInput> inputs, String jsCode) {
|
|
|
this.id = id;
|
|
|
this.name = name;
|
|
|
this.description = description;
|
|
|
this.icon = icon;
|
|
|
this.command = command;
|
|
|
+ this.mode = mode;
|
|
|
this.inputs = inputs;
|
|
|
this.jsCode = jsCode;
|
|
|
}
|
|
|
@@ -66,7 +68,7 @@ public class PluginManager {
|
|
|
installMissingDefaults();
|
|
|
}
|
|
|
|
|
|
- /** 安装缺失的默认插件(每次启动调用) */
|
|
|
+ /** 安装缺失的默认插件(每次启动调用),也更新已存在的默认插件 */
|
|
|
private void installMissingDefaults() {
|
|
|
String[] defaultPlugins;
|
|
|
try {
|
|
|
@@ -77,10 +79,22 @@ public class PluginManager {
|
|
|
if (defaultPlugins == null) return;
|
|
|
|
|
|
boolean anyInstalled = false;
|
|
|
+ long apkInstallTime = -1;
|
|
|
+ try {
|
|
|
+ apkInstallTime = new java.io.File(context.getPackageManager()
|
|
|
+ .getPackageInfo(context.getPackageName(), 0).applicationInfo.sourceDir).lastModified();
|
|
|
+ } catch (Exception ignored) {}
|
|
|
+
|
|
|
for (String filename : defaultPlugins) {
|
|
|
if (!filename.endsWith(".json")) continue;
|
|
|
java.io.File target = new java.io.File(pluginsDir, filename);
|
|
|
+ boolean needsCopy = false;
|
|
|
if (!target.exists()) {
|
|
|
+ needsCopy = true;
|
|
|
+ } else if (apkInstallTime > 0 && apkInstallTime > target.lastModified()) {
|
|
|
+ needsCopy = true; // APK is newer — update the bundled plugin
|
|
|
+ }
|
|
|
+ if (needsCopy) {
|
|
|
try {
|
|
|
copyAsset("plugins/" + filename, target);
|
|
|
anyInstalled = true;
|
|
|
@@ -185,6 +199,7 @@ public class PluginManager {
|
|
|
json.optString("description", ""),
|
|
|
json.optString("icon", "🔌"),
|
|
|
json.optString("command", ""),
|
|
|
+ json.optString("mode", "inline"),
|
|
|
inputs,
|
|
|
json.getString("jsCode")
|
|
|
);
|
|
|
@@ -204,6 +219,7 @@ public class PluginManager {
|
|
|
pluginJson.put("description", plugin.description);
|
|
|
pluginJson.put("icon", plugin.icon);
|
|
|
pluginJson.put("command", plugin.command);
|
|
|
+ pluginJson.put("mode", plugin.mode);
|
|
|
pluginJson.put("jsCode", plugin.jsCode);
|
|
|
|
|
|
JSONArray inputsArray = new JSONArray();
|