mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-12 11:56:30 +00:00
Plugins - Reworked bootstrapper
This commit is contained in:
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();
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user