From 74eb899e31ea324a096f3a9fc6ed863aef662ef5 Mon Sep 17 00:00:00 2001 From: Mateusz Skoczek Date: Wed, 28 Feb 2024 01:22:13 +0100 Subject: [PATCH] changes --- .../VDownload.Core.Strings.csproj | 4 +- .../VDownload.Core.Tasks/DownloadTask.cs | 4 +- .../DownloadTaskManager.cs | 3 +- .../BaseViewModel.cs | 2 +- .../Home/HomePlaylistViewModel.cs | 75 +++++++++++ .../Home/HomeVideoViewModel.cs | 30 ++--- .../Home/HomeViewModel.cs | 27 +++- .../VDownload.Core.ViewModels.csproj | 2 +- .../VDownload.Core.Views/BaseWindow.xaml | 2 +- .../Home/HomePlaylistView.xaml | 52 ++++++++ .../Home/HomePlaylistView.xaml.cs | 31 +++++ .../Home/HomeVideoView.xaml | 2 +- .../VDownload.Core.Views.csproj | 10 +- .../ViewModelToViewConverter.cs | 1 + VDownload.Models/Playlist.cs | 10 +- VDownload.Models/Video.cs | 4 +- .../CommonSettings.cs | 14 +-- .../Models/DefaultTaskSettings.cs | 28 ----- .../Models/Tasks.cs | 31 +++++ .../Models/Temp.cs | 18 +++ .../SettingsService.cs | 8 +- ...oad.Services.UI.DictionaryResources.csproj | 4 +- ...ownload.Services.UI.StringResources.csproj | 4 +- .../HttpClientService.cs | 4 +- .../Helix/GetUsers/Response/Data.cs | 45 +++++++ .../GetUsers/Response/GetUsersResponse.cs | 15 +++ .../TwitchApiService.cs | 42 ++++++- .../Models/Channel.cs | 18 +++ .../Models/Clip.cs | 15 +++ .../Models/EndpointsHelix.cs | 3 + .../Models/Search.cs | 6 + .../TwitchChannel.cs | 17 +++ .../TwitchPlaylist.cs | 8 ++ .../TwitchSearchService.cs | 81 ++++++++++-- .../StringExtensions.cs | 34 ----- .../VDownload.Toolkit.Extensions.csproj | 9 -- .../EventToCommandBehavior.cs | 91 -------------- .../VDownload.Toolkit.UI.Behaviors.csproj | 16 --- .../TimeSpanControl.xaml | 19 --- .../TimeSpanControl.xaml.cs | 119 ------------------ .../VDownload.Toolkit.UI.Controls.csproj | 24 ---- .../ObjectToIntConverter.cs | 22 ---- .../ObjectToStringConverter.cs | 20 --- .../VDownload.Toolkit.UI.Converters.csproj | 15 --- .../NavigationViewItem.cs | 19 --- .../VDownload.Toolkit.UI.Models.csproj | 9 -- VDownload.sln | 104 +-------------- VDownload/App.xaml.cs | 30 +++-- VDownload/Dictionaries/Converters.xaml | 2 +- VDownload/VDownload.csproj | 2 +- VDownload/configuration.json | 15 ++- 51 files changed, 562 insertions(+), 608 deletions(-) create mode 100644 VDownload.Core/VDownload.Core.ViewModels/Home/HomePlaylistViewModel.cs create mode 100644 VDownload.Core/VDownload.Core.Views/Home/HomePlaylistView.xaml create mode 100644 VDownload.Core/VDownload.Core.Views/Home/HomePlaylistView.xaml.cs delete mode 100644 VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Settings/Models/DefaultTaskSettings.cs create mode 100644 VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Settings/Models/Tasks.cs create mode 100644 VDownload.Services/VDownload.Services.Data/VDownload.Services.Data.Settings/Models/Temp.cs create mode 100644 VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Api/Helix/GetUsers/Response/Data.cs create mode 100644 VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Api/Helix/GetUsers/Response/GetUsersResponse.cs create mode 100644 VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Channel.cs create mode 100644 VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Clip.cs create mode 100644 VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Models/TwitchChannel.cs delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.Extensions/StringExtensions.cs delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.Extensions/VDownload.Toolkit.Extensions.csproj delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.UI/VDownload.Toolkit.UI.Behaviors/EventToCommandBehavior.cs delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.UI/VDownload.Toolkit.UI.Behaviors/VDownload.Toolkit.UI.Behaviors.csproj delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.UI/VDownload.Toolkit.UI.Controls/TimeSpanControl.xaml delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.UI/VDownload.Toolkit.UI.Controls/TimeSpanControl.xaml.cs delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.UI/VDownload.Toolkit.UI.Controls/VDownload.Toolkit.UI.Controls.csproj delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.UI/VDownload.Toolkit.UI.Converters/ObjectToIntConverter.cs delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.UI/VDownload.Toolkit.UI.Converters/ObjectToStringConverter.cs delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.UI/VDownload.Toolkit.UI.Converters/VDownload.Toolkit.UI.Converters.csproj delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.UI/VDownload.Toolkit.UI.Models/NavigationViewItem.cs delete mode 100644 VDownload.Toolkit/VDownload.Toolkit.UI/VDownload.Toolkit.UI.Models/VDownload.Toolkit.UI.Models.csproj diff --git a/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj b/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj index 2a99cd6..d5d725e 100644 --- a/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj +++ b/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj @@ -9,8 +9,8 @@ - - + + diff --git a/VDownload.Core/VDownload.Core.Tasks/DownloadTask.cs b/VDownload.Core/VDownload.Core.Tasks/DownloadTask.cs index 4686cba..bd7293e 100644 --- a/VDownload.Core/VDownload.Core.Tasks/DownloadTask.cs +++ b/VDownload.Core/VDownload.Core.Tasks/DownloadTask.cs @@ -140,7 +140,7 @@ namespace VDownload.Core.Tasks await _settingsService.Load(); - string tempDirectory = $"{_settingsService.Data.Common.TempDirectory}\\{_configurationService.Common.Path.Temp.TasksDirectory}\\{_id}"; + string tempDirectory = $"{_settingsService.Data.Common.Temp.Directory}\\{_configurationService.Common.Path.Temp.TasksDirectory}\\{_id}"; Directory.CreateDirectory(tempDirectory); List content = new List() @@ -211,7 +211,7 @@ namespace VDownload.Core.Tasks } finally { - if (Status != DownloadTaskStatus.EndedUnsuccessfully || _settingsService.Data.Common.DeleteTempOnError) + if (Status != DownloadTaskStatus.EndedUnsuccessfully || _settingsService.Data.Common.Temp.DeleteOnError) { Directory.Delete(tempDirectory, true); } diff --git a/VDownload.Core/VDownload.Core.Tasks/DownloadTaskManager.cs b/VDownload.Core/VDownload.Core.Tasks/DownloadTaskManager.cs index 3d1773a..7b29197 100644 --- a/VDownload.Core/VDownload.Core.Tasks/DownloadTaskManager.cs +++ b/VDownload.Core/VDownload.Core.Tasks/DownloadTaskManager.cs @@ -129,13 +129,12 @@ namespace VDownload.Core.Tasks DownloadTaskStatus.Processing, DownloadTaskStatus.Finalizing ]; - while (true) { try { IEnumerable pendingTasks = Tasks.Where(x => pendingStatuses.Contains(x.Status)); - int freeSlots = _settingsService.Data.Common.MaxNumberOfRunningTasks - pendingTasks.Count(); + int freeSlots = _settingsService.Data.Common.Tasks.MaxNumberOfRunningTasks - pendingTasks.Count(); if (freeSlots > 0) { IEnumerable queuedTasks = Tasks.Where(x => x.Status == DownloadTaskStatus.Queued).OrderBy(x => x.CreateDate).Take(freeSlots); diff --git a/VDownload.Core/VDownload.Core.ViewModels/BaseViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/BaseViewModel.cs index 9b5adfc..0e1986b 100644 --- a/VDownload.Core/VDownload.Core.ViewModels/BaseViewModel.cs +++ b/VDownload.Core/VDownload.Core.ViewModels/BaseViewModel.cs @@ -11,7 +11,7 @@ using VDownload.Core.ViewModels.Home; using VDownload.Core.ViewModels.Settings; using VDownload.Services.UI.DictionaryResources; using VDownload.Services.UI.StringResources; -using VDownload.Toolkit.UI.Models; +using SimpleToolkit.UI.Models; namespace VDownload.Core.ViewModels { diff --git a/VDownload.Core/VDownload.Core.ViewModels/Home/HomePlaylistViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Home/HomePlaylistViewModel.cs new file mode 100644 index 0000000..de45d65 --- /dev/null +++ b/VDownload.Core/VDownload.Core.ViewModels/Home/HomePlaylistViewModel.cs @@ -0,0 +1,75 @@ +using CommunityToolkit.Mvvm.ComponentModel; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using VDownload.Models; +using VDownload.Sources.Twitch.Configuration.Models; + +namespace VDownload.Core.ViewModels.Home +{ + public partial class HomePlaylistViewModel : ObservableObject + { + #region SERVICES + + + + #endregion + + + + #region FIELDS + + + + #endregion + + + + #region PROPERTIES + + [ObservableProperty] + protected string _name; + + #endregion + + + + #region CONSTRUCTORS + + public HomePlaylistViewModel() + { + } + + #endregion + + + + #region PUBLIC METHODS + + public async Task LoadPlaylist(Playlist playlist) + { + Name = playlist.Name; + } + + #endregion + + + + #region COMMANDS + + + + #endregion + + + + #region EVENTS + + public event EventHandler CloseRequested; + + #endregion + } +} diff --git a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoViewModel.cs index 9de4c76..8fb5a4e 100644 --- a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoViewModel.cs +++ b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeVideoViewModel.cs @@ -87,14 +87,6 @@ namespace VDownload.Core.ViewModels.Home - #region EVENTS - - public event EventHandler TaskAdded; - - #endregion - - - #region CONSTRUCTORS public HomeVideoViewModel(IDownloadTaskManager tasksManager, ISettingsService settingsService, IStoragePickerService storagePickerService) @@ -110,7 +102,7 @@ namespace VDownload.Core.ViewModels.Home #region PUBLIC METHODS - public async void LoadVideo(Video video) + public async Task LoadVideo(Video video) { await _settingsService.Load(); @@ -125,13 +117,13 @@ namespace VDownload.Core.ViewModels.Home Streams = [.. video.Streams]; SelectedStream = Streams[0]; - MediaType = _settingsService.Data.Common.DefaultTaskSettings.MediaType; + MediaType = _settingsService.Data.Common.Tasks.DefaultMediaType; TrimStart = TimeSpan.Zero; TrimEnd = Duration; - DirectoryPath = _settingsService.Data.Common.DefaultTaskSettings.OutputDirectory; + DirectoryPath = _settingsService.Data.Common.Tasks.DefaultOutputDirectory; Filename = Title.Length > 50 ? Title.Substring(0, 50) : Title; - VideoExtension = _settingsService.Data.Common.DefaultTaskSettings.VideoExtension; - AudioExtension = _settingsService.Data.Common.DefaultTaskSettings.AudioExtension; + VideoExtension = _settingsService.Data.Common.Tasks.DefaultVideoExtension; + AudioExtension = _settingsService.Data.Common.Tasks.DefaultAudioExtension; } @@ -149,14 +141,14 @@ namespace VDownload.Core.ViewModels.Home public void CreateTask() { _tasksManager.AddTask(_video, BuildDownloadOptions()); - TaskAdded?.Invoke(this, EventArgs.Empty); + CloseRequested?.Invoke(this, EventArgs.Empty); } [RelayCommand] public void CreateTaskAndDownload() { DownloadTask task = _tasksManager.AddTask(_video, BuildDownloadOptions()); - TaskAdded?.Invoke(this, EventArgs.Empty); + CloseRequested?.Invoke(this, EventArgs.Empty); task.Enqueue(); } @@ -181,5 +173,13 @@ namespace VDownload.Core.ViewModels.Home } #endregion + + + + #region EVENTS + + public event EventHandler CloseRequested; + + #endregion } } diff --git a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs index 474b89e..55e2944 100644 --- a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs +++ b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs @@ -5,6 +5,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; +using VDownload.Core.Tasks; using VDownload.Models; using VDownload.Services.Data.Configuration; using VDownload.Services.Data.Settings; @@ -42,7 +43,10 @@ namespace VDownload.Core.ViewModels.Home protected readonly IStringResourcesService _stringResourcesService; protected readonly ISearchService _searchService; + protected readonly IDownloadTaskManager _downloadTaskManager; + protected readonly HomeVideoViewModel _videoViewModel; + protected readonly HomePlaylistViewModel _playlistViewModel; #endregion @@ -52,6 +56,7 @@ namespace VDownload.Core.ViewModels.Home protected readonly Type _downloadsView = typeof(HomeDownloadsViewModel); protected readonly Type _videoView = typeof(HomeVideoViewModel); + protected readonly Type _playlistView = typeof(HomePlaylistViewModel); #endregion @@ -96,15 +101,20 @@ namespace VDownload.Core.ViewModels.Home #region CONSTRUCTORS - public HomeViewModel(IConfigurationService configurationService, ISettingsService settingsService, IStringResourcesService stringResourcesService, ISearchService searchService, HomeVideoViewModel videoViewModel) + public HomeViewModel(IConfigurationService configurationService, ISettingsService settingsService, IStringResourcesService stringResourcesService, ISearchService searchService, IDownloadTaskManager downloadTaskManager, HomeVideoViewModel videoViewModel, HomePlaylistViewModel playlistViewModel) { _configurationService = configurationService; _settingsService = settingsService; _stringResourcesService = stringResourcesService; _searchService = searchService; + _downloadTaskManager = downloadTaskManager; + _videoViewModel = videoViewModel; - _videoViewModel.TaskAdded += VideoViewModel_TaskAdded; + _videoViewModel.CloseRequested += BackToDownload_EventHandler; + + _playlistViewModel = playlistViewModel; + _playlistViewModel.CloseRequested += BackToDownload_EventHandler; } #endregion @@ -195,7 +205,7 @@ namespace VDownload.Core.ViewModels.Home return; } - _videoViewModel.LoadVideo(video); + await _videoViewModel.LoadVideo(video); MainContent = _videoView; @@ -224,6 +234,10 @@ namespace VDownload.Core.ViewModels.Home return; } + await _playlistViewModel.LoadPlaylist(playlist); + + MainContent = _playlistView; + OptionBarSearchNotPending = true; OptionBarLoading = false; OptionBarMessage = null; @@ -232,7 +246,10 @@ namespace VDownload.Core.ViewModels.Home [RelayCommand] public void Download() { - + foreach (DownloadTask task in _downloadTaskManager.Tasks) + { + task.Enqueue(); + } } #endregion @@ -241,7 +258,7 @@ namespace VDownload.Core.ViewModels.Home #region PRIVATE METHODS - private async void VideoViewModel_TaskAdded(object sender, EventArgs e) => await Navigation(); + private async void BackToDownload_EventHandler(object sender, EventArgs e) => await Navigation(); #endregion } diff --git a/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj b/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj index 9f8b80b..fb0943c 100644 --- a/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj +++ b/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj @@ -12,6 +12,7 @@ + @@ -23,7 +24,6 @@ - diff --git a/VDownload.Core/VDownload.Core.Views/BaseWindow.xaml b/VDownload.Core/VDownload.Core.Views/BaseWindow.xaml index 502fbc3..47ac369 100644 --- a/VDownload.Core/VDownload.Core.Views/BaseWindow.xaml +++ b/VDownload.Core/VDownload.Core.Views/BaseWindow.xaml @@ -7,7 +7,7 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:i="using:Microsoft.Xaml.Interactivity" xmlns:ic="using:Microsoft.Xaml.Interactions.Core" - xmlns:cb="using:VDownload.Toolkit.UI.Behaviors" + xmlns:cb="using:SimpleToolkit.UI.WinUI.Behaviors" mc:Ignorable="d"> diff --git a/VDownload.Core/VDownload.Core.Views/Home/HomePlaylistView.xaml b/VDownload.Core/VDownload.Core.Views/Home/HomePlaylistView.xaml new file mode 100644 index 0000000..7b48111 --- /dev/null +++ b/VDownload.Core/VDownload.Core.Views/Home/HomePlaylistView.xaml @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VDownload.Core/VDownload.Core.Views/Home/HomePlaylistView.xaml.cs b/VDownload.Core/VDownload.Core.Views/Home/HomePlaylistView.xaml.cs new file mode 100644 index 0000000..541afe6 --- /dev/null +++ b/VDownload.Core/VDownload.Core.Views/Home/HomePlaylistView.xaml.cs @@ -0,0 +1,31 @@ +using Microsoft.UI.Xaml; +using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Controls.Primitives; +using Microsoft.UI.Xaml.Data; +using Microsoft.UI.Xaml.Input; +using Microsoft.UI.Xaml.Media; +using Microsoft.UI.Xaml.Navigation; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices.WindowsRuntime; +using VDownload.Core.ViewModels.Home; +using Windows.Foundation; +using Windows.Foundation.Collections; + +namespace VDownload.Core.Views.Home +{ + public sealed partial class HomePlaylistView : Page + { + #region CONSTRUCTORS + + public HomePlaylistView(HomePlaylistViewModel viewModel) + { + this.InitializeComponent(); + this.DataContext = viewModel; + } + + #endregion + } +} diff --git a/VDownload.Core/VDownload.Core.Views/Home/HomeVideoView.xaml b/VDownload.Core/VDownload.Core.Views/Home/HomeVideoView.xaml index 4e162e2..b9259fa 100644 --- a/VDownload.Core/VDownload.Core.Views/Home/HomeVideoView.xaml +++ b/VDownload.Core/VDownload.Core.Views/Home/HomeVideoView.xaml @@ -12,7 +12,7 @@ xmlns:ct="using:CommunityToolkit.WinUI" xmlns:ctc="using:CommunityToolkit.WinUI.Controls" xmlns:ctuc="using:CommunityToolkit.WinUI.UI.Controls" - xmlns:c="using:VDownload.Toolkit.UI.Controls" + xmlns:c="using:SimpleToolkit.UI.WinUI.Controls" mc:Ignorable="d" Background="{ThemeResource ViewBackgroundColor}"> diff --git a/VDownload.Core/VDownload.Core.Views/VDownload.Core.Views.csproj b/VDownload.Core/VDownload.Core.Views/VDownload.Core.Views.csproj index 43efa2d..9c56c5c 100644 --- a/VDownload.Core/VDownload.Core.Views/VDownload.Core.Views.csproj +++ b/VDownload.Core/VDownload.Core.Views/VDownload.Core.Views.csproj @@ -7,6 +7,9 @@ true true + + + @@ -16,11 +19,11 @@ + + - - @@ -35,6 +38,9 @@ MSBuild:Compile + + MSBuild:Compile + MSBuild:Compile diff --git a/VDownload.Core/VDownload.Core.Views/ViewModelToViewConverter.cs b/VDownload.Core/VDownload.Core.Views/ViewModelToViewConverter.cs index 7bafd1b..7ce906b 100644 --- a/VDownload.Core/VDownload.Core.Views/ViewModelToViewConverter.cs +++ b/VDownload.Core/VDownload.Core.Views/ViewModelToViewConverter.cs @@ -20,6 +20,7 @@ namespace VDownload.Core.Views { typeof(HomeViewModel), typeof(HomeView) }, { typeof(HomeDownloadsViewModel), typeof(HomeDownloadsView) }, { typeof(HomeVideoViewModel), typeof(HomeVideoView) }, + { typeof(HomePlaylistViewModel), typeof(HomePlaylistView) }, { typeof(SettingsViewModel), typeof(SettingsView) }, { typeof(AuthenticationViewModel), typeof(AuthenticationView) } }; diff --git a/VDownload.Models/Playlist.cs b/VDownload.Models/Playlist.cs index c9ffadd..4dcb4fe 100644 --- a/VDownload.Models/Playlist.cs +++ b/VDownload.Models/Playlist.cs @@ -6,7 +6,15 @@ using System.Threading.Tasks; namespace VDownload.Models { - public abstract class Playlist + public abstract class Playlist : List