Skip to content

Commit

Permalink
修复 删除插件后情景缺失插件却提示未启用插件
Browse files Browse the repository at this point in the history
  • Loading branch information
MakesYT committed Aug 27, 2024
1 parent 9ff5669 commit cd0e239
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 45 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ public enum CustomScenarioLoadFromJsonFailedType
{
插件未找到,
插件未启用,
插件正在被卸载需要重启,
方法未找到,
类未找到
}
Expand Down
5 changes: 3 additions & 2 deletions Core/SDKs/CustomScenario/CustomScenarioManger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,18 +63,19 @@ public static void Init()
{
Load(fileInfo);
}

Log.Debug($"加载情景信息完成共{CustomScenarios.Count}情景被识别");
WeakReferenceMessenger.Default.Send("Kitopia_SoftwareStarted", "CustomScenarioTrigger");
}

public static void LoadAll()
public static void Reload()
{
CustomScenarios.Clear();
var info = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "customScenarios");
foreach (var fileInfo in info.GetFiles())
{
Load(fileInfo);
}
Log.Debug($"重载情景信息完成共{CustomScenarios.Count}情景被识别");
}

public static void Load(FileInfo fileInfo)
Expand Down
70 changes: 53 additions & 17 deletions Core/SDKs/Services/Plugin/PluginManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ public static void EnablePluginByInfo(PluginInfo pluginInfoEx)
CustomScenarioManger.ReCheck(true);
}

public static void UnloadPlugin(PluginInfo pluginInfoEx)
public static void UnloadPlugin(PluginInfo pluginInfoEx,bool reloadPluginAndCustomScenarion=true)
{
Plugin.UnloadByPluginInfo(pluginInfoEx.ToPlgString(), out var weakReference);
PluginManager.EnablePlugin.Remove(pluginInfoEx.ToPlgString());
Expand All @@ -111,12 +111,15 @@ public static void UnloadPlugin(PluginInfo pluginInfoEx)
if (weakReference.IsAlive)
{
pluginInfoEx.UnloadFailed = true;
File.Create(
$"{AppDomain.CurrentDomain.BaseDirectory}plugins{Path.DirectorySeparatorChar}{pluginInfoEx.ToPlgString()}{Path.DirectorySeparatorChar}.unload");
}

// Items.ResetBindings();
CustomScenarioManger.LoadAll();
if (reloadPluginAndCustomScenarion)
{
Reload();
CustomScenarioManger.Reload();
}

}

public static void Reload()
Expand All @@ -127,6 +130,7 @@ public static void Reload()
}
AllPluginInfos.Clear();
Load();

}
public enum VersionCheckResult
{
Expand Down Expand Up @@ -264,18 +268,7 @@ public static void Load(bool init=false)
continue;
}

if (File.Exists($"{directoryInfo.FullName}{Path.DirectorySeparatorChar}.unload"))
{
if (init)
{
File.Delete($"{directoryInfo.FullName}{Path.DirectorySeparatorChar}.unload");
}
else
{
continue;
}

}

if (File.Exists($"{directoryInfo.FullName}{Path.DirectorySeparatorChar}manifest.json"))
{
var readAllText = File.ReadAllText($"{directoryInfo.FullName}{Path.DirectorySeparatorChar}manifest.json");
Expand Down Expand Up @@ -315,6 +308,7 @@ public static void Load(bool init=false)
{
DownloadPluginOnline(serialize).Wait();
}
Log.Debug($"加载插件{serialize.Name}信息成功");
if (ConfigManger.Config.EnabledPluginInfos.Any(e => e.ToPlgString()==serialize.ToPlgString()))
{
serialize.IsEnabled = true;
Expand All @@ -327,7 +321,48 @@ public static void Load(bool init=false)
}

}

Log.Debug($"加载插件信息完成共{AllPluginInfos.Count}插件被识别");
}

public static void DeletePlugin(string pluginSignName)
{
DeletePlugin(AllPluginInfos.FirstOrDefault(e=>e.NameSign==pluginSignName));
}
public static void DeletePlugin(PluginInfo pluginInfoEx)
{
var dialog = new DialogContent()
{
Title = $"删除{pluginInfoEx.Name}?",
Content = "是否确定删除?\n他真的会丢失很久很久(不可恢复)",
PrimaryButtonText = "确定",
CloseButtonText = "取消",
PrimaryAction = () =>
{
DeletePluginWithoutCheck(pluginInfoEx);
}
};
((IContentDialog)ServiceManager.Services!.GetService(typeof(IContentDialog))!).ShowDialogAsync(null,
dialog);
}

public static void DeletePluginWithoutCheck(PluginInfo pluginInfoEx)
{
Log.Debug($"删除插件{pluginInfoEx.Name}");
PluginManager.UnloadPlugin(pluginInfoEx,false);
if (!pluginInfoEx.UnloadFailed)
{
var pluginsDirectoryInfo = new DirectoryInfo($"{AppDomain.CurrentDomain.BaseDirectory}plugins{Path.DirectorySeparatorChar}{pluginInfoEx.ToPlgString()}");
pluginsDirectoryInfo.Delete(true);
Task.Run(PluginManager.Reload);
}
else
{
File.Create(
$"{AppDomain.CurrentDomain.BaseDirectory}plugins{Path.DirectorySeparatorChar}{pluginInfoEx.ToPlgString()}{Path.DirectorySeparatorChar}.remove");
Task.Run(PluginManager.Reload);
}
Reload();
CustomScenarioManger.Reload();
}

public static async Task<OnlinePluginInfo> GetOnlinePluginInfo(int id)
Expand Down Expand Up @@ -424,6 +459,7 @@ private static async Task<bool> DownloadPlugin(int id,object versionId,string pl
{
try
{
Log.Debug( $"从服务器下载插件{plugin}(ID:{id})版本{versionId}");
var streamAsync =await _httpClient.GetStreamAsync($"https://www.ncserver.top:5111/api/plugin/download/1/{id}/{versionId}");
Directory.CreateDirectory(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "temp"));
var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "temp",$"{plugin}.zip");
Expand Down
26 changes: 1 addition & 25 deletions Core/ViewModel/Pages/plugin/PluginManagerPageViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -54,31 +54,7 @@ private void RestartApp()
[RelayCommand]
private void Delete(PluginInfo pluginInfoEx)
{
var dialog = new DialogContent()
{
Title = $"删除{pluginInfoEx.Name}?",
Content = "是否确定删除?\n他真的会丢失很久很久(不可恢复)",
PrimaryButtonText = "确定",
CloseButtonText = "取消",
PrimaryAction = () =>
{
PluginManager.UnloadPlugin(pluginInfoEx);
if (!pluginInfoEx.UnloadFailed)
{
var pluginsDirectoryInfo = new DirectoryInfo($"{AppDomain.CurrentDomain.BaseDirectory}plugins{Path.DirectorySeparatorChar}{pluginInfoEx.ToPlgString()}");
pluginsDirectoryInfo.Delete(true);
Task.Run(PluginManager.Reload);
}
else
{
File.Create(
$"{AppDomain.CurrentDomain.BaseDirectory}plugins{Path.DirectorySeparatorChar}{pluginInfoEx.ToPlgString()}{Path.DirectorySeparatorChar}.remove");
Task.Run(PluginManager.Reload);
}
}
};
((IContentDialog)ServiceManager.Services!.GetService(typeof(IContentDialog))!).ShowDialogAsync(null,
dialog);
PluginManager.DeletePlugin(pluginInfoEx);


}
Expand Down
2 changes: 1 addition & 1 deletion KitopiaEx/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"AuthorName": "Kitopia",
"AuthorId" : 7,
"Name": "Kitopia拓展",
"NameSign" : "KitopiaEx",
"NameSign" : "kitopiaex",
"IsPublic": true,
"Version": "1.0.0",
"VersionId": 1,
Expand Down

0 comments on commit cd0e239

Please sign in to comment.