mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-12 13:28:33 +00:00
Wizard - Skip layout and surface steps when no devices are found Workshop - Fixed crash when opening library
131 lines
4.5 KiB
C#
131 lines
4.5 KiB
C#
using System;
|
|
using System.Collections.ObjectModel;
|
|
using System.Linq;
|
|
using System.Reactive;
|
|
using System.Reactive.Disposables;
|
|
using System.Threading.Tasks;
|
|
using Artemis.Core;
|
|
using Artemis.Core.DeviceProviders;
|
|
using Artemis.Core.Services;
|
|
using Artemis.UI.DryIoc.Factories;
|
|
using Artemis.UI.Screens.Plugins;
|
|
using Artemis.UI.Screens.Workshop.LayoutFinder;
|
|
using Artemis.UI.Shared;
|
|
using Artemis.UI.Shared.Providers;
|
|
using Artemis.UI.Shared.Services;
|
|
using DryIoc;
|
|
using PropertyChanged.SourceGenerator;
|
|
using ReactiveUI;
|
|
|
|
|
|
namespace Artemis.UI.Screens.StartupWizard.Steps;
|
|
|
|
public class SettingsStepViewModel : WizardStepViewModel
|
|
{
|
|
private readonly ISettingsService _settingsService;
|
|
private readonly IWindowService _windowService;
|
|
private readonly IAutoRunProvider? _autoRunProvider;
|
|
private readonly IProtocolProvider? _protocolProvider;
|
|
|
|
public SettingsStepViewModel(IContainer container, ISettingsService settingsService, IDeviceService deviceService, IWindowService windowService)
|
|
{
|
|
_settingsService = settingsService;
|
|
_windowService = windowService;
|
|
_autoRunProvider = container.Resolve<IAutoRunProvider>(IfUnresolved.ReturnDefault);
|
|
_protocolProvider = container.Resolve<IProtocolProvider>(IfUnresolved.ReturnDefault);
|
|
|
|
Continue = ReactiveCommand.Create(() => Wizard.ChangeScreen<FinishStepViewModel>());
|
|
GoBack = ReactiveCommand.Create(() =>
|
|
{
|
|
if (deviceService.EnabledDevices.Count == 0)
|
|
Wizard.ChangeScreen<DevicesStepViewModel>();
|
|
else
|
|
Wizard.ChangeScreen<SurfaceStepViewModel>();
|
|
});
|
|
|
|
this.WhenActivated(d =>
|
|
{
|
|
UIAutoRun.SettingChanged += UIAutoRunOnSettingChanged;
|
|
UIUseProtocol.SettingChanged += UIUseProtocolOnSettingChanged;
|
|
UIAutoRunDelay.SettingChanged += UIAutoRunDelayOnSettingChanged;
|
|
|
|
Disposable.Create(() =>
|
|
{
|
|
UIAutoRun.SettingChanged -= UIAutoRunOnSettingChanged;
|
|
UIUseProtocol.SettingChanged -= UIUseProtocolOnSettingChanged;
|
|
UIAutoRunDelay.SettingChanged -= UIAutoRunDelayOnSettingChanged;
|
|
|
|
_settingsService.SaveAllSettings();
|
|
}).DisposeWith(d);
|
|
});
|
|
}
|
|
|
|
public PluginSetting<bool> UIAutoRun => _settingsService.GetSetting("UI.AutoRun", false);
|
|
public PluginSetting<bool> UIUseProtocol => _settingsService.GetSetting("UI.UseProtocol", true);
|
|
public PluginSetting<int> UIAutoRunDelay => _settingsService.GetSetting("UI.AutoRunDelay", 15);
|
|
public PluginSetting<bool> UIShowOnStartup => _settingsService.GetSetting("UI.ShowOnStartup", true);
|
|
public PluginSetting<bool> UICheckForUpdates => _settingsService.GetSetting("UI.Updating.AutoCheck", true);
|
|
public PluginSetting<bool> UIAutoUpdate => _settingsService.GetSetting("UI.Updating.AutoInstall", true);
|
|
public bool IsAutoRunSupported => _autoRunProvider != null;
|
|
|
|
private async Task ApplyAutoRun()
|
|
{
|
|
if (_autoRunProvider == null)
|
|
return;
|
|
|
|
try
|
|
{
|
|
if (UIAutoRun.Value)
|
|
await _autoRunProvider.EnableAutoRun(false, UIAutoRunDelay.Value);
|
|
else
|
|
await _autoRunProvider.DisableAutoRun();
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
_windowService.ShowExceptionDialog("Failed to apply auto-run", exception);
|
|
}
|
|
}
|
|
|
|
private void ApplyProtocolAssociation()
|
|
{
|
|
if (_protocolProvider == null)
|
|
return;
|
|
|
|
try
|
|
{
|
|
if (UIUseProtocol.Value)
|
|
_protocolProvider.AssociateWithProtocol("artemis");
|
|
else
|
|
_protocolProvider.DisassociateWithProtocol("artemis");
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
_windowService.ShowExceptionDialog("Failed to apply protocol association", exception);
|
|
}
|
|
}
|
|
|
|
private async void UIAutoRunOnSettingChanged(object? sender, EventArgs e)
|
|
{
|
|
await ApplyAutoRun();
|
|
}
|
|
|
|
private void UIUseProtocolOnSettingChanged(object? sender, EventArgs e)
|
|
{
|
|
ApplyProtocolAssociation();
|
|
}
|
|
|
|
private async void UIAutoRunDelayOnSettingChanged(object? sender, EventArgs e)
|
|
{
|
|
if (_autoRunProvider == null || !UIAutoRun.Value)
|
|
return;
|
|
|
|
try
|
|
{
|
|
await _autoRunProvider.EnableAutoRun(true, UIAutoRunDelay.Value);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
_windowService.ShowExceptionDialog("Failed to apply auto-run", exception);
|
|
}
|
|
}
|
|
} |