From a6547f827344f27cb5a19f42ba13299307bfc1d1 Mon Sep 17 00:00:00 2001
From: goat <16760685+goaaats@users.noreply.github.com>
Date: Fri, 25 Sep 2020 18:54:15 +0200
Subject: [PATCH 1/6] only use one plugin directory again
---
Dalamud/Dalamud.cs | 6 +-----
1 file changed, 1 insertion(+), 5 deletions(-)
diff --git a/Dalamud/Dalamud.cs b/Dalamud/Dalamud.cs
index 667df8076..f6c1a9186 100644
--- a/Dalamud/Dalamud.cs
+++ b/Dalamud/Dalamud.cs
@@ -111,11 +111,7 @@ namespace Dalamud {
else
this.LocalizationManager.SetupWithUiCulture();
- var pluginDir = this.StartInfo.PluginDirectory;
- if (this.Configuration.DoPluginTest)
- pluginDir = Path.Combine(pluginDir, "..", "testPlugins");
-
- PluginRepository = new PluginRepository(this, pluginDir, this.StartInfo.GameVersion);
+ PluginRepository = new PluginRepository(this, this.StartInfo.PluginDirectory, this.StartInfo.GameVersion);
var isInterfaceLoaded = false;
if (!bool.Parse(Environment.GetEnvironmentVariable("DALAMUD_NOT_HAVE_INTERFACE") ?? "false")) {
From 3bd53590f1a515ebab0d8624325d118e8bd47b75 Mon Sep 17 00:00:00 2001
From: goat <16760685+goaaats@users.noreply.github.com>
Date: Fri, 2 Oct 2020 13:16:20 +0200
Subject: [PATCH 2/6] feat: implement new testing mode
---
Dalamud/Dalamud.cs | 2 +-
Dalamud/Plugin/PluginDefinition.cs | 5 +++++
Dalamud/Plugin/PluginInstallerWindow.cs | 12 +++++++++--
Dalamud/Plugin/PluginRepository.cs | 27 ++++++++++++++++---------
4 files changed, 34 insertions(+), 12 deletions(-)
diff --git a/Dalamud/Dalamud.cs b/Dalamud/Dalamud.cs
index f6c1a9186..04f1e8e95 100644
--- a/Dalamud/Dalamud.cs
+++ b/Dalamud/Dalamud.cs
@@ -156,7 +156,7 @@ namespace Dalamud {
{
PluginRepository.CleanupPlugins();
- PluginManager = new PluginManager(this, pluginDir, this.StartInfo.DefaultPluginDirectory);
+ PluginManager = new PluginManager(this, this.StartInfo.PluginDirectory, this.StartInfo.DefaultPluginDirectory);
PluginManager.LoadPlugins();
}
catch (Exception ex)
diff --git a/Dalamud/Plugin/PluginDefinition.cs b/Dalamud/Plugin/PluginDefinition.cs
index 60dae3864..74737e097 100644
--- a/Dalamud/Plugin/PluginDefinition.cs
+++ b/Dalamud/Plugin/PluginDefinition.cs
@@ -28,6 +28,11 @@ namespace Dalamud.Plugin
///
public string AssemblyVersion { get; set; }
+ ///
+ /// The current testing assembly version of the plugin.
+ ///
+ public string TestingAssemblyVersion { get; set; }
+
///
/// A description of the plugins functions.
///
diff --git a/Dalamud/Plugin/PluginInstallerWindow.cs b/Dalamud/Plugin/PluginInstallerWindow.cs
index 30068b3fc..196619996 100644
--- a/Dalamud/Plugin/PluginInstallerWindow.cs
+++ b/Dalamud/Plugin/PluginInstallerWindow.cs
@@ -116,6 +116,12 @@ namespace Dalamud.Plugin
? Loc.Localize("InstallerUpdateFailed", " (update failed)")
: label;
+ var isTestingAvailable = false;
+ if (Version.TryParse(pluginDefinition.AssemblyVersion, out var assemblyVersion) && Version.TryParse(pluginDefinition.TestingAssemblyVersion, out var testingAssemblyVersion))
+ isTestingAvailable = this.dalamud.Configuration.DoPluginTest && testingAssemblyVersion > assemblyVersion;
+
+ label += isTestingAvailable ? " (Testing version)" : string.Empty;
+
if (ImGui.CollapsingHeader(pluginDefinition.Name + label + "###Header" + pluginDefinition.InternalName)) {
ImGui.Indent();
@@ -129,10 +135,12 @@ namespace Dalamud.Plugin
if (this.installStatus == PluginInstallStatus.InProgress) {
ImGui.Button(Loc.Localize("InstallerInProgress", "Install in progress..."));
} else {
- if (ImGui.Button($"Install v{pluginDefinition.AssemblyVersion}")) {
+ var versionString = isTestingAvailable ? (pluginDefinition.TestingAssemblyVersion + " (Testing version)") : pluginDefinition.AssemblyVersion;
+
+ if (ImGui.Button($"Install v{versionString}")) {
this.installStatus = PluginInstallStatus.InProgress;
- Task.Run(() => this.dalamud.PluginRepository.InstallPlugin(pluginDefinition)).ContinueWith(t => {
+ Task.Run(() => this.dalamud.PluginRepository.InstallPlugin(pluginDefinition, true, false, isTestingAvailable)).ContinueWith(t => {
this.installStatus =
t.Result ? PluginInstallStatus.Success : PluginInstallStatus.Fail;
this.installStatus =
diff --git a/Dalamud/Plugin/PluginRepository.cs b/Dalamud/Plugin/PluginRepository.cs
index 0d98ee229..9ab463d69 100644
--- a/Dalamud/Plugin/PluginRepository.cs
+++ b/Dalamud/Plugin/PluginRepository.cs
@@ -14,9 +14,8 @@ namespace Dalamud.Plugin
{
internal class PluginRepository
{
- private string PluginRepoBaseUrl => "https://raw.githubusercontent.com/goatcorp/DalamudPlugins/testing/plugins/{0}/latest.zip";
- private string PluginFunctionBaseUrl => "https://us-central1-xl-functions.cloudfunctions.net/download-plugin/?plugin={0}&isUpdate={1}";
- private string PluginMasterUrl => "https://raw.githubusercontent.com/goatcorp/DalamudPlugins/" + (this.dalamud.Configuration.DoPluginTest ? "testing/" : "master/") + "pluginmaster.json";
+ 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 readonly Dalamud dalamud;
@@ -66,7 +65,7 @@ namespace Dalamud.Plugin
});
}
- public bool InstallPlugin(PluginDefinition definition, bool enableAfterInstall = true, bool isUpdate = false) {
+ public bool InstallPlugin(PluginDefinition definition, bool enableAfterInstall = true, bool isUpdate = false, bool fromTesting = false) {
try
{
var outputDir = new DirectoryInfo(Path.Combine(this.pluginDirectory, definition.InternalName, definition.AssemblyVersion));
@@ -98,9 +97,10 @@ namespace Dalamud.Plugin
using var client = new WebClient();
- var url = this.dalamud.Configuration.DoPluginTest ? PluginRepoBaseUrl : PluginFunctionBaseUrl;
- url = string.Format(url, definition.InternalName, isUpdate);
- Log.Information("Downloading plugin to {0} from {1}", path, url);
+ var doTestingDownload = fromTesting && Version.Parse(definition.TestingAssemblyVersion) > Version.Parse(definition.AssemblyVersion);
+ var url = string.Format(PluginFunctionBaseUrl, definition.InternalName, isUpdate, doTestingDownload);
+
+ Log.Information("Downloading plugin to {0} from {1} doTestingDownload: {2}", path, url, doTestingDownload);
client.DownloadFile(url, path);
@@ -177,7 +177,16 @@ namespace Dalamud.Plugin
continue;
}
- if (remoteInfo.AssemblyVersion != info.AssemblyVersion) {
+ Version.TryParse(remoteInfo.AssemblyVersion, out Version remoteAssemblyVer);
+ Version.TryParse(info.AssemblyVersion, out Version localAssemblyVer);
+
+ var testingAvailable = false;
+ if (!string.IsNullOrEmpty(remoteInfo.TestingAssemblyVersion)) {
+ Version.TryParse(remoteInfo.TestingAssemblyVersion, out var testingAssemblyVer);
+ testingAvailable = testingAssemblyVer > localAssemblyVer && this.dalamud.Configuration.DoPluginTest;
+ }
+
+ if (remoteAssemblyVer > localAssemblyVer || testingAvailable) {
Log.Information("Eligible for update: {0}", remoteInfo.InternalName);
// DisablePlugin() below immediately creates a .disabled file anyway, but will fail
@@ -211,7 +220,7 @@ namespace Dalamud.Plugin
Log.Error(ex, "Plugin disable old versions failed");
}
- var installSuccess = InstallPlugin(remoteInfo, wasEnabled, true);
+ var installSuccess = InstallPlugin(remoteInfo, wasEnabled, true, testingAvailable);
if (!installSuccess) {
Log.Error("InstallPlugin failed.");
From 74ea78cab1cde091edb1c1ad398638c8341e926c Mon Sep 17 00:00:00 2001
From: goat <16760685+goaaats@users.noreply.github.com>
Date: Fri, 2 Oct 2020 16:20:48 +0200
Subject: [PATCH 3/6] feat: implement IsTestingExclusive
---
Dalamud/Plugin/PluginDefinition.cs | 5 +++++
Dalamud/Plugin/PluginInstallerWindow.cs | 10 ++++++++--
Dalamud/Plugin/PluginRepository.cs | 4 ++--
3 files changed, 15 insertions(+), 4 deletions(-)
diff --git a/Dalamud/Plugin/PluginDefinition.cs b/Dalamud/Plugin/PluginDefinition.cs
index 74737e097..8d876ab06 100644
--- a/Dalamud/Plugin/PluginDefinition.cs
+++ b/Dalamud/Plugin/PluginDefinition.cs
@@ -33,6 +33,11 @@ namespace Dalamud.Plugin
///
public string TestingAssemblyVersion { get; set; }
+ ///
+ /// Defines if the plugin is only available for testing.
+ ///
+ public bool IsTestingExclusive { get; set; }
+
///
/// A description of the plugins functions.
///
diff --git a/Dalamud/Plugin/PluginInstallerWindow.cs b/Dalamud/Plugin/PluginInstallerWindow.cs
index 196619996..4b2e0a237 100644
--- a/Dalamud/Plugin/PluginInstallerWindow.cs
+++ b/Dalamud/Plugin/PluginInstallerWindow.cs
@@ -100,8 +100,6 @@ namespace Dalamud.Plugin
didAnyWithSearch = true;
- ImGui.PushID(pluginDefinition.InternalName + pluginDefinition.AssemblyVersion);
-
var isInstalled = this.dalamud.PluginManager.Plugins.Where(x => x.Definition != null).Any(
x => x.Definition.InternalName == pluginDefinition.InternalName);
@@ -120,8 +118,16 @@ namespace Dalamud.Plugin
if (Version.TryParse(pluginDefinition.AssemblyVersion, out var assemblyVersion) && Version.TryParse(pluginDefinition.TestingAssemblyVersion, out var testingAssemblyVersion))
isTestingAvailable = this.dalamud.Configuration.DoPluginTest && testingAssemblyVersion > assemblyVersion;
+ if (this.dalamud.Configuration.DoPluginTest && pluginDefinition.IsTestingExclusive) {
+ isTestingAvailable = true;
+ } else {
+ continue;
+ }
+
label += isTestingAvailable ? " (Testing version)" : string.Empty;
+ ImGui.PushID(pluginDefinition.InternalName + pluginDefinition.AssemblyVersion);
+
if (ImGui.CollapsingHeader(pluginDefinition.Name + label + "###Header" + pluginDefinition.InternalName)) {
ImGui.Indent();
diff --git a/Dalamud/Plugin/PluginRepository.cs b/Dalamud/Plugin/PluginRepository.cs
index 9ab463d69..0202411a7 100644
--- a/Dalamud/Plugin/PluginRepository.cs
+++ b/Dalamud/Plugin/PluginRepository.cs
@@ -97,10 +97,10 @@ namespace Dalamud.Plugin
using var client = new WebClient();
- var doTestingDownload = fromTesting && Version.Parse(definition.TestingAssemblyVersion) > Version.Parse(definition.AssemblyVersion);
+ var doTestingDownload = fromTesting && Version.Parse(definition.TestingAssemblyVersion) > Version.Parse(definition.AssemblyVersion) || fromTesting && definition.IsTestingExclusive;
var url = string.Format(PluginFunctionBaseUrl, definition.InternalName, isUpdate, doTestingDownload);
- Log.Information("Downloading plugin to {0} from {1} doTestingDownload: {2}", path, url, doTestingDownload);
+ Log.Information("Downloading plugin to {0} from {1} doTestingDownload: {2} isTestingExclusive:", path, url, doTestingDownload, definition.IsTestingExclusive);
client.DownloadFile(url, path);
From df42113992ef6b04844ea86edc94f2faa035a8cc Mon Sep 17 00:00:00 2001
From: goat <16760685+goaaats@users.noreply.github.com>
Date: Fri, 2 Oct 2020 16:22:10 +0200
Subject: [PATCH 4/6] fix: correct logging
---
Dalamud/Plugin/PluginRepository.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Dalamud/Plugin/PluginRepository.cs b/Dalamud/Plugin/PluginRepository.cs
index 0202411a7..83a971189 100644
--- a/Dalamud/Plugin/PluginRepository.cs
+++ b/Dalamud/Plugin/PluginRepository.cs
@@ -100,7 +100,7 @@ namespace Dalamud.Plugin
var doTestingDownload = fromTesting && Version.Parse(definition.TestingAssemblyVersion) > Version.Parse(definition.AssemblyVersion) || fromTesting && definition.IsTestingExclusive;
var url = string.Format(PluginFunctionBaseUrl, definition.InternalName, isUpdate, doTestingDownload);
- Log.Information("Downloading plugin to {0} from {1} doTestingDownload: {2} isTestingExclusive:", path, url, doTestingDownload, definition.IsTestingExclusive);
+ Log.Information("Downloading plugin to {0} from {1} doTestingDownload:{2} isTestingExclusive:{3}", path, url, doTestingDownload, definition.IsTestingExclusive);
client.DownloadFile(url, path);
From 5a9f45c5bbb1d78c7565fa3e8246edd2e69ccb4d Mon Sep 17 00:00:00 2001
From: goat <16760685+goaaats@users.noreply.github.com>
Date: Fri, 2 Oct 2020 16:29:08 +0200
Subject: [PATCH 5/6] fix: only hide testing plugins if testing is unavailable
---
Dalamud/Plugin/PluginInstallerWindow.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Dalamud/Plugin/PluginInstallerWindow.cs b/Dalamud/Plugin/PluginInstallerWindow.cs
index 4b2e0a237..9fb81cc3c 100644
--- a/Dalamud/Plugin/PluginInstallerWindow.cs
+++ b/Dalamud/Plugin/PluginInstallerWindow.cs
@@ -120,7 +120,7 @@ namespace Dalamud.Plugin
if (this.dalamud.Configuration.DoPluginTest && pluginDefinition.IsTestingExclusive) {
isTestingAvailable = true;
- } else {
+ } else if (!this.dalamud.Configuration.DoPluginTest && pluginDefinition.IsTestingExclusive) {
continue;
}
From 770363e2d25ced88f922caddbdb2b7aaf6cf79ba Mon Sep 17 00:00:00 2001
From: goat <16760685+goaaats@users.noreply.github.com>
Date: Fri, 2 Oct 2020 16:48:10 +0200
Subject: [PATCH 6/6] fix: NullRef when installing normal plugins
---
Dalamud/Plugin/PluginRepository.cs | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/Dalamud/Plugin/PluginRepository.cs b/Dalamud/Plugin/PluginRepository.cs
index 83a971189..d82917bd1 100644
--- a/Dalamud/Plugin/PluginRepository.cs
+++ b/Dalamud/Plugin/PluginRepository.cs
@@ -97,7 +97,12 @@ namespace Dalamud.Plugin
using var client = new WebClient();
- var doTestingDownload = fromTesting && Version.Parse(definition.TestingAssemblyVersion) > Version.Parse(definition.AssemblyVersion) || fromTesting && definition.IsTestingExclusive;
+ var doTestingDownload = false;
+ if ((Version.TryParse(definition.TestingAssemblyVersion, out var testingAssemblyVer) || definition.IsTestingExclusive)
+ && fromTesting) {
+ doTestingDownload = testingAssemblyVer > Version.Parse(definition.AssemblyVersion) || definition.IsTestingExclusive;
+ }
+
var url = string.Format(PluginFunctionBaseUrl, definition.InternalName, isUpdate, doTestingDownload);
Log.Information("Downloading plugin to {0} from {1} doTestingDownload:{2} isTestingExclusive:{3}", path, url, doTestingDownload, definition.IsTestingExclusive);