mirror of
https://github.com/Artemis-RGB/Artemis
synced 2025-12-13 05:48:35 +00:00
Smoothed out profile preview activation
This commit is contained in:
parent
aafd361a6b
commit
0739885453
@ -298,6 +298,7 @@
|
||||
<Compile Include="Managers\KeyboardManager.cs" />
|
||||
<Compile Include="Managers\LoopManager.cs" />
|
||||
<Compile Include="Managers\MainManager.cs" />
|
||||
<Compile Include="Managers\ProfileManager.cs" />
|
||||
<Compile Include="Models\EffectModel.cs" />
|
||||
<Compile Include="Models\EffectSettings.cs" />
|
||||
<Compile Include="Models\GameSettings.cs" />
|
||||
|
||||
@ -10,6 +10,7 @@ namespace Artemis.InjectionModules
|
||||
Bind<MainManager>().ToSelf().InSingletonScope();
|
||||
Bind<KeyboardManager>().ToSelf().InSingletonScope();
|
||||
Bind<EffectManager>().ToSelf().InSingletonScope();
|
||||
Bind<ProfileManager>().ToSelf().InSingletonScope();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Timers;
|
||||
using Artemis.Events;
|
||||
using Artemis.Models;
|
||||
using Artemis.Modules.Effects.ProfilePreview;
|
||||
@ -20,9 +19,8 @@ namespace Artemis.Managers
|
||||
private readonly KeyboardManager _keyboardManager;
|
||||
private readonly ILogger _logger;
|
||||
private EffectModel _activeEffect;
|
||||
private EffectModel _prePreviewEffect;
|
||||
|
||||
public EffectManager(IEventAggregator events, ILogger logger, KeyboardManager keyboardManager)
|
||||
public EffectManager(ILogger logger, IEventAggregator events, KeyboardManager keyboardManager)
|
||||
{
|
||||
_logger = logger;
|
||||
_logger.Info("Intializing EffectManager");
|
||||
@ -32,10 +30,6 @@ namespace Artemis.Managers
|
||||
|
||||
EffectModels = new List<EffectModel>();
|
||||
|
||||
var profilePreviewTimer = new Timer(500);
|
||||
profilePreviewTimer.Elapsed += SetupProfilePreview;
|
||||
profilePreviewTimer.Start();
|
||||
|
||||
_logger.Info("Intialized EffectManager");
|
||||
}
|
||||
|
||||
@ -72,46 +66,6 @@ namespace Artemis.Managers
|
||||
get { return EffectModels.OfType<GameModel>().Where(g => g.Enabled); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Keeps track of profiles being previewed and sets up the active efffect accordingly
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void SetupProfilePreview(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
if (_keyboardManager.ChangingKeyboard)
|
||||
return;
|
||||
|
||||
// Make sure the preview model should still be active
|
||||
if (ActiveEffect is ProfilePreviewModel)
|
||||
{
|
||||
// Should not be active if no selected profile is set
|
||||
if (ProfilePreviewModel.SelectedProfile != null)
|
||||
return;
|
||||
|
||||
if (_prePreviewEffect != null)
|
||||
{
|
||||
_logger.Debug("Change back effect after profile preview");
|
||||
ChangeEffect(_prePreviewEffect);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Debug("Clear effect after profile preview");
|
||||
ClearEffect(); // TODO: This fails to lock
|
||||
}
|
||||
}
|
||||
// Else make sure preview model indeed shouldn't be active
|
||||
else
|
||||
{
|
||||
if (ProfilePreviewModel?.SelectedProfile == null)
|
||||
return;
|
||||
|
||||
_prePreviewEffect = ActiveEffect;
|
||||
_logger.Debug("Activate profile preview");
|
||||
ChangeEffect(ProfilePreviewModel);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Loads the last active effect from settings and enables it.
|
||||
/// </summary>
|
||||
|
||||
@ -111,9 +111,10 @@ namespace Artemis.Managers
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Releases the active keyboard, if CanDisable is true
|
||||
/// Releases the active keyboard
|
||||
/// </summary>
|
||||
public void ReleaseActiveKeyboard()
|
||||
/// <param name="save">Whether to save the LastKeyboard (making it null)</param>
|
||||
public void ReleaseActiveKeyboard(bool save = false)
|
||||
{
|
||||
lock (this)
|
||||
{
|
||||
@ -127,8 +128,11 @@ namespace Artemis.Managers
|
||||
ActiveKeyboard.Disable();
|
||||
ActiveKeyboard = null;
|
||||
|
||||
General.Default.LastKeyboard = null;
|
||||
General.Default.Save();
|
||||
if (save)
|
||||
{
|
||||
General.Default.LastKeyboard = null;
|
||||
General.Default.Save();
|
||||
}
|
||||
|
||||
_events.PublishOnUIThread(new ActiveKeyboardChanged(oldKeyboard, null));
|
||||
_logger.Debug("Released keyboard: {0}", releaseName);
|
||||
|
||||
@ -27,12 +27,13 @@ namespace Artemis.Managers
|
||||
private readonly ILogger _logger;
|
||||
|
||||
public MainManager(IEventAggregator events, ILogger logger, LoopManager loopManager,
|
||||
KeyboardManager keyboardManager, EffectManager effectManager)
|
||||
KeyboardManager keyboardManager, EffectManager effectManager, ProfileManager profileManager)
|
||||
{
|
||||
_logger = logger;
|
||||
LoopManager = loopManager;
|
||||
KeyboardManager = keyboardManager;
|
||||
EffectManager = effectManager;
|
||||
ProfileManager = profileManager;
|
||||
|
||||
_logger.Info("Intializing MainManager");
|
||||
|
||||
@ -68,13 +69,13 @@ namespace Artemis.Managers
|
||||
public LoopManager LoopManager { get; }
|
||||
public KeyboardManager KeyboardManager { get; set; }
|
||||
public EffectManager EffectManager { get; set; }
|
||||
public ProfileManager ProfileManager { get; set; }
|
||||
|
||||
public PipeServer PipeServer { get; set; }
|
||||
public BackgroundWorker ProcessWorker { get; set; }
|
||||
public KeyboardHook KeyboardHook { get; set; }
|
||||
public GameStateWebServer GameStateWebServer { get; set; }
|
||||
public bool ProgramEnabled { get; private set; }
|
||||
public bool Suspended { get; set; }
|
||||
public bool Running { get; private set; }
|
||||
|
||||
public void Dispose()
|
||||
|
||||
82
Artemis/Artemis/Managers/ProfileManager.cs
Normal file
82
Artemis/Artemis/Managers/ProfileManager.cs
Normal file
@ -0,0 +1,82 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Timers;
|
||||
using Artemis.Models;
|
||||
using Artemis.Modules.Effects.ProfilePreview;
|
||||
using Artemis.ViewModels.Abstract;
|
||||
using Ninject.Extensions.Logging;
|
||||
|
||||
namespace Artemis.Managers
|
||||
{
|
||||
public class ProfileManager
|
||||
{
|
||||
private readonly EffectManager _effectManager;
|
||||
private readonly KeyboardManager _keyboardManager;
|
||||
private readonly LoopManager _loopManager;
|
||||
private readonly ILogger _logger;
|
||||
private EffectModel _prePreviewEffect;
|
||||
|
||||
public ProfileManager(ILogger logger, EffectManager effectManager, KeyboardManager keyboardManager, LoopManager loopManager)
|
||||
{
|
||||
_logger = logger;
|
||||
_effectManager = effectManager;
|
||||
_keyboardManager = keyboardManager;
|
||||
_loopManager = loopManager;
|
||||
|
||||
GameViewModels = new List<GameViewModel>();
|
||||
|
||||
var profilePreviewTimer = new Timer(500);
|
||||
profilePreviewTimer.Elapsed += SetupProfilePreview;
|
||||
profilePreviewTimer.Start();
|
||||
}
|
||||
|
||||
public ProfilePreviewModel ProfilePreviewModel { get; set; }
|
||||
|
||||
public List<GameViewModel> GameViewModels { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Keeps track of profiles being previewed and sets up the active efffect accordingly
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void SetupProfilePreview(object sender, ElapsedEventArgs e)
|
||||
{
|
||||
if (_keyboardManager.ChangingKeyboard || ProfilePreviewModel == null)
|
||||
return;
|
||||
|
||||
var activePreview = GameViewModels.FirstOrDefault(vm => vm.IsActive);
|
||||
if (activePreview == null)
|
||||
{
|
||||
// Should not be active if no selected profile is set
|
||||
if (_effectManager.ActiveEffect != ProfilePreviewModel)
|
||||
return;
|
||||
|
||||
if (_prePreviewEffect != null)
|
||||
{
|
||||
_logger.Debug("Change back effect after profile preview");
|
||||
_effectManager.ChangeEffect(_prePreviewEffect);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.Debug("Clear effect after profile preview");
|
||||
_effectManager.ClearEffect();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_effectManager.ActiveEffect != ProfilePreviewModel)
|
||||
{
|
||||
_logger.Debug("Activate profile preview");
|
||||
_prePreviewEffect = _effectManager.ActiveEffect;
|
||||
_effectManager.ChangeEffect(ProfilePreviewModel);
|
||||
}
|
||||
|
||||
// LoopManager might be running, this method won't do any harm in that case.
|
||||
_loopManager.Start();
|
||||
|
||||
if (!ReferenceEquals(ProfilePreviewModel.SelectedProfile, activePreview.ProfileEditor.SelectedProfile))
|
||||
ProfilePreviewModel.SelectedProfile = activePreview.ProfileEditor.SelectedProfile;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -28,6 +28,7 @@ namespace Artemis.ViewModels.Abstract
|
||||
ProfileEditor = PFactory.CreateProfileEditorViewModel(Events, mainManager, gameModel);
|
||||
GameModel.Profile = ProfileEditor.SelectedProfile;
|
||||
ProfileEditor.PropertyChanged += ProfileUpdater;
|
||||
Events.Subscribe(this);
|
||||
}
|
||||
|
||||
[Inject]
|
||||
@ -89,39 +90,7 @@ namespace Artemis.ViewModels.Abstract
|
||||
|
||||
SaveSettings();
|
||||
}
|
||||
|
||||
protected override void OnActivate()
|
||||
{
|
||||
base.OnActivate();
|
||||
Task.Factory.StartNew(HandleActivationSwitch);
|
||||
}
|
||||
|
||||
protected override void OnDeactivate(bool close)
|
||||
{
|
||||
base.OnDeactivate(close);
|
||||
Task.Factory.StartNew(HandleActivationSwitch);
|
||||
}
|
||||
|
||||
private void HandleActivationSwitch()
|
||||
{
|
||||
Thread.Sleep(600);
|
||||
if (IsActive)
|
||||
{
|
||||
if (!MainManager.LoopManager.Running)
|
||||
{
|
||||
Logger.Debug("Starting LoopManager for profile preview");
|
||||
MainManager.LoopManager.Start();
|
||||
}
|
||||
MainManager.EffectManager.ProfilePreviewModel = ProfilePreviewModel;
|
||||
ProfilePreviewModel.SelectedProfile = ProfileEditor.SelectedProfile;
|
||||
}
|
||||
else
|
||||
{
|
||||
MainManager.EffectManager.ProfilePreviewModel = ProfilePreviewModel;
|
||||
ProfilePreviewModel.SelectedProfile = null;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void ProfileUpdater(object sender, PropertyChangedEventArgs e)
|
||||
{
|
||||
if (e.PropertyName != "SelectedProfile" && IsActive)
|
||||
|
||||
@ -119,7 +119,7 @@ namespace Artemis.ViewModels.Flyouts
|
||||
MainManager.LoopManager.Start();
|
||||
}
|
||||
else
|
||||
MainManager.KeyboardManager.ReleaseActiveKeyboard();
|
||||
MainManager.KeyboardManager.ReleaseActiveKeyboard(true);
|
||||
}
|
||||
|
||||
public void ToggleEnabled()
|
||||
|
||||
@ -1,4 +1,6 @@
|
||||
using Artemis.ViewModels.Abstract;
|
||||
using Artemis.Managers;
|
||||
using Artemis.Modules.Effects.ProfilePreview;
|
||||
using Artemis.ViewModels.Abstract;
|
||||
|
||||
namespace Artemis.ViewModels
|
||||
{
|
||||
@ -6,10 +8,13 @@ namespace Artemis.ViewModels
|
||||
{
|
||||
private readonly GameViewModel[] _gameViewModels;
|
||||
|
||||
public GamesViewModel(GameViewModel[] gameViewModels)
|
||||
public GamesViewModel(GameViewModel[] gameViewModels, ProfileManager profileManager, ProfilePreviewModel profilePreviewModel)
|
||||
{
|
||||
DisplayName = "Games";
|
||||
_gameViewModels = gameViewModels;
|
||||
|
||||
profileManager.ProfilePreviewModel = profilePreviewModel;
|
||||
profileManager.GameViewModels.AddRange(_gameViewModels);
|
||||
}
|
||||
|
||||
protected override void OnActivate()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user