chore(resharper): perform resharper cleanup and add shared cleanup profile

This commit is contained in:
achiez
2026-06-19 19:26:26 +03:00
parent 9897ca21a6
commit 4b727af1fa
14 changed files with 377 additions and 72 deletions
+311
View File
@@ -1,3 +1,314 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=CheckNamespace/@EntryIndexedValue">DO_NOT_SHOW</s:String> <s:String x:Key="/Default/CodeInspection/Highlighting/InspectionSeverities/=CheckNamespace/@EntryIndexedValue">DO_NOT_SHOW</s:String>
<s:String x:Key="/Default/CodeStyle/CSharpFileLayoutPatterns/Pattern/@EntryValue">&lt;Patterns xmlns="urn:schemas-jetbrains-com:member-reordering-patterns"&gt;&#xD;
&lt;TypePattern DisplayName="Non-reorderable types" Priority="99999999"&gt;&#xD;
&lt;TypePattern.Match&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Interface" /&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;HasAttribute Name="System.Runtime.InteropServices.InterfaceTypeAttribute" /&gt;&#xD;
&lt;HasAttribute Name="System.Runtime.InteropServices.ComImport" /&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;Kind Is="Struct" /&gt;&#xD;
&lt;HasAttribute Name="System.Runtime.InteropServices.StructLayoutAttribute" /&gt;&#xD;
&lt;HasAttribute Name="JetBrains.Annotations.NoReorderAttribute" /&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/TypePattern.Match&gt;&#xD;
&lt;/TypePattern&gt;&#xD;
&lt;TypePattern DisplayName="xUnit.net Test Classes" RemoveRegions="All"&gt;&#xD;
&lt;TypePattern.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Class" /&gt;&#xD;
&lt;HasMember&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;HasAttribute Inherited="True" Name="Xunit.FactAttribute" /&gt;&#xD;
&lt;HasAttribute Inherited="True" Name="Xunit.TheoryAttribute" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/HasMember&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/TypePattern.Match&gt;&#xD;
&lt;Entry DisplayName="Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Not&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/Not&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Readonly /&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Constructors"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Kind Is="Constructor" /&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Teardown Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;ImplementsInterface Name="System.IDisposable" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="All other members" /&gt;&#xD;
&lt;Entry DisplayName="Test Methods" Priority="100"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;HasAttribute Name="Xunit.FactAttribute" /&gt;&#xD;
&lt;HasAttribute Name="Xunit.TheoryAttribute" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;/TypePattern&gt;&#xD;
&lt;TypePattern DisplayName="NUnit Test Fixtures" RemoveRegions="All"&gt;&#xD;
&lt;TypePattern.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Class" /&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;HasAttribute Inherited="True" Name="NUnit.Framework.TestFixtureAttribute" /&gt;&#xD;
&lt;HasAttribute Inherited="True" Name="NUnit.Framework.TestFixtureSourceAttribute" /&gt;&#xD;
&lt;HasMember&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.TestAttribute" /&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.TestCaseAttribute" /&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.TestCaseSourceAttribute" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/HasMember&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/TypePattern.Match&gt;&#xD;
&lt;Entry DisplayName="Setup/Teardown Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;HasAttribute Inherited="True" Name="NUnit.Framework.SetUpAttribute" /&gt;&#xD;
&lt;HasAttribute Inherited="True" Name="NUnit.Framework.TearDownAttribute" /&gt;&#xD;
&lt;HasAttribute Inherited="True" Name="NUnit.Framework.TestFixtureSetUpAttribute" /&gt;&#xD;
&lt;HasAttribute Inherited="True" Name="NUnit.Framework.TestFixtureTearDownAttribute" /&gt;&#xD;
&lt;HasAttribute Inherited="True" Name="NUnit.Framework.OneTimeSetUpAttribute" /&gt;&#xD;
&lt;HasAttribute Inherited="True" Name="NUnit.Framework.OneTimeTearDownAttribute" /&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="All other members" /&gt;&#xD;
&lt;Entry DisplayName="Test Methods" Priority="100"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.TestAttribute" /&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.TestCaseAttribute" /&gt;&#xD;
&lt;HasAttribute Name="NUnit.Framework.TestCaseSourceAttribute" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;/TypePattern&gt;&#xD;
&lt;TypePattern DisplayName="Grains"&gt;&#xD;
&lt;TypePattern.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;ImplementsInterface Name="^Orleans\.IGrain$" /&gt;&#xD;
&lt;ImplementsInterface Name="Orleans.IGrainBase" /&gt;&#xD;
&lt;ImplementsInterface Name="Achiefy.Orleans.Tenancy.Abstractions.ITenantGrain" /&gt;&#xD;
&lt;InheritsFromType Name="Orleans.Grain" /&gt;&#xD;
&lt;InheritsFromType Name="Achiefy.Tenant.Application.Stateful.Core.TenantGrain" /&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;Not&gt;&#xD;
&lt;Abstract /&gt;&#xD;
&lt;/Not&gt;&#xD;
&lt;Kind Is="Class" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/TypePattern.Match&gt;&#xD;
&lt;Entry DisplayName="Public Delegates" Priority="100"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Kind Is="Delegate" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Public Enums" Priority="100"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Kind Is="Enum" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Nested Records"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Kind Is="Record" /&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Group DisplayName="Group"&gt;&#xD;
&lt;Entry DisplayName="Static Fields and Constants"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;Kind Is="Constant" /&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Kind Is="0" Order="Constant Field" /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Properties, Indexers"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;Kind Is="Property" /&gt;&#xD;
&lt;Kind Is="Indexer" /&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Not&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/Not&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Readonly /&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;/Group&gt;&#xD;
&lt;Entry DisplayName="Constructors"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Kind Is="Constructor" /&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Lifecycle Methods"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Method" /&gt;&#xD;
&lt;Name Is="^On(Activate|Deactivate)Async.*$" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="All other members" /&gt;&#xD;
&lt;Entry DisplayName="Nested Types"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Kind Is="Type" /&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;/TypePattern&gt;&#xD;
&lt;TypePattern DisplayName="Default Pattern"&gt;&#xD;
&lt;Entry DisplayName="Public Enums" Priority="100"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Kind Is="Enum" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Public Delegates" Priority="100"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Access Is="Public" /&gt;&#xD;
&lt;Kind Is="Delegate" /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Nested Records"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Kind Is="Record" /&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Group DisplayName="Group"&gt;&#xD;
&lt;Entry DisplayName="Static Fields and Constants"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;Kind Is="Constant" /&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Kind Is="0" Order="Constant Field" /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Properties, Indexers"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Or&gt;&#xD;
&lt;Kind Is="Property" /&gt;&#xD;
&lt;Kind Is="Indexer" /&gt;&#xD;
&lt;/Or&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="Fields"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;And&gt;&#xD;
&lt;Kind Is="Field" /&gt;&#xD;
&lt;Not&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/Not&gt;&#xD;
&lt;/And&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Readonly /&gt;&#xD;
&lt;Name /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;/Group&gt;&#xD;
&lt;Entry DisplayName="Constructors"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Kind Is="Constructor" /&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;Entry.SortBy&gt;&#xD;
&lt;Static /&gt;&#xD;
&lt;/Entry.SortBy&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;Entry DisplayName="All other members" /&gt;&#xD;
&lt;Entry DisplayName="Nested Types"&gt;&#xD;
&lt;Entry.Match&gt;&#xD;
&lt;Kind Is="Type" /&gt;&#xD;
&lt;/Entry.Match&gt;&#xD;
&lt;/Entry&gt;&#xD;
&lt;/TypePattern&gt;&#xD;
&lt;/Patterns&gt;</s:String>
<s:Boolean x:Key="/Default/UserDictionary/Words/=MAAC/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary> <s:Boolean x:Key="/Default/UserDictionary/Words/=MAAC/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
+18 -18
View File
@@ -63,25 +63,25 @@
</head> </head>
<body> <body>
<div class="changelog-container"> <div class="changelog-container">
<div class="change"> <div class="change">
<div class="version">Version 1.8.1</div> <div class="version">Version 1.8.1</div>
<div class="date">25.01.2026</div> <div class="date">25.01.2026</div>
<div class="description"> <div class="description">
<ul> <ul>
<li><b>NEW:</b> Added Mafile Export tool with templates, batch export and flexible field filtering.</li> <li><b>NEW:</b> Added Mafile Export tool with templates, batch export and flexible field filtering.</li>
<li><b>IMPROVEMENT:</b> Reworked auto-confirmation error handling logic (MAAC) — fewer false disables, smarter retries.</li> <li><b>IMPROVEMENT:</b> Reworked auto-confirmation error handling logic (MAAC) — fewer false disables, smarter retries.</li>
<li><b>UPDATE:</b> Added “Unattach Proxy” option to the account context menu.</li> <li><b>UPDATE:</b> Added “Unattach Proxy” option to the account context menu.</li>
<li><b>LOCALIZATION:</b> Added Chinese (Simplified) and French languages.</li> <li><b>LOCALIZATION:</b> Added Chinese (Simplified) and French languages.</li>
<li><b>FIX:</b> Fixed crashes related to duplicate mafiles, timers, search filtering and import logic.</li> <li><b>FIX:</b> Fixed crashes related to duplicate mafiles, timers, search filtering and import logic.</li>
<li> <li>
<b>DETAILS:</b> Full patch notes: <b>DETAILS:</b> Full patch notes:
<a href="https://teletype.in/@achies_raw/nebula-1-8-1-eng">ENG</a> | <a href="https://teletype.in/@achies_raw/nebula-1-8-1-eng">ENG</a> |
<a href="https://teletype.in/@achies_raw/nebula-1-8-1-rus">RUS</a> <a href="https://teletype.in/@achies_raw/nebula-1-8-1-rus">RUS</a>
</li> </li>
</ul> </ul>
</div>
</div> </div>
</div> </div>
</div>
</body> </body>
</html> </html>
+9 -9
View File
@@ -63,16 +63,16 @@
</head> </head>
<body> <body>
<div class="changelog-container"> <div class="changelog-container">
<div class="change"> <div class="change">
<div class="version">Version 1.8.2</div> <div class="version">Version 1.8.2</div>
<div class="date">10.02.2026</div> <div class="date">10.02.2026</div>
<div class="description"> <div class="description">
<ul> <ul>
<li><b>FIX:</b> AutoConfirm timer now correctly resets the status after a successful request (Warning → Ok).</li> <li><b>FIX:</b> AutoConfirm timer now correctly resets the status after a successful request (Warning → Ok).</li>
</ul> </ul>
</div>
</div> </div>
</div> </div>
</div>
</body> </body>
</html> </html>
+1 -1
View File
@@ -190,4 +190,4 @@ public static class DialogsController
} }
#endregion #endregion
} }
+1 -1
View File
@@ -87,4 +87,4 @@ public static class NebulaSerializer
{ {
return MafileSerializer.SerializeLegacy(data, Serializer.Settings.SerializationOptions, properties); return MafileSerializer.SerializeLegacy(data, Serializer.Settings.SerializationOptions, properties);
} }
} }
+1 -1
View File
@@ -127,4 +127,4 @@ public enum ThemeType
Light = 2, Light = 2,
Luxury = 3, Luxury = 3,
Shadcn = 4 Shadcn = 4
} }
+12 -12
View File
@@ -3,20 +3,20 @@ using Newtonsoft.Json;
namespace NebulaAuth.Model.Update; namespace NebulaAuth.Model.Update;
public class ChangelogEntry public class ChangelogEntry
{ {
[JsonProperty("version")] public string Version { get; set; } = string.Empty; [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<ChangeItem> Changes { get; set; } = new(); [JsonProperty("changes")] public List<ChangeItem> Changes { get; set; } = new();
} }
public class ChangeItem public class ChangeItem
{ {
[JsonProperty("type")] public string Type { get; set; } = string.Empty; [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; } [JsonProperty("link")] public string? Link { get; set; }
} }
@@ -45,10 +45,10 @@
CornerRadius="8" CornerRadius="8"
BorderThickness="1"> BorderThickness="1">
<Border.Background> <Border.Background>
<SolidColorBrush Color="{DynamicResource BaseContentColor}" Opacity="0.07"/> <SolidColorBrush Color="{DynamicResource BaseContentColor}" Opacity="0.07" />
</Border.Background> </Border.Background>
<Border.BorderBrush> <Border.BorderBrush>
<SolidColorBrush Color="{DynamicResource BaseContentColor}" Opacity="0.12"/> <SolidColorBrush Color="{DynamicResource BaseContentColor}" Opacity="0.12" />
</Border.BorderBrush> </Border.BorderBrush>
<Grid> <Grid>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@@ -92,14 +92,12 @@
Margin="42,0,10,0" Margin="42,0,10,0"
IsEditable="True" IsEditable="True"
ItemsSource="{Binding Groups}" ItemsSource="{Binding Groups}"
Text="{Binding Group, UpdateSourceTrigger=PropertyChanged}" Text="{Binding Group, UpdateSourceTrigger=PropertyChanged}"
materialDesign:HintAssist.Hint="{Tr MafileImportDialog.GroupFieldHint}" materialDesign:HintAssist.Hint="{Tr MafileImportDialog.GroupFieldHint}"
materialDesign:HintAssist.IsFloating="False" materialDesign:HintAssist.IsFloating="False"
Visibility="{Binding AddToGroup, Converter={StaticResource BooleanToVisibilityConverter}}" Visibility="{Binding AddToGroup, Converter={StaticResource BooleanToVisibilityConverter}}"
Style="{StaticResource MaterialDesignFloatingHintComboBox}" Style="{StaticResource MaterialDesignFloatingHintComboBox}" />
/>
<Grid Grid.Row="5" Margin="10,16,10,5"> <Grid Grid.Row="5" Margin="10,16,10,5">
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
@@ -126,4 +124,4 @@
</Grid> </Grid>
</Grid> </Grid>
</Grid> </Grid>
</UserControl> </UserControl>
@@ -6,4 +6,4 @@ public partial class MafileImportDialog
{ {
InitializeComponent(); InitializeComponent();
} }
} }
+4 -3
View File
@@ -154,17 +154,18 @@
</Run> </Run>
</TextBlock> </TextBlock>
<TextBlock Grid.Column="1" VerticalAlignment="Center" FontSize="10" Margin="0,0,2,0" <TextBlock Grid.Column="1" VerticalAlignment="Center" FontSize="10"
Margin="0,0,2,0"
Foreground="{DynamicResource MaterialDesign.Brush.ForegroundLight}" Foreground="{DynamicResource MaterialDesign.Brush.ForegroundLight}"
Text="{Binding Key, Converter={StaticResource ProxyAccountCountConverter}}" /> Text="{Binding Key, Converter={StaticResource ProxyAccountCountConverter}}" />
<Button Style="{StaticResource MaterialDesignIconButton}" Padding="0" <Button Style="{StaticResource MaterialDesignIconButton}" Padding="0"
Width="24" Width="24"
Height="24" md:RippleAssist.IsDisabled="True" Grid.Column="2" Height="24" md:RippleAssist.IsDisabled="True" Grid.Column="2"
HorizontalAlignment="Right" HorizontalAlignment="Right"
VerticalAlignment="Center" VerticalAlignment="Center"
Command="{Binding DataContext.SetDefaultCommand, RelativeSource={RelativeSource AncestorType=UserControl}}" Command="{Binding DataContext.SetDefaultCommand, RelativeSource={RelativeSource AncestorType=UserControl}}"
CommandParameter="{Binding}"> CommandParameter="{Binding}">
<md:PackIcon Height="16" Width="16" Kind="Heart" /> <md:PackIcon Height="16" Width="16" Kind="Heart" />
</Button> </Button>
</Grid> </Grid>
</DataTemplate> </DataTemplate>
+1 -1
View File
@@ -196,4 +196,4 @@
</TabControl> </TabControl>
</Grid> </Grid>
</Grid> </Grid>
</UserControl> </UserControl>
+3 -8
View File
@@ -31,6 +31,8 @@ public partial class MainVM //File //TODO: Refactor
bool SdaPasswordPrompted, bool SdaPasswordPrompted,
SDAEncryptionHelper.Context? SdaContext); SDAEncryptionHelper.Context? SdaContext);
private record MafileImportPlanItem(Mafile Mafile, bool RequiresRelogin, bool HasConflict);
public Settings Settings => Settings.Instance; public Settings Settings => Settings.Instance;
@@ -408,11 +410,4 @@ public partial class MainVM //File //TODO: Refactor
if (mafile is not Mafile maf) return false; if (mafile is not Mafile maf) return false;
return maf.Password != null && PHandler.IsPasswordSet; 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);
}
@@ -6,20 +6,20 @@ namespace NebulaAuth.ViewModel.Other;
public partial class MafileImportDialogVM : ObservableObject public partial class MafileImportDialogVM : ObservableObject
{ {
public ObservableCollection<string> 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<string> groups, int totalCount, int conflictCount) public MafileImportDialogVM(IEnumerable<string> groups, int totalCount, int conflictCount)
{ {
Groups = new ObservableCollection<string>(groups); Groups = new ObservableCollection<string>(groups);
TotalCount = totalCount; TotalCount = totalCount;
ConflictCount = conflictCount; ConflictCount = conflictCount;
} }
public ObservableCollection<string> 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);
+1 -1
View File
@@ -249,4 +249,4 @@ public partial class SettingsVM : ObservableObject
} }
#endregion #endregion
} }