diff --git a/VDownload.Core/VDownload.Core.Strings/Strings/en-US/HomePlaylistViewResources.resw b/VDownload.Core/VDownload.Core.Strings/Strings/en-US/HomePlaylistViewResources.resw
index 0973f04..2eb1753 100644
--- a/VDownload.Core/VDownload.Core.Strings/Strings/en-US/HomePlaylistViewResources.resw
+++ b/VDownload.Core/VDownload.Core.Strings/Strings/en-US/HomePlaylistViewResources.resw
@@ -117,6 +117,15 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+ Selected directory will be applied to all videos in playlist
+
+
+ Create download tasks and start
+
+
+ Create download tasks
+
Directory
@@ -135,6 +144,33 @@
File type
+
+ Author
+
+
+ Enter regular expression
+
+
+ Date
+
+
+ Duration
+
+
+ Restore
+
+
+ Removed
+
+
+ Title
+
+
+ Enter regular expression
+
+
+ Views
+
Filter
diff --git a/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj b/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj
index 0b0aa2a..7a200cb 100644
--- a/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj
+++ b/VDownload.Core/VDownload.Core.Strings/VDownload.Core.Strings.csproj
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/VDownload.Core/VDownload.Core.Tasks/DownloadTask.cs b/VDownload.Core/VDownload.Core.Tasks/DownloadTask.cs
index bd7293e..15b82f1 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.Temp.Directory}\\{_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()
diff --git a/VDownload.Core/VDownload.Core.ViewModels/Home/Helpers/VideoViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Home/Helpers/VideoViewModel.cs
index 380a4ae..513cb3e 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/Home/Helpers/VideoViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/Home/Helpers/VideoViewModel.cs
@@ -3,6 +3,7 @@ using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -71,6 +72,8 @@ namespace VDownload.Core.ViewModels.Home.Helpers
[ObservableProperty]
protected AudioExtension _audioExtension;
+ public Video Video { get; protected set; }
+
#endregion
@@ -82,6 +85,8 @@ namespace VDownload.Core.ViewModels.Home.Helpers
_settingsService = settingsService;
_storagePickerService = storagePickerService;
+ Video = video;
+
ThumbnailUrl = video.ThumbnailUrl;
Title = video.Title;
Author = video.Author;
@@ -104,6 +109,26 @@ namespace VDownload.Core.ViewModels.Home.Helpers
+ #region PUBLIC METHODS
+
+ public VideoDownloadOptions BuildDownloadOptions()
+ {
+ return new VideoDownloadOptions(Duration)
+ {
+ MediaType = this.MediaType,
+ SelectedStream = this.SelectedStream,
+ TrimStart = this.TrimStart,
+ TrimEnd = this.TrimEnd,
+ Directory = this.DirectoryPath,
+ Filename = string.Join("_", this.Filename.Split(Path.GetInvalidFileNameChars())),
+ Extension = (this.MediaType == MediaType.OnlyAudio ? this.AudioExtension.ToString() : this.VideoExtension.ToString()).ToLower(),
+ };
+ }
+
+ #endregion
+
+
+
#region COMMANDS
[RelayCommand]
diff --git a/VDownload.Core/VDownload.Core.ViewModels/Home/HomePlaylistViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Home/HomePlaylistViewModel.cs
index c705040..f8b137d 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/Home/HomePlaylistViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/Home/HomePlaylistViewModel.cs
@@ -1,7 +1,9 @@
using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
+using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
@@ -32,6 +34,8 @@ namespace VDownload.Core.ViewModels.Home
protected Playlist _playlist;
+ protected Dictionary _allVideos;
+
#endregion
@@ -44,6 +48,9 @@ namespace VDownload.Core.ViewModels.Home
[ObservableProperty]
protected ObservableCollection _videos;
+ [ObservableProperty]
+ protected int _removedCount;
+
#endregion
@@ -56,6 +63,7 @@ namespace VDownload.Core.ViewModels.Home
_settingsService = settingsService;
_storagePickerService = storagePickerService;
+ _allVideos = new Dictionary();
_videos = new ObservableCollection();
}
@@ -65,17 +73,19 @@ namespace VDownload.Core.ViewModels.Home
#region PUBLIC METHODS
- public async Task LoadPlaylist(Playlist playlist)
+ public void LoadPlaylist(Playlist playlist)
{
_playlist = playlist;
- Videos.Clear();
-
- Name = _playlist.Name;
+ _allVideos.Clear();
foreach (Video video in playlist)
{
- Videos.Add(new VideoViewModel(video, _settingsService, _storagePickerService));
+ _allVideos.Add(new VideoViewModel(video, _settingsService, _storagePickerService), false);
}
+
+ Name = _playlist.Name;
+ Videos = new ObservableCollection(_allVideos.Keys);
+ RemovedCount = 0;
}
#endregion
@@ -84,7 +94,64 @@ namespace VDownload.Core.ViewModels.Home
#region COMMANDS
+ [RelayCommand]
+ public async Task SelectDirectory()
+ {
+ string? newDirectory = await _storagePickerService.OpenDirectory();
+ if (newDirectory is not null)
+ {
+ foreach (VideoViewModel video in _allVideos.Keys)
+ {
+ video.DirectoryPath = newDirectory;
+ }
+ }
+ }
+ [RelayCommand]
+ public void RemoveVideo(VideoViewModel video)
+ {
+ _allVideos[video] = true;
+
+ Videos.Remove(video);
+
+ RemovedCount = _allVideos.Where(x => x.Value).Count();
+ }
+
+ [RelayCommand]
+ public void RestoreRemovedVideos()
+ {
+ foreach(VideoViewModel video in _allVideos.Where(x => x.Value == true).Select(x => x.Key))
+ {
+ _allVideos[video] = false;
+ Videos.Add(video);
+ }
+ RemovedCount = _allVideos.Where(x => x.Value).Count();
+ }
+
+ [RelayCommand]
+ public void CreateTasksAndDownload() => CreateTasks(true);
+
+ [RelayCommand]
+ public void CreateTasks() => CreateTasks(false);
+
+ #endregion
+
+
+
+ #region PRIVATE METHODS
+
+ protected void CreateTasks(bool download)
+ {
+ foreach (VideoViewModel video in Videos)
+ {
+ DownloadTask task = _tasksManager.AddTask(video.Video, video.BuildDownloadOptions());
+ if (download)
+ {
+ task.Enqueue();
+ }
+ }
+ CloseRequested?.Invoke(this, EventArgs.Empty);
+ }
#endregion
diff --git a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs
index 55e2944..c6b8fcc 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs
+++ b/VDownload.Core/VDownload.Core.ViewModels/Home/HomeViewModel.cs
@@ -234,7 +234,7 @@ namespace VDownload.Core.ViewModels.Home
return;
}
- await _playlistViewModel.LoadPlaylist(playlist);
+ _playlistViewModel.LoadPlaylist(playlist);
MainContent = _playlistView;
diff --git a/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj b/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj
index 5118828..db183b6 100644
--- a/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj
+++ b/VDownload.Core/VDownload.Core.ViewModels/VDownload.Core.ViewModels.csproj
@@ -10,10 +10,10 @@
-
-
+
+
-
+
diff --git a/VDownload.Core/VDownload.Core.Views/Home/HomeDownloadsView.xaml b/VDownload.Core/VDownload.Core.Views/Home/HomeDownloadsView.xaml
index e7d0345..911e767 100644
--- a/VDownload.Core/VDownload.Core.Views/Home/HomeDownloadsView.xaml
+++ b/VDownload.Core/VDownload.Core.Views/Home/HomeDownloadsView.xaml
@@ -46,7 +46,7 @@
+ Background="{ThemeResource ViewBackgroundColor}"
+ x:Name="Root">
@@ -27,7 +28,6 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -67,7 +174,7 @@
+ VerticalAlignment="Center"
+ Command="{Binding ElementName=Root, Path=DataContext.RemoveVideoCommand}"
+ CommandParameter="{Binding}"/>
@@ -273,8 +382,13 @@
-
+ Orientation="Horizontal"
+ Spacing="10">
+
+
diff --git a/VDownload.Core/VDownload.Core.Views/Home/HomeVideoView.xaml b/VDownload.Core/VDownload.Core.Views/Home/HomeVideoView.xaml
index 5347ac7..73832dc 100644
--- a/VDownload.Core/VDownload.Core.Views/Home/HomeVideoView.xaml
+++ b/VDownload.Core/VDownload.Core.Views/Home/HomeVideoView.xaml
@@ -31,7 +31,7 @@
-
+
-
-
+
+
-
-
+
+
diff --git a/VDownload.Models/Video.cs b/VDownload.Models/Video.cs
index 82f7295..00a6003 100644
--- a/VDownload.Models/Video.cs
+++ b/VDownload.Models/Video.cs
@@ -16,7 +16,7 @@ namespace VDownload.Models
public DateTime PublishDate { get; set; }
public TimeSpan Duration { get; set; }
public long Views { get; set; }
- public Uri ThumbnailUrl { get; set; }
+ public Uri? ThumbnailUrl { get; set; }
public Uri Url { get; set; }
public ICollection Streams { get; private set; }
public Source Source { get; protected set; }
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/VDownload.Services.UI.Dialogs.csproj b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/VDownload.Services.UI.Dialogs.csproj
index aa4e151..5213e9d 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/VDownload.Services.UI.Dialogs.csproj
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Dialogs/VDownload.Services.UI.Dialogs.csproj
@@ -10,7 +10,7 @@
-
-
+
+
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/VDownload.Services.UI.DictionaryResources.csproj b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/VDownload.Services.UI.DictionaryResources.csproj
index 86ac367..0404798 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/VDownload.Services.UI.DictionaryResources.csproj
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.DictionaryResources/VDownload.Services.UI.DictionaryResources.csproj
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/VDownload.Services.UI.Notifications.csproj b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/VDownload.Services.UI.Notifications.csproj
index 72ceb84..94c8201 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/VDownload.Services.UI.Notifications.csproj
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.Notifications/VDownload.Services.UI.Notifications.csproj
@@ -10,7 +10,7 @@
-
-
+
+
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/VDownload.Services.UI.StoragePicker.csproj b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/VDownload.Services.UI.StoragePicker.csproj
index 34ac897..6ea7798 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/VDownload.Services.UI.StoragePicker.csproj
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StoragePicker/VDownload.Services.UI.StoragePicker.csproj
@@ -10,7 +10,7 @@
-
-
+
+
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StringResources/VDownload.Services.UI.StringResources.csproj b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StringResources/VDownload.Services.UI.StringResources.csproj
index c15f245..50e13b6 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StringResources/VDownload.Services.UI.StringResources.csproj
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.StringResources/VDownload.Services.UI.StringResources.csproj
@@ -10,8 +10,8 @@
-
-
+
+
diff --git a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.WebView/VDownload.Services.UI.WebView.csproj b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.WebView/VDownload.Services.UI.WebView.csproj
index 9c8dbdc..aa294dd 100644
--- a/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.WebView/VDownload.Services.UI.WebView.csproj
+++ b/VDownload.Services/VDownload.Services.UI/VDownload.Services.UI.WebView/VDownload.Services.UI.WebView.csproj
@@ -13,8 +13,8 @@
-
-
+
+
diff --git a/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Download.cs b/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Download.cs
index db91b2d..5e1c31c 100644
--- a/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Download.cs
+++ b/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Download.cs
@@ -4,7 +4,7 @@ namespace VDownload.Sources.Twitch.Configuration.Models{
public class Download
{
[ConfigurationKeyName("vod")]
- public Vod Vod { get; set; }
+ public DownloadVod Vod { get; set; }
}
}
\ No newline at end of file
diff --git a/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/DownloadVod.cs b/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/DownloadVod.cs
new file mode 100644
index 0000000..25a9130
--- /dev/null
+++ b/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/DownloadVod.cs
@@ -0,0 +1,18 @@
+using Microsoft.Extensions.Configuration;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace VDownload.Sources.Twitch.Configuration.Models
+{
+ public class DownloadVod
+ {
+ [ConfigurationKeyName("chunk_regex")]
+ public string ChunkRegex { get; set; }
+
+ [ConfigurationKeyName("file_name")]
+ public string FileName { get; set; }
+ }
+}
diff --git a/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Search.cs b/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Search.cs
index da9b294..759ea4f 100644
--- a/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Search.cs
+++ b/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Search.cs
@@ -7,7 +7,7 @@ namespace VDownload.Sources.Twitch.Configuration.Models{
public List GeneralRegexes { get; } = new List();
[ConfigurationKeyName("vod")]
- public Vod Vod { get; set; }
+ public SearchVod Vod { get; set; }
[ConfigurationKeyName("clip")]
public Clip Clip { get; set; }
diff --git a/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Vod.cs b/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/SearchVod.cs
similarity index 67%
rename from VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Vod.cs
rename to VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/SearchVod.cs
index bd91b7e..eb56648 100644
--- a/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/Vod.cs
+++ b/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch.Configuration/Models/SearchVod.cs
@@ -1,7 +1,7 @@
using Microsoft.Extensions.Configuration;
namespace VDownload.Sources.Twitch.Configuration.Models{
- public class Vod
+ public class SearchVod
{
[ConfigurationKeyName("regexes")]
public List Regexes { get; } = new List();
@@ -9,14 +9,11 @@ namespace VDownload.Sources.Twitch.Configuration.Models{
[ConfigurationKeyName("thumbnail")]
public Thumbnail Thumbnail { get; set; }
+ [ConfigurationKeyName("live_thumbnail_url_regex")]
+ public string LiveThumbnailUrlRegex { get; set; }
+
[ConfigurationKeyName("stream_playlist_regex")]
public string StreamPlaylistRegex { get; set; }
-
- [ConfigurationKeyName("chunk_regex")]
- public string ChunkRegex { get; set; }
-
- [ConfigurationKeyName("file_name")]
- public string FileName { get; set; }
}
}
\ No newline at end of file
diff --git a/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch/TwitchSearchService.cs b/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch/TwitchSearchService.cs
index 8a96886..faee2fe 100644
--- a/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch/TwitchSearchService.cs
+++ b/VDownload.Sources/VDownload.Sources.Twitch/VDownload.Sources.Twitch/TwitchSearchService.cs
@@ -19,8 +19,8 @@ namespace VDownload.Sources.Twitch
{
public interface ITwitchSearchService : ISourceSearchService
{
- Task SearchPlaylist(string url, int maxVideoCount);
- Task SearchVideo(string url);
+ new Task SearchPlaylist(string url, int maxVideoCount);
+ new Task SearchVideo(string url);
}
@@ -120,17 +120,17 @@ namespace VDownload.Sources.Twitch
List> tasks = new List>();
string? cursor = null;
List videosList;
+ count = count == 0 ? int.MaxValue : count;
int videos = 0;
do
{
- videos = count == 0 || count > 100 ? 100 : count;
+ videos = count > 100 ? 100 : count;
GetVideosResponse videosResponse = await _apiService.HelixGetUserVideos(channel.Id, token, videos, cursor);
videosList = videosResponse.Data;
- count -= videosList.Count;
cursor = videosResponse.Pagination.Cursor;
tasks.AddRange(videosList.Select(ParseVod));
}
- while (videosList.Count == videos);
+ while (tasks.Count < count && videosList.Count == videos);
await Task.WhenAll(tasks);
@@ -143,7 +143,13 @@ namespace VDownload.Sources.Twitch
{
Task> streamsTask = GetVodStreams(data.Id);
- Thumbnail thumbnail = _configurationService.Twitch.Search.Vod.Thumbnail;
+ Thumbnail thumbnailConfig = _configurationService.Twitch.Search.Vod.Thumbnail;
+ Regex liveThumbnailRegex = new Regex(_configurationService.Twitch.Search.Vod.LiveThumbnailUrlRegex);
+ Uri? thumbnail = null;
+ if (!liveThumbnailRegex.IsMatch(data.ThumbnailUrl))
+ {
+ thumbnail = new Uri(data.ThumbnailUrl.Replace("%{width}", thumbnailConfig.Width.ToString()).Replace("%{height}", thumbnailConfig.Height.ToString()));
+ }
TwitchVod vod = new TwitchVod
{
Title = data.Title,
@@ -152,7 +158,7 @@ namespace VDownload.Sources.Twitch
PublishDate = data.PublishedAt,
Duration = ParseVodDuration(data.Duration),
Views = data.ViewCount,
- ThumbnailUrl = new Uri(data.ThumbnailUrl.Replace("%{width}", thumbnail.Width.ToString()).Replace("%{height}", thumbnail.Height.ToString())),
+ ThumbnailUrl = thumbnail,
Url = new Uri(data.Url),
};
diff --git a/VDownload/App.xaml b/VDownload/App.xaml
index 8c7e062..08faa8f 100644
--- a/VDownload/App.xaml
+++ b/VDownload/App.xaml
@@ -12,6 +12,7 @@
+
diff --git a/VDownload/Assets/Other/Thumbnail.png b/VDownload/Assets/Other/Thumbnail.png
new file mode 100644
index 0000000..1a593ab
Binary files /dev/null and b/VDownload/Assets/Other/Thumbnail.png differ
diff --git a/VDownload/Dictionaries/Images/ImagesOther.xaml b/VDownload/Dictionaries/Images/ImagesOther.xaml
new file mode 100644
index 0000000..6a91c88
--- /dev/null
+++ b/VDownload/Dictionaries/Images/ImagesOther.xaml
@@ -0,0 +1,6 @@
+
+
+ /Assets/Other/Thumbnail.png
+
diff --git a/VDownload/VDownload.csproj b/VDownload/VDownload.csproj
index fcabdd4..bc5d2df 100644
--- a/VDownload/VDownload.csproj
+++ b/VDownload/VDownload.csproj
@@ -145,6 +145,7 @@
+
@@ -152,9 +153,9 @@
-
-
-
+
+
+
@@ -184,6 +185,11 @@
+
+
+ Always
+
+
Always
@@ -401,6 +407,9 @@
Always
+
+ MSBuild:Compile
+
MSBuild:Compile
diff --git a/VDownload/configuration.json b/VDownload/configuration.json
index bb22d81..c22e3a6 100644
--- a/VDownload/configuration.json
+++ b/VDownload/configuration.json
@@ -148,6 +148,7 @@
"width": 1920,
"height": 1080
},
+ "live_thumbnail_url_regex": "https:\\/\\/vod-secure\\.twitch\\.tv\\/_404\\/404_processing_%{width}x%{height}\\.png",
"stream_playlist_regex": "#EXT-X-MEDIA:TYPE=VIDEO,GROUP-ID=\"\\w+\",NAME=\"(?.+)\",AUTOSELECT=\\w+,DEFAULT=\\w+\\n#EXT-X-STREAM-INF:BANDWIDTH=\\d+,CODECS=\"(?.+),(?.+)\",RESOLUTION=(?\\d+)x(?\\d+),VIDEO=\".+\"(?:,FRAME-RATE=(?\\d+.\\d+))?\n(?.+)"
},
"clip": {