1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2026-01-01 02:03:32 +00:00

Core - Added method to reactivate a module, reusing its profile

Profile editor - Improved performance when moving between modules
Profile editor - Fixed editor sometimes going blank when moving between modules
This commit is contained in:
SpoinkyNL 2020-10-18 13:47:35 +02:00
parent ceccc7ceec
commit cf16b9c218
4 changed files with 55 additions and 32 deletions

View File

@ -222,6 +222,15 @@ namespace Artemis.Core.Modules
ModuleDeactivated(isOverride); ModuleDeactivated(isOverride);
} }
internal virtual void Reactivate(bool isDeactivateOverride, bool isActivateOverride)
{
if (!IsActivated)
return;
Deactivate(isDeactivateOverride);
Activate(isActivateOverride);
}
internal void ApplyToEntity() internal void ApplyToEntity()
{ {
if (Entity == null) if (Entity == null)

View File

@ -232,6 +232,16 @@ namespace Artemis.Core.Modules
profile?.Dispose(); profile?.Dispose();
} }
internal override void Reactivate(bool isDeactivateOverride, bool isActivateOverride)
{
if (!IsActivated)
return;
// Avoid disposing the profile
base.Deactivate(isDeactivateOverride);
Activate(isActivateOverride);
}
#region Events #region Events
/// <summary> /// <summary>

View File

@ -58,7 +58,7 @@ namespace Artemis.Core.Services
// Always deactivate all other modules whenever override is called // Always deactivate all other modules whenever override is called
List<Module> modules = _pluginService.GetPluginsOfType<Module>().ToList(); List<Module> modules = _pluginService.GetPluginsOfType<Module>().ToList();
foreach (Module module in modules.Where(m => m != overrideModule)) foreach (Module module in modules.Where(m => m != overrideModule))
OverrideDeactivate(module); OverrideDeactivate(module, overrideModule != null);
ActiveModuleOverride = overrideModule; ActiveModuleOverride = overrideModule;
} }
@ -84,13 +84,11 @@ namespace Artemis.Core.Services
bool shouldBeActivated = ActiveModuleOverride.EvaluateActivationRequirements(); bool shouldBeActivated = ActiveModuleOverride.EvaluateActivationRequirements();
if (shouldBeActivated && ActiveModuleOverride.IsActivatedOverride) if (shouldBeActivated && ActiveModuleOverride.IsActivatedOverride)
{ {
ActiveModuleOverride.Deactivate(true); ActiveModuleOverride.Reactivate(true, false);
ActiveModuleOverride.Activate(false);
} }
else if (!shouldBeActivated && !ActiveModuleOverride.IsActivatedOverride) else if (!shouldBeActivated && !ActiveModuleOverride.IsActivatedOverride)
{ {
ActiveModuleOverride.Deactivate(false); ActiveModuleOverride.Reactivate(false, true);
ActiveModuleOverride.Activate(true);
} }
return; return;
@ -171,31 +169,12 @@ namespace Artemis.Core.Services
} }
} }
private void OverrideActivate(Module module)
{
try
{
if (module.IsActivated)
return;
module.Activate(true);
// If this is a profile module, activate the last active profile after module activation
if (module is ProfileModule profileModule)
_profileService.ActivateLastProfile(profileModule);
}
catch (Exception e)
{
_logger.Error(new ArtemisPluginException(module.PluginInfo, "Failed to activate module and last profile.", e), "Failed to activate module and last profile");
throw;
}
}
private async Task DeactivateModule(Module module) private async Task DeactivateModule(Module module)
{ {
try try
{ {
// If this is a profile module, activate the last active profile after module activation // If this is a profile module, animate profile disable
// module.Deactivate would do the same but without animation
if (module.IsActivated && module is ProfileModule profileModule) if (module.IsActivated && module is ProfileModule profileModule)
await profileModule.ChangeActiveProfileAnimated(null, null); await profileModule.ChangeActiveProfileAnimated(null, null);
@ -208,17 +187,41 @@ namespace Artemis.Core.Services
} }
} }
private void OverrideDeactivate(Module module) private void OverrideActivate(Module module)
{
try
{
if (module.IsActivated)
return;
// If activating while it should be deactivated, its an override
bool shouldBeActivated = module.EvaluateActivationRequirements();
module.Activate(!shouldBeActivated);
// If this is a profile module, activate the last active profile after module activation
if (module is ProfileModule profileModule)
_profileService.ActivateLastProfile(profileModule);
}
catch (Exception e)
{
_logger.Error(new ArtemisPluginException(module.PluginInfo, "Failed to activate module and last profile.", e), "Failed to activate module and last profile");
throw;
}
}
private void OverrideDeactivate(Module module, bool clearingOverride)
{ {
try try
{ {
if (!module.IsActivated) if (!module.IsActivated)
return; return;
// If this is a profile module, activate the last active profile after module activation // If deactivating while it should be activated, its an override
if (module is ProfileModule profileModule) bool shouldBeActivated = module.EvaluateActivationRequirements();
profileModule.ChangeActiveProfile(null, null); // No need to deactivate if it is not in an overridden state
if (shouldBeActivated && !module.IsActivatedOverride && !clearingOverride)
return;
module.Deactivate(true); module.Deactivate(true);
} }
catch (Exception e) catch (Exception e)

View File

@ -361,7 +361,8 @@ namespace Artemis.UI.Shared.Services
private void SelectedProfileOnDeactivated(object sender, EventArgs e) private void SelectedProfileOnDeactivated(object sender, EventArgs e)
{ {
Execute.PostToUIThread(() => ChangeSelectedProfile(null)); // Execute.PostToUIThread(() => ChangeSelectedProfile(null));
ChangeSelectedProfile(null);
} }
} }
} }