diff --git a/src/Artemis.UI/Screens/Plugins/Dialogs/PluginPrerequisitesInstallDialogView.axaml b/src/Artemis.UI/Screens/Plugins/Dialogs/PluginPrerequisitesInstallDialogView.axaml index efa8af53e..6961ac1be 100644 --- a/src/Artemis.UI/Screens/Plugins/Dialogs/PluginPrerequisitesInstallDialogView.axaml +++ b/src/Artemis.UI/Screens/Plugins/Dialogs/PluginPrerequisitesInstallDialogView.axaml @@ -7,7 +7,8 @@ xmlns:prerequisites="clr-namespace:Artemis.UI.Screens.Plugins.Prerequisites" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Artemis.UI.Screens.Plugins.PluginPrerequisitesInstallDialogView" - x:DataType="plugins:PluginPrerequisitesInstallDialogViewModel"> + x:DataType="plugins:PluginPrerequisitesInstallDialogViewModel" + Width="800"> - + diff --git a/src/Artemis.UI/Screens/Plugins/Dialogs/PluginPrerequisitesUninstallDialogView.axaml b/src/Artemis.UI/Screens/Plugins/Dialogs/PluginPrerequisitesUninstallDialogView.axaml index 3ba9bec0c..6d3cfcd84 100644 --- a/src/Artemis.UI/Screens/Plugins/Dialogs/PluginPrerequisitesUninstallDialogView.axaml +++ b/src/Artemis.UI/Screens/Plugins/Dialogs/PluginPrerequisitesUninstallDialogView.axaml @@ -7,7 +7,8 @@ xmlns:prerequisites="clr-namespace:Artemis.UI.Screens.Plugins.Prerequisites" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Artemis.UI.Screens.Plugins.PluginPrerequisitesUninstallDialogView" - x:DataType="plugins:PluginPrerequisitesUninstallDialogViewModel"> + x:DataType="plugins:PluginPrerequisitesUninstallDialogViewModel" + Width="800"> - + diff --git a/src/Artemis.UI/Screens/StartupWizard/StartupWizardView.axaml b/src/Artemis.UI/Screens/StartupWizard/StartupWizardView.axaml index 67286303f..c83c28447 100644 --- a/src/Artemis.UI/Screens/StartupWizard/StartupWizardView.axaml +++ b/src/Artemis.UI/Screens/StartupWizard/StartupWizardView.axaml @@ -11,7 +11,7 @@ x:DataType="startupWizard:StartupWizardViewModel" Icon="/Assets/Images/Logo/application.ico" Title="Artemis | Startup wizard" - Width="1000" + Width="1050" Height="735" WindowStartupLocation="CenterOwner"> diff --git a/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntriesStepView.axaml b/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntriesStepView.axaml index 7133784ca..55ef5da1b 100644 --- a/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntriesStepView.axaml +++ b/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntriesStepView.axaml @@ -6,53 +6,61 @@ mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Artemis.UI.Screens.StartupWizard.Steps.DefaultEntriesStepView" x:DataType="steps:DefaultEntriesStepViewModel"> - - - - - - Below is a list of default features that can be installed to get you started with Artemis. You can always install or uninstall features later via the Workshop. - + + + + + Below is a list of default features that can be installed to get you started with Artemis. You can always install or uninstall features later via the Workshop. + - - Device providers - - - - - - - - + - - Essentials - - - - - - - - + + + + Device providers + + + + + + + + - - Other features - - - - - - - - - - - - - + + Essentials + + + + + + + + + + + Other features + + + + + + + + + + + + + + + + Currently installing + + + + + + \ No newline at end of file diff --git a/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntriesStepViewModel.cs b/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntriesStepViewModel.cs index 1d0224a5f..073a797ad 100644 --- a/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntriesStepViewModel.cs +++ b/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntriesStepViewModel.cs @@ -20,10 +20,11 @@ public partial class DefaultEntriesStepViewModel : WizardStepViewModel { [Notify] private bool _workshopReachable; [Notify] private bool _fetchingDefaultEntries; - [Notify] private bool _installed; - [Notify] private int _currentEntries; + [Notify] private int _installedEntries; [Notify] private int _totalEntries = 1; + [Notify] private DefaultEntryItemViewModel? _currentEntry; + private readonly IDeviceService _deviceService; private readonly IWorkshopClient _client; private readonly Func _getDefaultEntryItemViewModel; @@ -34,24 +35,17 @@ public partial class DefaultEntriesStepViewModel : WizardStepViewModel public DefaultEntriesStepViewModel(IWorkshopService workshopService, IDeviceService deviceService, IWorkshopClient client, Func getDefaultEntryItemViewModel) { + _deviceService = deviceService; _client = client; _getDefaultEntryItemViewModel = getDefaultEntryItemViewModel; ContinueText = "Install selected entries"; Continue = ReactiveCommand.CreateFromTask(async ct => - { - if (Installed) - Wizard.ChangeScreen(); - else - await Install(ct); - }); - GoBack = ReactiveCommand.Create(() => - { - if (deviceService.EnabledDevices.Count == 0) - Wizard.ChangeScreen(); - else - Wizard.ChangeScreen(); + { + await Install(ct); + ExecuteContinue(); }); + GoBack = ReactiveCommand.Create(() => Wizard.ChangeScreen()); this.WhenActivatedAsync(async d => { @@ -63,41 +57,40 @@ public partial class DefaultEntriesStepViewModel : WizardStepViewModel }); } - private async Task Install(CancellationToken cancellationToken) + private void ExecuteContinue() { - // Remove entries that aren't to be installed - RemoveUnselectedEntries(DeviceProviderEntryViewModels); - RemoveUnselectedEntries(EssentialEntryViewModels); - RemoveUnselectedEntries(OtherEntryViewModels); - - TotalEntries = DeviceProviderEntryViewModels.Count + EssentialEntryViewModels.Count + OtherEntryViewModels.Count; - CurrentEntries = 0; - - // Install entries one by one, removing them from the list as we go - List entries = [..DeviceProviderEntryViewModels, ..EssentialEntryViewModels, ..OtherEntryViewModels]; - foreach (DefaultEntryItemViewModel defaultEntryItemViewModel in entries) - { - cancellationToken.ThrowIfCancellationRequested(); - bool removeFromList = await defaultEntryItemViewModel.InstallEntry(cancellationToken); - if (!removeFromList) - break; - - DeviceProviderEntryViewModels.Remove(defaultEntryItemViewModel); - EssentialEntryViewModels.Remove(defaultEntryItemViewModel); - OtherEntryViewModels.Remove(defaultEntryItemViewModel); - CurrentEntries++; - } - - Installed = true; - ContinueText = "Continue"; + // Without devices skip to the last step + if (_deviceService.EnabledDevices.Count == 0) + Wizard.ChangeScreen(); + else + Wizard.ChangeScreen(); } - private void RemoveUnselectedEntries(ObservableCollection entryViewModels) + private async Task Install(CancellationToken cancellationToken) { - List toRemove = entryViewModels.Where(e => !e.ShouldInstall).ToList(); - foreach (DefaultEntryItemViewModel defaultEntryItemViewModel in toRemove) - entryViewModels.Remove(defaultEntryItemViewModel); + List entries = + [ + ..DeviceProviderEntryViewModels.Where(e => e.ShouldInstall && !e.IsInstalled), + ..EssentialEntryViewModels.Where(e => e.ShouldInstall && !e.IsInstalled), + ..OtherEntryViewModels.Where(e => e.ShouldInstall && !e.IsInstalled) + ]; + InstalledEntries = 0; + TotalEntries = entries.Count; + // Continue to the next screen if there are no entries to install + if (TotalEntries == 0) + return; + + foreach (DefaultEntryItemViewModel defaultEntryItemViewModel in entries) + { + cancellationToken.ThrowIfCancellationRequested(); + CurrentEntry = defaultEntryItemViewModel; + await defaultEntryItemViewModel.InstallEntry(cancellationToken); + InstalledEntries++; + } + + await Task.Delay(1000, cancellationToken); + CurrentEntry = null; } private async Task GetDefaultEntries(CancellationToken cancellationToken) @@ -126,7 +119,7 @@ public partial class DefaultEntriesStepViewModel : WizardStepViewModel DefaultEntryItemViewModel viewModel = _getDefaultEntryItemViewModel(entry); viewModel.ShouldInstall = entry.DefaultEntryInfo.IsEssential; - + if (entry.DefaultEntryInfo.IsDeviceProvider) DeviceProviderEntryViewModels.Add(viewModel); else if (entry.DefaultEntryInfo.IsEssential) diff --git a/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntryItemViewModel.cs b/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntryItemViewModel.cs index 3568f3d08..56bba5d22 100644 --- a/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntryItemViewModel.cs +++ b/src/Artemis.UI/Screens/StartupWizard/Steps/DefaultEntryItemViewModel.cs @@ -49,8 +49,8 @@ public partial class DefaultEntryItemViewModel : ActivatableViewModelBase if (IsInstalled || !ShouldInstall || Entry.LatestRelease == null) return true; - // Most entries install so quick it looks broken without a small delay - Task minimumDelay = Task.Delay(100, cancellationToken); + // Most entries install so fast it looks broken without a small delay + Task minimumDelay = Task.Delay(200, cancellationToken); EntryInstallResult result = await _workshopService.InstallEntry(Entry, Entry.LatestRelease, _progress, cancellationToken); await minimumDelay; diff --git a/src/Artemis.UI/Screens/StartupWizard/Steps/DevicesStepView.axaml b/src/Artemis.UI/Screens/StartupWizard/Steps/DevicesStepView.axaml deleted file mode 100644 index aaed17364..000000000 --- a/src/Artemis.UI/Screens/StartupWizard/Steps/DevicesStepView.axaml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - Devices are supported through the use of device providers. - - - In the list below you can enable device providers for each brand you own by checking "Enable feature". - - - - - - - - - - - - - - - - - - - - - - - Note: To avoid possible instability it's recommended to disable the device providers of brands you don't own. - - - - \ No newline at end of file diff --git a/src/Artemis.UI/Screens/StartupWizard/Steps/DevicesStepView.axaml.cs b/src/Artemis.UI/Screens/StartupWizard/Steps/DevicesStepView.axaml.cs deleted file mode 100644 index a2435a438..000000000 --- a/src/Artemis.UI/Screens/StartupWizard/Steps/DevicesStepView.axaml.cs +++ /dev/null @@ -1,14 +0,0 @@ -using Avalonia.Controls; -using Avalonia.Markup.Xaml; -using Avalonia.ReactiveUI; - -namespace Artemis.UI.Screens.StartupWizard.Steps; - -public partial class DevicesStepView : ReactiveUserControl -{ - public DevicesStepView() - { - InitializeComponent(); - } - -} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/StartupWizard/Steps/DevicesStepViewModel.cs b/src/Artemis.UI/Screens/StartupWizard/Steps/DevicesStepViewModel.cs deleted file mode 100644 index 1a3e15768..000000000 --- a/src/Artemis.UI/Screens/StartupWizard/Steps/DevicesStepViewModel.cs +++ /dev/null @@ -1,33 +0,0 @@ -using ReactiveUI; -using System; -using System.Collections.ObjectModel; -using System.Linq; -using Artemis.Core; -using Artemis.Core.DeviceProviders; -using Artemis.Core.Services; - -namespace Artemis.UI.Screens.StartupWizard.Steps; - -public class DevicesStepViewModel : WizardStepViewModel -{ - public DevicesStepViewModel(IPluginManagementService pluginManagementService, Func getPluginFeatureViewModel, IDeviceService deviceService) - { - // Take all compatible device providers and create a view model for them - DeviceProviders = new ObservableCollection(pluginManagementService.GetAllPlugins() - .Where(p => p.Info.IsCompatible) - .SelectMany(p => p.Features.Where(f => f.FeatureType.IsAssignableTo(typeof(DeviceProvider)))) - .OrderBy(f => f.Name) - .Select(getPluginFeatureViewModel)); - - Continue = ReactiveCommand.Create(() => - { - if (deviceService.EnabledDevices.Count == 0) - Wizard.ChangeScreen(); - else - Wizard.ChangeScreen(); - }); - GoBack = ReactiveCommand.Create(() => Wizard.ChangeScreen()); - } - - public ObservableCollection DeviceProviders { get; } -} \ No newline at end of file diff --git a/src/Artemis.UI/Screens/StartupWizard/Steps/FinishStepView.axaml b/src/Artemis.UI/Screens/StartupWizard/Steps/FinishStepView.axaml index 700d526ae..8adb1b5d6 100644 --- a/src/Artemis.UI/Screens/StartupWizard/Steps/FinishStepView.axaml +++ b/src/Artemis.UI/Screens/StartupWizard/Steps/FinishStepView.axaml @@ -2,52 +2,51 @@ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" - xmlns:startupWizard="clr-namespace:Artemis.UI.Screens.StartupWizard" - xmlns:controls="clr-namespace:FluentAvalonia.UI.Controls;assembly=FluentAvalonia" xmlns:steps="clr-namespace:Artemis.UI.Screens.StartupWizard.Steps" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Artemis.UI.Screens.StartupWizard.Steps.FinishStepView" x:DataType="steps:FinishStepViewModel"> - - - All finished! + + All finished! + + + + You are now ready to start using Artemis, enjoy! 😁 + + + To learn more about Artemis and how to use it you may find these resources useful: + - - You are now ready to start using Artemis, enjoy! 😁 - - - To learn more about Artemis and how to use it you may find these resources useful: - + + + + - - - - - - - Artemis wiki - Getting started guide - GitHub - Discord - - - - https://wiki.artemis-rgb.com/ - - - https://wiki.artemis-rgb.com/en/guides/user/introduction - - - https://github.com/Artemis-RGB/Artemis - - - https://discord.gg/S3MVaC9 - - - - - + + Artemis wiki + Getting started guide + GitHub + Discord + + + + https://wiki.artemis-rgb.com/ + + + https://wiki.artemis-rgb.com/en/guides/user/introduction + + + https://github.com/Artemis-RGB/Artemis + + + https://discord.gg/S3MVaC9 + + + + + + \ No newline at end of file diff --git a/src/Artemis.UI/Screens/StartupWizard/Steps/LayoutsStepView.axaml b/src/Artemis.UI/Screens/StartupWizard/Steps/LayoutsStepView.axaml index 38a459eb6..58aec59d8 100644 --- a/src/Artemis.UI/Screens/StartupWizard/Steps/LayoutsStepView.axaml +++ b/src/Artemis.UI/Screens/StartupWizard/Steps/LayoutsStepView.axaml @@ -7,26 +7,25 @@ mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="Artemis.UI.Screens.StartupWizard.Steps.LayoutsStepView" x:DataType="steps:LayoutsStepViewModel"> - - - - - Device layouts provide Artemis with an image of your devices and exact LED positions. - While not strictly necessary, this helps to create effects that are perfectly aligned with your hardware. - - - Below you can automatically search the Artemis Workshop for device layouts of your devices. - + + + Device layouts provide Artemis with an image of your devices and exact LED positions. + While not strictly necessary, this helps to create effects that are perfectly aligned with your hardware. + + + Below you can automatically search the Artemis Workshop for device layouts of your devices. + +