From 51389c4df1e94a77dd6cf8aac647858fd3be6f07 Mon Sep 17 00:00:00 2001 From: Mateusz Skoczek Date: Mon, 7 Mar 2022 14:59:11 +0100 Subject: [PATCH] 1.0-dev15 (Core code cleaning) --- .github/Images/Home.png | Bin 0 -> 222590 bytes README.md | 1 + VDownload.Core/Enums/StreamType.cs | 9 - .../Enums/TaskAddingRequestSource.cs | 14 + .../EventArgs/PlaylistAddEventArgs.cs | 23 -- .../EventArgs/PlaylistSearchEventArgs.cs | 4 +- .../EventArgs/ProgressChangedEventArgs.cs | 24 ++ .../TasksAddingRequestedEventArgs.cs | 11 + .../EventArgs/VideoSearchEventArgs.cs | 2 +- VDownload.Core/Interfaces/IBaseStream.cs | 22 -- VDownload.Core/Interfaces/IVideoService.cs | 20 +- VDownload.Core/Objects/Stream.cs | 36 -- VDownload.Core/Services/Config.cs | 3 +- VDownload.Core/Services/MediaProcessor.cs | 108 +++--- .../Services/Sources/Twitch/Channel.cs | 58 +-- .../Services/Sources/Twitch/Clip.cs | 137 +++---- .../Sources/Twitch/{ => Helpers}/Auth.cs | 6 +- .../Services/Sources/Twitch/Helpers/Client.cs | 38 ++ VDownload.Core/Services/Sources/Twitch/Vod.cs | 184 ++++----- VDownload.Core/Services/TaskId.cs | 21 +- .../Services/TimeSpanCustomFormat.cs | 61 +++ VDownload.Core/Structs/BaseStream.cs | 15 + VDownload.Core/Structs/Metadata.cs | 18 + .../TaskData.cs} | 7 +- VDownload.Core/VDownload.Core.csproj | 15 +- VDownload/Strings/en-US/Resources.resw | 2 +- VDownload/Strings/en-US/ResourcesOld.resw | 348 ------------------ VDownload/VDownload.csproj | 3 - VDownload/Views/Home/HomeMain.xaml | 2 +- VDownload/Views/Home/HomeMain.xaml.cs | 168 +++++---- .../HomeOptionsBarAddPlaylistControl.xaml | 2 +- .../HomeOptionsBarAddPlaylistControl.xaml.cs | 10 +- .../HomeOptionsBarAddVideoControl.xaml.cs | 2 +- .../Home/HomePlaylistAddingPanel.xaml.cs | 129 ++++--- .../HomePlaylistAddingPanelVideoPanel.xaml | 4 +- .../HomePlaylistAddingPanelVideoPanel.xaml.cs | 60 +-- VDownload/Views/Home/HomeTaskPanel.xaml | 4 +- VDownload/Views/Home/HomeTaskPanel.xaml.cs | 154 ++++---- .../Views/Home/HomeVideoAddingPanel.xaml | 4 +- .../Views/Home/HomeVideoAddingPanel.xaml.cs | 74 ++-- VDownload/Views/Settings/SettingsMain.xaml.cs | 5 - VDownload/Views/Sources/SourcesMain.xaml | 5 +- VDownload/Views/Sources/SourcesMain.xaml.cs | 66 ++-- .../Subscriptions/SubscriptionsMain.xaml | 8 +- .../Subscriptions/SubscriptionsMain.xaml.cs | 5 - 45 files changed, 802 insertions(+), 1090 deletions(-) create mode 100644 .github/Images/Home.png delete mode 100644 VDownload.Core/Enums/StreamType.cs create mode 100644 VDownload.Core/Enums/TaskAddingRequestSource.cs delete mode 100644 VDownload.Core/EventArgs/PlaylistAddEventArgs.cs create mode 100644 VDownload.Core/EventArgs/ProgressChangedEventArgs.cs create mode 100644 VDownload.Core/EventArgs/TasksAddingRequestedEventArgs.cs delete mode 100644 VDownload.Core/Interfaces/IBaseStream.cs delete mode 100644 VDownload.Core/Objects/Stream.cs rename VDownload.Core/Services/Sources/Twitch/{ => Helpers}/Auth.cs (96%) create mode 100644 VDownload.Core/Services/Sources/Twitch/Helpers/Client.cs create mode 100644 VDownload.Core/Services/TimeSpanCustomFormat.cs create mode 100644 VDownload.Core/Structs/BaseStream.cs create mode 100644 VDownload.Core/Structs/Metadata.cs rename VDownload.Core/{EventArgs/VideoAddEventArgs.cs => Structs/TaskData.cs} (75%) delete mode 100644 VDownload/Strings/en-US/ResourcesOld.resw diff --git a/.github/Images/Home.png b/.github/Images/Home.png new file mode 100644 index 0000000000000000000000000000000000000000..fc42a5bef3a4f72067a07806143b020fbc619a79 GIT binary patch literal 222590 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 Yn-!NWFzBXzg>%d~1q;J!ZjoRdCDyr^ZGN8Z*( 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 Dj%P^x literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 8840318..c8ea868 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # VDownload VDownload is universal video downloader written in .NET/C# and Universal Windows Platform. +![VDownload Home Page](.github/Images/Home.png) ## Requirements diff --git a/VDownload.Core/Enums/StreamType.cs b/VDownload.Core/Enums/StreamType.cs deleted file mode 100644 index 6f0d154..0000000 --- a/VDownload.Core/Enums/StreamType.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace VDownload.Core.Enums -{ - public enum StreamType - { - AudioVideo, - OnlyAudio, - OnlyVideo, - } -} diff --git a/VDownload.Core/Enums/TaskAddingRequestSource.cs b/VDownload.Core/Enums/TaskAddingRequestSource.cs new file mode 100644 index 0000000..b2058c1 --- /dev/null +++ b/VDownload.Core/Enums/TaskAddingRequestSource.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VDownload.Core.Enums +{ + public enum TaskAddingRequestSource + { + Video, + Playlist + } +} diff --git a/VDownload.Core/EventArgs/PlaylistAddEventArgs.cs b/VDownload.Core/EventArgs/PlaylistAddEventArgs.cs deleted file mode 100644 index cbe6648..0000000 --- a/VDownload.Core/EventArgs/PlaylistAddEventArgs.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using VDownload.Core.Enums; -using VDownload.Core.Interfaces; -using VDownload.Core.Objects; -using Windows.Storage; - -namespace VDownload.Core.EventArgs -{ - public class PlaylistAddEventArgs : System.EventArgs - { - public ( - IVideoService VideoService, - MediaType MediaType, - IBaseStream Stream, - TimeSpan TrimStart, - TimeSpan TrimEnd, - string Filename, - MediaFileExtension Extension, - StorageFolder Location, - double Schedule - )[] Videos { get; set; } - } -} diff --git a/VDownload.Core/EventArgs/PlaylistSearchEventArgs.cs b/VDownload.Core/EventArgs/PlaylistSearchEventArgs.cs index d0b9036..32946a0 100644 --- a/VDownload.Core/EventArgs/PlaylistSearchEventArgs.cs +++ b/VDownload.Core/EventArgs/PlaylistSearchEventArgs.cs @@ -2,7 +2,7 @@ { public class PlaylistSearchEventArgs : System.EventArgs { - public string Phrase { get; set; } - public int Count { get; set; } + public string Url { get; set; } + public int VideosCount { get; set; } } } diff --git a/VDownload.Core/EventArgs/ProgressChangedEventArgs.cs b/VDownload.Core/EventArgs/ProgressChangedEventArgs.cs new file mode 100644 index 0000000..d4dfffa --- /dev/null +++ b/VDownload.Core/EventArgs/ProgressChangedEventArgs.cs @@ -0,0 +1,24 @@ +namespace VDownload.Core.EventArgs +{ + public class ProgressChangedEventArgs : System.EventArgs + { + #region CONSTRUCTORS + + public ProgressChangedEventArgs(double progress, bool isCompleted = false) + { + Progress = progress; + IsCompleted = isCompleted; + } + + #endregion + + + + #region PROPERTIES + + public double Progress { get; set; } + public bool IsCompleted { get; set; } + + #endregion + } +} diff --git a/VDownload.Core/EventArgs/TasksAddingRequestedEventArgs.cs b/VDownload.Core/EventArgs/TasksAddingRequestedEventArgs.cs new file mode 100644 index 0000000..8da4118 --- /dev/null +++ b/VDownload.Core/EventArgs/TasksAddingRequestedEventArgs.cs @@ -0,0 +1,11 @@ +using VDownload.Core.Enums; +using VDownload.Core.Structs; + +namespace VDownload.Core.EventArgs +{ + public class TasksAddingRequestedEventArgs : System.EventArgs + { + public TaskData[] TaskData { get; set; } + public TaskAddingRequestSource RequestSource { get; set; } + } +} diff --git a/VDownload.Core/EventArgs/VideoSearchEventArgs.cs b/VDownload.Core/EventArgs/VideoSearchEventArgs.cs index 720fd91..7028722 100644 --- a/VDownload.Core/EventArgs/VideoSearchEventArgs.cs +++ b/VDownload.Core/EventArgs/VideoSearchEventArgs.cs @@ -2,6 +2,6 @@ { public class VideoSearchEventArgs : System.EventArgs { - public string Phrase { get; set; } + public string Url { get; set; } } } diff --git a/VDownload.Core/Interfaces/IBaseStream.cs b/VDownload.Core/Interfaces/IBaseStream.cs deleted file mode 100644 index 5810605..0000000 --- a/VDownload.Core/Interfaces/IBaseStream.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using VDownload.Core.Enums; - -namespace VDownload.Core.Interfaces -{ - public interface IBaseStream - { - #region PROPERTIES - - Uri Url { get; } - bool IsChunked { get; } - StreamType StreamType { get; } - int Height { get; } - int FrameRate { get; } - - #endregion - } -} diff --git a/VDownload.Core/Interfaces/IVideoService.cs b/VDownload.Core/Interfaces/IVideoService.cs index 3834641..7ad0db4 100644 --- a/VDownload.Core/Interfaces/IVideoService.cs +++ b/VDownload.Core/Interfaces/IVideoService.cs @@ -3,6 +3,7 @@ using System.ComponentModel; using System.Threading; using System.Threading.Tasks; using VDownload.Core.Enums; +using VDownload.Core.Structs; using Windows.Storage; namespace VDownload.Core.Interfaces @@ -14,13 +15,8 @@ namespace VDownload.Core.Interfaces // VIDEO PROPERTIES string ID { get; } Uri VideoUrl { get; } - string Title { get; } - string Author { get; } - DateTime Date { get; } - TimeSpan Duration { get; } - long Views { get; } - Uri Thumbnail { get; } - IBaseStream[] BaseStreams { get; } + Metadata Metadata { get; } + BaseStream[] BaseStreams { get; } #endregion @@ -35,7 +31,7 @@ namespace VDownload.Core.Interfaces Task GetStreamsAsync(CancellationToken cancellationToken = default); // DOWNLOAD VIDEO - Task DownloadAndTranscodeAsync(StorageFolder downloadingFolder, IBaseStream baseStream, MediaFileExtension extension, MediaType mediaType, TimeSpan trimStart, TimeSpan trimEnd, CancellationToken cancellationToken = default); + Task DownloadAndTranscodeAsync(StorageFolder downloadingFolder, BaseStream baseStream, MediaFileExtension extension, MediaType mediaType, TimeSpan trimStart, TimeSpan trimEnd, CancellationToken cancellationToken = default); #endregion @@ -43,12 +39,8 @@ namespace VDownload.Core.Interfaces #region EVENT HANDLERS - event EventHandler DownloadingStarted; - event EventHandler DownloadingProgressChanged; - event EventHandler DownloadingCompleted; - event EventHandler ProcessingStarted; - event EventHandler ProcessingProgressChanged; - event EventHandler ProcessingCompleted; + event EventHandler DownloadingProgressChanged; + event EventHandler ProcessingProgressChanged; #endregion } diff --git a/VDownload.Core/Objects/Stream.cs b/VDownload.Core/Objects/Stream.cs deleted file mode 100644 index 30d3449..0000000 --- a/VDownload.Core/Objects/Stream.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using VDownload.Core.Enums; -using VDownload.Core.Interfaces; - -namespace VDownload.Core.Objects -{ - public class Stream : IBaseStream - { - #region CONSTRUCTORS - - public Stream(Uri url, bool isChunked, StreamType streamType) - { - Url = url; - IsChunked = isChunked; - StreamType = streamType; - } - - #endregion - - - - #region PROPERTIES - - public Uri Url { get; private set; } - public bool IsChunked { get; private set; } - public StreamType StreamType { get; private set; } - public int Width { get; set; } - public int Height { get; set; } - public int FrameRate { get; set; } - public string VideoCodec { get; set; } - public int AudioBitrate { get; set; } - public string AudioCodec { get; set; } - - #endregion - } -} diff --git a/VDownload.Core/Services/Config.cs b/VDownload.Core/Services/Config.cs index ee7bfdd..23201d3 100644 --- a/VDownload.Core/Services/Config.cs +++ b/VDownload.Core/Services/Config.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using VDownload.Core.Enums; using Windows.Media.Editing; +using Windows.Media.Transcoding; using Windows.Storage; namespace VDownload.Core.Services @@ -21,7 +22,7 @@ namespace VDownload.Core.Services { "twitch_vod_downloading_chunk_max_retries", 10 }, { "twitch_vod_downloading_chunk_retries_delay", 5000 }, { "media_transcoding_use_hardware_acceleration", true }, - { "media_transcoding_use_mrfcrf444_algorithm", true }, + { "media_transcoding_algorithm", (int)MediaVideoProcessingAlgorithm.MrfCrf444 }, { "media_editing_algorithm", (int)MediaTrimmingPreference.Fast }, { "default_max_playlist_videos", 0 }, { "default_media_type", (int)MediaType.AudioVideo }, diff --git a/VDownload.Core/Services/MediaProcessor.cs b/VDownload.Core/Services/MediaProcessor.cs index 1f59839..d75caef 100644 --- a/VDownload.Core/Services/MediaProcessor.cs +++ b/VDownload.Core/Services/MediaProcessor.cs @@ -1,5 +1,4 @@ using System; -using System.ComponentModel; using System.Linq; using System.Threading; using System.Threading.Tasks; @@ -15,66 +14,50 @@ namespace VDownload.Core.Services { public class MediaProcessor { - #region CONSTRUCTORS - - public MediaProcessor(StorageFile outputFile, TimeSpan trimStart, TimeSpan trimEnd) - { - OutputFile = outputFile; - TrimStart = trimStart; - TrimEnd = trimEnd; - } - - #endregion - - - - #region PROPERTIES - - public StorageFile OutputFile { get; private set; } - public TimeSpan TrimStart { get; private set; } - public TimeSpan TrimEnd { get; private set; } - - #endregion - - - #region STANDARD METHODS // SINGLE AUDIO & VIDEO FILE PROCESSING - public async Task Run(StorageFile audioVideoInputFile, MediaFileExtension extension, MediaType mediaType, CancellationToken cancellationToken = default) + public async Task Run(StorageFile mediaFile, MediaFileExtension extension, MediaType mediaType, StorageFile outputFile, TimeSpan? trimStart = null, TimeSpan? trimEnd = null, CancellationToken cancellationToken = default) { - // Invoke ProcessingStarted event - ProcessingStarted?.Invoke(this, System.EventArgs.Empty); + // Invoke event at start + cancellationToken.ThrowIfCancellationRequested(); + ProgressChanged(this, new EventArgs.ProgressChangedEventArgs(0)); // Init transcoder MediaTranscoder mediaTranscoder = new MediaTranscoder { HardwareAccelerationEnabled = (bool)Config.GetValue("media_transcoding_use_hardware_acceleration"), - VideoProcessingAlgorithm = (bool)Config.GetValue("media_transcoding_use_mrfcrf444_algorithm") ? MediaVideoProcessingAlgorithm.MrfCrf444 : MediaVideoProcessingAlgorithm.Default, - TrimStartTime = TrimStart, - TrimStopTime = TrimEnd, + VideoProcessingAlgorithm = (MediaVideoProcessingAlgorithm)Config.GetValue("media_transcoding_algorithm"), }; + if (trimStart != null) mediaTranscoder.TrimStartTime = (TimeSpan)trimStart; + if (trimEnd != null) mediaTranscoder.TrimStopTime = (TimeSpan)trimEnd; // Start transcoding operation - cancellationToken.ThrowIfCancellationRequested(); - using (IRandomAccessStream outputFileOpened = await OutputFile.OpenAsync(FileAccessMode.ReadWrite)) + using (IRandomAccessStream openedOutputFile = await outputFile.OpenAsync(FileAccessMode.ReadWrite)) { - PrepareTranscodeResult transcodingPreparated = await mediaTranscoder.PrepareStreamTranscodeAsync(await audioVideoInputFile.OpenAsync(FileAccessMode.Read), outputFileOpened, await GetMediaEncodingProfile(audioVideoInputFile, extension, mediaType)); + // Prepare transcode task + PrepareTranscodeResult transcodingPreparated = await mediaTranscoder.PrepareStreamTranscodeAsync(await mediaFile.OpenAsync(FileAccessMode.Read), openedOutputFile, await GetMediaEncodingProfile(mediaFile, extension, mediaType)); + + // Start transcoding IAsyncActionWithProgress transcodingTask = transcodingPreparated.TranscodeAsync(); - await transcodingTask.AsTask(cancellationToken, new Progress((percent) => { ProcessingProgressChanged(this, new ProgressChangedEventArgs((int)Math.Round(percent), null)); })); - await outputFileOpened.FlushAsync(); + await transcodingTask.AsTask(cancellationToken, new Progress((percent) => { ProgressChanged(this, new EventArgs.ProgressChangedEventArgs(percent)); })); + cancellationToken.ThrowIfCancellationRequested(); + + // Finalizing + await openedOutputFile.FlushAsync(); transcodingTask.Close(); } - // Invoke ProcessingCompleted event - ProcessingCompleted?.Invoke(this, System.EventArgs.Empty); + // Invoke event at end + ProgressChanged(this, new EventArgs.ProgressChangedEventArgs(100, true)); } // SEPARATE AUDIO & VIDEO FILES PROCESSING - public async Task Run(StorageFile audioFile, StorageFile videoFile, VideoFileExtension extension, CancellationToken cancellationToken = default) + public async Task Run(StorageFile audioFile, StorageFile videoFile, VideoFileExtension extension, StorageFile outputFile, TimeSpan? trimStart = null, TimeSpan? trimEnd = null, CancellationToken cancellationToken = default) { - // Invoke ProcessingStarted event - ProcessingStarted?.Invoke(this, System.EventArgs.Empty); + // Invoke event at start + cancellationToken.ThrowIfCancellationRequested(); + ProgressChanged(this, new EventArgs.ProgressChangedEventArgs(0)); // Init editor MediaComposition mediaEditor = new MediaComposition(); @@ -86,28 +69,36 @@ namespace VDownload.Core.Services await Task.WhenAll(getVideoFileTask, getAudioFileTask); MediaClip videoElement = getVideoFileTask.Result; - videoElement.TrimTimeFromStart = TrimStart; - videoElement.TrimTimeFromEnd = TrimEnd; + if (trimStart != null) videoElement.TrimTimeFromStart = (TimeSpan)trimStart; + if (trimEnd != null) videoElement.TrimTimeFromEnd = (TimeSpan)trimEnd; BackgroundAudioTrack audioElement = getAudioFileTask.Result; - audioElement.TrimTimeFromStart = TrimStart; - audioElement.TrimTimeFromEnd = TrimEnd; + if (trimStart != null) audioElement.TrimTimeFromStart = (TimeSpan)trimStart; + if (trimEnd != null) audioElement.TrimTimeFromEnd = (TimeSpan)trimEnd; - mediaEditor.Clips.Add(getVideoFileTask.Result); - mediaEditor.BackgroundAudioTracks.Add(getAudioFileTask.Result); + mediaEditor.Clips.Add(videoElement); + mediaEditor.BackgroundAudioTracks.Add(audioElement); // Start rendering operation - var renderOperation = mediaEditor.RenderToFileAsync(OutputFile, (MediaTrimmingPreference)Config.GetValue("media_editing_algorithm"), await GetMediaEncodingProfile(videoFile, audioFile, (MediaFileExtension)extension, MediaType.AudioVideo)); - renderOperation.Progress += (info, progress) => { ProcessingProgressChanged(this, new ProgressChangedEventArgs((int)Math.Round(progress), null)); }; + var renderOperation = mediaEditor.RenderToFileAsync(outputFile, (MediaTrimmingPreference)Config.GetValue("media_editing_algorithm"), await GetMediaEncodingProfile(videoFile, audioFile, (MediaFileExtension)extension, MediaType.AudioVideo)); + renderOperation.Progress += (info, progress) => { ProgressChanged(this, new EventArgs.ProgressChangedEventArgs(progress)); }; cancellationToken.ThrowIfCancellationRequested(); await renderOperation.AsTask(cancellationToken); - // Invoke ProcessingCompleted event - ProcessingCompleted?.Invoke(this, System.EventArgs.Empty); + // Invoke event at end + ProgressChanged(this, new EventArgs.ProgressChangedEventArgs(100, true)); } - // SINGLE AUDIO OR VIDEO FILES PROCESSING - public async Task Run(StorageFile audioFile, AudioFileExtension extension, CancellationToken cancellationToken = default) { await Run(audioFile, (MediaFileExtension)extension, MediaType.OnlyAudio, cancellationToken); } - public async Task Run(StorageFile videoFile, VideoFileExtension extension, CancellationToken cancellationToken = default) { await Run(videoFile, (MediaFileExtension)extension, MediaType.OnlyVideo, cancellationToken); } + // AUDIO FILE PROCESSING + public async Task Run(StorageFile audioFile, AudioFileExtension extension, StorageFile outputFile, TimeSpan? trimStart = null, TimeSpan? trimEnd = null, CancellationToken cancellationToken = default) + { + await Run(audioFile, (MediaFileExtension)extension, MediaType.OnlyAudio, outputFile, trimStart, trimEnd, cancellationToken); + } + + // VIDEO FILE PROCESSING + public async Task Run(StorageFile videoFile, VideoFileExtension extension, StorageFile outputFile, TimeSpan? trimStart = null, TimeSpan? trimEnd = null, CancellationToken cancellationToken = default) + { + await Run(videoFile, (MediaFileExtension)extension, MediaType.OnlyVideo, outputFile, trimStart, trimEnd, cancellationToken); + } #endregion @@ -116,7 +107,7 @@ namespace VDownload.Core.Services #region LOCAL METHODS // GET ENCODING PROFILE - public static async Task GetMediaEncodingProfile(StorageFile videoFile, StorageFile audioFile, MediaFileExtension extension, MediaType mediaType) + private static async Task GetMediaEncodingProfile(StorageFile videoFile, StorageFile audioFile, MediaFileExtension extension, MediaType mediaType) { // Create profile object MediaEncodingProfile profile; @@ -164,7 +155,10 @@ namespace VDownload.Core.Services // Return profile return profile; } - public static async Task GetMediaEncodingProfile(StorageFile audioVideoFile, MediaFileExtension extension, MediaType mediaType) { return await GetMediaEncodingProfile(audioVideoFile, audioVideoFile, extension, mediaType); } + private static async Task GetMediaEncodingProfile(StorageFile audioVideoFile, MediaFileExtension extension, MediaType mediaType) + { + return await GetMediaEncodingProfile(audioVideoFile, audioVideoFile, extension, mediaType); + } #endregion @@ -172,9 +166,7 @@ namespace VDownload.Core.Services #region EVENT HANDLERS - public event EventHandler ProcessingStarted; - public event EventHandler ProcessingProgressChanged; - public event EventHandler ProcessingCompleted; + public event EventHandler ProgressChanged; #endregion } diff --git a/VDownload.Core/Services/Sources/Twitch/Channel.cs b/VDownload.Core/Services/Sources/Twitch/Channel.cs index 4b39606..a1d031f 100644 --- a/VDownload.Core/Services/Sources/Twitch/Channel.cs +++ b/VDownload.Core/Services/Sources/Twitch/Channel.cs @@ -9,6 +9,7 @@ using System.Threading; using System.Threading.Tasks; using VDownload.Core.Exceptions; using VDownload.Core.Interfaces; +using VDownload.Core.Services.Sources.Twitch.Helpers; namespace VDownload.Core.Services.Sources.Twitch { @@ -41,25 +42,15 @@ namespace VDownload.Core.Services.Sources.Twitch // GET CHANNEL METADATA public async Task GetMetadataAsync(CancellationToken cancellationToken = default) { - // Get access token cancellationToken.ThrowIfCancellationRequested(); - string accessToken = await Auth.ReadAccessTokenAsync(); - if (accessToken == null) throw new TwitchAccessTokenNotFoundException(); - - // Check access token - cancellationToken.ThrowIfCancellationRequested(); - var twitchAccessTokenValidation = await Auth.ValidateAccessTokenAsync(accessToken); - if (!twitchAccessTokenValidation.IsValid) throw new TwitchAccessTokenNotValidException(); - - // Create client - WebClient client = new WebClient(); - client.Headers.Add("Authorization", $"Bearer {accessToken}"); - client.Headers.Add("Client-Id", Auth.ClientID); // Get response - client.QueryString.Add("login", ID); - cancellationToken.ThrowIfCancellationRequested(); - JToken response = JObject.Parse(await client.DownloadStringTaskAsync("https://api.twitch.tv/helix/users"))["data"][0]; + JToken response = null; + using (WebClient client = await Client.Helix()) + { + client.QueryString.Add("login", ID); + response = JObject.Parse(await client.DownloadStringTaskAsync("https://api.twitch.tv/helix/users"))["data"][0]; + } // Create unified playlist url PlaylistUrl = new Uri($"https://twitch.tv/{ID}"); @@ -72,12 +63,9 @@ namespace VDownload.Core.Services.Sources.Twitch // GET CHANNEL VIDEOS public async Task GetVideosAsync(int numberOfVideos, CancellationToken cancellationToken = default) { - // Get access token cancellationToken.ThrowIfCancellationRequested(); - string accessToken = await Auth.ReadAccessTokenAsync(); - if (accessToken == null) throw new TwitchAccessTokenNotFoundException(); - // Set pagination + // Set page id string pagination = ""; // Set array of videos @@ -92,30 +80,24 @@ namespace VDownload.Core.Services.Sources.Twitch List getStreamsTasks = new List(); do { - // Check access token - cancellationToken.ThrowIfCancellationRequested(); - var twitchAccessTokenValidation = await Auth.ValidateAccessTokenAsync(accessToken); - if (!twitchAccessTokenValidation.IsValid) throw new TwitchAccessTokenNotValidException(); - - // Create client - WebClient client = new WebClient(); - client.Headers.Add("Authorization", $"Bearer {accessToken}"); - client.Headers.Add("Client-Id", Auth.ClientID); - // Set number of videos to get in this iteration count = numberOfVideos < 100 && !getAll ? numberOfVideos : 100; // Get response - client.QueryString.Add("user_id", ID); - client.QueryString.Add("first", count.ToString()); - client.QueryString.Add("after", pagination); - - cancellationToken.ThrowIfCancellationRequested(); - JToken response = JObject.Parse(await client.DownloadStringTaskAsync("https://api.twitch.tv/helix/videos")); + JToken response = null; + using (WebClient client = await Client.Helix()) + { + client.QueryString.Add("user_id", ID); + client.QueryString.Add("first", count.ToString()); + client.QueryString.Add("after", pagination); + response = JObject.Parse(await client.DownloadStringTaskAsync("https://api.twitch.tv/helix/videos")); + } + // Set page id pagination = (string)response["pagination"]["cursor"]; - videosData = response["data"].ToArray(); + // Set videos data + videosData = response["data"].ToArray(); foreach (JToken videoData in videosData) { Vod video = new Vod((string)videoData["id"]); @@ -131,7 +113,7 @@ namespace VDownload.Core.Services.Sources.Twitch // Wait for all getStreams tasks await Task.WhenAll(getStreamsTasks); - // Set Videos parameter + // Set videos Videos = videos.ToArray(); } diff --git a/VDownload.Core/Services/Sources/Twitch/Clip.cs b/VDownload.Core/Services/Sources/Twitch/Clip.cs index 48499b4..a9a30d8 100644 --- a/VDownload.Core/Services/Sources/Twitch/Clip.cs +++ b/VDownload.Core/Services/Sources/Twitch/Clip.cs @@ -12,21 +12,14 @@ using System.Web; using VDownload.Core.Enums; using VDownload.Core.Exceptions; using VDownload.Core.Interfaces; -using VDownload.Core.Objects; +using VDownload.Core.Services.Sources.Twitch.Helpers; +using VDownload.Core.Structs; using Windows.Storage; namespace VDownload.Core.Services.Sources.Twitch { public class Clip : IVideoService { - #region CONSTANTS - - - - #endregion - - - #region CONSTRUCTORS public Clip(string id) @@ -42,13 +35,8 @@ namespace VDownload.Core.Services.Sources.Twitch public string ID { get; private set; } public Uri VideoUrl { get; private set; } - public string Title { get; private set; } - public string Author { get; private set; } - public DateTime Date { get; private set; } - public TimeSpan Duration { get; private set; } - public long Views { get; private set; } - public Uri Thumbnail { get; private set; } - public IBaseStream[] BaseStreams { get; private set; } + public Metadata Metadata { get; private set; } + public BaseStream[] BaseStreams { get; private set; } #endregion @@ -59,92 +47,83 @@ namespace VDownload.Core.Services.Sources.Twitch // GET CLIP METADATA public async Task GetMetadataAsync(CancellationToken cancellationToken = default) { - // Get access token cancellationToken.ThrowIfCancellationRequested(); - string accessToken = await Auth.ReadAccessTokenAsync(); - if (accessToken == null) throw new TwitchAccessTokenNotFoundException(); - - // Check access token - cancellationToken.ThrowIfCancellationRequested(); - var twitchAccessTokenValidation = await Auth.ValidateAccessTokenAsync(accessToken); - if (!twitchAccessTokenValidation.IsValid) throw new TwitchAccessTokenNotValidException(); - - // Create client - WebClient client = new WebClient(); - client.Headers.Add("Authorization", $"Bearer {accessToken}"); - client.Headers.Add("Client-Id", Auth.ClientID); // Get response - client.QueryString.Add("id", ID); - JToken response = JObject.Parse(await client.DownloadStringTaskAsync("https://api.twitch.tv/helix/clips")).GetValue("data")[0]; + JToken response = null; + using (WebClient client = await Client.Helix()) + { + client.QueryString.Add("id", ID); + response = JObject.Parse(await client.DownloadStringTaskAsync("https://api.twitch.tv/helix/clips")).GetValue("data")[0]; + } // Create unified video url VideoUrl = new Uri($"https://clips.twitch.tv/{ID}"); - // Set parameters - Title = (string)response["title"]; - Author = (string)response["broadcaster_name"]; - Date = Convert.ToDateTime(response["created_at"]); - Duration = TimeSpan.FromSeconds((double)response["duration"]); - Views = (long)response["view_count"]; - Thumbnail = new Uri((string)response["thumbnail_url"]); + // Set metadata + Metadata = new Metadata() + { + Title = (string)response["title"], + Author = (string)response["broadcaster_name"], + Date = Convert.ToDateTime(response["created_at"]), + Duration = TimeSpan.FromSeconds((double)response["duration"]), + Views = (long)response["view_count"], + Thumbnail = new Uri((string)response["thumbnail_url"]), + }; } public async Task GetStreamsAsync(CancellationToken cancellationToken = default) { - // Create client - WebClient client = new WebClient { Encoding = Encoding.UTF8 }; - client.Headers.Add("Client-ID", Auth.GQLApiClientID); - - // Get video streams cancellationToken.ThrowIfCancellationRequested(); - JToken[] response = JArray.Parse(await client.UploadStringTaskAsync("https://gql.twitch.tv/gql", "[{\"operationName\":\"VideoAccessToken_Clip\",\"variables\":{\"slug\":\"" + ID + "\"},\"extensions\":{\"persistedQuery\":{\"version\":1,\"sha256Hash\":\"36b89d2507fce29e5ca551df756d27c1cfe079e2609642b4390aa4c35796eb11\"}}}]"))[0]["data"]["clip"]["videoQualities"].ToArray(); - + + // Get response + JToken[] response; + using (WebClient client = Client.GQL()) + { + response = JArray.Parse(await client.UploadStringTaskAsync("https://gql.twitch.tv/gql", "[{\"operationName\":\"VideoAccessToken_Clip\",\"variables\":{\"slug\":\"" + ID + "\"},\"extensions\":{\"persistedQuery\":{\"version\":1,\"sha256Hash\":\"36b89d2507fce29e5ca551df756d27c1cfe079e2609642b4390aa4c35796eb11\"}}}]"))[0]["data"]["clip"]["videoQualities"].ToArray(); + } + // Init streams list - List streams = new List(); + List streams = new List(); // Parse response foreach (JToken streamData in response) { - // Get info - Uri url = new Uri((string)streamData["sourceURL"]); - int height = int.Parse((string)streamData["quality"]); - int frameRate = (int)streamData["frameRate"]; - // Create stream - Stream stream = new Stream(url, false, StreamType.AudioVideo) + BaseStream stream = new BaseStream() { - Height = height, - FrameRate = frameRate + Url = new Uri((string)streamData["sourceURL"]), + Height = int.Parse((string)streamData["quality"]), + FrameRate = (int)streamData["frameRate"], }; // Add stream streams.Add(stream); } - // Set Streams parameter + // Set streams BaseStreams = streams.ToArray(); } - public async Task DownloadAndTranscodeAsync(StorageFolder downloadingFolder, IBaseStream baseStream, MediaFileExtension extension, MediaType mediaType, TimeSpan trimStart, TimeSpan trimEnd, CancellationToken cancellationToken = default) + public async Task DownloadAndTranscodeAsync(StorageFolder downloadingFolder, BaseStream baseStream, MediaFileExtension extension, MediaType mediaType, TimeSpan trimStart, TimeSpan trimEnd, CancellationToken cancellationToken = default) { // Invoke DownloadingStarted event - DownloadingStarted?.Invoke(this, System.EventArgs.Empty); - - // Create client - WebClient client = new WebClient(); - client.Headers.Add("Client-Id", Auth.GQLApiClientID); + cancellationToken.ThrowIfCancellationRequested(); + DownloadingProgressChanged(this, new EventArgs.ProgressChangedEventArgs(0)); // Get video GQL access token - cancellationToken.ThrowIfCancellationRequested(); - JToken videoAccessToken = JArray.Parse(await client.UploadStringTaskAsync("https://gql.twitch.tv/gql", "[{\"operationName\":\"VideoAccessToken_Clip\",\"variables\":{\"slug\":\"" + ID + "\"},\"extensions\":{\"persistedQuery\":{\"version\":1,\"sha256Hash\":\"36b89d2507fce29e5ca551df756d27c1cfe079e2609642b4390aa4c35796eb11\"}}}]"))[0]["data"]["clip"]["playbackAccessToken"]; + JToken videoAccessToken = null; + using (WebClient client = Client.GQL()) + { + videoAccessToken = JArray.Parse(await client.UploadStringTaskAsync("https://gql.twitch.tv/gql", "[{\"operationName\":\"VideoAccessToken_Clip\",\"variables\":{\"slug\":\"" + ID + "\"},\"extensions\":{\"persistedQuery\":{\"version\":1,\"sha256Hash\":\"36b89d2507fce29e5ca551df756d27c1cfe079e2609642b4390aa4c35796eb11\"}}}]"))[0]["data"]["clip"]["playbackAccessToken"]; + } // Download cancellationToken.ThrowIfCancellationRequested(); StorageFile rawFile = await downloadingFolder.CreateFileAsync("raw.mp4"); - using (client = new WebClient()) + using (WebClient client = new WebClient()) { - client.DownloadProgressChanged += (s, a) => { DownloadingProgressChanged(this, new ProgressChangedEventArgs(a.ProgressPercentage, null)); }; + client.DownloadProgressChanged += (s, a) => { DownloadingProgressChanged(this, new EventArgs.ProgressChangedEventArgs(a.ProgressPercentage)); }; client.QueryString.Add("sig", (string)videoAccessToken["signature"]); client.QueryString.Add("token", HttpUtility.UrlEncode((string)videoAccessToken["value"])); cancellationToken.ThrowIfCancellationRequested(); @@ -153,20 +132,24 @@ namespace VDownload.Core.Services.Sources.Twitch await client.DownloadFileTaskAsync(baseStream.Url, rawFile.Path); } } - DownloadingCompleted?.Invoke(this, System.EventArgs.Empty); + DownloadingProgressChanged(this, new EventArgs.ProgressChangedEventArgs(100, true)); // Processing StorageFile outputFile = rawFile; - if (extension != MediaFileExtension.MP4 || mediaType != MediaType.AudioVideo || trimStart > new TimeSpan(0) || trimEnd < Duration) + if (extension != MediaFileExtension.MP4 || mediaType != MediaType.AudioVideo || trimStart != null || trimEnd != null) { cancellationToken.ThrowIfCancellationRequested(); outputFile = await downloadingFolder.CreateFileAsync($"transcoded.{extension.ToString().ToLower()}"); - MediaProcessor mediaProcessor = new MediaProcessor(outputFile, trimStart, trimEnd); - mediaProcessor.ProcessingStarted += ProcessingStarted; - mediaProcessor.ProcessingProgressChanged += ProcessingProgressChanged; - mediaProcessor.ProcessingCompleted += ProcessingCompleted; - cancellationToken.ThrowIfCancellationRequested(); - await mediaProcessor.Run(rawFile, extension, mediaType, cancellationToken); + + MediaProcessor mediaProcessor = new MediaProcessor(); + mediaProcessor.ProgressChanged += ProcessingProgressChanged; + + Task mediaProcessorTask; + if (trimStart == TimeSpan.Zero && trimEnd == Metadata.Duration) mediaProcessorTask = mediaProcessor.Run(rawFile, extension, mediaType, outputFile, cancellationToken: cancellationToken); + else if (trimStart == TimeSpan.Zero) mediaProcessorTask = mediaProcessor.Run(rawFile, extension, mediaType, outputFile, trimStart: trimStart, cancellationToken: cancellationToken); + else if (trimEnd == Metadata.Duration) mediaProcessorTask = mediaProcessor.Run(rawFile, extension, mediaType, outputFile, trimEnd: trimEnd, cancellationToken: cancellationToken); + else mediaProcessorTask = mediaProcessor.Run(rawFile, extension, mediaType, outputFile, trimStart, trimEnd, cancellationToken); + await mediaProcessorTask; } // Return output file @@ -179,12 +162,8 @@ namespace VDownload.Core.Services.Sources.Twitch #region EVENT HANDLERS - public event EventHandler DownloadingStarted; - public event EventHandler DownloadingProgressChanged; - public event EventHandler DownloadingCompleted; - public event EventHandler ProcessingStarted; - public event EventHandler ProcessingProgressChanged; - public event EventHandler ProcessingCompleted; + public event EventHandler DownloadingProgressChanged; + public event EventHandler ProcessingProgressChanged; #endregion } diff --git a/VDownload.Core/Services/Sources/Twitch/Auth.cs b/VDownload.Core/Services/Sources/Twitch/Helpers/Auth.cs similarity index 96% rename from VDownload.Core/Services/Sources/Twitch/Auth.cs rename to VDownload.Core/Services/Sources/Twitch/Helpers/Auth.cs index 8c13420..e545d4e 100644 --- a/VDownload.Core/Services/Sources/Twitch/Auth.cs +++ b/VDownload.Core/Services/Sources/Twitch/Helpers/Auth.cs @@ -1,16 +1,12 @@ using Newtonsoft.Json.Linq; using System; -using System.Collections.Generic; -using System.Diagnostics; using System.IO; -using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using Windows.Storage; -using Windows.Storage.Streams; -namespace VDownload.Core.Services.Sources.Twitch +namespace VDownload.Core.Services.Sources.Twitch.Helpers { public class Auth { diff --git a/VDownload.Core/Services/Sources/Twitch/Helpers/Client.cs b/VDownload.Core/Services/Sources/Twitch/Helpers/Client.cs new file mode 100644 index 0000000..4bd2e99 --- /dev/null +++ b/VDownload.Core/Services/Sources/Twitch/Helpers/Client.cs @@ -0,0 +1,38 @@ +using System.Net; +using System.Threading.Tasks; +using VDownload.Core.Exceptions; + +namespace VDownload.Core.Services.Sources.Twitch.Helpers +{ + internal class Client + { + internal static async Task Helix() + { + // Get access token + string accessToken = await Auth.ReadAccessTokenAsync(); + if (accessToken == null) throw new TwitchAccessTokenNotFoundException(); + + // Check access token + var twitchAccessTokenValidation = await Auth.ValidateAccessTokenAsync(accessToken); + if (!twitchAccessTokenValidation.IsValid) throw new TwitchAccessTokenNotValidException(); + + // Create client + WebClient client = new WebClient(); + client.Headers.Add("Authorization", $"Bearer {accessToken}"); + client.Headers.Add("Client-Id", Auth.ClientID); + + // Return client + return client; + } + + internal static WebClient GQL() + { + // Create client + WebClient client = new WebClient(); + client.Headers.Add("Client-Id", Auth.GQLApiClientID); + + // Return client + return client; + } + } +} diff --git a/VDownload.Core/Services/Sources/Twitch/Vod.cs b/VDownload.Core/Services/Sources/Twitch/Vod.cs index a8c30f7..ce7d749 100644 --- a/VDownload.Core/Services/Sources/Twitch/Vod.cs +++ b/VDownload.Core/Services/Sources/Twitch/Vod.cs @@ -1,7 +1,6 @@ using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; -using System.ComponentModel; using System.Diagnostics; using System.Linq; using System.Net; @@ -9,27 +8,15 @@ using System.Text.RegularExpressions; using System.Threading; using System.Threading.Tasks; using VDownload.Core.Enums; -using VDownload.Core.Exceptions; using VDownload.Core.Interfaces; -using VDownload.Core.Objects; +using VDownload.Core.Services.Sources.Twitch.Helpers; +using VDownload.Core.Structs; using Windows.Storage; namespace VDownload.Core.Services.Sources.Twitch { public class Vod : IVideoService { - #region CONSTANTS - - // STREAMS RESPONSE REGULAR EXPRESSIONS - private static readonly Regex L2Regex = new Regex(@"^#EXT-X-STREAM-INF:BANDWIDTH=\d+,CODECS=""(?\S+),(?\S+)"",RESOLUTION=(?\d+)x(?\d+),VIDEO=""\w+""(,FRAME-RATE=(?\d+.\d+))?"); - - // CHUNK RESPONSE REGULAR EXPRESSION - private static readonly Regex ChunkRegex = new Regex(@"#EXTINF:(?\d+.\d+),\n(?\S+.ts)"); - - #endregion - - - #region CONSTRUCTORS public Vod(string id) @@ -45,13 +32,8 @@ namespace VDownload.Core.Services.Sources.Twitch public string ID { get; private set; } public Uri VideoUrl { get; private set; } - public string Title { get; private set; } - public string Author { get; private set; } - public DateTime Date { get; private set; } - public TimeSpan Duration { get; private set; } - public long Views { get; private set; } - public Uri Thumbnail { get; private set; } - public IBaseStream[] BaseStreams { get; private set; } + public Metadata Metadata { get; private set; } + public BaseStream[] BaseStreams { get; private set; } #endregion @@ -62,25 +44,16 @@ namespace VDownload.Core.Services.Sources.Twitch // GET VOD METADATA public async Task GetMetadataAsync(CancellationToken cancellationToken = default) { - // Get access token cancellationToken.ThrowIfCancellationRequested(); - string accessToken = await Auth.ReadAccessTokenAsync(); - if (accessToken == null) throw new TwitchAccessTokenNotFoundException(); - - // Check access token - cancellationToken.ThrowIfCancellationRequested(); - var twitchAccessTokenValidation = await Auth.ValidateAccessTokenAsync(accessToken); - if (!twitchAccessTokenValidation.IsValid) throw new TwitchAccessTokenNotValidException(); - - // Create client - WebClient client = new WebClient(); - client.Headers.Add("Authorization", $"Bearer {accessToken}"); - client.Headers.Add("Client-Id", Auth.ClientID); // Get response - client.QueryString.Add("id", ID); - cancellationToken.ThrowIfCancellationRequested(); - JToken response = JObject.Parse(await client.DownloadStringTaskAsync("https://api.twitch.tv/helix/videos")).GetValue("data")[0]; + JToken response = null; + using (WebClient client = await Client.Helix()) + { + client.QueryString.Add("id", ID); + cancellationToken.ThrowIfCancellationRequested(); + response = JObject.Parse(await client.DownloadStringTaskAsync("https://api.twitch.tv/helix/videos")).GetValue("data")[0]; + } // Set parameters GetMetadataAsync(response); @@ -90,83 +63,86 @@ namespace VDownload.Core.Services.Sources.Twitch // Create unified video url VideoUrl = new Uri($"https://www.twitch.tv/videos/{ID}"); - // Set parameters - Title = ((string)response["title"]).Replace("\n", ""); - Author = (string)response["user_name"]; - Date = Convert.ToDateTime(response["created_at"]); - Duration = ParseDuration((string)response["duration"]); - Views = (long)response["view_count"]; - Thumbnail = (string)response["thumbnail_url"] == string.Empty ? null : new Uri(((string)response["thumbnail_url"]).Replace("%{width}", "1920").Replace("%{height}", "1080")); + // Set metadata + Metadata = new Metadata() + { + Title = ((string)response["title"]).Replace("\n", ""), + Author = (string)response["user_name"], + Date = Convert.ToDateTime(response["created_at"]), + Duration = ParseDuration((string)response["duration"]), + Views = (long)response["view_count"], + Thumbnail = (string)response["thumbnail_url"] == string.Empty ? null : new Uri(((string)response["thumbnail_url"]).Replace("%{width}", "1920").Replace("%{height}", "1080")), + }; } // GET VOD STREAMS public async Task GetStreamsAsync(CancellationToken cancellationToken = default) { - // Create client - WebClient client = new WebClient(); - client.Headers.Add("Client-Id", Auth.GQLApiClientID); - - // Get video GQL access token cancellationToken.ThrowIfCancellationRequested(); - JToken videoAccessToken = JObject.Parse(await client.UploadStringTaskAsync("https://gql.twitch.tv/gql", "{\"operationName\":\"PlaybackAccessToken_Template\",\"query\":\"query PlaybackAccessToken_Template($login: String!, $isLive: Boolean!, $vodID: ID!, $isVod: Boolean!, $playerType: String!) { streamPlaybackAccessToken(channelName: $login, params: {platform: \\\"web\\\", playerBackend: \\\"mediaplayer\\\", playerType: $playerType}) @include(if: $isLive) { value signature __typename } videoPlaybackAccessToken(id: $vodID, params: {platform: \\\"web\\\", playerBackend: \\\"mediaplayer\\\", playerType: $playerType}) @include(if: $isVod) { value signature __typename }}\",\"variables\":{\"isLive\":false,\"login\":\"\",\"isVod\":true,\"vodID\":\"" + ID + "\",\"playerType\":\"embed\"}}"))["data"]["videoPlaybackAccessToken"]; - // Get video streams - cancellationToken.ThrowIfCancellationRequested(); - string[] response = (await client.DownloadStringTaskAsync($"http://usher.twitch.tv/vod/{ID}?nauth={videoAccessToken["value"]}&nauthsig={videoAccessToken["signature"]}&allow_source=true&player=twitchweb")).Split("\n"); + // Get response + string[] response = null; + using (WebClient client = Client.GQL()) + { + // Get video GQL access token + cancellationToken.ThrowIfCancellationRequested(); + JToken videoAccessToken = JObject.Parse(await client.UploadStringTaskAsync("https://gql.twitch.tv/gql", "{\"operationName\":\"PlaybackAccessToken_Template\",\"query\":\"query PlaybackAccessToken_Template($login: String!, $isLive: Boolean!, $vodID: ID!, $isVod: Boolean!, $playerType: String!) { streamPlaybackAccessToken(channelName: $login, params: {platform: \\\"web\\\", playerBackend: \\\"mediaplayer\\\", playerType: $playerType}) @include(if: $isLive) { value signature __typename } videoPlaybackAccessToken(id: $vodID, params: {platform: \\\"web\\\", playerBackend: \\\"mediaplayer\\\", playerType: $playerType}) @include(if: $isVod) { value signature __typename }}\",\"variables\":{\"isLive\":false,\"login\":\"\",\"isVod\":true,\"vodID\":\"" + ID + "\",\"playerType\":\"embed\"}}"))["data"]["videoPlaybackAccessToken"]; + + // Get video streams + cancellationToken.ThrowIfCancellationRequested(); + response = (await client.DownloadStringTaskAsync($"http://usher.twitch.tv/vod/{ID}?nauth={videoAccessToken["value"]}&nauthsig={videoAccessToken["signature"]}&allow_source=true&player=twitchweb")).Split("\n"); + } // Init streams list - List streams = new List(); + List streams = new List(); + + // Stream data line2 regular expression + Regex streamDataL2Regex = new Regex(@"^#EXT-X-STREAM-INF:BANDWIDTH=\d+,CODECS=""\S+,\S+"",RESOLUTION=\d+x(?\d+),VIDEO=""\w+""(,FRAME-RATE=(?\d+.\d+))?"); // Parse response for (int i = 2; i < response.Length; i += 3) { // Parse line 2 - Match line2 = L2Regex.Match(response[i + 1]); - - // Get info - Uri url = new Uri(response[i + 2]); - int width = int.Parse(line2.Groups["width"].Value); - int height = int.Parse(line2.Groups["height"].Value); - int frameRate = line2.Groups["frame_rate"].Value != string.Empty ? (int)Math.Round(double.Parse(line2.Groups["frame_rate"].Value)) : 0; - string videoCodec = line2.Groups["video_codec"].Value; - string audioCodec = line2.Groups["audio_codec"].Value; + Match line2 = streamDataL2Regex.Match(response[i + 1]); // Create stream - Stream stream = new Stream(url, true, StreamType.AudioVideo) + BaseStream stream = new BaseStream() { - Width = width, - Height = height, - FrameRate = frameRate, - VideoCodec = videoCodec, - AudioCodec = audioCodec, + Url = new Uri(response[i + 2]), + Height = int.Parse(line2.Groups["height"].Value), + FrameRate = line2.Groups["frame_rate"].Value != string.Empty ? (int)Math.Round(double.Parse(line2.Groups["frame_rate"].Value)) : 0, }; // Add stream streams.Add(stream); } - // Set Streams parameter + // Set streams BaseStreams = streams.ToArray(); } // DOWNLOAD AND TRANSCODE VOD - public async Task DownloadAndTranscodeAsync(StorageFolder downloadingFolder, IBaseStream baseStream, MediaFileExtension extension, MediaType mediaType, TimeSpan trimStart, TimeSpan trimEnd, CancellationToken cancellationToken = default) + public async Task DownloadAndTranscodeAsync(StorageFolder downloadingFolder, BaseStream baseStream, MediaFileExtension extension, MediaType mediaType, TimeSpan trimStart, TimeSpan trimEnd, CancellationToken cancellationToken = default) { // Invoke DownloadingStarted event - DownloadingStarted?.Invoke(this, System.EventArgs.Empty); + cancellationToken.ThrowIfCancellationRequested(); + DownloadingProgressChanged(this, new EventArgs.ProgressChangedEventArgs(0)); // Get video chunks cancellationToken.ThrowIfCancellationRequested(); List<(Uri ChunkUrl, TimeSpan ChunkDuration)> chunksList = await ExtractChunksFromM3U8Async(baseStream.Url, cancellationToken); + // Changeable duration + TimeSpan duration = Metadata.Duration; + // Passive trim - if ((bool)Config.GetValue("twitch_vod_passive_trim")) (trimStart, trimEnd) = PassiveVideoTrim(chunksList, trimStart, trimEnd, Duration); + if ((bool)Config.GetValue("twitch_vod_passive_trim") && trimStart != TimeSpan.Zero && trimEnd != duration) (trimStart, trimEnd, duration) = PassiveVideoTrim(chunksList, trimStart, trimEnd, Metadata.Duration); // Download cancellationToken.ThrowIfCancellationRequested(); StorageFile rawFile = await downloadingFolder.CreateFileAsync("raw.ts"); - float chunksDownloaded = 0; + double chunksDownloaded = 0; Task downloadTask; Task writeTask; @@ -180,26 +156,25 @@ namespace VDownload.Core.Services.Sources.Twitch writeTask = WriteChunkToFileAsync(rawFile, downloadTask.Result); downloadTask = DownloadChunkAsync(chunksList[i].ChunkUrl); await Task.WhenAll(writeTask, downloadTask); - DownloadingProgressChanged(this, new ProgressChangedEventArgs((int)Math.Round(++chunksDownloaded * 100 / chunksList.Count), null)); + DownloadingProgressChanged(this, new EventArgs.ProgressChangedEventArgs(++chunksDownloaded * 100 / chunksList.Count)); } cancellationToken.ThrowIfCancellationRequested(); await WriteChunkToFileAsync(rawFile, downloadTask.Result); - DownloadingProgressChanged(this, new ProgressChangedEventArgs((int)Math.Round(++chunksDownloaded * 100 / chunksList.Count), null)); - - DownloadingCompleted?.Invoke(this, System.EventArgs.Empty); - + DownloadingProgressChanged(this, new EventArgs.ProgressChangedEventArgs(100, true)); // Processing cancellationToken.ThrowIfCancellationRequested(); StorageFile outputFile = await downloadingFolder.CreateFileAsync($"transcoded.{extension.ToString().ToLower()}"); - MediaProcessor mediaProcessor = new MediaProcessor(outputFile, trimStart, trimEnd); - mediaProcessor.ProcessingStarted += ProcessingStarted; - mediaProcessor.ProcessingProgressChanged += ProcessingProgressChanged; - mediaProcessor.ProcessingCompleted += ProcessingCompleted; - cancellationToken.ThrowIfCancellationRequested(); - await mediaProcessor.Run(rawFile, extension, mediaType, cancellationToken); - + MediaProcessor mediaProcessor = new MediaProcessor(); + mediaProcessor.ProgressChanged += ProcessingProgressChanged; + + Task mediaProcessorTask; + if (trimStart == TimeSpan.Zero && trimEnd == duration) mediaProcessorTask = mediaProcessor.Run(rawFile, extension, mediaType, outputFile, cancellationToken: cancellationToken); + else if (trimStart == TimeSpan.Zero) mediaProcessorTask = mediaProcessor.Run(rawFile, extension, mediaType, outputFile, trimStart: trimStart, cancellationToken: cancellationToken); + else if (trimEnd == duration) mediaProcessorTask = mediaProcessor.Run(rawFile, extension, mediaType, outputFile, trimEnd: trimEnd, cancellationToken: cancellationToken); + else mediaProcessorTask = mediaProcessor.Run(rawFile, extension, mediaType, outputFile, trimStart, trimEnd, cancellationToken); + await mediaProcessorTask; // Return output file return outputFile; @@ -214,21 +189,28 @@ namespace VDownload.Core.Services.Sources.Twitch // GET CHUNKS DATA FROM M3U8 PLAYLIST private static async Task> ExtractChunksFromM3U8Async(Uri streamUrl, CancellationToken cancellationToken = default) { - // Create client - WebClient client = new WebClient(); - client.Headers.Add("Client-Id", Auth.GQLApiClientID); - - // Get playlist cancellationToken.ThrowIfCancellationRequested(); - string response = await client.DownloadStringTaskAsync(streamUrl); + + // Get response + string response = null; + using (WebClient client = Client.GQL()) + { + response = await client.DownloadStringTaskAsync(streamUrl); + } // Create dictionary List<(Uri ChunkUrl, TimeSpan ChunkDuration)> chunks = new List<(Uri ChunkUrl, TimeSpan ChunkDuration)>(); + // Chunk data regular expression + Regex chunkDataRegex = new Regex(@"#EXTINF:(?\d+.\d+),\n(?\S+.ts)"); + + // Chunks location + string chunkLocationPath = streamUrl.AbsoluteUri.Replace(System.IO.Path.GetFileName(streamUrl.AbsoluteUri), ""); + // Pack data into dictionary - foreach (Match chunk in ChunkRegex.Matches(response)) + foreach (Match chunk in chunkDataRegex.Matches(response)) { - Uri chunkUrl = new Uri($"{streamUrl.AbsoluteUri.Replace(System.IO.Path.GetFileName(streamUrl.AbsoluteUri), "")}{chunk.Groups["filename"].Value}"); + Uri chunkUrl = new Uri($"{chunkLocationPath}{chunk.Groups["filename"].Value}"); TimeSpan chunkDuration = TimeSpan.FromSeconds(double.Parse(chunk.Groups["duration"].Value)); chunks.Add((chunkUrl, chunkDuration)); } @@ -238,7 +220,7 @@ namespace VDownload.Core.Services.Sources.Twitch } // PASSIVE TRIM - private static (TimeSpan TrimStart, TimeSpan TrimEnd) PassiveVideoTrim(List<(Uri ChunkUrl, TimeSpan ChunkDuration)> chunksList, TimeSpan trimStart, TimeSpan trimEnd, TimeSpan duration) + private static (TimeSpan NewTrimStart, TimeSpan NewTrimEnd, TimeSpan NewDuration) PassiveVideoTrim(List<(Uri ChunkUrl, TimeSpan ChunkDuration)> chunksList, TimeSpan trimStart, TimeSpan trimEnd, TimeSpan duration) { // Copy duration TimeSpan newDuration = duration; @@ -260,7 +242,7 @@ namespace VDownload.Core.Services.Sources.Twitch } // Return data - return (trimStart, trimEnd); + return (trimStart, trimEnd, newDuration); } // DOWNLOAD CHUNK @@ -322,12 +304,8 @@ namespace VDownload.Core.Services.Sources.Twitch #region EVENT HANDLERS - public event EventHandler DownloadingStarted; - public event EventHandler DownloadingProgressChanged; - public event EventHandler DownloadingCompleted; - public event EventHandler ProcessingStarted; - public event EventHandler ProcessingProgressChanged; - public event EventHandler ProcessingCompleted; + public event EventHandler DownloadingProgressChanged; + public event EventHandler ProcessingProgressChanged; #endregion } diff --git a/VDownload.Core/Services/TaskId.cs b/VDownload.Core/Services/TaskId.cs index dbb4e59..6707ffa 100644 --- a/VDownload.Core/Services/TaskId.cs +++ b/VDownload.Core/Services/TaskId.cs @@ -7,21 +7,12 @@ namespace VDownload.Core.Services { #region CONSTANTS - // RANDOM - private static readonly Random Random = new Random(); - // ID SETTINGS private static readonly char[] IDChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".ToCharArray(); private static readonly int IDLength = 10; - #endregion - - - - #region PROPERTIES - - // USED IDS LIST - private static readonly List UsedIDs = new List(); + // IDS LIST + private static readonly List IDList = new List(); #endregion @@ -38,17 +29,17 @@ namespace VDownload.Core.Services id = ""; while (id.Length < IDLength) { - id += IDChars[Random.Next(0, IDChars.Length)]; + id += IDChars[new Random().Next(0, IDChars.Length)]; } - } while (UsedIDs.Contains(id)); - UsedIDs.Add(id); + } while (IDList.Contains(id)); + IDList.Add(id); return id; } // DISPOSE TASK ID public static void Dispose(string id) { - UsedIDs.Remove(id); + IDList.Remove(id); } #endregion diff --git a/VDownload.Core/Services/TimeSpanCustomFormat.cs b/VDownload.Core/Services/TimeSpanCustomFormat.cs new file mode 100644 index 0000000..003748b --- /dev/null +++ b/VDownload.Core/Services/TimeSpanCustomFormat.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VDownload.Core.Services +{ + public class TimeSpanCustomFormat + { + // (TH:)MM:SS + public static string ToOptTHBaseMMSS(TimeSpan timeSpan, params TimeSpan[] formatBase) + { + string formattedTimeSpan = string.Empty; + + int maxTHLength = 0; + if (Math.Floor(timeSpan.TotalHours) > 0) + { + maxTHLength = Math.Floor(timeSpan.TotalHours).ToString().Length; + foreach (TimeSpan format in formatBase) + { + int THLength = Math.Floor(format.TotalHours) > 0 ? Math.Floor(timeSpan.TotalHours).ToString().Length : 0; + if (THLength > maxTHLength) maxTHLength = THLength; + } + formattedTimeSpan += $"{((int)Math.Floor(timeSpan.TotalHours)).ToString($"D{maxTHLength}")}:"; + } + formattedTimeSpan += maxTHLength == 0 ? $"{timeSpan.Minutes}:" : $"{timeSpan.Minutes:00}:"; + formattedTimeSpan += $"{timeSpan.Seconds:00}"; + + return formattedTimeSpan; + } + + // ((TH:)MM:)SS + public static string ToOptTHMMBaseSS(TimeSpan timeSpan, params TimeSpan[] formatBase) + { + string formattedTimeSpan = string.Empty; + + int maxTHLength = 0; + if (Math.Floor(timeSpan.TotalHours) > 0) + { + maxTHLength = Math.Floor(timeSpan.TotalHours).ToString().Length; + foreach (TimeSpan format in formatBase) + { + int THLength = Math.Floor(format.TotalHours) > 0 ? Math.Floor(timeSpan.TotalHours).ToString().Length : 0; + if (THLength > maxTHLength) maxTHLength = THLength; + } + formattedTimeSpan += $"{((int)Math.Floor(timeSpan.TotalHours)).ToString($"D{maxTHLength}")}:"; + } + bool MM = false; + if (Math.Floor(timeSpan.TotalMinutes) > 0) + { + formattedTimeSpan += maxTHLength > 0 ? $"{timeSpan.Minutes:00}:" : $"{timeSpan.Minutes}:"; + MM = true; + } + formattedTimeSpan += MM ? $"{timeSpan.Seconds:00}:" : $"{timeSpan.Seconds}:"; + + return formattedTimeSpan; + } + } +} diff --git a/VDownload.Core/Structs/BaseStream.cs b/VDownload.Core/Structs/BaseStream.cs new file mode 100644 index 0000000..d728710 --- /dev/null +++ b/VDownload.Core/Structs/BaseStream.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VDownload.Core.Structs +{ + public struct BaseStream + { + public Uri Url { get; set; } + public int Height { get; set; } + public int FrameRate { get; set; } + } +} diff --git a/VDownload.Core/Structs/Metadata.cs b/VDownload.Core/Structs/Metadata.cs new file mode 100644 index 0000000..071c0e5 --- /dev/null +++ b/VDownload.Core/Structs/Metadata.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace VDownload.Core.Structs +{ + public struct Metadata + { + public string Title { get; set; } + public string Author { get; set; } + public DateTime Date { get; set; } + public TimeSpan Duration { get; set; } + public long Views { get; set; } + public Uri Thumbnail { get; set; } + } +} diff --git a/VDownload.Core/EventArgs/VideoAddEventArgs.cs b/VDownload.Core/Structs/TaskData.cs similarity index 75% rename from VDownload.Core/EventArgs/VideoAddEventArgs.cs rename to VDownload.Core/Structs/TaskData.cs index 55e5e9a..74ddb4d 100644 --- a/VDownload.Core/EventArgs/VideoAddEventArgs.cs +++ b/VDownload.Core/Structs/TaskData.cs @@ -1,16 +1,15 @@ using System; using VDownload.Core.Enums; using VDownload.Core.Interfaces; -using VDownload.Core.Objects; using Windows.Storage; -namespace VDownload.Core.EventArgs +namespace VDownload.Core.Structs { - public class VideoAddEventArgs : System.EventArgs + public struct TaskData { public IVideoService VideoService { get; set; } public MediaType MediaType { get; set; } - public IBaseStream Stream { get; set; } + public BaseStream Stream { get; set; } public TimeSpan TrimStart { get; set; } public TimeSpan TrimEnd { get; set; } public string Filename { get; set; } diff --git a/VDownload.Core/VDownload.Core.csproj b/VDownload.Core/VDownload.Core.csproj index 650fe5e..8375529 100644 --- a/VDownload.Core/VDownload.Core.csproj +++ b/VDownload.Core/VDownload.Core.csproj @@ -124,24 +124,27 @@ - + - - + + - - + + + + + - + diff --git a/VDownload/Strings/en-US/Resources.resw b/VDownload/Strings/en-US/Resources.resw index 3d36421..267d523 100644 --- a/VDownload/Strings/en-US/Resources.resw +++ b/VDownload/Strings/en-US/Resources.resw @@ -182,7 +182,7 @@ The number in the numberbox indicades how many videos will be got from playlist. 90 - Load subscription + Load subscriptions 120 diff --git a/VDownload/Strings/en-US/ResourcesOld.resw b/VDownload/Strings/en-US/ResourcesOld.resw deleted file mode 100644 index 03adbcc..0000000 --- a/VDownload/Strings/en-US/ResourcesOld.resw +++ /dev/null @@ -1,348 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Cancel - - - Add - - - ADD PLAYLIST - - - Restore - - - {x} videos removed - - - Apply - - - Location - - - Playlist not found. Try again. - - - Search - - - Paste URL and click "Search" button - - - URL - - - Only audio - - - Normal - - - Only video - - - Media type - - - Quality - - - Trim - - - File - - - Location - - - Only audio - - - Cancel - - - Add - - - ADD VIDEO - - - Video not found. Try again. - - - Paste URL and click "Search" button - - - Start - - - Subscriptions - - - Media type - - - Quality - - - Download options - - - Trim - - - Only audio - - - Apply - - - Filename and extension - - - File - - - Location - - - Save options - - - File - - - Browse - - - Location - - - Only audio - - - Normal - - - Only video - - - If numberbox is set to 0, app will load all videos from the playlist. Otherwise, the program will load the specified number of videos. - - - - Twitch (Channels) - - - - Youtube (Playlists, Channels) - - - Supported websites, types of playlist and numberbox instruction - - - Search - - - Playlist URL - - - - Twitch (VODs, Clips) - - - - Youtube (Videos) - - - Supported websites and types of videos - - - Search - - - Video URL - - - Add playlist - - - 85 - - - Add video - - - 75 - - - Download All - - - 90 - - - Load subscriptions - - - 120 - - - Only audio - - - Audio & Video - - - Only video - - - Cancelled - - - Done in - - - seconds - - - Downloading - - - An error occured! - - - Internet connection error - - - Finalizing - - - Idle - - - Transcoding - - - Queued - - - Only audio - - \ No newline at end of file diff --git a/VDownload/VDownload.csproj b/VDownload/VDownload.csproj index d288260..9c17aa0 100644 --- a/VDownload/VDownload.csproj +++ b/VDownload/VDownload.csproj @@ -365,9 +365,6 @@ 2.8.0-prerelease.220118001 - - - diff --git a/VDownload/Views/Home/HomeMain.xaml b/VDownload/Views/Home/HomeMain.xaml index 171ea56..10be0d4 100644 --- a/VDownload/Views/Home/HomeMain.xaml +++ b/VDownload/Views/Home/HomeMain.xaml @@ -60,7 +60,7 @@ - + diff --git a/VDownload/Views/Home/HomeMain.xaml.cs b/VDownload/Views/Home/HomeMain.xaml.cs index 56ba3b6..441fdde 100644 --- a/VDownload/Views/Home/HomeMain.xaml.cs +++ b/VDownload/Views/Home/HomeMain.xaml.cs @@ -11,6 +11,7 @@ using VDownload.Core.EventArgs; using VDownload.Core.Exceptions; using VDownload.Core.Interfaces; using VDownload.Core.Services; +using VDownload.Core.Structs; using Windows.ApplicationModel.Resources; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; @@ -21,11 +22,29 @@ namespace VDownload.Views.Home { public sealed partial class HomeMain : Page { + #region CONSTANTS + + // RESOURCES + private static readonly ResourceDictionary ImageRes = new ResourceDictionary { Source = new Uri("ms-appx:///Resources/Icons.xaml") }; + + // SEARCHING STATUS CONTROLS + private static readonly Microsoft.UI.Xaml.Controls.ProgressRing HomeOptionsBarSearchingStatusProgressRing = new Microsoft.UI.Xaml.Controls.ProgressRing { Width = 15, Height = 15, Margin = new Thickness(5), IsActive = true }; + private static readonly Image HomeOptionsBarSearchingStatusErrorImage = new Image { Width = 15, Height = 15, Margin = new Thickness(5), Source = (SvgImageSource)ImageRes["ErrorIcon"] }; + + // TASKS LIST PLACEHOLDER + private static readonly HomeTasksListPlaceholder HomeTasksListPlaceholder = new HomeTasksListPlaceholder(); + + #endregion + + #region CONSTRUCTORS public HomeMain() { this.InitializeComponent(); + + // Set cancellation token + SearchingCancellationToken = new CancellationTokenSource(); } #endregion @@ -34,20 +53,13 @@ namespace VDownload.Views.Home #region PROPERTIES - // SEARCHING STATUS CONTROLS - private readonly Microsoft.UI.Xaml.Controls.ProgressRing HomeOptionsBarSearchingStatusProgressRing = new Microsoft.UI.Xaml.Controls.ProgressRing { Width = 15, Height = 15, Margin = new Thickness(5), IsActive = true }; - private readonly Image HomeOptionsBarSearchingStatusErrorImage = new Image { Width = 15, Height = 15, Margin = new Thickness(5), Source = (SvgImageSource)new ResourceDictionary { Source = new Uri("ms-appx:///Resources/Icons.xaml") }["ErrorIcon"] }; - // CANCELLATON TOKEN - private CancellationTokenSource SearchingCancellationToken = new CancellationTokenSource(); + private CancellationTokenSource SearchingCancellationToken { get; set; } - // HOME TASKS LIST PLACEHOLDER - private readonly HomeTasksListPlaceholder HomeTasksListPlaceholder = new HomeTasksListPlaceholder(); - - // HOME VIDEOS LIST - private static ContentControl HomeTasksListPlaceCurrent { get; set; } + // HOME TASKS LIST + private static ContentControl HomeTasksListCurrentParent = null; private static StackPanel HomeTasksList = null; - public static List TaskPanelsList = new List(); + public static List TasksList = new List(); #endregion @@ -58,20 +70,28 @@ namespace VDownload.Views.Home // ON NAVIGATED TO protected override void OnNavigatedTo(NavigationEventArgs e) { - HomeTasksListPlaceCurrent = HomeTasksListPlace; + // Set current panel + HomeTasksListCurrentParent = HomeTasksListParent; + + // Detach task panels from old task list if (HomeTasksList != null) HomeTasksList.Children.Clear(); + + // Create new task list HomeTasksList = new StackPanel { Spacing = 10 }; - if (TaskPanelsList.Count > 0) + + // Attach task panels to new task list + if (TasksList.Count > 0) { - foreach (HomeTaskPanel homeVideoPanel in TaskPanelsList) HomeTasksList.Children.Add(homeVideoPanel); - HomeTasksListPlaceCurrent.Content = HomeTasksList; + foreach (HomeTaskPanel homeVideoPanel in TasksList) HomeTasksList.Children.Add(homeVideoPanel); + HomeTasksListCurrentParent.Content = HomeTasksList; } else { - HomeTasksListPlaceCurrent.Content = HomeTasksListPlaceholder; + HomeTasksListCurrentParent.Content = HomeTasksListPlaceholder; } } + // ADD VIDEO BUTTON CHECKED private void HomeOptionsBarAddVideoButton_Checked(object sender, RoutedEventArgs e) { @@ -100,7 +120,7 @@ namespace VDownload.Views.Home HomeOptionsBarSearchingStatusControl.Content = HomeOptionsBarSearchingStatusProgressRing; // Parse url - (VideoSource Type, string ID) source = Source.GetVideoSource(e.Phrase); + (VideoSource Type, string ID) source = Source.GetVideoSource(e.Url); // Check url if (source.Type == VideoSource.Null) @@ -176,37 +196,13 @@ namespace VDownload.Views.Home HomeOptionBarAndAddingPanelRow.Height = new GridLength(1, GridUnitType.Star); HomeTasksListRow.Height = new GridLength(0); + // Open adding panel HomeVideoAddingPanel addingPanel = new HomeVideoAddingPanel(videoService); - addingPanel.VideoAddRequest += HomeVideoAddingPanel_VideoAddRequest; + addingPanel.TasksAddingRequested += HomeTasksAddingRequest; HomeAddingPanel.Content = addingPanel; } } - // ADD VIDEO REQUEST FROM VIDEO ADDING PANEL - private void HomeVideoAddingPanel_VideoAddRequest(object sender, VideoAddEventArgs e) - { - // Replace placeholder - HomeTasksListPlaceCurrent.Content = HomeTasksList; - - // Uncheck video button - HomeOptionsBarAddVideoButton.IsChecked = false; - - // Create video task - HomeTaskPanel taskPanel = new HomeTaskPanel(e.VideoService, e.MediaType, e.Stream, e.TrimStart, e.TrimEnd, e.Filename, e.Extension, e.Location, e.Schedule); - - taskPanel.TaskRemovingRequested += (s, a) => - { - // Remove task from tasks lists - TaskPanelsList.Remove(taskPanel); - HomeTasksList.Children.Remove(taskPanel); - if (TaskPanelsList.Count <= 0) HomeTasksListPlaceCurrent.Content = HomeTasksListPlaceholder; - }; - - // Add task to tasks lists - HomeTasksList.Children.Add(taskPanel); - TaskPanelsList.Add(taskPanel); - } - // ADD PLAYLIST BUTTON CHECKED private void HomeOptionsBarAddPlaylistButton_Checked(object sender, RoutedEventArgs e) @@ -236,7 +232,7 @@ namespace VDownload.Views.Home HomeOptionsBarSearchingStatusControl.Content = HomeOptionsBarSearchingStatusProgressRing; // Parse url - (PlaylistSource Type, string ID) source = Source.GetPlaylistSource(e.Phrase); + (PlaylistSource Type, string ID) source = Source.GetPlaylistSource(e.Url); // Check url if (source.Type == PlaylistSource.Null) @@ -256,7 +252,7 @@ namespace VDownload.Views.Home try { await playlistService.GetMetadataAsync(SearchingCancellationToken.Token); - await playlistService.GetVideosAsync(e.Count, SearchingCancellationToken.Token); + await playlistService.GetVideosAsync(e.VideosCount, SearchingCancellationToken.Token); } catch (OperationCanceledException) { @@ -290,7 +286,7 @@ namespace VDownload.Views.Home catch (WebException wex) { HomeOptionsBarSearchingStatusControl.Content = HomeOptionsBarSearchingStatusErrorImage; - if (wex.Response == null) + if (!NetworkHelper.Instance.ConnectionInformation.IsInternetAvailable) { ContentDialog internetAccessErrorDialog = new ContentDialog { @@ -310,83 +306,101 @@ namespace VDownload.Views.Home // Set UI HomeOptionBarAndAddingPanelRow.Height = new GridLength(1, GridUnitType.Star); HomeTasksListRow.Height = new GridLength(0); - + + // Open adding panel HomePlaylistAddingPanel addingPanel = new HomePlaylistAddingPanel(playlistService); - addingPanel.PlaylistAddRequest += HomeVideoAddingPanel_PlayListAddRequest; + addingPanel.TasksAddingRequested += HomeTasksAddingRequest; HomeAddingPanel.Content = addingPanel; } } - // ADD PLAYLIST REQUEST FROM PLAYLIST ADDING PANEL - private void HomeVideoAddingPanel_PlayListAddRequest(object sender, PlaylistAddEventArgs e) + + // TASK ADDING REQUEST + private void HomeTasksAddingRequest(object sender, TasksAddingRequestedEventArgs e) { // Replace placeholder - HomeTasksListPlaceCurrent.Content = HomeTasksList; + HomeTasksListCurrentParent.Content = HomeTasksList; - // Uncheck video button - HomeOptionsBarAddPlaylistButton.IsChecked = false; - - // Create video tasks - foreach (var video in e.Videos) + // Uncheck button + switch (e.RequestSource) { - HomeTaskPanel taskPanel = new HomeTaskPanel(video.VideoService, video.MediaType, video.Stream, video.TrimStart, video.TrimEnd, video.Filename, video.Extension, video.Location, video.Schedule); + case TaskAddingRequestSource.Video: HomeOptionsBarAddVideoButton.IsChecked = false; break; + case TaskAddingRequestSource.Playlist: HomeOptionsBarAddPlaylistButton.IsChecked = false; break; + } + + // Create video tasks + foreach (TaskData taskData in e.TaskData) + { + HomeTaskPanel taskPanel = new HomeTaskPanel(taskData); taskPanel.TaskRemovingRequested += (s, a) => { // Remove task from tasks lists - TaskPanelsList.Remove(taskPanel); + TasksList.Remove(taskPanel); HomeTasksList.Children.Remove(taskPanel); - if (TaskPanelsList.Count <= 0) HomeTasksListPlaceCurrent.Content = HomeTasksListPlaceholder; + if (TasksList.Count <= 0) HomeTasksListCurrentParent.Content = HomeTasksListPlaceholder; }; // Add task to tasks lists HomeTasksList.Children.Add(taskPanel); - TaskPanelsList.Add(taskPanel); + TasksList.Add(taskPanel); } } - // ADDING BUTTONS UNCHECKED - private void HomeOptionsBarAddingButtons_Unchecked(object sender, RoutedEventArgs e) + // TASK ADDING CANCELLED + private void HomeSearchingCancelled() { // Cancel searching operations SearchingCancellationToken.Cancel(); SearchingCancellationToken = new CancellationTokenSource(); + // Set grid dimensions HomeOptionBarAndAddingPanelRow.Height = GridLength.Auto; HomeTasksListRow.Height = new GridLength(1, GridUnitType.Star); + // Clear panels HomeAddingPanel.Content = null; HomeOptionsBarAddingControl.Content = null; HomeOptionsBarSearchingStatusControl.Content = null; } + // ADDING BUTTONS UNCHECKED + private void HomeOptionsBarAddingButtons_Unchecked(object sender, RoutedEventArgs e) + { + HomeSearchingCancelled(); + } + + // DOWNLOAD ALL BUTTON CLICKED private async void HomeOptionsBarDownloadAllButton_Click(object sender, RoutedEventArgs e) { - HomeTaskPanel[] idleTasks = TaskPanelsList.Where((HomeTaskPanel video) => video.TaskStatus == Core.Enums.TaskStatus.Idle).ToArray(); + HomeTaskPanel[] idleTasks = TasksList.Where((HomeTaskPanel video) => video.Status == Core.Enums.TaskStatus.Idle).ToArray(); if (idleTasks.Count() > 0) { bool delay = (bool)Config.GetValue("delay_task_when_queued_task_starts_on_metered_network"); - ContentDialogResult dialogResult = await new ContentDialog + if (NetworkHelper.Instance.ConnectionInformation.IsInternetOnMeteredConnection) { - Title = ResourceLoader.GetForCurrentView().GetString("HomeDownloadAllButtonMeteredConnectionDialogTitle"), - Content = ResourceLoader.GetForCurrentView().GetString("HomeDownloadAllButtonMeteredConnectionDialogDescription"), - PrimaryButtonText = ResourceLoader.GetForCurrentView().GetString("HomeDownloadAllButtonMeteredConnectionDialogStartAndDelayText"), - SecondaryButtonText = ResourceLoader.GetForCurrentView().GetString("HomeDownloadAllButtonMeteredConnectionDialogStartWithoutDelayText"), - CloseButtonText = ResourceLoader.GetForCurrentView().GetString("HomeDownloadAllButtonMeteredConnectionDialogCancel"), - }.ShowAsync(); - switch (dialogResult) - { - case ContentDialogResult.Primary: delay = true; break; - case ContentDialogResult.Secondary: delay = false; break; - case ContentDialogResult.None: return; + ContentDialogResult dialogResult = await new ContentDialog + { + Title = ResourceLoader.GetForCurrentView().GetString("HomeDownloadAllButtonMeteredConnectionDialogTitle"), + Content = ResourceLoader.GetForCurrentView().GetString("HomeDownloadAllButtonMeteredConnectionDialogDescription"), + PrimaryButtonText = ResourceLoader.GetForCurrentView().GetString("HomeDownloadAllButtonMeteredConnectionDialogStartAndDelayText"), + SecondaryButtonText = ResourceLoader.GetForCurrentView().GetString("HomeDownloadAllButtonMeteredConnectionDialogStartWithoutDelayText"), + CloseButtonText = ResourceLoader.GetForCurrentView().GetString("HomeDownloadAllButtonMeteredConnectionDialogCancel"), + }.ShowAsync(); + switch (dialogResult) + { + case ContentDialogResult.Primary: delay = true; break; + case ContentDialogResult.Secondary: delay = false; break; + case ContentDialogResult.None: return; + } } foreach (HomeTaskPanel videoPanel in idleTasks) { - await Task.Delay(50); + await Task.Delay(10); #pragma warning disable CS4014 videoPanel.Start(delay); @@ -404,7 +418,7 @@ namespace VDownload.Views.Home // WAIT IN QUEUE public static async Task WaitInQueue(bool delayWhenOnMeteredConnection, CancellationToken token) { - while ((TaskPanelsList.Where((HomeTaskPanel video) => video.TaskStatus == Core.Enums.TaskStatus.InProgress).Count() >= (int)Config.GetValue("max_active_video_task") || (delayWhenOnMeteredConnection && NetworkHelper.Instance.ConnectionInformation.IsInternetOnMeteredConnection)) && !token.IsCancellationRequested) + while ((TasksList.Where((HomeTaskPanel task) => task.Status == Core.Enums.TaskStatus.InProgress).Count() >= (int)Config.GetValue("max_active_video_task") || (delayWhenOnMeteredConnection && NetworkHelper.Instance.ConnectionInformation.IsInternetOnMeteredConnection)) && !token.IsCancellationRequested) { await Task.Delay(100); } diff --git a/VDownload/Views/Home/HomeOptionsBarAddPlaylistControl.xaml b/VDownload/Views/Home/HomeOptionsBarAddPlaylistControl.xaml index fd58012..72af936 100644 --- a/VDownload/Views/Home/HomeOptionsBarAddPlaylistControl.xaml +++ b/VDownload/Views/Home/HomeOptionsBarAddPlaylistControl.xaml @@ -23,7 +23,7 @@ - +