diff --git a/NebulaAuth.sln.DotSettings b/NebulaAuth.sln.DotSettings index e2bba46..140e175 100644 --- a/NebulaAuth.sln.DotSettings +++ b/NebulaAuth.sln.DotSettings @@ -1,3 +1,314 @@  DO_NOT_SHOW + <Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"> + <TypePattern DisplayName="Non-reorderable types" Priority="99999999"> + <TypePattern.Match> + <Or> + <And> + <Kind Is="Interface" /> + <Or> + <HasAttribute Name="System.Runtime.InteropServices.InterfaceTypeAttribute" /> + <HasAttribute Name="System.Runtime.InteropServices.ComImport" /> + </Or> + </And> + <Kind Is="Struct" /> + <HasAttribute Name="System.Runtime.InteropServices.StructLayoutAttribute" /> + <HasAttribute Name="JetBrains.Annotations.NoReorderAttribute" /> + </Or> + </TypePattern.Match> + </TypePattern> + <TypePattern DisplayName="xUnit.net Test Classes" RemoveRegions="All"> + <TypePattern.Match> + <And> + <Kind Is="Class" /> + <HasMember> + <And> + <Kind Is="Method" /> + <HasAttribute Inherited="True" Name="Xunit.FactAttribute" /> + <HasAttribute Inherited="True" Name="Xunit.TheoryAttribute" /> + </And> + </HasMember> + </And> + </TypePattern.Match> + <Entry DisplayName="Fields"> + <Entry.Match> + <And> + <Kind Is="Field" /> + <Not> + <Static /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Readonly /> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Constructors"> + <Entry.Match> + <Kind Is="Constructor" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Teardown Methods"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <ImplementsInterface Name="System.IDisposable" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="All other members" /> + <Entry DisplayName="Test Methods" Priority="100"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="Xunit.FactAttribute" /> + <HasAttribute Name="Xunit.TheoryAttribute" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + </TypePattern> + <TypePattern DisplayName="NUnit Test Fixtures" RemoveRegions="All"> + <TypePattern.Match> + <And> + <Kind Is="Class" /> + <Or> + <HasAttribute Inherited="True" Name="NUnit.Framework.TestFixtureAttribute" /> + <HasAttribute Inherited="True" Name="NUnit.Framework.TestFixtureSourceAttribute" /> + <HasMember> + <And> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.TestAttribute" /> + <HasAttribute Name="NUnit.Framework.TestCaseAttribute" /> + <HasAttribute Name="NUnit.Framework.TestCaseSourceAttribute" /> + </And> + </HasMember> + </Or> + </And> + </TypePattern.Match> + <Entry DisplayName="Setup/Teardown Methods"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Or> + <HasAttribute Inherited="True" Name="NUnit.Framework.SetUpAttribute" /> + <HasAttribute Inherited="True" Name="NUnit.Framework.TearDownAttribute" /> + <HasAttribute Inherited="True" Name="NUnit.Framework.TestFixtureSetUpAttribute" /> + <HasAttribute Inherited="True" Name="NUnit.Framework.TestFixtureTearDownAttribute" /> + <HasAttribute Inherited="True" Name="NUnit.Framework.OneTimeSetUpAttribute" /> + <HasAttribute Inherited="True" Name="NUnit.Framework.OneTimeTearDownAttribute" /> + </Or> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="All other members" /> + <Entry DisplayName="Test Methods" Priority="100"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <HasAttribute Name="NUnit.Framework.TestAttribute" /> + <HasAttribute Name="NUnit.Framework.TestCaseAttribute" /> + <HasAttribute Name="NUnit.Framework.TestCaseSourceAttribute" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + </TypePattern> + <TypePattern DisplayName="Grains"> + <TypePattern.Match> + <And> + <Or> + <ImplementsInterface Name="^Orleans\.IGrain$" /> + <ImplementsInterface Name="Orleans.IGrainBase" /> + <ImplementsInterface Name="Achiefy.Orleans.Tenancy.Abstractions.ITenantGrain" /> + <InheritsFromType Name="Orleans.Grain" /> + <InheritsFromType Name="Achiefy.Tenant.Application.Stateful.Core.TenantGrain" /> + </Or> + <Not> + <Abstract /> + </Not> + <Kind Is="Class" /> + </And> + </TypePattern.Match> + <Entry DisplayName="Public Delegates" Priority="100"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Kind Is="Delegate" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Public Enums" Priority="100"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Kind Is="Enum" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Nested Records"> + <Entry.Match> + <Kind Is="Record" /> + </Entry.Match> + </Entry> + <Group DisplayName="Group"> + <Entry DisplayName="Static Fields and Constants"> + <Entry.Match> + <Or> + <Kind Is="Constant" /> + <And> + <Kind Is="Field" /> + <Static /> + </And> + </Or> + </Entry.Match> + <Entry.SortBy> + <Kind Is="0" Order="Constant Field" /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Properties, Indexers"> + <Entry.Match> + <Or> + <Kind Is="Property" /> + <Kind Is="Indexer" /> + </Or> + </Entry.Match> + </Entry> + <Entry DisplayName="Fields"> + <Entry.Match> + <And> + <Kind Is="Field" /> + <Not> + <Static /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Readonly /> + <Name /> + </Entry.SortBy> + </Entry> + </Group> + <Entry DisplayName="Constructors"> + <Entry.Match> + <Kind Is="Constructor" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Lifecycle Methods"> + <Entry.Match> + <And> + <Kind Is="Method" /> + <Name Is="^On(Activate|Deactivate)Async.*$" /> + </And> + </Entry.Match> + </Entry> + <Entry DisplayName="All other members" /> + <Entry DisplayName="Nested Types"> + <Entry.Match> + <Kind Is="Type" /> + </Entry.Match> + </Entry> + </TypePattern> + <TypePattern DisplayName="Default Pattern"> + <Entry DisplayName="Public Enums" Priority="100"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Kind Is="Enum" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Public Delegates" Priority="100"> + <Entry.Match> + <And> + <Access Is="Public" /> + <Kind Is="Delegate" /> + </And> + </Entry.Match> + <Entry.SortBy> + <Name /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Nested Records"> + <Entry.Match> + <Kind Is="Record" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + </Entry.SortBy> + </Entry> + <Group DisplayName="Group"> + <Entry DisplayName="Static Fields and Constants"> + <Entry.Match> + <Or> + <Kind Is="Constant" /> + <And> + <Kind Is="Field" /> + <Static /> + </And> + </Or> + </Entry.Match> + <Entry.SortBy> + <Kind Is="0" Order="Constant Field" /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="Properties, Indexers"> + <Entry.Match> + <Or> + <Kind Is="Property" /> + <Kind Is="Indexer" /> + </Or> + </Entry.Match> + </Entry> + <Entry DisplayName="Fields"> + <Entry.Match> + <And> + <Kind Is="Field" /> + <Not> + <Static /> + </Not> + </And> + </Entry.Match> + <Entry.SortBy> + <Readonly /> + <Name /> + </Entry.SortBy> + </Entry> + </Group> + <Entry DisplayName="Constructors"> + <Entry.Match> + <Kind Is="Constructor" /> + </Entry.Match> + <Entry.SortBy> + <Static /> + </Entry.SortBy> + </Entry> + <Entry DisplayName="All other members" /> + <Entry DisplayName="Nested Types"> + <Entry.Match> + <Kind Is="Type" /> + </Entry.Match> + </Entry> + </TypePattern> +</Patterns> True \ No newline at end of file diff --git a/changelog/1.8.1.html b/changelog/1.8.1.html index 03a1b77..7c159c4 100644 --- a/changelog/1.8.1.html +++ b/changelog/1.8.1.html @@ -63,25 +63,25 @@ -
-
-
Version 1.8.1
-
25.01.2026
-
-
    -
  • NEW: Added Mafile Export tool with templates, batch export and flexible field filtering.
  • -
  • IMPROVEMENT: Reworked auto-confirmation error handling logic (MAAC) — fewer false disables, smarter retries.
  • -
  • UPDATE: Added “Unattach Proxy” option to the account context menu.
  • -
  • LOCALIZATION: Added Chinese (Simplified) and French languages.
  • -
  • FIX: Fixed crashes related to duplicate mafiles, timers, search filtering and import logic.
  • -
  • - DETAILS: Full patch notes: - ENG | - RUS -
  • -
-
+
+
+
Version 1.8.1
+
25.01.2026
+
+
    +
  • NEW: Added Mafile Export tool with templates, batch export and flexible field filtering.
  • +
  • IMPROVEMENT: Reworked auto-confirmation error handling logic (MAAC) — fewer false disables, smarter retries.
  • +
  • UPDATE: Added “Unattach Proxy” option to the account context menu.
  • +
  • LOCALIZATION: Added Chinese (Simplified) and French languages.
  • +
  • FIX: Fixed crashes related to duplicate mafiles, timers, search filtering and import logic.
  • +
  • + DETAILS: Full patch notes: + ENG | + RUS +
  • +
+
\ No newline at end of file diff --git a/changelog/1.8.2.html b/changelog/1.8.2.html index 7a44a8a..9a4308b 100644 --- a/changelog/1.8.2.html +++ b/changelog/1.8.2.html @@ -63,16 +63,16 @@ -
-
-
Version 1.8.2
-
10.02.2026
-
-
    -
  • FIX: AutoConfirm timer now correctly resets the status after a successful request (Warning → Ok).
  • -
-
+
+
+
Version 1.8.2
+
10.02.2026
+
+
    +
  • FIX: AutoConfirm timer now correctly resets the status after a successful request (Warning → Ok).
  • +
+
\ No newline at end of file diff --git a/src/NebulaAuth/Core/DialogsController.cs b/src/NebulaAuth/Core/DialogsController.cs index 7d8790c..2e25ba8 100644 --- a/src/NebulaAuth/Core/DialogsController.cs +++ b/src/NebulaAuth/Core/DialogsController.cs @@ -190,4 +190,4 @@ public static class DialogsController } #endregion -} +} \ No newline at end of file diff --git a/src/NebulaAuth/Model/NebulaSerializer.cs b/src/NebulaAuth/Model/NebulaSerializer.cs index 26aa14a..642d772 100644 --- a/src/NebulaAuth/Model/NebulaSerializer.cs +++ b/src/NebulaAuth/Model/NebulaSerializer.cs @@ -87,4 +87,4 @@ public static class NebulaSerializer { return MafileSerializer.SerializeLegacy(data, Serializer.Settings.SerializationOptions, properties); } -} +} \ No newline at end of file diff --git a/src/NebulaAuth/Model/Settings.cs b/src/NebulaAuth/Model/Settings.cs index 130a387..a422e32 100644 --- a/src/NebulaAuth/Model/Settings.cs +++ b/src/NebulaAuth/Model/Settings.cs @@ -127,4 +127,4 @@ public enum ThemeType Light = 2, Luxury = 3, Shadcn = 4 -} +} \ No newline at end of file diff --git a/src/NebulaAuth/Model/Update/ChangelogEntry.cs b/src/NebulaAuth/Model/Update/ChangelogEntry.cs index bda8ba9..17b7225 100644 --- a/src/NebulaAuth/Model/Update/ChangelogEntry.cs +++ b/src/NebulaAuth/Model/Update/ChangelogEntry.cs @@ -3,20 +3,20 @@ using Newtonsoft.Json; namespace NebulaAuth.Model.Update; - public class ChangelogEntry - { - [JsonProperty("version")] public string Version { get; set; } = string.Empty; +public class ChangelogEntry +{ + [JsonProperty("version")] public string Version { get; set; } = string.Empty; - [JsonProperty("date")] public string Date { get; set; } = string.Empty; + [JsonProperty("date")] public string Date { get; set; } = string.Empty; - [JsonProperty("changes")] public List Changes { get; set; } = new(); - } + [JsonProperty("changes")] public List Changes { get; set; } = new(); +} - public class ChangeItem - { - [JsonProperty("type")] public string Type { get; set; } = string.Empty; +public class ChangeItem +{ + [JsonProperty("type")] public string Type { get; set; } = string.Empty; - [JsonProperty("text")] public string Text { get; set; } = string.Empty; + [JsonProperty("text")] public string Text { get; set; } = string.Empty; - [JsonProperty("link")] public string? Link { get; set; } - } \ No newline at end of file + [JsonProperty("link")] public string? Link { get; set; } +} \ No newline at end of file diff --git a/src/NebulaAuth/View/Dialogs/MafileImportDialog.xaml b/src/NebulaAuth/View/Dialogs/MafileImportDialog.xaml index 9645356..6a74b44 100644 --- a/src/NebulaAuth/View/Dialogs/MafileImportDialog.xaml +++ b/src/NebulaAuth/View/Dialogs/MafileImportDialog.xaml @@ -45,10 +45,10 @@ CornerRadius="8" BorderThickness="1"> - + - + @@ -92,14 +92,12 @@ Margin="42,0,10,0" IsEditable="True" ItemsSource="{Binding Groups}" - + Text="{Binding Group, UpdateSourceTrigger=PropertyChanged}" materialDesign:HintAssist.Hint="{Tr MafileImportDialog.GroupFieldHint}" materialDesign:HintAssist.IsFloating="False" Visibility="{Binding AddToGroup, Converter={StaticResource BooleanToVisibilityConverter}}" - Style="{StaticResource MaterialDesignFloatingHintComboBox}" - - /> + Style="{StaticResource MaterialDesignFloatingHintComboBox}" /> @@ -126,4 +124,4 @@ - + \ No newline at end of file diff --git a/src/NebulaAuth/View/Dialogs/MafileImportDialog.xaml.cs b/src/NebulaAuth/View/Dialogs/MafileImportDialog.xaml.cs index bad4ba3..21e5b79 100644 --- a/src/NebulaAuth/View/Dialogs/MafileImportDialog.xaml.cs +++ b/src/NebulaAuth/View/Dialogs/MafileImportDialog.xaml.cs @@ -6,4 +6,4 @@ public partial class MafileImportDialog { InitializeComponent(); } -} +} \ No newline at end of file diff --git a/src/NebulaAuth/View/ProxyManagerView.xaml b/src/NebulaAuth/View/ProxyManagerView.xaml index 6dfadf9..0497079 100644 --- a/src/NebulaAuth/View/ProxyManagerView.xaml +++ b/src/NebulaAuth/View/ProxyManagerView.xaml @@ -154,17 +154,18 @@ - diff --git a/src/NebulaAuth/View/SettingsView.xaml b/src/NebulaAuth/View/SettingsView.xaml index 310844f..e2aa5c6 100644 --- a/src/NebulaAuth/View/SettingsView.xaml +++ b/src/NebulaAuth/View/SettingsView.xaml @@ -196,4 +196,4 @@ - + \ No newline at end of file diff --git a/src/NebulaAuth/ViewModel/MainVM_File.cs b/src/NebulaAuth/ViewModel/MainVM_File.cs index 8825736..4b0fdfa 100644 --- a/src/NebulaAuth/ViewModel/MainVM_File.cs +++ b/src/NebulaAuth/ViewModel/MainVM_File.cs @@ -31,6 +31,8 @@ public partial class MainVM //File //TODO: Refactor bool SdaPasswordPrompted, SDAEncryptionHelper.Context? SdaContext); + private record MafileImportPlanItem(Mafile Mafile, bool RequiresRelogin, bool HasConflict); + public Settings Settings => Settings.Instance; @@ -408,11 +410,4 @@ public partial class MainVM //File //TODO: Refactor if (mafile is not Mafile maf) return false; return maf.Password != null && PHandler.IsPasswordSet; } - - private record MafileReadResult( - Mafile? Mafile, - bool SdaPasswordPrompted, - SDAEncryptionHelper.Context? SdaContext); - - private record MafileImportPlanItem(Mafile Mafile, bool RequiresRelogin, bool HasConflict); -} +} \ No newline at end of file diff --git a/src/NebulaAuth/ViewModel/Other/MafileImportDialogVM.cs b/src/NebulaAuth/ViewModel/Other/MafileImportDialogVM.cs index f4391dd..21b1f88 100644 --- a/src/NebulaAuth/ViewModel/Other/MafileImportDialogVM.cs +++ b/src/NebulaAuth/ViewModel/Other/MafileImportDialogVM.cs @@ -6,20 +6,20 @@ namespace NebulaAuth.ViewModel.Other; public partial class MafileImportDialogVM : ObservableObject { + public ObservableCollection Groups { get; } + public int TotalCount { get; } + public int ConflictCount { get; } + public bool HasConflicts => ConflictCount > 0; + [ObservableProperty] private bool _addToGroup; + [ObservableProperty] private string? _group; + [ObservableProperty] private bool _overwriteConflicts; + public MafileImportDialogVM(IEnumerable groups, int totalCount, int conflictCount) { Groups = new ObservableCollection(groups); TotalCount = totalCount; ConflictCount = conflictCount; } - - public ObservableCollection Groups { get; } - public int TotalCount { get; } - public int ConflictCount { get; } - public bool HasConflicts => ConflictCount > 0; - [ObservableProperty] private string? _group; - [ObservableProperty] private bool _addToGroup; - [ObservableProperty] private bool _overwriteConflicts; } -public record MafileImportDialogResult(string? Group, bool OverwriteConflicts); +public record MafileImportDialogResult(string? Group, bool OverwriteConflicts); \ No newline at end of file diff --git a/src/NebulaAuth/ViewModel/Other/SettingsVM.cs b/src/NebulaAuth/ViewModel/Other/SettingsVM.cs index 5d9a67c..e75d4ca 100644 --- a/src/NebulaAuth/ViewModel/Other/SettingsVM.cs +++ b/src/NebulaAuth/ViewModel/Other/SettingsVM.cs @@ -249,4 +249,4 @@ public partial class SettingsVM : ObservableObject } #endregion -} +} \ No newline at end of file