mirror of
https://github.com/Artemis-RGB/Artemis
synced 2026-11-11 19:36:28 +00:00
Profile modules - Added option to provide default profiles
Profiles - Run adaption on freshly imported profiles when activating Profiles - Run adaption on freshly imported profiles when surface changes
This commit is contained in:
1 parent
c7c78dfecc
commit
14f82284ac
7 files changed
+121
-53
No files matched your search
@@ -7,6 +7,7 @@ using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using Artemis.Core.DataModelExpansions;
|
||||
using Artemis.Core.Services;
|
||||
using Artemis.Storage.Entities.Profile;
|
||||
using Newtonsoft.Json;
|
||||
using SkiaSharp;
|
||||
@@ -94,7 +95,9 @@ namespace Artemis.Core.Modules
|
||||
/// </summary>
|
||||
public abstract class ProfileModule : Module
|
||||
{
|
||||
private readonly List<ProfileDescriptor> _defaultProfiles;
|
||||
private readonly List<string> _defaultProfilePaths = new();
|
||||
private readonly List<string> _pendingDefaultProfilePaths = new();
|
||||
private readonly List<ProfileEntity> _defaultProfiles = new();
|
||||
private readonly object _lock = new();
|
||||
|
||||
/// <summary>
|
||||
@@ -102,13 +105,13 @@ namespace Artemis.Core.Modules
|
||||
/// </summary>
|
||||
protected internal readonly List<PropertyInfo> HiddenPropertiesList = new();
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new instance of the <see cref="ProfileModule" /> class
|
||||
/// </summary>
|
||||
protected ProfileModule()
|
||||
{
|
||||
OpacityOverride = 1;
|
||||
_defaultProfiles = new List<ProfileDescriptor>();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -139,7 +142,7 @@ namespace Artemis.Core.Modules
|
||||
/// <summary>
|
||||
/// Gets a list of default profiles, to add a new default profile use <see cref="AddDefaultProfile" />
|
||||
/// </summary>
|
||||
public ReadOnlyCollection<ProfileDescriptor> DefaultProfiles => _defaultProfiles.AsReadOnly();
|
||||
internal ReadOnlyCollection<ProfileEntity> DefaultProfiles => _defaultProfiles.AsReadOnly();
|
||||
|
||||
/// <summary>
|
||||
/// Called after the profile has updated
|
||||
@@ -167,22 +170,44 @@ namespace Artemis.Core.Modules
|
||||
/// <summary>
|
||||
/// Adds a default profile by reading it from the file found at the provided path
|
||||
/// </summary>
|
||||
/// <param name="file"></param>
|
||||
protected void AddDefaultProfile(string file)
|
||||
/// <param name="file">A path pointing towards a profile file. May be relative to the plugin directory.</param>
|
||||
/// <returns>
|
||||
/// <see langword="true" /> if the default profile was added; <see langword="false" /> if it was not because it is
|
||||
/// already in the list.
|
||||
/// </returns>
|
||||
protected bool AddDefaultProfile(string file)
|
||||
{
|
||||
// It can be null if the plugin has not loaded yet...
|
||||
if (Plugin == null!)
|
||||
{
|
||||
if (_pendingDefaultProfilePaths.Contains(file))
|
||||
return false;
|
||||
_pendingDefaultProfilePaths.Add(file);
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!Path.IsPathRooted(file))
|
||||
file = Plugin.ResolveRelativePath(file);
|
||||
|
||||
if (_defaultProfilePaths.Contains(file))
|
||||
return false;
|
||||
_defaultProfilePaths.Add(file);
|
||||
|
||||
// Ensure the file exists
|
||||
if (!File.Exists(file))
|
||||
throw new ArtemisPluginFeatureException(this, $"Could not find default profile at {file}.");
|
||||
// Deserialize and make sure that succeeded
|
||||
ProfileEntity? profileEntity = JsonConvert.DeserializeObject<ProfileEntity>(File.ReadAllText(file));
|
||||
ProfileEntity? profileEntity = JsonConvert.DeserializeObject<ProfileEntity>(File.ReadAllText(file), ProfileService.ExportSettings);
|
||||
if (profileEntity == null)
|
||||
throw new ArtemisPluginFeatureException(this, $"Failed to deserialize default profile at {file}.");
|
||||
// Ensure the profile ID is unique
|
||||
ProfileDescriptor descriptor = new(this, profileEntity) {NeedsAdaption = true};
|
||||
if (_defaultProfiles.Any(d => d.Id == descriptor.Id))
|
||||
throw new ArtemisPluginFeatureException(this, $"Cannot add default profile from {file}, profile ID {descriptor.Id} already in use.");
|
||||
if (_defaultProfiles.Any(d => d.Id == profileEntity.Id))
|
||||
throw new ArtemisPluginFeatureException(this, $"Cannot add default profile from {file}, profile ID {profileEntity.Id} already in use.");
|
||||
|
||||
_defaultProfiles.Add(descriptor);
|
||||
profileEntity.IsFreshImport = true;
|
||||
_defaultProfiles.Add(profileEntity);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -193,6 +218,15 @@ namespace Artemis.Core.Modules
|
||||
ActiveProfileChanged?.Invoke(this, EventArgs.Empty);
|
||||
}
|
||||
|
||||
internal override void InternalEnable()
|
||||
{
|
||||
foreach (string pendingDefaultProfile in _pendingDefaultProfilePaths)
|
||||
AddDefaultProfile(pendingDefaultProfile);
|
||||
_pendingDefaultProfilePaths.Clear();
|
||||
|
||||
base.InternalEnable();
|
||||
}
|
||||
|
||||
internal override void InternalUpdate(double deltaTime)
|
||||
{
|
||||
StartUpdateMeasure();
|
||||
|
||||
Reference in new issue
Block a user