diff --git a/src/Artemis.Core/Models/ProfileConfiguration/ProfileConfiguration.cs b/src/Artemis.Core/Models/ProfileConfiguration/ProfileConfiguration.cs index 84869736e..01d7ef2dd 100644 --- a/src/Artemis.Core/Models/ProfileConfiguration/ProfileConfiguration.cs +++ b/src/Artemis.Core/Models/ProfileConfiguration/ProfileConfiguration.cs @@ -173,6 +173,7 @@ namespace Artemis.Core Name = Entity.Name; IsSuspended = Entity.IsSuspended; ActivationBehaviour = (ActivationBehaviour) Entity.ActivationBehaviour; + Order = Entity.Order; Icon.Load(); @@ -188,6 +189,7 @@ namespace Artemis.Core Entity.IsSuspended = IsSuspended; Entity.ActivationBehaviour = (int) ActivationBehaviour; Entity.ProfileCategoryId = Category.Entity.Id; + Entity.Order = Order; Icon.Save(); diff --git a/src/Artemis.Core/Services/Storage/ProfileService.cs b/src/Artemis.Core/Services/Storage/ProfileService.cs index fe887ddf2..41efce23d 100644 --- a/src/Artemis.Core/Services/Storage/ProfileService.cs +++ b/src/Artemis.Core/Services/Storage/ProfileService.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; +using System.IO; using System.Linq; using Artemis.Core.Modules; using Artemis.Storage.Entities.Profile; @@ -487,19 +488,26 @@ namespace Artemis.Core.Services ProfileConfiguration profileConfiguration; if (exportModel.ProfileConfigurationEntity != null) { + ProfileConfigurationEntity profileConfigurationEntity = JsonConvert.DeserializeObject( + JsonConvert.SerializeObject(exportModel.ProfileConfigurationEntity, IProfileService.ExportSettings), IProfileService.ExportSettings + )!; // A new GUID will be given on save - exportModel.ProfileConfigurationEntity.FileIconId = Guid.Empty; - profileConfiguration = new ProfileConfiguration(category, exportModel.ProfileConfigurationEntity); + profileConfigurationEntity.FileIconId = Guid.Empty; + profileConfiguration = new ProfileConfiguration(category, profileConfigurationEntity); if (nameAffix != null) profileConfiguration.Name = $"{profileConfiguration.Name} - {nameAffix}"; } else { - profileConfiguration = new ProfileConfiguration(category, exportModel.ProfileEntity!.Name, "Import"); + profileConfiguration = new ProfileConfiguration(category, profileEntity.Name, "Import"); } if (exportModel.ProfileImage != null) - profileConfiguration.Icon.FileIcon = exportModel.ProfileImage; + { + profileConfiguration.Icon.FileIcon = new MemoryStream(); + exportModel.ProfileImage.Position = 0; + exportModel.ProfileImage.CopyTo(profileConfiguration.Icon.FileIcon); + } profileConfiguration.Entity.ProfileId = profileEntity.Id; category.AddProfileConfiguration(profileConfiguration, 0); diff --git a/src/Artemis.Storage/Entities/Profile/ProfileConfigurationEntity.cs b/src/Artemis.Storage/Entities/Profile/ProfileConfigurationEntity.cs index 9f7fcf0f6..32c92e15f 100644 --- a/src/Artemis.Storage/Entities/Profile/ProfileConfigurationEntity.cs +++ b/src/Artemis.Storage/Entities/Profile/ProfileConfigurationEntity.cs @@ -9,6 +9,7 @@ namespace Artemis.Storage.Entities.Profile public string MaterialIcon { get; set; } public Guid FileIconId { get; set; } public int IconType { get; set; } + public int Order { get; set; } public bool IsSuspended { get; set; } public int ActivationBehaviour { get; set; } diff --git a/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileEdit/ProfileModuleViewModel.cs b/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileEdit/ProfileModuleViewModel.cs index 5f923d22c..5e4612034 100644 --- a/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileEdit/ProfileModuleViewModel.cs +++ b/src/Artemis.UI/Screens/Sidebar/Dialogs/ProfileEdit/ProfileModuleViewModel.cs @@ -1,4 +1,5 @@ using Artemis.Core.Modules; +using MaterialDesignThemes.Wpf; using Stylet; namespace Artemis.UI.Screens.Sidebar.Dialogs.ProfileEdit @@ -8,8 +9,12 @@ namespace Artemis.UI.Screens.Sidebar.Dialogs.ProfileEdit public ProfileModuleViewModel(Module module) { Module = module; - Icon = module.DisplayIcon; Name = module.DisplayName; + if (module.DisplayIcon != null) + Icon = module.DisplayIcon.EndsWith(".svg") ? module.Plugin.ResolveRelativePath(module.DisplayIcon) : module.DisplayIcon; + else + Icon = PackIconKind.QuestionMark.ToString(); + Description = module.Info.Description; } diff --git a/src/Artemis.UI/Screens/Sidebar/SidebarCategoryViewModel.cs b/src/Artemis.UI/Screens/Sidebar/SidebarCategoryViewModel.cs index 27221028f..a4f85cf19 100644 --- a/src/Artemis.UI/Screens/Sidebar/SidebarCategoryViewModel.cs +++ b/src/Artemis.UI/Screens/Sidebar/SidebarCategoryViewModel.cs @@ -29,7 +29,6 @@ namespace Artemis.UI.Screens.Sidebar private readonly IEventAggregator _eventAggregator; private readonly IProfileService _profileService; private SidebarProfileConfigurationViewModel _selectedProfileConfiguration; - private bool _showItems; private readonly DefaultDropHandler _defaultDropHandler; private bool _addingProfile; @@ -43,7 +42,6 @@ namespace Artemis.UI.Screens.Sidebar _dialogService = dialogService; _vmFactory = vmFactory; _eventAggregator = eventAggregator; - _showItems = !profileCategory.IsCollapsed; _defaultDropHandler = new DefaultDropHandler(); ProfileCategory = profileCategory; @@ -53,15 +51,15 @@ namespace Artemis.UI.Screens.Sidebar public bool ShowItems { - get => _showItems; + get => !ProfileCategory.IsCollapsed; set { - if (!SetAndNotify(ref _showItems, value)) return; - - if (value) - CreateProfileViewModels(); - else + ProfileCategory.IsCollapsed = !value; + if (ProfileCategory.IsCollapsed) Items.Clear(); + else + CreateProfileViewModels(); + _profileService.SaveProfileCategory(ProfileCategory); } } @@ -218,7 +216,8 @@ namespace Artemis.UI.Screens.Sidebar /// protected override void OnActivate() { - CreateProfileViewModels(); + if (ShowItems) + CreateProfileViewModels(); base.OnActivate(); }