diff --git a/src/Artemis.Core/Constants.cs b/src/Artemis.Core/Constants.cs
index 06d0bb786..21e819b2d 100644
--- a/src/Artemis.Core/Constants.cs
+++ b/src/Artemis.Core/Constants.cs
@@ -41,7 +41,7 @@ public static class Constants
/// The full path to the Artemis data folder
///
#if DEBUG
- public static readonly string DataFolder = Path.Combine(BaseFolder, "Artemis");
+ public static readonly string DataFolder = Path.Combine(BaseFolder, "Artemis-dev");
#else
public static readonly string DataFolder = Path.Combine(BaseFolder, "Artemis");
#endif
diff --git a/src/Artemis.Storage/Migrations/20251227175841_FixEntryTypes.Designer.cs b/src/Artemis.Storage/Migrations/20251227175841_FixEntryTypes.Designer.cs
new file mode 100644
index 000000000..36b389b9e
--- /dev/null
+++ b/src/Artemis.Storage/Migrations/20251227175841_FixEntryTypes.Designer.cs
@@ -0,0 +1,337 @@
+//
+using System;
+using Artemis.Storage;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace Artemis.Storage.Migrations
+{
+ [DbContext(typeof(ArtemisDbContext))]
+ [Migration("20251227175841_FixEntryTypes")]
+ partial class FixEntryTypes
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder.HasAnnotation("ProductVersion", "10.0.1");
+
+ modelBuilder.Entity("Artemis.Storage.Entities.General.ReleaseEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("InstalledAt")
+ .HasColumnType("TEXT");
+
+ b.Property("Version")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("InstalledAt");
+
+ b.HasIndex("Version")
+ .IsUnique();
+
+ b.ToTable("Releases");
+ });
+
+ modelBuilder.Entity("Artemis.Storage.Entities.Plugins.PluginEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("IsEnabled")
+ .HasColumnType("INTEGER");
+
+ b.Property("PluginGuid")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PluginGuid")
+ .IsUnique();
+
+ b.ToTable("Plugins");
+ });
+
+ modelBuilder.Entity("Artemis.Storage.Entities.Plugins.PluginFeatureEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("IsEnabled")
+ .HasColumnType("INTEGER");
+
+ b.Property("PluginEntityId")
+ .HasColumnType("TEXT");
+
+ b.Property("Type")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PluginEntityId");
+
+ b.ToTable("PluginFeatures");
+ });
+
+ modelBuilder.Entity("Artemis.Storage.Entities.Plugins.PluginSettingEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(128)
+ .HasColumnType("TEXT");
+
+ b.Property("PluginGuid")
+ .HasColumnType("TEXT");
+
+ b.Property("Value")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PluginGuid");
+
+ b.HasIndex("Name", "PluginGuid")
+ .IsUnique();
+
+ b.ToTable("PluginSettings");
+ });
+
+ modelBuilder.Entity("Artemis.Storage.Entities.Profile.ProfileCategoryEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("IsCollapsed")
+ .HasColumnType("INTEGER");
+
+ b.Property("IsSuspended")
+ .HasColumnType("INTEGER");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(64)
+ .HasColumnType("TEXT");
+
+ b.Property("Order")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name")
+ .IsUnique();
+
+ b.ToTable("ProfileCategories");
+ });
+
+ modelBuilder.Entity("Artemis.Storage.Entities.Profile.ProfileContainerEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("Icon")
+ .IsRequired()
+ .HasColumnType("BLOB");
+
+ b.Property("Profile")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("ProfileCategoryId")
+ .HasColumnType("TEXT");
+
+ b.Property("ProfileConfiguration")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProfileCategoryId");
+
+ b.ToTable("ProfileContainers");
+ });
+
+ modelBuilder.Entity("Artemis.Storage.Entities.Surface.DeviceEntity", b =>
+ {
+ b.Property("Id")
+ .HasMaxLength(512)
+ .HasColumnType("TEXT");
+
+ b.Property("BlueScale")
+ .HasColumnType("REAL");
+
+ b.PrimitiveCollection("Categories")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("DeviceProvider")
+ .IsRequired()
+ .HasMaxLength(512)
+ .HasColumnType("TEXT");
+
+ b.Property("GreenScale")
+ .HasColumnType("REAL");
+
+ b.Property("InputIdentifiers")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("InputMappings")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("IsEnabled")
+ .HasColumnType("INTEGER");
+
+ b.Property("LayoutParameter")
+ .HasMaxLength(512)
+ .HasColumnType("TEXT");
+
+ b.Property("LayoutType")
+ .HasMaxLength(64)
+ .HasColumnType("TEXT");
+
+ b.Property("LogicalLayout")
+ .HasMaxLength(32)
+ .HasColumnType("TEXT");
+
+ b.Property("PhysicalLayout")
+ .HasColumnType("INTEGER");
+
+ b.Property("RedScale")
+ .HasColumnType("REAL");
+
+ b.Property("Rotation")
+ .HasColumnType("REAL");
+
+ b.Property("Scale")
+ .HasColumnType("REAL");
+
+ b.Property("X")
+ .HasColumnType("REAL");
+
+ b.Property("Y")
+ .HasColumnType("REAL");
+
+ b.Property("ZIndex")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Id");
+
+ b.ToTable("Devices");
+ });
+
+ modelBuilder.Entity("Artemis.Storage.Entities.Workshop.EntryEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("Author")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("AutoUpdate")
+ .HasColumnType("INTEGER");
+
+ b.Property("Categories")
+ .HasColumnType("TEXT");
+
+ b.Property("CreatedAt")
+ .HasColumnType("TEXT");
+
+ b.Property("Downloads")
+ .HasColumnType("INTEGER");
+
+ b.Property("EntryId")
+ .HasColumnType("INTEGER");
+
+ b.Property("EntryType")
+ .HasColumnType("INTEGER");
+
+ b.Property("InstalledAt")
+ .HasColumnType("TEXT");
+
+ b.Property("IsOfficial")
+ .HasColumnType("INTEGER");
+
+ b.Property("LatestReleaseId")
+ .HasColumnType("INTEGER");
+
+ b.Property("Metadata")
+ .HasColumnType("TEXT");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("ReleaseId")
+ .HasColumnType("INTEGER");
+
+ b.Property("ReleaseVersion")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Summary")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EntryId")
+ .IsUnique();
+
+ b.ToTable("Entries");
+ });
+
+ modelBuilder.Entity("Artemis.Storage.Entities.Plugins.PluginFeatureEntity", b =>
+ {
+ b.HasOne("Artemis.Storage.Entities.Plugins.PluginEntity", null)
+ .WithMany("Features")
+ .HasForeignKey("PluginEntityId");
+ });
+
+ modelBuilder.Entity("Artemis.Storage.Entities.Profile.ProfileContainerEntity", b =>
+ {
+ b.HasOne("Artemis.Storage.Entities.Profile.ProfileCategoryEntity", "ProfileCategory")
+ .WithMany("ProfileConfigurations")
+ .HasForeignKey("ProfileCategoryId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("ProfileCategory");
+ });
+
+ modelBuilder.Entity("Artemis.Storage.Entities.Plugins.PluginEntity", b =>
+ {
+ b.Navigation("Features");
+ });
+
+ modelBuilder.Entity("Artemis.Storage.Entities.Profile.ProfileCategoryEntity", b =>
+ {
+ b.Navigation("ProfileConfigurations");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/Artemis.Storage/Migrations/20251227175841_FixEntryTypes.cs b/src/Artemis.Storage/Migrations/20251227175841_FixEntryTypes.cs
new file mode 100644
index 000000000..01664151c
--- /dev/null
+++ b/src/Artemis.Storage/Migrations/20251227175841_FixEntryTypes.cs
@@ -0,0 +1,25 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace Artemis.Storage.Migrations
+{
+ ///
+ public partial class FixEntryTypes : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ // These were scrambled in Artemis 1.2025.1223.2 due to a bad GraphQL introspection copy-paste
+ migrationBuilder.Sql("UPDATE Entries SET EntryType = 0 WHERE Metadata LIKE '%PluginId%';");
+ migrationBuilder.Sql("UPDATE Entries SET EntryType = 1 WHERE Metadata LIKE '%ProfileId%';");
+ migrationBuilder.Sql("UPDATE Entries SET EntryType = 2 WHERE Metadata = '{}';");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+
+ }
+ }
+}
diff --git a/src/Artemis.Storage/Migrations/ArtemisDbContextModelSnapshot.cs b/src/Artemis.Storage/Migrations/ArtemisDbContextModelSnapshot.cs
index dfccb79fd..88899ffdd 100644
--- a/src/Artemis.Storage/Migrations/ArtemisDbContextModelSnapshot.cs
+++ b/src/Artemis.Storage/Migrations/ArtemisDbContextModelSnapshot.cs
@@ -15,7 +15,7 @@ namespace Artemis.Storage.Migrations
protected override void BuildModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "9.0.1");
+ modelBuilder.HasAnnotation("ProductVersion", "10.0.1");
modelBuilder.Entity("Artemis.Storage.Entities.General.ReleaseEntity", b =>
{
diff --git a/src/Artemis.UI.Windows/Artemis.UI.Windows.csproj b/src/Artemis.UI.Windows/Artemis.UI.Windows.csproj
index ebf6b8b40..fa20255b0 100644
--- a/src/Artemis.UI.Windows/Artemis.UI.Windows.csproj
+++ b/src/Artemis.UI.Windows/Artemis.UI.Windows.csproj
@@ -23,6 +23,10 @@
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
diff --git a/src/Artemis.UI/MainWindow.axaml.cs b/src/Artemis.UI/MainWindow.axaml.cs
index 612eca968..75f88f8d8 100644
--- a/src/Artemis.UI/MainWindow.axaml.cs
+++ b/src/Artemis.UI/MainWindow.axaml.cs
@@ -83,9 +83,10 @@ public partial class MainWindow : ReactiveAppWindow
private void InputElement_OnPointerReleased(object? sender, PointerReleasedEventArgs e)
{
- if (e.InitialPressMouseButton == MouseButton.XButton1)
+
+ if (e.Properties.PointerUpdateKind == PointerUpdateKind.XButton1Released)
ViewModel?.GoBack();
- else if (e.InitialPressMouseButton == MouseButton.XButton2)
+ else if (e.Properties.PointerUpdateKind == PointerUpdateKind.XButton2Released)
ViewModel?.GoForward();
}
}
\ No newline at end of file
diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props
index bcc2f30e5..5365b6353 100644
--- a/src/Directory.Packages.props
+++ b/src/Directory.Packages.props
@@ -16,6 +16,7 @@
+