DiscordChatExporter/DiscordChatExporter.Gui/Services/SettingsService.cs
Kornelius Rohrschneider da3bcefbb9
Added UI options to enable the existing export search
The setting on whether the existing export search is enabled or not has been made configurable in both the CLI and the GUI (instead of being hardcoded):
- A search-existing-exports option has been added to all CLI export commands, which enables the existing export search for the respective command.
- A Search for existing exports option has been added to the GUI settings, which enables the existing export search for exports.

Additionally, there have been several minor improvements:
- The ConsoleProgressLogger has been fixed to interpolate given messages (previously, the square brackets in the default export file names could cause an exception).
- The names of existing channel exports in log messages have been enclosed by quotation marks.
- The setting on how to handle existing export files has been renamed from prev-export / Previous Export to export-exists / Export Exists.
2025-10-30 01:40:59 +01:00

96 lines
2.6 KiB
C#

using System;
using System.IO;
using System.Text.Json.Serialization;
using Cogwheel;
using CommunityToolkit.Mvvm.ComponentModel;
using DiscordChatExporter.Core.Discord;
using DiscordChatExporter.Core.Exporting;
using DiscordChatExporter.Gui.Framework;
using DiscordChatExporter.Gui.Models;
namespace DiscordChatExporter.Gui.Services;
[ObservableObject]
public partial class SettingsService()
: SettingsBase(
Path.Combine(AppContext.BaseDirectory, "Settings.dat"),
SerializerContext.Default
)
{
[ObservableProperty]
public partial bool IsUkraineSupportMessageEnabled { get; set; } = true;
[ObservableProperty]
public partial ThemeVariant Theme { get; set; }
[ObservableProperty]
public partial bool IsAutoUpdateEnabled { get; set; } = true;
[ObservableProperty]
public partial bool IsTokenPersisted { get; set; } = true;
[ObservableProperty]
public partial RateLimitPreference RateLimitPreference { get; set; } =
RateLimitPreference.RespectAll;
[ObservableProperty]
public partial ThreadInclusionMode ThreadInclusionMode { get; set; }
[ObservableProperty]
public partial ExportExistsHandling ExportExistsHandling { get; set; }
[ObservableProperty]
public partial bool SearchForExistingExports { get; set; }
[ObservableProperty]
public partial string? Locale { get; set; }
[ObservableProperty]
public partial bool IsUtcNormalizationEnabled { get; set; }
[ObservableProperty]
public partial int ParallelLimit { get; set; } = 1;
[ObservableProperty]
public partial string? LastToken { get; set; }
[ObservableProperty]
public partial ExportFormat LastExportFormat { get; set; } = ExportFormat.HtmlDark;
[ObservableProperty]
public partial string? LastPartitionLimitValue { get; set; }
[ObservableProperty]
public partial string? LastMessageFilterValue { get; set; }
[ObservableProperty]
public partial bool LastShouldFormatMarkdown { get; set; } = true;
[ObservableProperty]
public partial bool LastShouldDownloadAssets { get; set; }
[ObservableProperty]
public partial bool LastShouldReuseAssets { get; set; }
[ObservableProperty]
public partial string? LastAssetsDirPath { get; set; }
public override void Save()
{
// Clear the token if it's not supposed to be persisted
var lastToken = LastToken;
if (!IsTokenPersisted)
LastToken = null;
base.Save();
LastToken = lastToken;
}
}
public partial class SettingsService
{
[JsonSerializable(typeof(SettingsService))]
private partial class SerializerContext : JsonSerializerContext;
}