fix: don't reenable updated plugins automatically

This commit is contained in:
goat 2020-04-27 14:36:00 +02:00
parent 845a5908b2
commit 48fcebfe12

View file

@ -58,14 +58,15 @@ namespace Dalamud.Plugin
} }
} }
public bool InstallPlugin(PluginDefinition definition) { public bool InstallPlugin(PluginDefinition definition, bool enableAfterInstall = true) {
try try
{ {
var outputDir = new DirectoryInfo(Path.Combine(this.pluginDirectory, definition.InternalName, definition.AssemblyVersion)); var outputDir = new DirectoryInfo(Path.Combine(this.pluginDirectory, definition.InternalName, definition.AssemblyVersion));
var dllFile = new FileInfo(Path.Combine(outputDir.FullName, $"{definition.InternalName}.dll")); var dllFile = new FileInfo(Path.Combine(outputDir.FullName, $"{definition.InternalName}.dll"));
var disabledFile = new FileInfo(Path.Combine(outputDir.FullName, ".disabled")); var disabledFile = new FileInfo(Path.Combine(outputDir.FullName, ".disabled"));
var wasDisabled = disabledFile.Exists;
if (dllFile.Exists) if (dllFile.Exists && enableAfterInstall)
{ {
if (disabledFile.Exists) if (disabledFile.Exists)
disabledFile.Delete(); disabledFile.Delete();
@ -73,9 +74,17 @@ namespace Dalamud.Plugin
return this.manager.LoadPluginFromAssembly(dllFile, false); return this.manager.LoadPluginFromAssembly(dllFile, false);
} }
if (outputDir.Exists) if (dllFile.Exists && !enableAfterInstall) {
outputDir.Delete(true); return true;
outputDir.Create(); }
try {
if (outputDir.Exists)
outputDir.Delete(true);
outputDir.Create();
} catch {
// ignored, since the plugin may be loaded already
}
var path = Path.GetTempFileName(); var path = Path.GetTempFileName();
Log.Information("Downloading plugin to {0}", path); Log.Information("Downloading plugin to {0}", path);
@ -86,6 +95,11 @@ namespace Dalamud.Plugin
ZipFile.ExtractToDirectory(path, outputDir.FullName); ZipFile.ExtractToDirectory(path, outputDir.FullName);
if (wasDisabled || !enableAfterInstall) {
disabledFile.Create();
return true;
}
return this.manager.LoadPluginFromAssembly(dllFile, false); return this.manager.LoadPluginFromAssembly(dllFile, false);
} }
catch (Exception e) catch (Exception e)
@ -145,6 +159,12 @@ namespace Dalamud.Plugin
if (!dryRun) if (!dryRun)
{ {
var wasEnabled =
this.manager.Plugins.Where(x => x.Definition != null).Any(
x => x.Definition.InternalName == info.InternalName); ;
Log.Verbose("wasEnabled: {0}", wasEnabled);
// Try to disable plugin if it is loaded // Try to disable plugin if it is loaded
try try
{ {
@ -153,7 +173,7 @@ namespace Dalamud.Plugin
catch (Exception ex) catch (Exception ex)
{ {
Log.Error(ex, "Plugin disable failed"); Log.Error(ex, "Plugin disable failed");
hasError = true; //hasError = true;
} }
try { try {
@ -165,10 +185,10 @@ namespace Dalamud.Plugin
disabledFile.Create(); disabledFile.Create();
} }
} catch (Exception ex) { } catch (Exception ex) {
Log.Error(ex, "Plugin disable failed"); Log.Error(ex, "Plugin disable old versions failed");
} }
var installSuccess = InstallPlugin(remoteInfo); var installSuccess = InstallPlugin(remoteInfo, wasEnabled);
if (installSuccess) if (installSuccess)
{ {