mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-14 12:44:16 +01:00
Merge pull request #206 from Aireil/fix_deleting_enabled
Fix avoid deleting enabled plugins
This commit is contained in:
commit
db7ad710f4
1 changed files with 26 additions and 39 deletions
|
|
@ -12,8 +12,7 @@ using Serilog;
|
||||||
|
|
||||||
namespace Dalamud.Plugin
|
namespace Dalamud.Plugin
|
||||||
{
|
{
|
||||||
internal class PluginRepository
|
internal class PluginRepository {
|
||||||
{
|
|
||||||
private string PluginFunctionBaseUrl => "https://us-central1-xl-functions.cloudfunctions.net/download-plugin/?plugin={0}&isUpdate={1}&isTesting={2}";
|
private string PluginFunctionBaseUrl => "https://us-central1-xl-functions.cloudfunctions.net/download-plugin/?plugin={0}&isUpdate={1}&isTesting={2}";
|
||||||
private string PluginMasterUrl => "https://raw.githubusercontent.com/goatcorp/DalamudPlugins/master/pluginmaster.json";
|
private string PluginMasterUrl => "https://raw.githubusercontent.com/goatcorp/DalamudPlugins/master/pluginmaster.json";
|
||||||
|
|
||||||
|
|
@ -31,21 +30,18 @@ namespace Dalamud.Plugin
|
||||||
|
|
||||||
public InitializationState State { get; private set; }
|
public InitializationState State { get; private set; }
|
||||||
|
|
||||||
public PluginRepository(Dalamud dalamud, string pluginDirectory, string gameVersion)
|
public PluginRepository(Dalamud dalamud, string pluginDirectory, string gameVersion) {
|
||||||
{
|
|
||||||
this.dalamud = dalamud;
|
this.dalamud = dalamud;
|
||||||
this.pluginDirectory = pluginDirectory;
|
this.pluginDirectory = pluginDirectory;
|
||||||
|
|
||||||
ReloadPluginMasterAsync();
|
ReloadPluginMasterAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ReloadPluginMasterAsync()
|
public void ReloadPluginMasterAsync() {
|
||||||
{
|
|
||||||
Task.Run(() => {
|
Task.Run(() => {
|
||||||
State = InitializationState.InProgress;
|
State = InitializationState.InProgress;
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
using var client = new WebClient();
|
using var client = new WebClient();
|
||||||
|
|
||||||
var data = client.DownloadString(PluginMasterUrl);
|
var data = client.DownloadString(PluginMasterUrl);
|
||||||
|
|
@ -56,8 +52,7 @@ namespace Dalamud.Plugin
|
||||||
|
|
||||||
State = InitializationState.Success;
|
State = InitializationState.Success;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex) {
|
||||||
{
|
|
||||||
Log.Error(ex, "Could not download PluginMaster");
|
Log.Error(ex, "Could not download PluginMaster");
|
||||||
State = InitializationState.Fail;
|
State = InitializationState.Fail;
|
||||||
}
|
}
|
||||||
|
|
@ -68,16 +63,14 @@ namespace Dalamud.Plugin
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool InstallPlugin(PluginDefinition definition, bool enableAfterInstall = true, bool isUpdate = false, bool fromTesting = false) {
|
public bool InstallPlugin(PluginDefinition definition, bool enableAfterInstall = true, bool isUpdate = false, bool fromTesting = false) {
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
var outputDir = new DirectoryInfo(Path.Combine(this.pluginDirectory, definition.InternalName, fromTesting ? definition.TestingAssemblyVersion : definition.AssemblyVersion));
|
var outputDir = new DirectoryInfo(Path.Combine(this.pluginDirectory, definition.InternalName, fromTesting ? definition.TestingAssemblyVersion : 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 testingFile = new FileInfo(Path.Combine(outputDir.FullName, ".testing"));
|
var testingFile = new FileInfo(Path.Combine(outputDir.FullName, ".testing"));
|
||||||
var wasDisabled = disabledFile.Exists;
|
var wasDisabled = disabledFile.Exists;
|
||||||
|
|
||||||
if (dllFile.Exists && enableAfterInstall)
|
if (dllFile.Exists && enableAfterInstall) {
|
||||||
{
|
|
||||||
if (disabledFile.Exists)
|
if (disabledFile.Exists)
|
||||||
disabledFile.Delete();
|
disabledFile.Delete();
|
||||||
|
|
||||||
|
|
@ -130,8 +123,7 @@ namespace Dalamud.Plugin
|
||||||
|
|
||||||
return this.dalamud.PluginManager.LoadPluginFromAssembly(dllFile, false, PluginLoadReason.Installer);
|
return this.dalamud.PluginManager.LoadPluginFromAssembly(dllFile, false, PluginLoadReason.Installer);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e) {
|
||||||
{
|
|
||||||
Log.Error(e, "Plugin download failed hard.");
|
Log.Error(e, "Plugin download failed hard.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -142,18 +134,15 @@ namespace Dalamud.Plugin
|
||||||
public bool WasUpdated { get; set; }
|
public bool WasUpdated { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public (bool Success, List<PluginUpdateStatus> UpdatedPlugins) UpdatePlugins(bool dryRun = false)
|
public (bool Success, List<PluginUpdateStatus> UpdatedPlugins) UpdatePlugins(bool dryRun = false) {
|
||||||
{
|
|
||||||
Log.Information("Starting plugin update... dry:{0}", dryRun);
|
Log.Information("Starting plugin update... dry:{0}", dryRun);
|
||||||
|
|
||||||
var updatedList = new List<PluginUpdateStatus>();
|
var updatedList = new List<PluginUpdateStatus>();
|
||||||
var hasError = false;
|
var hasError = false;
|
||||||
|
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
var pluginsDirectory = new DirectoryInfo(this.pluginDirectory);
|
var pluginsDirectory = new DirectoryInfo(this.pluginDirectory);
|
||||||
foreach (var installed in pluginsDirectory.GetDirectories())
|
foreach (var installed in pluginsDirectory.GetDirectories()) {
|
||||||
{
|
|
||||||
try {
|
try {
|
||||||
var versions = installed.GetDirectories();
|
var versions = installed.GetDirectories();
|
||||||
|
|
||||||
|
|
@ -162,8 +151,7 @@ namespace Dalamud.Plugin
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var sortedVersions = versions.OrderBy(dirInfo =>
|
var sortedVersions = versions.OrderBy(dirInfo => {
|
||||||
{
|
|
||||||
var success = Version.TryParse(dirInfo.Name, out Version version);
|
var success = Version.TryParse(dirInfo.Name, out Version version);
|
||||||
if (!success) { Log.Debug("Unparseable version: {0}", dirInfo.Name); }
|
if (!success) { Log.Debug("Unparseable version: {0}", dirInfo.Name); }
|
||||||
return version;
|
return version;
|
||||||
|
|
@ -263,8 +251,7 @@ namespace Dalamud.Plugin
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e) {
|
||||||
{
|
|
||||||
Log.Error(e, "Plugin update failed.");
|
Log.Error(e, "Plugin update failed.");
|
||||||
hasError = true;
|
hasError = true;
|
||||||
}
|
}
|
||||||
|
|
@ -275,32 +262,32 @@ namespace Dalamud.Plugin
|
||||||
}
|
}
|
||||||
|
|
||||||
public void CleanupPlugins() {
|
public void CleanupPlugins() {
|
||||||
try
|
try {
|
||||||
{
|
|
||||||
var pluginsDirectory = new DirectoryInfo(this.pluginDirectory);
|
var pluginsDirectory = new DirectoryInfo(this.pluginDirectory);
|
||||||
foreach (var installed in pluginsDirectory.GetDirectories())
|
foreach (var installed in pluginsDirectory.GetDirectories()) {
|
||||||
{
|
|
||||||
var versions = installed.GetDirectories();
|
var versions = installed.GetDirectories();
|
||||||
|
|
||||||
if (versions.Length == 0)
|
if (versions.Length == 0) {
|
||||||
{
|
|
||||||
Log.Information("[PLUGINR] Has no versions: {0}", installed.FullName);
|
Log.Information("[PLUGINR] Has no versions: {0}", installed.FullName);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
var sortedVersions = versions.OrderBy(x => int.Parse(x.Name.Replace(".", ""))).ToArray();
|
var sortedVersions = versions.OrderBy(x => int.Parse(x.Name.Replace(".", ""))).ToArray();
|
||||||
for (var i = 0; i < sortedVersions.Length - 1; i++) {
|
for (var i = 0; i < sortedVersions.Length - 1; i++) {
|
||||||
|
var disabledFile = new FileInfo(Path.Combine(sortedVersions[i].FullName, ".disabled"));
|
||||||
|
if (disabledFile.Exists) {
|
||||||
Log.Information("[PLUGINR] Trying to delete old {0} at {1}", installed.Name, sortedVersions[i].FullName);
|
Log.Information("[PLUGINR] Trying to delete old {0} at {1}", installed.Name, sortedVersions[i].FullName);
|
||||||
try {
|
try {
|
||||||
sortedVersions[i].Delete(true);
|
sortedVersions[i].Delete(true);
|
||||||
} catch (Exception ex) {
|
}
|
||||||
|
catch (Exception ex) {
|
||||||
Log.Error(ex, "[PLUGINR] Could not delete old version");
|
Log.Error(ex, "[PLUGINR] Could not delete old version");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
}
|
||||||
{
|
catch (Exception ex) {
|
||||||
Log.Error(ex, "[PLUGINR] Plugin cleanup failed.");
|
Log.Error(ex, "[PLUGINR] Plugin cleanup failed.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue