1
0
mirror of https://github.com/Artemis-RGB/Artemis synced 2026-01-01 10:13:30 +00:00

Compare commits

...

2 Commits

2 changed files with 31 additions and 7 deletions

View File

@ -24,6 +24,14 @@ public static class LegacyMigrationService
logger.Information("No legacy database found, nothing to migrate");
return;
}
// If the legacy database has already been migrated, but the old DB failed to be deleted, we don't want to migrate again
// In a future update we'll clean up the old DB if it's still there, for now lets leave people's files alone
if (File.Exists(Path.Combine(Constants.DataFolder, "legacy.db")))
{
logger.Information("Legacy database already migrated, nothing to do");
return;
}
using ArtemisDbContext dbContext = container.Resolve<ArtemisDbContext>();
MigrateToSqlite(logger, dbContext);

View File

@ -8,7 +8,6 @@ using System.Text;
using Artemis.Core;
using Artemis.Core.Modules;
using Artemis.UI.Shared.Services;
using Avalonia;
using ReactiveUI;
namespace Artemis.UI.Shared.DataModelVisualization.Shared;
@ -282,12 +281,8 @@ public abstract class DataModelVisualizationViewModel : ReactiveObject, IDisposa
foreach (PropertyInfo propertyInfo in modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance).OrderBy(t => t.MetadataToken))
{
string childPath = AppendToPath(propertyInfo.Name);
if (Children.Any(c => c.Path != null && c.Path.Equals(childPath)))
continue;
if (propertyInfo.GetCustomAttribute<DataModelIgnoreAttribute>() != null)
continue;
MethodInfo? getMethod = propertyInfo.GetGetMethod();
if (getMethod == null || getMethod.GetParameters().Any())
if (!ShouldIncludePath(childPath, propertyInfo))
continue;
DataModelVisualizationViewModel? child = CreateChild(dataModelUIService, childPath, GetChildDepth());
@ -331,6 +326,27 @@ public abstract class DataModelVisualizationViewModel : ReactiveObject, IDisposa
Children.Remove(dataModelVisualizationViewModel);
}
private bool ShouldIncludePath(string childPath, PropertyInfo propertyInfo)
{
// Outdated plugins can cause unpredictable exceptions when resolving types
try
{
if (Children.Any(c => c.Path != null && c.Path.Equals(childPath)))
return false;
if (propertyInfo.GetCustomAttribute<DataModelIgnoreAttribute>() != null)
return false;
MethodInfo? getMethod = propertyInfo.GetGetMethod();
if (getMethod == null || getMethod.GetParameters().Any())
return false;
return true;
}
catch (Exception)
{
return false;
}
}
private DataModelVisualizationViewModel? CreateChild(IDataModelUIService dataModelUIService, string path, int depth)
{
if (DataModel == null)