Use partial properties

This commit is contained in:
Tyrrrz 2025-03-18 20:06:44 +02:00
parent fca6729ef0
commit deca3fc1bf
5 changed files with 58 additions and 124 deletions

View file

@ -11,7 +11,7 @@ public abstract partial class DialogViewModelBase<T> : ViewModelBase
); );
[ObservableProperty] [ObservableProperty]
private T? _dialogResult; public partial T? DialogResult { get; set; }
[RelayCommand] [RelayCommand]
protected void Close(T dialogResult) protected void Close(T dialogResult)

View file

@ -9,126 +9,60 @@ using DiscordChatExporter.Gui.Models;
namespace DiscordChatExporter.Gui.Services; namespace DiscordChatExporter.Gui.Services;
// Can't use [ObservableProperty] here because System.Text.Json's source generator doesn't see [ObservableObject]
// the generated properties.
[INotifyPropertyChanged]
public partial class SettingsService() public partial class SettingsService()
: SettingsBase( : SettingsBase(
Path.Combine(AppContext.BaseDirectory, "Settings.dat"), Path.Combine(AppContext.BaseDirectory, "Settings.dat"),
SerializerContext.Default SerializerContext.Default
) )
{ {
private bool _isUkraineSupportMessageEnabled = true; [ObservableProperty]
public bool IsUkraineSupportMessageEnabled public partial bool IsUkraineSupportMessageEnabled { get; set; } = true;
{
get => _isUkraineSupportMessageEnabled;
set => SetProperty(ref _isUkraineSupportMessageEnabled, value);
}
private ThemeVariant _theme; [ObservableProperty]
public ThemeVariant Theme public partial ThemeVariant Theme { get; set; }
{
get => _theme;
set => SetProperty(ref _theme, value);
}
private bool _isAutoUpdateEnabled = true; [ObservableProperty]
public bool IsAutoUpdateEnabled public partial bool IsAutoUpdateEnabled { get; set; } = true;
{
get => _isAutoUpdateEnabled;
set => SetProperty(ref _isAutoUpdateEnabled, value);
}
private bool _isTokenPersisted = true; [ObservableProperty]
public bool IsTokenPersisted public partial bool IsTokenPersisted { get; set; } = true;
{
get => _isTokenPersisted;
set => SetProperty(ref _isTokenPersisted, value);
}
private ThreadInclusionMode _threadInclusionMode; [ObservableProperty]
public ThreadInclusionMode ThreadInclusionMode public partial ThreadInclusionMode ThreadInclusionMode { get; set; }
{
get => _threadInclusionMode;
set => SetProperty(ref _threadInclusionMode, value);
}
private string? _locale; [ObservableProperty]
public string? Locale public partial string? Locale { get; set; }
{
get => _locale;
set => SetProperty(ref _locale, value);
}
private bool _isUtcNormalizationEnabled; [ObservableProperty]
public bool IsUtcNormalizationEnabled public partial bool IsUtcNormalizationEnabled { get; set; }
{
get => _isUtcNormalizationEnabled;
set => SetProperty(ref _isUtcNormalizationEnabled, value);
}
private int _parallelLimit = 1; [ObservableProperty]
public int ParallelLimit public partial int ParallelLimit { get; set; } = 1;
{
get => _parallelLimit;
set => SetProperty(ref _parallelLimit, value);
}
private string? _lastToken; [ObservableProperty]
public string? LastToken public partial string? LastToken { get; set; }
{
get => _lastToken;
set => SetProperty(ref _lastToken, value);
}
private ExportFormat _lastExportFormat = ExportFormat.HtmlDark; [ObservableProperty]
public ExportFormat LastExportFormat public partial ExportFormat LastExportFormat { get; set; } = ExportFormat.HtmlDark;
{
get => _lastExportFormat;
set => SetProperty(ref _lastExportFormat, value);
}
private string? _lastPartitionLimitValue; [ObservableProperty]
public string? LastPartitionLimitValue public partial string? LastPartitionLimitValue { get; set; }
{
get => _lastPartitionLimitValue;
set => SetProperty(ref _lastPartitionLimitValue, value);
}
private string? _lastMessageFilterValue; [ObservableProperty]
public string? LastMessageFilterValue public partial string? LastMessageFilterValue { get; set; }
{
get => _lastMessageFilterValue;
set => SetProperty(ref _lastMessageFilterValue, value);
}
private bool _lastShouldFormatMarkdown = true; [ObservableProperty]
public bool LastShouldFormatMarkdown public partial bool LastShouldFormatMarkdown { get; set; } = true;
{
get => _lastShouldFormatMarkdown;
set => SetProperty(ref _lastShouldFormatMarkdown, value);
}
private bool _lastShouldDownloadAssets; [ObservableProperty]
public bool LastShouldDownloadAssets public partial bool LastShouldDownloadAssets { get; set; }
{
get => _lastShouldDownloadAssets;
set => SetProperty(ref _lastShouldDownloadAssets, value);
}
private bool _lastShouldReuseAssets; [ObservableProperty]
public bool LastShouldReuseAssets public partial bool LastShouldReuseAssets { get; set; }
{
get => _lastShouldReuseAssets;
set => SetProperty(ref _lastShouldReuseAssets, value);
}
private string? _lastAssetsDirPath; [ObservableProperty]
public string? LastAssetsDirPath public partial string? LastAssetsDirPath { get; set; }
{
get => _lastAssetsDirPath;
set => SetProperty(ref _lastAssetsDirPath, value);
}
public override void Save() public override void Save()
{ {

View file

@ -38,22 +38,22 @@ public partial class DashboardViewModel : ViewModelBase
[NotifyCanExecuteChangedFor(nameof(PullGuildsCommand))] [NotifyCanExecuteChangedFor(nameof(PullGuildsCommand))]
[NotifyCanExecuteChangedFor(nameof(PullChannelsCommand))] [NotifyCanExecuteChangedFor(nameof(PullChannelsCommand))]
[NotifyCanExecuteChangedFor(nameof(ExportCommand))] [NotifyCanExecuteChangedFor(nameof(ExportCommand))]
private bool _isBusy; public partial bool IsBusy { get; set; }
[ObservableProperty] [ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(PullGuildsCommand))] [NotifyCanExecuteChangedFor(nameof(PullGuildsCommand))]
private string? _token; public partial string? Token { get; set; }
[ObservableProperty] [ObservableProperty]
private IReadOnlyList<Guild>? _availableGuilds; public partial IReadOnlyList<Guild>? AvailableGuilds { get; set; }
[ObservableProperty] [ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(PullChannelsCommand))] [NotifyCanExecuteChangedFor(nameof(PullChannelsCommand))]
[NotifyCanExecuteChangedFor(nameof(ExportCommand))] [NotifyCanExecuteChangedFor(nameof(ExportCommand))]
private Guild? _selectedGuild; public partial Guild? SelectedGuild { get; set; }
[ObservableProperty] [ObservableProperty]
private IReadOnlyList<ChannelConnection>? _availableChannels; public partial IReadOnlyList<ChannelConnection>? AvailableChannels { get; set; }
public DashboardViewModel( public DashboardViewModel(
ViewModelManager viewModelManager, ViewModelManager viewModelManager,

View file

@ -22,56 +22,56 @@ public partial class ExportSetupViewModel(
) : DialogViewModelBase ) : DialogViewModelBase
{ {
[ObservableProperty] [ObservableProperty]
private Guild? _guild; public partial Guild? Guild { get; set; }
[ObservableProperty] [ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsSingleChannel))] [NotifyPropertyChangedFor(nameof(IsSingleChannel))]
private IReadOnlyList<Channel>? _channels; public partial IReadOnlyList<Channel>? Channels { get; set; }
[ObservableProperty] [ObservableProperty]
private string? _outputPath; public partial string? OutputPath { get; set; }
[ObservableProperty] [ObservableProperty]
private ExportFormat _selectedFormat; public partial ExportFormat SelectedFormat { get; set; }
[ObservableProperty] [ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsAfterDateSet))] [NotifyPropertyChangedFor(nameof(IsAfterDateSet))]
[NotifyPropertyChangedFor(nameof(After))] [NotifyPropertyChangedFor(nameof(After))]
private DateTimeOffset? _afterDate; public partial DateTimeOffset? AfterDate { get; set; }
[ObservableProperty] [ObservableProperty]
private TimeSpan? _afterTime; public partial TimeSpan? AfterTime { get; set; }
[ObservableProperty] [ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsBeforeDateSet))] [NotifyPropertyChangedFor(nameof(IsBeforeDateSet))]
[NotifyPropertyChangedFor(nameof(Before))] [NotifyPropertyChangedFor(nameof(Before))]
private DateTimeOffset? _beforeDate; public partial DateTimeOffset? BeforeDate { get; set; }
[ObservableProperty] [ObservableProperty]
private TimeSpan? _beforeTime; public partial TimeSpan? BeforeTime { get; set; }
[ObservableProperty] [ObservableProperty]
[NotifyPropertyChangedFor(nameof(PartitionLimit))] [NotifyPropertyChangedFor(nameof(PartitionLimit))]
private string? _partitionLimitValue; public partial string? PartitionLimitValue { get; set; }
[ObservableProperty] [ObservableProperty]
[NotifyPropertyChangedFor(nameof(MessageFilter))] [NotifyPropertyChangedFor(nameof(MessageFilter))]
private string? _messageFilterValue; public partial string? MessageFilterValue { get; set; }
[ObservableProperty] [ObservableProperty]
private bool _shouldFormatMarkdown; public partial bool ShouldFormatMarkdown { get; set; }
[ObservableProperty] [ObservableProperty]
private bool _shouldDownloadAssets; public partial bool ShouldDownloadAssets { get; set; }
[ObservableProperty] [ObservableProperty]
private bool _shouldReuseAssets; public partial bool ShouldReuseAssets { get; set; }
[ObservableProperty] [ObservableProperty]
private string? _assetsDirPath; public partial string? AssetsDirPath { get; set; }
[ObservableProperty] [ObservableProperty]
private bool _isAdvancedSectionDisplayed; public partial bool IsAdvancedSectionDisplayed { get; set; }
public bool IsSingleChannel => Channels?.Count == 1; public bool IsSingleChannel => Channels?.Count == 1;

View file

@ -6,20 +6,20 @@ namespace DiscordChatExporter.Gui.ViewModels.Dialogs;
public partial class MessageBoxViewModel : DialogViewModelBase public partial class MessageBoxViewModel : DialogViewModelBase
{ {
[ObservableProperty] [ObservableProperty]
private string? _title = "Title"; public partial string? Title { get; set; } = "Title";
[ObservableProperty] [ObservableProperty]
private string? _message = "Message"; public partial string? Message { get; set; } = "Message";
[ObservableProperty] [ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsDefaultButtonVisible))] [NotifyPropertyChangedFor(nameof(IsDefaultButtonVisible))]
[NotifyPropertyChangedFor(nameof(ButtonsCount))] [NotifyPropertyChangedFor(nameof(ButtonsCount))]
private string? _defaultButtonText = "OK"; public partial string? DefaultButtonText { get; set; } = "OK";
[ObservableProperty] [ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsCancelButtonVisible))] [NotifyPropertyChangedFor(nameof(IsCancelButtonVisible))]
[NotifyPropertyChangedFor(nameof(ButtonsCount))] [NotifyPropertyChangedFor(nameof(ButtonsCount))]
private string? _cancelButtonText = "Cancel"; public partial string? CancelButtonText { get; set; } = "Cancel";
public bool IsDefaultButtonVisible => !string.IsNullOrWhiteSpace(DefaultButtonText); public bool IsDefaultButtonVisible => !string.IsNullOrWhiteSpace(DefaultButtonText);