Skip to content

Commit

Permalink
Move migrations to storage, add Storage migration for nodes change
Browse files Browse the repository at this point in the history
  • Loading branch information
RobertBeekman committed Feb 23, 2024
1 parent 313b4a0 commit 49ed020
Show file tree
Hide file tree
Showing 13 changed files with 112 additions and 125 deletions.
4 changes: 2 additions & 2 deletions src/Artemis.Core/DryIoc/ContainerExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
using Artemis.Core.Providers;
using Artemis.Core.Services;
using Artemis.Storage;
using Artemis.Storage.Migrations.Interfaces;
using Artemis.Storage.Migrations;
using Artemis.Storage.Repositories.Interfaces;
using DryIoc;

Expand Down Expand Up @@ -36,7 +36,7 @@ public static void RegisterCore(this IContainer container)

// Bind migrations
container.RegisterMany(storageAssembly, type => type.IsAssignableTo<IStorageMigration>(), Reuse.Singleton, nonPublicServiceTypes: true);
container.RegisterMany(coreAssembly, type => type.IsAssignableTo<IProfileMigration>(), Reuse.Singleton, nonPublicServiceTypes: true);
container.RegisterMany(storageAssembly, type => type.IsAssignableTo<IProfileMigration>(), Reuse.Singleton, nonPublicServiceTypes: true);

container.RegisterMany(coreAssembly, type => type.IsAssignableTo<ILayoutProvider>(), Reuse.Singleton);
container.Register<IPluginSettingsFactory, PluginSettingsFactory>(Reuse.Singleton);
Expand Down

This file was deleted.

This file was deleted.

5 changes: 3 additions & 2 deletions src/Artemis.Core/Services/Storage/ProfileService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System.Threading.Tasks;
using Artemis.Core.Modules;
using Artemis.Storage.Entities.Profile;
using Artemis.Storage.Migrations;
using Artemis.Storage.Repositories.Interfaces;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
Expand Down Expand Up @@ -523,10 +524,10 @@ public async Task<ProfileConfiguration> ImportProfile(Stream archiveStream, Prof
public async Task<ProfileConfiguration> OverwriteProfile(MemoryStream archiveStream, ProfileConfiguration profileConfiguration)
{
ProfileConfiguration imported = await ImportProfile(archiveStream, profileConfiguration.Category, true, true, null, profileConfiguration.Order + 1);

DeleteProfile(profileConfiguration);
SaveProfileCategory(imported.Category);

return imported;
}

Expand Down
4 changes: 1 addition & 3 deletions src/Artemis.Storage/Migrations/IProfileMigration.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
using LiteDB;
using Newtonsoft.Json.Linq;

namespace Artemis.Storage.Migrations;

internal interface IProfileMigration
public interface IProfileMigration
{
int Version { get; }
void Migrate(JObject profileJson);
void Migrate(BsonDocument profileBson);
}
2 changes: 1 addition & 1 deletion src/Artemis.Storage/Migrations/IStorageMigration.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using LiteDB;

namespace Artemis.Storage.Migrations.Interfaces;
namespace Artemis.Storage.Migrations;

public interface IStorageMigration
{
Expand Down
9 changes: 0 additions & 9 deletions src/Artemis.Storage/Migrations/Profile/M0001NodeProviders.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
using LiteDB;
using Newtonsoft.Json.Linq;

namespace Artemis.Storage.Migrations.Profile;
Expand All @@ -21,9 +20,7 @@ public void Migrate(JObject profileJson)
if (folders != null)
{
foreach (JToken folder in folders)
{
MigrateProfileElement(folder);
}
}

if (layers != null)
Expand All @@ -38,12 +35,6 @@ public void Migrate(JObject profileJson)
}
}

/// <inheritdoc />
public void Migrate(BsonDocument profileBson)
{
throw new System.NotImplementedException();
}

private void MigrateProfileElement(JToken profileElement)
{
JArray? layerEffects = (JArray?) profileElement["LayerEffects"]?["$values"];
Expand Down
3 changes: 1 addition & 2 deletions src/Artemis.Storage/Migrations/Storage/M0020AvaloniaReset.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
using System.Collections.Generic;
using System.Linq;
using Artemis.Storage.Migrations.Interfaces;
using LiteDB;

namespace Artemis.Storage.Migrations;
namespace Artemis.Storage.Migrations.Storage;

public class M0020AvaloniaReset : IStorageMigration
{
Expand Down
3 changes: 1 addition & 2 deletions src/Artemis.Storage/Migrations/Storage/M0021GradientNodes.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
using System.Linq;
using Artemis.Storage.Entities.Profile;
using Artemis.Storage.Entities.Profile.Nodes;
using Artemis.Storage.Migrations.Interfaces;
using LiteDB;

namespace Artemis.Storage.Migrations;
namespace Artemis.Storage.Migrations.Storage;

public class M0021GradientNodes : IStorageMigration
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,9 @@
using Artemis.Storage.Entities.Profile.Abstract;
using Artemis.Storage.Entities.Profile.Conditions;
using Artemis.Storage.Entities.Profile.Nodes;
using Artemis.Storage.Migrations.Interfaces;
using LiteDB;

namespace Artemis.Storage.Migrations;
namespace Artemis.Storage.Migrations.Storage;

public class M0022TransitionNodes : IStorageMigration
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
using System.Collections.Generic;
using Artemis.Storage.Migrations.Interfaces;
using LiteDB;

namespace Artemis.Storage.Migrations;
namespace Artemis.Storage.Migrations.Storage;

public class M0023LayoutProviders : IStorageMigration
{
Expand Down
100 changes: 100 additions & 0 deletions src/Artemis.Storage/Migrations/Storage/M0024NodeProviders.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
using System.Collections.Generic;
using Artemis.Storage.Entities.Profile;
using LiteDB;

namespace Artemis.Storage.Migrations.Storage;

public class M0024NodeProviders : IStorageMigration
{
public int UserVersion => 24;

public void Apply(LiteRepository repository)
{
List<ProfileCategoryEntity> profileCategories = repository.Query<ProfileCategoryEntity>().ToList();
foreach (ProfileCategoryEntity profileCategory in profileCategories)
{
foreach (ProfileConfigurationEntity profileConfigurationEntity in profileCategory.ProfileConfigurations)
{
profileConfigurationEntity.Version = 1;
}
repository.Update(profileCategory);
}

ILiteCollection<BsonDocument> collection = repository.Database.GetCollection("ProfileEntity");
foreach (BsonDocument profileBson in collection.FindAll())
{
BsonArray? folders = profileBson["Folders"]?.AsArray;
BsonArray? layers = profileBson["Layers"]?.AsArray;

if (folders != null)
{
foreach (BsonValue folder in folders)
MigrateProfileElement(folder.AsDocument);
}

if (layers != null)
{
foreach (BsonValue layer in layers)
{
MigrateProfileElement(layer.AsDocument);
MigratePropertyGroup(layer.AsDocument["GeneralPropertyGroup"].AsDocument);
MigratePropertyGroup(layer.AsDocument["TransformPropertyGroup"].AsDocument);
MigratePropertyGroup(layer.AsDocument["LayerBrush"]?["PropertyGroup"].AsDocument);
}
}

collection.Update(profileBson);
}
}

private void MigrateProfileElement(BsonDocument profileElement)
{
BsonArray? layerEffects = profileElement["LayerEffects"]?.AsArray;
if (layerEffects != null)
{
foreach (BsonValue layerEffect in layerEffects)
MigratePropertyGroup(layerEffect.AsDocument["PropertyGroup"].AsDocument);
}

BsonValue? displayCondition = profileElement["DisplayCondition"];
if (displayCondition != null)
MigrateNodeScript(displayCondition.AsDocument["Script"].AsDocument);
}

private void MigratePropertyGroup(BsonDocument? propertyGroup)
{
if (propertyGroup == null || propertyGroup.Keys.Count == 0)
return;

BsonArray? properties = propertyGroup["Properties"]?.AsArray;
BsonArray? propertyGroups = propertyGroup["PropertyGroups"]?.AsArray;

if (properties != null)
{
foreach (BsonValue property in properties)
MigrateNodeScript(property.AsDocument["DataBinding"]?["NodeScript"]?.AsDocument);
}

if (propertyGroups != null)
{
foreach (BsonValue childPropertyGroup in propertyGroups)
MigratePropertyGroup(childPropertyGroup.AsDocument);
}
}

private void MigrateNodeScript(BsonDocument? nodeScript)
{
if (nodeScript == null || nodeScript.Keys.Count == 0)
return;

BsonArray? nodes = nodeScript["Nodes"]?.AsArray;
if (nodes == null)
return;

foreach (BsonValue node in nodes)
{
node.AsDocument["Type"] = node.AsDocument["Type"]?.AsString?.Replace("Artemis.VisualScripting.Nodes", "Artemis.Plugins.Nodes.General.Nodes");
node.AsDocument["ProviderId"] = "Artemis.Plugins.Nodes.General.GeneralNodesProvider-d9e1ee78";
}
}
}
2 changes: 1 addition & 1 deletion src/Artemis.Storage/StorageMigrationService.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Artemis.Storage.Migrations.Interfaces;
using Artemis.Storage.Migrations;
using LiteDB;
using Serilog;

Expand Down

0 comments on commit 49ed020

Please sign in to comment.