From 752d8ffe5546d18aaf4cc65bfc13b7644ca5ddd9 Mon Sep 17 00:00:00 2001 From: database64128 Date: Wed, 20 Mar 2024 00:22:48 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=B1=20Upgrade=20to=20.NET=208?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../YoutubeDl.Wpf.Tests.csproj | 2 +- YoutubeDl.Wpf/Models/BackendInstance.cs | 2 +- YoutubeDl.Wpf/Models/BackendService.cs | 10 +- YoutubeDl.Wpf/Models/ObservableSettings.cs | 101 ++++++------------ YoutubeDl.Wpf/Models/Preset.cs | 4 +- YoutubeDl.Wpf/Models/QueuedTextBoxSink.cs | 17 +-- YoutubeDl.Wpf/Models/Settings.cs | 10 +- .../ViewModels/ArgumentChipViewModel.cs | 15 +-- .../ViewModels/HistoryItemViewModel.cs | 12 +-- YoutubeDl.Wpf/ViewModels/HomeViewModel.cs | 2 +- .../ViewModels/MainWindowViewModel.cs | 6 +- .../ViewModels/PresetDialogViewModel.cs | 10 +- YoutubeDl.Wpf/ViewModels/SettingsViewModel.cs | 2 +- YoutubeDl.Wpf/YoutubeDl.Wpf.csproj | 6 +- 14 files changed, 70 insertions(+), 129 deletions(-) diff --git a/YoutubeDl.Wpf.Tests/YoutubeDl.Wpf.Tests.csproj b/YoutubeDl.Wpf.Tests/YoutubeDl.Wpf.Tests.csproj index 903d08f4c..8cffd77a4 100644 --- a/YoutubeDl.Wpf.Tests/YoutubeDl.Wpf.Tests.csproj +++ b/YoutubeDl.Wpf.Tests/YoutubeDl.Wpf.Tests.csproj @@ -1,7 +1,7 @@  - net7.0-windows10.0.22621.0 + net8.0-windows10.0.22621.0 false diff --git a/YoutubeDl.Wpf/Models/BackendInstance.cs b/YoutubeDl.Wpf/Models/BackendInstance.cs index cc913fabf..f008dfc6c 100644 --- a/YoutubeDl.Wpf/Models/BackendInstance.cs +++ b/YoutubeDl.Wpf/Models/BackendInstance.cs @@ -21,7 +21,7 @@ public class BackendInstance : ReactiveObject, IEnableLogger private readonly BackendService _backendService; private readonly Process _process; - public List GeneratedDownloadArguments { get; } = new(); + public List GeneratedDownloadArguments { get; } = []; [Reactive] public double DownloadProgressPercentage { get; set; } // 0.99 is 99%. diff --git a/YoutubeDl.Wpf/Models/BackendService.cs b/YoutubeDl.Wpf/Models/BackendService.cs index 5ec04cfba..ec0259f58 100644 --- a/YoutubeDl.Wpf/Models/BackendService.cs +++ b/YoutubeDl.Wpf/Models/BackendService.cs @@ -9,11 +9,9 @@ namespace YoutubeDl.Wpf.Models; -public class BackendService : ReactiveObject, IEnableLogger +public class BackendService(ObservableSettings settings) : ReactiveObject, IEnableLogger { - private readonly ObservableSettings _settings; - - public List Instances { get; } = new(); + public List Instances { get; } = []; [Reactive] public bool CanUpdate { get; set; } = true; @@ -24,11 +22,9 @@ public class BackendService : ReactiveObject, IEnableLogger [Reactive] public TaskbarItemProgressState ProgressState { get; set; } - public BackendService(ObservableSettings settings) => _settings = settings; - public BackendInstance CreateInstance() { - var instance = new BackendInstance(_settings, this); + var instance = new BackendInstance(settings, this); Instances.Add(instance); return instance; } diff --git a/YoutubeDl.Wpf/Models/ObservableSettings.cs b/YoutubeDl.Wpf/Models/ObservableSettings.cs index 97a4064ba..b8546deb9 100644 --- a/YoutubeDl.Wpf/Models/ObservableSettings.cs +++ b/YoutubeDl.Wpf/Models/ObservableSettings.cs @@ -4,57 +4,56 @@ using System; using System.Collections.Generic; using System.Collections.ObjectModel; -using System.Linq; namespace YoutubeDl.Wpf.Models; -public class ObservableSettings : ReactiveObject +public class ObservableSettings(Settings settings) : ReactiveObject { - public Settings AppSettings { get; } + public Settings AppSettings { get; } = settings; - public BaseTheme AppColorMode { get; set; } + public BaseTheme AppColorMode { get; set; } = settings.AppColorMode; [Reactive] - public double WindowWidth { get; set; } + public double WindowWidth { get; set; } = settings.WindowWidth; [Reactive] - public double WindowHeight { get; set; } + public double WindowHeight { get; set; } = settings.WindowHeight; [Reactive] - public BackendTypes Backend { get; set; } + public BackendTypes Backend { get; set; } = settings.Backend; [Reactive] - public string BackendPath { get; set; } + public string BackendPath { get; set; } = settings.BackendPath; /// /// Gets or sets the list of arguments passed /// to the backend process for all types of operations. /// - public ObservableCollection BackendGlobalArguments { get; set; } + public ObservableCollection BackendGlobalArguments { get; set; } = new(settings.BackendGlobalArguments); /// /// Gets or sets the list of arguments passed /// to the backend process for download operations. /// - public List BackendDownloadArguments { get; set; } + public List BackendDownloadArguments { get; set; } = new(settings.BackendDownloadArguments); [Reactive] - public bool BackendAutoUpdate { get; set; } + public bool BackendAutoUpdate { get; set; } = settings.BackendAutoUpdate; [Reactive] - public DateTimeOffset BackendLastUpdateCheck { get; set; } + public DateTimeOffset BackendLastUpdateCheck { get; set; } = settings.BackendLastUpdateCheck; [Reactive] - public string FfmpegPath { get; set; } + public string FfmpegPath { get; set; } = settings.FfmpegPath; [Reactive] - public string Proxy { get; set; } + public string Proxy { get; set; } = settings.Proxy; [Reactive] - public int LoggingMaxEntries { get; set; } + public int LoggingMaxEntries { get; set; } = settings.LoggingMaxEntries; [Reactive] - public Preset? SelectedPreset { get; set; } + public Preset? SelectedPreset { get; set; } = settings.SelectedPreset; /// /// This is a hack to prevent from being changed to null. @@ -62,83 +61,51 @@ public class ObservableSettings : ReactiveObject /// which is much harder to get it right, and would look terrible compared to this little hack. /// [Reactive] - public string SelectedPresetText { get; set; } + public string SelectedPresetText { get; set; } = settings.SelectedPreset.DisplayName; - public List CustomPresets { get; set; } + public List CustomPresets { get; set; } = new(settings.CustomPresets); [Reactive] - public bool AddMetadata { get; set; } + public bool AddMetadata { get; set; } = settings.AddMetadata; [Reactive] - public bool DownloadThumbnail { get; set; } + public bool DownloadThumbnail { get; set; } = settings.DownloadThumbnail; [Reactive] - public bool DownloadSubtitles { get; set; } + public bool DownloadSubtitles { get; set; } = settings.DownloadSubtitles; [Reactive] - public bool DownloadSubtitlesAllLanguages { get; set; } + public bool DownloadSubtitlesAllLanguages { get; set; } = settings.DownloadSubtitlesAllLanguages; [Reactive] - public bool DownloadAutoGeneratedSubtitles { get; set; } + public bool DownloadAutoGeneratedSubtitles { get; set; } = settings.DownloadAutoGeneratedSubtitles; [Reactive] - public bool DownloadPlaylist { get; set; } + public bool DownloadPlaylist { get; set; } = settings.DownloadPlaylist; [Reactive] - public bool UseCustomOutputTemplate { get; set; } + public bool UseCustomOutputTemplate { get; set; } = settings.UseCustomOutputTemplate; [Reactive] - public string CustomOutputTemplate { get; set; } + public string CustomOutputTemplate { get; set; } = settings.CustomOutputTemplate; /// /// Gets the list of used output templates. /// New templates are appended to the list. /// - public List OutputTemplateHistory { get; } + public List OutputTemplateHistory { get; } = new(settings.OutputTemplateHistory); [Reactive] - public bool UseCustomPath { get; set; } + public bool UseCustomPath { get; set; } = settings.UseCustomPath; [Reactive] - public string DownloadPath { get; set; } + public string DownloadPath { get; set; } = settings.DownloadPath; /// /// Gets the list of used download paths. /// New paths are appended to the list. /// - public List DownloadPathHistory { get; } - - public ObservableSettings(Settings settings) - { - AppSettings = settings; - AppColorMode = settings.AppColorMode; - WindowWidth = settings.WindowWidth; - WindowHeight = settings.WindowHeight; - Backend = settings.Backend; - BackendPath = settings.BackendPath; - BackendGlobalArguments = new(settings.BackendGlobalArguments); - BackendDownloadArguments = new(settings.BackendDownloadArguments); - BackendAutoUpdate = settings.BackendAutoUpdate; - BackendLastUpdateCheck = settings.BackendLastUpdateCheck; - FfmpegPath = settings.FfmpegPath; - Proxy = settings.Proxy; - LoggingMaxEntries = settings.LoggingMaxEntries; - SelectedPreset = settings.SelectedPreset; - SelectedPresetText = settings.SelectedPreset.DisplayName; - CustomPresets = new(settings.CustomPresets); - AddMetadata = settings.AddMetadata; - DownloadThumbnail = settings.DownloadThumbnail; - DownloadSubtitles = settings.DownloadSubtitles; - DownloadSubtitlesAllLanguages = settings.DownloadSubtitlesAllLanguages; - DownloadAutoGeneratedSubtitles = settings.DownloadAutoGeneratedSubtitles; - DownloadPlaylist = settings.DownloadPlaylist; - UseCustomOutputTemplate = settings.UseCustomOutputTemplate; - CustomOutputTemplate = settings.CustomOutputTemplate; - OutputTemplateHistory = new(settings.OutputTemplateHistory); - UseCustomPath = settings.UseCustomPath; - DownloadPath = settings.DownloadPath; - DownloadPathHistory = new(settings.DownloadPathHistory); - } + public List DownloadPathHistory { get; } = new(settings.DownloadPathHistory); public void UpdateAppSettings() { @@ -147,15 +114,15 @@ public void UpdateAppSettings() AppSettings.WindowHeight = WindowHeight; AppSettings.Backend = Backend; AppSettings.BackendPath = BackendPath; - AppSettings.BackendGlobalArguments = BackendGlobalArguments.ToArray(); - AppSettings.BackendDownloadArguments = BackendDownloadArguments.ToArray(); + AppSettings.BackendGlobalArguments = [.. BackendGlobalArguments]; + AppSettings.BackendDownloadArguments = [.. BackendDownloadArguments]; AppSettings.BackendAutoUpdate = BackendAutoUpdate; AppSettings.BackendLastUpdateCheck = BackendLastUpdateCheck; AppSettings.FfmpegPath = FfmpegPath; AppSettings.Proxy = Proxy; // AppSettings.LoggingMaxEntries is managed by the validation handler. AppSettings.SelectedPreset = SelectedPreset ?? Preset.Auto; - AppSettings.CustomPresets = CustomPresets.ToArray(); + AppSettings.CustomPresets = [.. CustomPresets]; AppSettings.AddMetadata = AddMetadata; AppSettings.DownloadThumbnail = DownloadThumbnail; AppSettings.DownloadSubtitles = DownloadSubtitles; @@ -165,8 +132,8 @@ public void UpdateAppSettings() AppSettings.UseCustomOutputTemplate = UseCustomOutputTemplate; AppSettings.CustomOutputTemplate = CustomOutputTemplate; AppSettings.UseCustomPath = UseCustomPath; - AppSettings.OutputTemplateHistory = OutputTemplateHistory.ToArray(); + AppSettings.OutputTemplateHistory = [.. OutputTemplateHistory]; AppSettings.DownloadPath = DownloadPath; - AppSettings.DownloadPathHistory = DownloadPathHistory.ToArray(); + AppSettings.DownloadPathHistory = [.. DownloadPathHistory]; } } diff --git a/YoutubeDl.Wpf/Models/Preset.cs b/YoutubeDl.Wpf/Models/Preset.cs index dfaf49970..417b5605a 100644 --- a/YoutubeDl.Wpf/Models/Preset.cs +++ b/YoutubeDl.Wpf/Models/Preset.cs @@ -55,7 +55,7 @@ public IEnumerable ToArgs() public static readonly Preset Empty = new(); public static readonly Preset[] PredefinedPresets = - { + [ Auto, new(FormatArg: "bestvideo+bestaudio/best", IsPredefined: true), new(FormatArg: "bestvideo+bestaudio", IsPredefined: true), @@ -105,5 +105,5 @@ public IEnumerable ToArgs() new(ContainerArg: "ogg", IsPredefined: true), new(ContainerArg: "m4a", IsPredefined: true), new(ContainerArg: "mp3", IsPredefined: true), - }; + ]; } diff --git a/YoutubeDl.Wpf/Models/QueuedTextBoxSink.cs b/YoutubeDl.Wpf/Models/QueuedTextBoxSink.cs index a672076e0..a360d7c95 100644 --- a/YoutubeDl.Wpf/Models/QueuedTextBoxSink.cs +++ b/YoutubeDl.Wpf/Models/QueuedTextBoxSink.cs @@ -8,24 +8,15 @@ namespace YoutubeDl.Wpf.Models; -public class QueuedTextBoxSink : ReactiveObject, ILogEventSink +public class QueuedTextBoxSink(Settings settings, IFormatProvider? formatProvider = null) : ReactiveObject, ILogEventSink { private readonly object _locker = new(); - private readonly Settings _settings; - private readonly Queue _queuedLogMessages; - private readonly IFormatProvider? _formatProvider; + private readonly Queue _queuedLogMessages = new(settings.LoggingMaxEntries); private int _contentLength; [Reactive] public string Content { get; set; } = ""; - public QueuedTextBoxSink(Settings settings, IFormatProvider? formatProvider = null) - { - _settings = settings; - _queuedLogMessages = new(settings.LoggingMaxEntries); - _formatProvider = formatProvider; - } - public void Emit(LogEvent logEvent) { // Workaround for https://github.com/reactiveui/ReactiveUI/issues/3415 before upstream has a fix. @@ -34,7 +25,7 @@ public void Emit(LogEvent logEvent) return; } - var renderedMessage = logEvent.RenderMessage(_formatProvider); + var renderedMessage = logEvent.RenderMessage(formatProvider); // 2023-04-24T10:24:00.000+00:00 [I] Hi! var length = 29 + 1 + 3 + 1 + renderedMessage.Length + Environment.NewLine.Length; @@ -65,7 +56,7 @@ public void Emit(LogEvent logEvent) lock (_locker) { - while (_queuedLogMessages.Count >= _settings.LoggingMaxEntries) + while (_queuedLogMessages.Count >= settings.LoggingMaxEntries) { var dequeuedMessage = _queuedLogMessages.Dequeue(); _contentLength -= dequeuedMessage.Length; diff --git a/YoutubeDl.Wpf/Models/Settings.cs b/YoutubeDl.Wpf/Models/Settings.cs index 3e8813c08..b5fda5119 100644 --- a/YoutubeDl.Wpf/Models/Settings.cs +++ b/YoutubeDl.Wpf/Models/Settings.cs @@ -53,9 +53,9 @@ public class Settings public string BackendPath { get; set; } = ""; - public BackendArgument[] BackendGlobalArguments { get; set; } = Array.Empty(); + public BackendArgument[] BackendGlobalArguments { get; set; } = []; - public BackendArgument[] BackendDownloadArguments { get; set; } = Array.Empty(); + public BackendArgument[] BackendDownloadArguments { get; set; } = []; public bool BackendAutoUpdate { get; set; } = true; @@ -69,7 +69,7 @@ public class Settings public Preset SelectedPreset { get; set; } = Preset.Auto; - public Preset[] CustomPresets { get; set; } = Array.Empty(); + public Preset[] CustomPresets { get; set; } = []; public bool AddMetadata { get; set; } = true; @@ -87,13 +87,13 @@ public class Settings public string CustomOutputTemplate { get; set; } = DefaultCustomOutputTemplate; - public string[] OutputTemplateHistory { get; set; } = Array.Empty(); + public string[] OutputTemplateHistory { get; set; } = []; public bool UseCustomPath { get; set; } public string DownloadPath { get; set; } = ""; - public string[] DownloadPathHistory { get; set; } = Array.Empty(); + public string[] DownloadPathHistory { get; set; } = []; /// /// Loads settings from Settings.json. diff --git a/YoutubeDl.Wpf/ViewModels/ArgumentChipViewModel.cs b/YoutubeDl.Wpf/ViewModels/ArgumentChipViewModel.cs index 3b6daea62..be7c24049 100644 --- a/YoutubeDl.Wpf/ViewModels/ArgumentChipViewModel.cs +++ b/YoutubeDl.Wpf/ViewModels/ArgumentChipViewModel.cs @@ -7,20 +7,13 @@ namespace YoutubeDl.Wpf.ViewModels; -public class ArgumentChipViewModel : ReactiveValidationObject +public class ArgumentChipViewModel(BackendArgument argument, bool isRemovable, Action action) : ReactiveValidationObject { [Reactive] - public BackendArgument Argument { get; set; } + public BackendArgument Argument { get; set; } = argument; [Reactive] - public bool IsRemovable { get; set; } + public bool IsRemovable { get; set; } = isRemovable; - public ReactiveCommand RemoveArgumentCommand { get; } - - public ArgumentChipViewModel(BackendArgument argument, bool isRemovable, Action action) - { - Argument = argument; - IsRemovable = isRemovable; - RemoveArgumentCommand = ReactiveCommand.Create(action); - } + public ReactiveCommand RemoveArgumentCommand { get; } = ReactiveCommand.Create(action); } diff --git a/YoutubeDl.Wpf/ViewModels/HistoryItemViewModel.cs b/YoutubeDl.Wpf/ViewModels/HistoryItemViewModel.cs index 73626d092..514185121 100644 --- a/YoutubeDl.Wpf/ViewModels/HistoryItemViewModel.cs +++ b/YoutubeDl.Wpf/ViewModels/HistoryItemViewModel.cs @@ -6,18 +6,12 @@ namespace YoutubeDl.Wpf.ViewModels; -public class HistoryItemViewModel : ReactiveValidationObject +public class HistoryItemViewModel(string text, Action action) : ReactiveValidationObject { [Reactive] - public string Text { get; set; } + public string Text { get; set; } = text; - public ReactiveCommand DeleteItemCommand { get; } - - public HistoryItemViewModel(string text, Action action) - { - Text = text; - DeleteItemCommand = ReactiveCommand.Create(action); - } + public ReactiveCommand DeleteItemCommand { get; } = ReactiveCommand.Create(action); public override string ToString() => Text; } diff --git a/YoutubeDl.Wpf/ViewModels/HomeViewModel.cs b/YoutubeDl.Wpf/ViewModels/HomeViewModel.cs index 6e66a6a49..fb3cca9fe 100644 --- a/YoutubeDl.Wpf/ViewModels/HomeViewModel.cs +++ b/YoutubeDl.Wpf/ViewModels/HomeViewModel.cs @@ -34,7 +34,7 @@ public class HomeViewModel : ReactiveValidationObject public PresetDialogViewModel PresetDialogVM { get; } - public ObservableCollection Presets { get; } = new(); + public ObservableCollection Presets { get; } = []; /// /// Gets the output template history. diff --git a/YoutubeDl.Wpf/ViewModels/MainWindowViewModel.cs b/YoutubeDl.Wpf/ViewModels/MainWindowViewModel.cs index d543d9183..d59682057 100644 --- a/YoutubeDl.Wpf/ViewModels/MainWindowViewModel.cs +++ b/YoutubeDl.Wpf/ViewModels/MainWindowViewModel.cs @@ -51,11 +51,11 @@ public MainWindowViewModel(ISnackbarMessageQueue snackbarMessageQueue) SharedSettings = new(_settings); BackendService = new(SharedSettings); PresetDialogVM = new(ControlDialog); - Tabs = new object[] - { + Tabs = + [ new HomeViewModel(SharedSettings, BackendService, queuedTextBoxsink, PresetDialogVM, snackbarMessageQueue), new SettingsViewModel(SharedSettings, BackendService, snackbarMessageQueue), - }; + ]; SaveSettingsAsyncCommand = ReactiveCommand.CreateFromTask(SaveSettingsAsync); } diff --git a/YoutubeDl.Wpf/ViewModels/PresetDialogViewModel.cs b/YoutubeDl.Wpf/ViewModels/PresetDialogViewModel.cs index dbfe7d643..1818f2093 100644 --- a/YoutubeDl.Wpf/ViewModels/PresetDialogViewModel.cs +++ b/YoutubeDl.Wpf/ViewModels/PresetDialogViewModel.cs @@ -13,7 +13,7 @@ namespace YoutubeDl.Wpf.ViewModels; public class PresetDialogViewModel : ReactiveValidationObject { - private readonly List _backendArguments = new(); + private readonly List _backendArguments = []; private readonly Action _controlDialogAction; private Preset? _preset; private Action? _saveAction; @@ -33,7 +33,7 @@ public class PresetDialogViewModel : ReactiveValidationObject [Reactive] public bool IsYtdlpSupported { get; set; } = true; - public ObservableCollection ArgumentChips { get; set; } = new(); + public ObservableCollection ArgumentChips { get; set; } = []; public ReactiveCommand SaveCommand { get; } @@ -43,10 +43,10 @@ public PresetDialogViewModel(Action controlDialogAction) { _controlDialogAction = controlDialogAction; - ArgumentChips = new() - { + ArgumentChips = + [ new AddArgumentViewModel(AddArgument), - }; + ]; var canSave = this.WhenAnyValue( x => x.Name, diff --git a/YoutubeDl.Wpf/ViewModels/SettingsViewModel.cs b/YoutubeDl.Wpf/ViewModels/SettingsViewModel.cs index d7a1eb01d..4f58030d8 100644 --- a/YoutubeDl.Wpf/ViewModels/SettingsViewModel.cs +++ b/YoutubeDl.Wpf/ViewModels/SettingsViewModel.cs @@ -36,7 +36,7 @@ public class SettingsViewModel : ReactiveValidationObject /// A view model in this collection must be of either /// or type. /// - public ObservableCollection GlobalArguments { get; } = new(); + public ObservableCollection GlobalArguments { get; } = []; public ReactiveCommand ResetWindowSizeCommand { get; } public ReactiveCommand ChangeColorModeCommand { get; } diff --git a/YoutubeDl.Wpf/YoutubeDl.Wpf.csproj b/YoutubeDl.Wpf/YoutubeDl.Wpf.csproj index 6ce5a6e78..1fab6aae7 100644 --- a/YoutubeDl.Wpf/YoutubeDl.Wpf.csproj +++ b/YoutubeDl.Wpf/YoutubeDl.Wpf.csproj @@ -2,15 +2,15 @@ WinExe - net7.0-windows10.0.22621.0 + net8.0-windows10.0.22621.0 true app.manifest Cube YouTube Downloader database64128 - 1.12.2 + 1.13.0 CubeYouTubeDownloader.ico WPF GUI for https://github.com/ytdl-org/youtube-dl and https://github.com/yt-dlp/yt-dlp. - © 2022 database64128 + © 2024 database64128 LICENSE https://github.com/database64128/youtube-dl-wpf CubeYouTubeDownloader.png