Merge pull request #177 from goaaats/testing_changes

This commit is contained in:
goaaats 2020-10-02 20:54:03 +02:00 committed by GitHub
commit 49dbacdba9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 53 additions and 19 deletions

View file

@ -111,11 +111,7 @@ namespace Dalamud {
else else
this.LocalizationManager.SetupWithUiCulture(); this.LocalizationManager.SetupWithUiCulture();
var pluginDir = this.StartInfo.PluginDirectory; PluginRepository = new PluginRepository(this, this.StartInfo.PluginDirectory, this.StartInfo.GameVersion);
if (this.Configuration.DoPluginTest)
pluginDir = Path.Combine(pluginDir, "..", "testPlugins");
PluginRepository = new PluginRepository(this, pluginDir, this.StartInfo.GameVersion);
var isInterfaceLoaded = false; var isInterfaceLoaded = false;
if (!bool.Parse(Environment.GetEnvironmentVariable("DALAMUD_NOT_HAVE_INTERFACE") ?? "false")) { if (!bool.Parse(Environment.GetEnvironmentVariable("DALAMUD_NOT_HAVE_INTERFACE") ?? "false")) {
@ -160,7 +156,7 @@ namespace Dalamud {
{ {
PluginRepository.CleanupPlugins(); PluginRepository.CleanupPlugins();
PluginManager = new PluginManager(this, pluginDir, this.StartInfo.DefaultPluginDirectory); PluginManager = new PluginManager(this, this.StartInfo.PluginDirectory, this.StartInfo.DefaultPluginDirectory);
PluginManager.LoadPlugins(); PluginManager.LoadPlugins();
} }
catch (Exception ex) catch (Exception ex)

View file

@ -28,6 +28,16 @@ namespace Dalamud.Plugin
/// </summary> /// </summary>
public string AssemblyVersion { get; set; } public string AssemblyVersion { get; set; }
/// <summary>
/// The current testing assembly version of the plugin.
/// </summary>
public string TestingAssemblyVersion { get; set; }
/// <summary>
/// Defines if the plugin is only available for testing.
/// </summary>
public bool IsTestingExclusive { get; set; }
/// <summary> /// <summary>
/// A description of the plugins functions. /// A description of the plugins functions.
/// </summary> /// </summary>

View file

@ -100,8 +100,6 @@ namespace Dalamud.Plugin
didAnyWithSearch = true; didAnyWithSearch = true;
ImGui.PushID(pluginDefinition.InternalName + pluginDefinition.AssemblyVersion);
var isInstalled = this.dalamud.PluginManager.Plugins.Where(x => x.Definition != null).Any( var isInstalled = this.dalamud.PluginManager.Plugins.Where(x => x.Definition != null).Any(
x => x.Definition.InternalName == pluginDefinition.InternalName); x => x.Definition.InternalName == pluginDefinition.InternalName);
@ -116,6 +114,20 @@ namespace Dalamud.Plugin
? Loc.Localize("InstallerUpdateFailed", " (update failed)") ? Loc.Localize("InstallerUpdateFailed", " (update failed)")
: label; : 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;
if (this.dalamud.Configuration.DoPluginTest && pluginDefinition.IsTestingExclusive) {
isTestingAvailable = true;
} else if (!this.dalamud.Configuration.DoPluginTest && pluginDefinition.IsTestingExclusive) {
continue;
}
label += isTestingAvailable ? " (Testing version)" : string.Empty;
ImGui.PushID(pluginDefinition.InternalName + pluginDefinition.AssemblyVersion);
if (ImGui.CollapsingHeader(pluginDefinition.Name + label + "###Header" + pluginDefinition.InternalName)) { if (ImGui.CollapsingHeader(pluginDefinition.Name + label + "###Header" + pluginDefinition.InternalName)) {
ImGui.Indent(); ImGui.Indent();
@ -129,10 +141,12 @@ namespace Dalamud.Plugin
if (this.installStatus == PluginInstallStatus.InProgress) { if (this.installStatus == PluginInstallStatus.InProgress) {
ImGui.Button(Loc.Localize("InstallerInProgress", "Install in progress...")); ImGui.Button(Loc.Localize("InstallerInProgress", "Install in progress..."));
} else { } 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; 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 = this.installStatus =
t.Result ? PluginInstallStatus.Success : PluginInstallStatus.Fail; t.Result ? PluginInstallStatus.Success : PluginInstallStatus.Fail;
this.installStatus = this.installStatus =

View file

@ -14,9 +14,8 @@ namespace Dalamud.Plugin
{ {
internal class PluginRepository 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}&isTesting={2}";
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/master/pluginmaster.json";
private string PluginMasterUrl => "https://raw.githubusercontent.com/goatcorp/DalamudPlugins/" + (this.dalamud.Configuration.DoPluginTest ? "testing/" : "master/") + "pluginmaster.json";
private readonly Dalamud dalamud; 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 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));
@ -98,9 +97,15 @@ namespace Dalamud.Plugin
using var client = new WebClient(); using var client = new WebClient();
var url = this.dalamud.Configuration.DoPluginTest ? PluginRepoBaseUrl : PluginFunctionBaseUrl; var doTestingDownload = false;
url = string.Format(url, definition.InternalName, isUpdate); if ((Version.TryParse(definition.TestingAssemblyVersion, out var testingAssemblyVer) || definition.IsTestingExclusive)
Log.Information("Downloading plugin to {0} from {1}", path, url); && 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);
client.DownloadFile(url, path); client.DownloadFile(url, path);
@ -177,7 +182,16 @@ namespace Dalamud.Plugin
continue; 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); Log.Information("Eligible for update: {0}", remoteInfo.InternalName);
// DisablePlugin() below immediately creates a .disabled file anyway, but will fail // DisablePlugin() below immediately creates a .disabled file anyway, but will fail
@ -211,7 +225,7 @@ namespace Dalamud.Plugin
Log.Error(ex, "Plugin disable old versions failed"); Log.Error(ex, "Plugin disable old versions failed");
} }
var installSuccess = InstallPlugin(remoteInfo, wasEnabled, true); var installSuccess = InstallPlugin(remoteInfo, wasEnabled, true, testingAvailable);
if (!installSuccess) { if (!installSuccess) {
Log.Error("InstallPlugin failed."); Log.Error("InstallPlugin failed.");