Plugins - Reworked bootstrapper

This commit is contained in:
Robert committed 2021-04-30 17:39:58 +02:00
1 parent 5cae14efd3
commit 21700aaad5
13 files changed
+288 -135

No files matched your search

@@ -20,19 +20,19 @@ namespace Artemis.UI.Screens.Plugins
private bool _isFinished;
private CancellationTokenSource _tokenSource;
public PluginPrerequisitesInstallDialogViewModel(object pluginOrFeature, IPrerequisitesVmFactory prerequisitesVmFactory, IDialogService dialogService)
public PluginPrerequisitesInstallDialogViewModel(IPrerequisitesSubject subject, IPrerequisitesVmFactory prerequisitesVmFactory, IDialogService dialogService)
{
_dialogService = dialogService;
// Constructor overloading doesn't work very well with Kernel.Get<T> :(
if (pluginOrFeature is Plugin plugin)
if (subject is PluginInfo plugin)
{
Plugin = plugin;
Prerequisites = new BindableCollection<PluginPrerequisiteViewModel>(plugin.Info.Prerequisites.Select(p => prerequisitesVmFactory.PluginPrerequisiteViewModel(p, false)));
PluginInfo = plugin;
Prerequisites = new BindableCollection<PluginPrerequisiteViewModel>(plugin.Prerequisites.Select(p => prerequisitesVmFactory.PluginPrerequisiteViewModel(p, false)));
}
else if (pluginOrFeature is PluginFeature feature)
else if (subject is PluginFeatureInfo feature)
{
Feature = feature;
Prerequisites = new BindableCollection<PluginPrerequisiteViewModel>(feature.Info.Prerequisites.Select(p => prerequisitesVmFactory.PluginPrerequisiteViewModel(p, false)));
FeatureInfo = feature;
Prerequisites = new BindableCollection<PluginPrerequisiteViewModel>(feature.Prerequisites.Select(p => prerequisitesVmFactory.PluginPrerequisiteViewModel(p, false)));
}
else
throw new ArtemisUIException($"Expected plugin or feature to be passed to {nameof(PluginPrerequisitesInstallDialogViewModel)}");
@@ -42,8 +42,8 @@ namespace Artemis.UI.Screens.Plugins
}
public PluginFeature Feature { get; }
public Plugin Plugin { get; }
public PluginInfo PluginInfo { get; }
public PluginFeatureInfo FeatureInfo { get; }
public BindableCollection<PluginPrerequisiteViewModel> Prerequisites { get; }
public PluginPrerequisiteViewModel ActivePrerequisite
@@ -64,6 +64,9 @@ namespace Artemis.UI.Screens.Plugins
set => SetAndNotify(ref _isFinished, value);
}
public bool IsSubjectPlugin => PluginInfo != null;
public bool IsSubjectFeature => FeatureInfo != null;
#region Overrides of DialogViewModelBase
/// <inheritdoc />
@@ -111,7 +114,7 @@ namespace Artemis.UI.Screens.Plugins
"Confirm",
""
);
await _dialogService.ShowDialog<PluginPrerequisitesInstallDialogViewModel>(new Dictionary<string, object> {{"pluginOrFeature", Plugin}});
await _dialogService.ShowDialog<PluginPrerequisitesInstallDialogViewModel>(new Dictionary<string, object> {{"subject", PluginInfo}});
}
catch (OperationCanceledException)
{
@@ -136,10 +139,10 @@ namespace Artemis.UI.Screens.Plugins
protected override void OnInitialActivate()
{
CanInstall = false;
if (Plugin != null)
Task.Run(() => CanInstall = !Plugin.Info.ArePrerequisitesMet());
if (PluginInfo != null)
Task.Run(() => CanInstall = !PluginInfo.ArePrerequisitesMet());
else
Task.Run(() => CanInstall = !Feature.Info.ArePrerequisitesMet());
Task.Run(() => CanInstall = !FeatureInfo.ArePrerequisitesMet());
base.OnInitialActivate();
}
@@ -22,22 +22,22 @@ namespace Artemis.UI.Screens.Plugins
private bool _isFinished;
private CancellationTokenSource _tokenSource;
public PluginPrerequisitesUninstallDialogViewModel(object pluginOrFeature, IPrerequisitesVmFactory prerequisitesVmFactory, IDialogService dialogService,
public PluginPrerequisitesUninstallDialogViewModel(IPrerequisitesSubject subject, IPrerequisitesVmFactory prerequisitesVmFactory, IDialogService dialogService,
IPluginManagementService pluginManagementService)
{
_dialogService = dialogService;
_pluginManagementService = pluginManagementService;
// Constructor overloading doesn't work very well with Kernel.Get<T> :(
if (pluginOrFeature is Plugin plugin)
if (subject is PluginInfo plugin)
{
Plugin = plugin;
Prerequisites = new BindableCollection<PluginPrerequisiteViewModel>(plugin.Info.Prerequisites.Select(p => prerequisitesVmFactory.PluginPrerequisiteViewModel(p, true)));
PluginInfo = plugin;
Prerequisites = new BindableCollection<PluginPrerequisiteViewModel>(plugin.Prerequisites.Select(p => prerequisitesVmFactory.PluginPrerequisiteViewModel(p, true)));
}
else if (pluginOrFeature is PluginFeature feature)
else if (subject is PluginFeatureInfo feature)
{
Feature = feature;
Prerequisites = new BindableCollection<PluginPrerequisiteViewModel>(feature.Info.Prerequisites.Select(p => prerequisitesVmFactory.PluginPrerequisiteViewModel(p, true)));
FeatureInfo = feature;
Prerequisites = new BindableCollection<PluginPrerequisiteViewModel>(feature.Prerequisites.Select(p => prerequisitesVmFactory.PluginPrerequisiteViewModel(p, true)));
}
else
throw new ArtemisUIException($"Expected plugin or feature to be passed to {nameof(PluginPrerequisitesInstallDialogViewModel)}");
@@ -47,8 +47,8 @@ namespace Artemis.UI.Screens.Plugins
}
public PluginFeature Feature { get; }
public Plugin Plugin { get; }
public PluginFeatureInfo FeatureInfo { get; }
public PluginInfo PluginInfo { get; }
public BindableCollection<PluginPrerequisiteViewModel> Prerequisites { get; }
public PluginPrerequisiteViewModel ActivePrerequisite
@@ -69,6 +69,9 @@ namespace Artemis.UI.Screens.Plugins
set => SetAndNotify(ref _isFinished, value);
}
public bool IsSubjectPlugin => PluginInfo != null;
public bool IsSubjectFeature => FeatureInfo != null;
#region Overrides of DialogViewModelBase
/// <inheritdoc />
@@ -84,7 +87,10 @@ namespace Artemis.UI.Screens.Plugins
{
CanUninstall = false;
_pluginManagementService.DisablePlugin(Plugin, true);
if (PluginInfo != null)
_pluginManagementService.DisablePlugin(PluginInfo.Plugin, true);
else if (FeatureInfo?.Instance != null)
_pluginManagementService.DisablePluginFeature(FeatureInfo.Instance, true);
_tokenSource = new CancellationTokenSource();
try
@@ -118,7 +124,7 @@ namespace Artemis.UI.Screens.Plugins
"Confirm",
""
);
await _dialogService.ShowDialog<PluginPrerequisitesUninstallDialogViewModel>(new Dictionary<string, object> {{"pluginOrFeature", Plugin}});
await _dialogService.ShowDialog<PluginPrerequisitesUninstallDialogViewModel>(new Dictionary<string, object> {{"subject", PluginInfo}});
}
catch (OperationCanceledException)
{
@@ -144,10 +150,10 @@ namespace Artemis.UI.Screens.Plugins
{
CanUninstall = false;
// Could be slow so take it off of the UI thread
if (Plugin != null)
Task.Run(() => CanUninstall = Plugin.Info.Prerequisites.Any(p => p.IsMet()));
if (PluginInfo != null)
Task.Run(() => CanUninstall = PluginInfo.Prerequisites.Any(p => p.IsMet()));
else
Task.Run(() => CanUninstall = Feature.Info.Prerequisites.Any(p => p.IsMet()));
Task.Run(() => CanUninstall = FeatureInfo.Prerequisites.Any(p => p.IsMet()));
base.OnInitialActivate();
}