1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2025-12-13 05:48:35 +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);
}
internal virtual void Reactivate(bool isDeactivateOverride, bool isActivateOverride)
{
if (!IsActivated)
return;
Deactivate(isDeactivateOverride);
Activate(isActivateOverride);
}
internal void ApplyToEntity()
{
if (Entity == null)

View File

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

View File

@ -58,7 +58,7 @@ namespace Artemis.Core.Services
// Always deactivate all other modules whenever override is called
List<Module> modules = _pluginService.GetPluginsOfType<Module>().ToList();
foreach (Module module in modules.Where(m => m != overrideModule))
OverrideDeactivate(module);
OverrideDeactivate(module, overrideModule != null);
ActiveModuleOverride = overrideModule;
}
@ -84,13 +84,11 @@ namespace Artemis.Core.Services
bool shouldBeActivated = ActiveModuleOverride.EvaluateActivationRequirements();
if (shouldBeActivated && ActiveModuleOverride.IsActivatedOverride)
{
ActiveModuleOverride.Deactivate(true);
ActiveModuleOverride.Activate(false);
ActiveModuleOverride.Reactivate(true, false);
}
else if (!shouldBeActivated && !ActiveModuleOverride.IsActivatedOverride)
{
ActiveModuleOverride.Deactivate(false);
ActiveModuleOverride.Activate(true);
ActiveModuleOverride.Reactivate(false, true);
}
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)
{
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)
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
{
if (!module.IsActivated)
return;
// If this is a profile module, activate the last active profile after module activation
if (module is ProfileModule profileModule)
profileModule.ChangeActiveProfile(null, null);
// If deactivating while it should be activated, its an override
bool shouldBeActivated = module.EvaluateActivationRequirements();
// No need to deactivate if it is not in an overridden state
if (shouldBeActivated && !module.IsActivatedOverride && !clearingOverride)
return;
module.Deactivate(true);
}
catch (Exception e)

View File

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