Merge pull request #64 from mateuszskoczek/features/settings

Features/settings
This commit is contained in:
2024-03-05 15:55:47 +01:00
committed by GitHub
Unverified
48 changed files with 964 additions and 53 deletions

View File

@@ -117,6 +117,42 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="MediaTypeOnlyAudio.Text" xml:space="preserve">
<value>Only audio</value>
</data>
<data name="MediaTypeOnlyVideo.Text" xml:space="preserve">
<value>Only video</value>
</data>
<data name="MediaTypeOriginal.Text" xml:space="preserve">
<value>Original</value>
</data>
<data name="ProcessingSpeedFast.Text" xml:space="preserve">
<value>Fast</value>
</data>
<data name="ProcessingSpeedFaster.Text" xml:space="preserve">
<value>Faster</value>
</data>
<data name="ProcessingSpeedMedium.Text" xml:space="preserve">
<value>Medium</value>
</data>
<data name="ProcessingSpeedSlow.Text" xml:space="preserve">
<value>Slow</value>
</data>
<data name="ProcessingSpeedSlower.Text" xml:space="preserve">
<value>Slower</value>
</data>
<data name="ProcessingSpeedSuperFast.Text" xml:space="preserve">
<value>Super fast</value>
</data>
<data name="ProcessingSpeedUltraFast.Text" xml:space="preserve">
<value>Ultra fast</value>
</data>
<data name="ProcessingSpeedVeryFast.Text" xml:space="preserve">
<value>Very fast</value>
</data>
<data name="ProcessingSpeedVerySlow.Text" xml:space="preserve">
<value>Very slow</value>
</data>
<data name="StartAtMeteredConnectionDialogMessage" xml:space="preserve">
<value>You are trying to download a video using a metered connection. Do you want to continue?</value>
</data>

View File

@@ -117,15 +117,6 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="MediaTypeOnlyAudio.Text" xml:space="preserve">
<value>Only audio</value>
</data>
<data name="MediaTypeOnlyVideo.Text" xml:space="preserve">
<value>Only video</value>
</data>
<data name="MediaTypeOriginal.Text" xml:space="preserve">
<value>Original</value>
</data>
<data name="StatusCancelled.Text" xml:space="preserve">
<value>Cancelled</value>
</data>

View File

@@ -180,15 +180,6 @@
<data name="MediaOptionsHeader.Text" xml:space="preserve">
<value>Media options</value>
</data>
<data name="MediaTypeOnlyAudio.Text" xml:space="preserve">
<value>Only audio</value>
</data>
<data name="MediaTypeOnlyVideo.Text" xml:space="preserve">
<value>Only video</value>
</data>
<data name="MediaTypeOriginal.Text" xml:space="preserve">
<value>Original</value>
</data>
<data name="MediaTypeSettingsCard.Header" xml:space="preserve">
<value>Media type</value>
</data>

View File

@@ -144,15 +144,6 @@
<data name="MediaOptionsHeader.Text" xml:space="preserve">
<value>Media options</value>
</data>
<data name="MediaTypeOnlyAudio.Text" xml:space="preserve">
<value>Only audio</value>
</data>
<data name="MediaTypeOnlyVideo.Text" xml:space="preserve">
<value>Only video</value>
</data>
<data name="MediaTypeOriginal.Text" xml:space="preserve">
<value>Original</value>
</data>
<data name="MediaTypeSettingsCard.Header" xml:space="preserve">
<value>Media type</value>
</data>

View File

@@ -0,0 +1,231 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Header.Text" xml:space="preserve">
<value>Settings</value>
</data>
<data name="NotificationsHeader.Text" xml:space="preserve">
<value>Notifications</value>
</data>
<data name="NotificationsOnSuccessful.Header" xml:space="preserve">
<value>Show notifications when task ended successfully</value>
</data>
<data name="NotificationsOnUnsuccessful.Header" xml:space="preserve">
<value>Show notifications when task ended unsuccessfully</value>
</data>
<data name="ProcessingFFmpegLocation.Header" xml:space="preserve">
<value>FFmpeg location</value>
</data>
<data name="ProcessingFFmpegLocationButton.Content" xml:space="preserve">
<value>Browse</value>
</data>
<data name="ProcessingHeader.Text" xml:space="preserve">
<value>Processing</value>
</data>
<data name="ProcessingSpeed.Header" xml:space="preserve">
<value>Speed</value>
</data>
<data name="ProcessingUseHardwareAcceleration.Header" xml:space="preserve">
<value>Use hardware acceleration</value>
</data>
<data name="ProcessingUseMultithreading.Header" xml:space="preserve">
<value>Use multithreading</value>
</data>
<data name="RestoreToDefaultButton.Content" xml:space="preserve">
<value>Restore settings to default</value>
</data>
<data name="SearchingHeader.Text" xml:space="preserve">
<value>Searching</value>
</data>
<data name="SearchingPlaylistCount.Description" xml:space="preserve">
<value>0 = Get all</value>
</data>
<data name="SearchingPlaylistCount.Header" xml:space="preserve">
<value>Default number of videos fetched from playlist</value>
</data>
<data name="TasksAudioExtension.Header" xml:space="preserve">
<value>Audio extension</value>
</data>
<data name="TasksDefaultMediaOptions.Header" xml:space="preserve">
<value>Default media options</value>
</data>
<data name="TasksDefaultOutputDirectory.Header" xml:space="preserve">
<value>Default output directory</value>
</data>
<data name="TasksDefaultOutputDirectoryButton.Content" xml:space="preserve">
<value>Browse</value>
</data>
<data name="TasksFilenameTemplate.Header" xml:space="preserve">
<value>Filename template</value>
</data>
<data name="TasksHeader.Text" xml:space="preserve">
<value>Tasks</value>
</data>
<data name="TasksMediaType.Header" xml:space="preserve">
<value>Media type</value>
</data>
<data name="TasksRunningTasks.Header" xml:space="preserve">
<value>Maximum number of tasks running in parallel</value>
</data>
<data name="TasksSaveLastOutputDirectory.Description" xml:space="preserve">
<value>Otherwise, default directory defined below (after expanding) will be used</value>
</data>
<data name="TasksSaveLastOutputDirectory.Header" xml:space="preserve">
<value>Save last output directory</value>
</data>
<data name="TasksVideoExtension.Header" xml:space="preserve">
<value>Video extension</value>
</data>
<data name="TempDeleteOnFail.Header" xml:space="preserve">
<value>Delete task's temporary files when an error occurs</value>
</data>
<data name="TempDirectory.Header" xml:space="preserve">
<value>Temporary files location</value>
</data>
<data name="TempDirectoryButton.Content" xml:space="preserve">
<value>Browse</value>
</data>
<data name="TempHeader.Text" xml:space="preserve">
<value>Temporary files</value>
</data>
<data name="TwitchHeader.Text" xml:space="preserve">
<value>Twitch</value>
</data>
<data name="TwitchVodChunkDownloadingErrorRetry.Header" xml:space="preserve">
<value>Retry when downloading single VOD chunk fails</value>
</data>
<data name="TwitchVodChunkDownloadingErrorRetryCount.Header" xml:space="preserve">
<value>Number of retries</value>
</data>
<data name="TwitchVodChunkDownloadingErrorRetryDelay.Header" xml:space="preserve">
<value>Time between fail and retry (in miliseconds)</value>
</data>
<data name="TwitchVodParallelDownloads.Description" xml:space="preserve">
<value>WARNING: Too many chunks downloaded at once may cause performance problems</value>
</data>
<data name="TwitchVodParallelDownloads.Header" xml:space="preserve">
<value>Maximum number of VOD chunks downloaded in parallel</value>
</data>
<data name="TwitchVodPassiveTrimming.Description" xml:space="preserve">
<value>Only chunks from trim start to trim end range will be downloaded</value>
</data>
<data name="TwitchVodPassiveTrimming.Header" xml:space="preserve">
<value>VOD passive trimming</value>
</data>
</root>

View File

@@ -149,7 +149,7 @@ namespace VDownload.Core.ViewModels.Home
OptionBarPlaylistSearchButtonChecked = false;
OptionBarSearchNotPending = true;
OptionBarVideoSearchTBValue = string.Empty;
OptionBarPlaylistSearchNBValue = _settingsService.Data.Common.MaxNumberOfVideosToGetFromPlaylist;
OptionBarPlaylistSearchNBValue = _settingsService.Data.Common.Searching.MaxNumberOfVideosToGetFromPlaylist;
OptionBarPlaylistSearchTBValue = string.Empty;
}

View File

@@ -1,12 +1,238 @@
using System;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using VDownload.Models;
using VDownload.Services.Data.Configuration;
using VDownload.Services.Data.Settings;
using VDownload.Services.UI.StoragePicker;
using VDownload.Services.UI.StringResources;
namespace VDownload.Core.ViewModels.Settings
{
public class SettingsViewModel
public partial class SettingsViewModel : ObservableObject
{
#region SERVICES
protected readonly ISettingsService _settingsService;
protected readonly IConfigurationService _configurationService;
protected readonly IStringResourcesService _stringResourcesService;
protected readonly IStoragePickerService _storagePickerService;
#endregion
#region PROPERTIES
public int SearchingPlaylistCount
{
get => _settingsService.Data.Common.Searching.MaxNumberOfVideosToGetFromPlaylist;
set => SetProperty(_settingsService.Data.Common.Searching.MaxNumberOfVideosToGetFromPlaylist, value, _settingsService.Data.Common.Searching, (u, n) => u.MaxNumberOfVideosToGetFromPlaylist = n);
}
public int TasksRunningTasks
{
get => _settingsService.Data.Common.Tasks.MaxNumberOfRunningTasks;
set => SetProperty(_settingsService.Data.Common.Tasks.MaxNumberOfRunningTasks, value, _settingsService.Data.Common.Tasks, (u, n) => u.MaxNumberOfRunningTasks = n);
}
public MediaType TasksMediaType
{
get => _settingsService.Data.Common.Tasks.DefaultMediaType;
set => SetProperty(_settingsService.Data.Common.Tasks.DefaultMediaType, value, _settingsService.Data.Common.Tasks, (u, n) => u.DefaultMediaType = n);
}
public VideoExtension TasksVideoExtension
{
get => _settingsService.Data.Common.Tasks.DefaultVideoExtension;
set => SetProperty(_settingsService.Data.Common.Tasks.DefaultVideoExtension, value, _settingsService.Data.Common.Tasks, (u, n) => u.DefaultVideoExtension = n);
}
public AudioExtension TasksAudioExtension
{
get => _settingsService.Data.Common.Tasks.DefaultAudioExtension;
set => SetProperty(_settingsService.Data.Common.Tasks.DefaultAudioExtension, value, _settingsService.Data.Common.Tasks, (u, n) => u.DefaultAudioExtension = n);
}
public string TasksFilenameTemplate
{
get => _settingsService.Data.Common.Tasks.FilenameTemplate;
set => SetProperty(_settingsService.Data.Common.Tasks.FilenameTemplate, value, _settingsService.Data.Common.Tasks, (u, n) => u.FilenameTemplate = n);
}
public bool TasksSaveLastOutputDirectory
{
get => _settingsService.Data.Common.Tasks.SaveLastOutputDirectory;
set => SetProperty(_settingsService.Data.Common.Tasks.SaveLastOutputDirectory, value, _settingsService.Data.Common.Tasks, (u, n) => u.SaveLastOutputDirectory = n);
}
public string TasksDefaultOutputDirectory
{
get => _settingsService.Data.Common.Tasks.DefaultOutputDirectory;
set => SetProperty(_settingsService.Data.Common.Tasks.DefaultOutputDirectory, value, _settingsService.Data.Common.Tasks, (u, n) => u.DefaultOutputDirectory = n);
}
public string ProcessingFFmpegLocation
{
get => _settingsService.Data.Common.Processing.FFmpegLocation;
set => SetProperty(_settingsService.Data.Common.Processing.FFmpegLocation, value, _settingsService.Data.Common.Processing, (u, n) => u.FFmpegLocation = n);
}
public bool ProcessingUseHardwareAcceleration
{
get => _settingsService.Data.Common.Processing.UseHardwareAcceleration;
set => SetProperty(_settingsService.Data.Common.Processing.UseHardwareAcceleration, value, _settingsService.Data.Common.Processing, (u, n) => u.UseHardwareAcceleration = n);
}
public bool ProcessingUseMultithreading
{
get => _settingsService.Data.Common.Processing.UseMultithreading;
set => SetProperty(_settingsService.Data.Common.Processing.UseMultithreading, value, _settingsService.Data.Common.Processing, (u, n) => u.UseMultithreading = n);
}
public ProcessingSpeed ProcessingSpeed
{
get => _settingsService.Data.Common.Processing.Speed;
set => SetProperty(_settingsService.Data.Common.Processing.Speed, value, _settingsService.Data.Common.Processing, (u, n) => u.Speed = n);
}
public bool NotificationsOnSuccessful
{
get => _settingsService.Data.Common.Notifications.OnSuccessful;
set => SetProperty(_settingsService.Data.Common.Notifications.OnSuccessful, value, _settingsService.Data.Common.Notifications, (u, n) => u.OnSuccessful = n);
}
public bool NotificationsOnUnsuccessful
{
get => _settingsService.Data.Common.Notifications.OnUnsuccessful;
set => SetProperty(_settingsService.Data.Common.Notifications.OnUnsuccessful, value, _settingsService.Data.Common.Notifications, (u, n) => u.OnUnsuccessful = n);
}
public string TempDirectory
{
get => _settingsService.Data.Common.Temp.Directory;
set => SetProperty(_settingsService.Data.Common.Temp.Directory, value, _settingsService.Data.Common.Temp, (u, n) => u.Directory = n);
}
public bool TempDeleteOnFail
{
get => _settingsService.Data.Common.Temp.DeleteOnError;
set => SetProperty(_settingsService.Data.Common.Temp.DeleteOnError, value, _settingsService.Data.Common.Temp, (u, n) => u.DeleteOnError = n);
}
public bool TwitchVodPassiveTrimming
{
get => _settingsService.Data.Twitch.Vod.PassiveTrimming;
set => SetProperty(_settingsService.Data.Twitch.Vod.PassiveTrimming, value, _settingsService.Data.Twitch.Vod, (u, n) => u.PassiveTrimming = n);
}
public int TwitchVodParallelDownloads
{
get => _settingsService.Data.Twitch.Vod.MaxNumberOfParallelDownloads;
set => SetProperty(_settingsService.Data.Twitch.Vod.MaxNumberOfParallelDownloads, value, _settingsService.Data.Twitch.Vod, (u, n) => u.MaxNumberOfParallelDownloads = n);
}
public bool TwitchVodChunkDownloadingErrorRetry
{
get => _settingsService.Data.Twitch.Vod.ChunkDownloadingError.Retry;
set => SetProperty(_settingsService.Data.Twitch.Vod.ChunkDownloadingError.Retry, value, _settingsService.Data.Twitch.Vod.ChunkDownloadingError, (u, n) => u.Retry = n);
}
public int TwitchVodChunkDownloadingErrorRetryCount
{
get => _settingsService.Data.Twitch.Vod.ChunkDownloadingError.RetriesCount;
set => SetProperty(_settingsService.Data.Twitch.Vod.ChunkDownloadingError.RetriesCount, value, _settingsService.Data.Twitch.Vod.ChunkDownloadingError, (u, n) => u.RetriesCount = n);
}
public int TwitchVodChunkDownloadingErrorRetryDelay
{
get => _settingsService.Data.Twitch.Vod.ChunkDownloadingError.RetryDelay;
set => SetProperty(_settingsService.Data.Twitch.Vod.ChunkDownloadingError.RetryDelay, value, _settingsService.Data.Twitch.Vod.ChunkDownloadingError, (u, n) => u.RetryDelay = n);
}
[ObservableProperty]
protected string _tasksFilenameTemplateTooltip;
#endregion
#region CONSTRUCTORS
public SettingsViewModel(ISettingsService settingsService, IConfigurationService configurationService, IStringResourcesService stringResourcesService, IStoragePickerService storagePickerService)
{
_settingsService = settingsService;
_configurationService = configurationService;
_stringResourcesService = stringResourcesService;
_storagePickerService = storagePickerService;
base.PropertyChanged += PropertyChangedEventHandler;
_tasksFilenameTemplateTooltip = string.Join('\n', _configurationService.Common.FilenameTemplates.Select(x => _stringResourcesService.FilenameTemplateResources.Get(x.Name)));
}
#endregion
#region COMMANDS
[RelayCommand]
public async Task BrowseTasksDefaultOutputDirectory()
{
string? newDirectory = await _storagePickerService.OpenDirectory();
if (newDirectory is not null)
{
this.TasksDefaultOutputDirectory = newDirectory;
}
}
[RelayCommand]
public async Task BrowseTempDirectory()
{
string? newDirectory = await _storagePickerService.OpenDirectory();
if (newDirectory is not null)
{
this.TempDirectory = newDirectory;
}
}
[RelayCommand]
public async Task BrowseProcessingFFmpegLocation()
{
string? newDirectory = await _storagePickerService.OpenDirectory();
if (newDirectory is not null)
{
this.ProcessingFFmpegLocation = newDirectory;
}
}
[RelayCommand]
public async Task RestoreToDefault()
{
await _settingsService.Restore();
foreach (PropertyInfo property in this.GetType().GetProperties())
{
base.OnPropertyChanged(property.Name);
}
}
#endregion
#region PRIVATE METHODS
private async void PropertyChangedEventHandler(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
await _settingsService.Save();
}
#endregion
}
}

View File

@@ -1,3 +1,5 @@
using Microsoft.UI;
using Microsoft.UI.Windowing;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Controls.Primitives;
@@ -39,6 +41,7 @@ namespace VDownload.Core.Views
public BaseWindow(BaseViewModel viewModel)
{
this.InitializeComponent();
this.Activated += BaseWindow_Activated;
this.ExtendsContentIntoTitleBar = true;
this.SetTitleBar(this.AppTitleBar);
@@ -54,6 +57,14 @@ namespace VDownload.Core.Views
private void Root_Loaded(object sender, RoutedEventArgs e) => RootLoaded?.Invoke(this, EventArgs.Empty);
private void BaseWindow_Activated(object sender, WindowActivatedEventArgs args)
{
IntPtr windowHandle = WinRT.Interop.WindowNative.GetWindowHandle(this);
WindowId windowId = Win32Interop.GetWindowIdFromWindow(windowHandle);
AppWindow appWindow = AppWindow.GetFromWindowId(windowId);
appWindow.SetIcon(@"Assets\Logo\Logo.ico");
}
#endregion
}
}

View File

@@ -98,15 +98,15 @@
Orientation="Horizontal">
<ctuc:SwitchPresenter Value="{Binding DownloadOptions.MediaType, Converter={StaticResource ObjectToStringConverter}}">
<ctuc:Case Value="Original">
<TextBlock x:Uid="/VDownload.Core.Strings/HomeDownloadsViewResources/MediaTypeOriginal"
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOriginal"
FontSize="{StaticResource TextSize}"/>
</ctuc:Case>
<ctuc:Case Value="OnlyVideo">
<TextBlock x:Uid="/VDownload.Core.Strings/HomeDownloadsViewResources/MediaTypeOnlyVideo"
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOnlyVideo"
FontSize="{StaticResource TextSize}"/>
</ctuc:Case>
<ctuc:Case Value="OnlyAudio">
<TextBlock x:Uid="/VDownload.Core.Strings/HomeDownloadsViewResources/MediaTypeOnlyAudio"
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOnlyAudio"
FontSize="{StaticResource TextSize}"/>
</ctuc:Case>
</ctuc:SwitchPresenter>

View File

@@ -311,13 +311,13 @@
<DataTemplate>
<ctuc:SwitchPresenter Value="{Binding Converter={StaticResource ObjectToStringConverter}}">
<ctuc:Case Value="Original">
<TextBlock x:Uid="/VDownload.Core.Strings/HomePlaylistViewResources/MediaTypeOriginal"/>
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOriginal"/>
</ctuc:Case>
<ctuc:Case Value="OnlyVideo">
<TextBlock x:Uid="/VDownload.Core.Strings/HomePlaylistViewResources/MediaTypeOnlyVideo"/>
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOnlyVideo"/>
</ctuc:Case>
<ctuc:Case Value="OnlyAudio">
<TextBlock x:Uid="/VDownload.Core.Strings/HomePlaylistViewResources/MediaTypeOnlyAudio"/>
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOnlyAudio"/>
</ctuc:Case>
</ctuc:SwitchPresenter>
</DataTemplate>

View File

@@ -111,13 +111,13 @@
<DataTemplate>
<ctuc:SwitchPresenter Value="{Binding Converter={StaticResource ObjectToStringConverter}}">
<ctuc:Case Value="Original">
<TextBlock x:Uid="/VDownload.Core.Strings/HomeVideoViewResources/MediaTypeOriginal"/>
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOriginal"/>
</ctuc:Case>
<ctuc:Case Value="OnlyVideo">
<TextBlock x:Uid="/VDownload.Core.Strings/HomeVideoViewResources/MediaTypeOnlyVideo"/>
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOnlyVideo"/>
</ctuc:Case>
<ctuc:Case Value="OnlyAudio">
<TextBlock x:Uid="/VDownload.Core.Strings/HomeVideoViewResources/MediaTypeOnlyAudio"/>
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOnlyAudio"/>
</ctuc:Case>
</ctuc:SwitchPresenter>
</DataTemplate>

View File

@@ -6,10 +6,293 @@
xmlns:local="using:VDownload.Core.Views.Settings"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:ctuc="using:CommunityToolkit.WinUI.UI.Controls"
xmlns:ctc="using:CommunityToolkit.WinUI.Controls"
xmlns:ct="using:CommunityToolkit.WinUI"
xmlns:i="using:Microsoft.Xaml.Interactivity"
xmlns:ic="using:Microsoft.Xaml.Interactions.Core"
xmlns:m="using:VDownload.Models"
mc:Ignorable="d"
Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
Background="{ThemeResource ViewBackgroundColor}">
<Grid>
<Grid Padding="20"
RowSpacing="20">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBlock x:Uid="/VDownload.Core.Strings/SettingsViewResources/Header"
Grid.Row="0"
FontSize="28"
FontWeight="SemiBold"/>
<ScrollViewer Grid.Row="1">
<StackPanel Spacing="20">
<!-- Searching -->
<StackPanel Spacing="5">
<TextBlock x:Uid="/VDownload.Core.Strings/SettingsViewResources/SearchingHeader"
FontWeight="Bold"
FontSize="15"/>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/SearchingPlaylistCount">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewSearchingPlaylistCount}"/>
</ctc:SettingsCard.HeaderIcon>
<NumberBox Value="{Binding SearchingPlaylistCount, Mode=TwoWay}"
Minimum="0"
SmallChange="1"
LargeChange="10"
SpinButtonPlacementMode="Compact"/>
</ctc:SettingsCard>
</StackPanel>
<!-- Tasks -->
<StackPanel Spacing="5">
<TextBlock x:Uid="/VDownload.Core.Strings/SettingsViewResources/TasksHeader"
FontWeight="Bold"
FontSize="15"/>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TasksRunningTasks">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewTasksRunningTasks}"/>
</ctc:SettingsCard.HeaderIcon>
<NumberBox Value="{Binding TasksRunningTasks, Mode=TwoWay}"
Minimum="1"
SmallChange="1"
LargeChange="10"
SpinButtonPlacementMode="Compact"/>
</ctc:SettingsCard>
<ctc:SettingsExpander x:Uid="/VDownload.Core.Strings/SettingsViewResources/TasksDefaultMediaOptions">
<ctc:SettingsExpander.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewTasksDefaultMediaOptions}"/>
</ctc:SettingsExpander.HeaderIcon>
<ctc:SettingsExpander.Items>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TasksMediaType">
<ComboBox ItemsSource="{ct:EnumValues Type=m:MediaType}"
SelectedItem="{Binding TasksMediaType, Mode=TwoWay}">
<ComboBox.ItemTemplate>
<DataTemplate>
<ctuc:SwitchPresenter Value="{Binding Converter={StaticResource ObjectToStringConverter}}">
<ctuc:Case Value="Original">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOriginal"/>
</ctuc:Case>
<ctuc:Case Value="OnlyVideo">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOnlyVideo"/>
</ctuc:Case>
<ctuc:Case Value="OnlyAudio">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/MediaTypeOnlyAudio"/>
</ctuc:Case>
</ctuc:SwitchPresenter>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</ctc:SettingsCard>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TasksVideoExtension">
<ComboBox ItemsSource="{ct:EnumValues Type=m:VideoExtension}"
SelectedItem="{Binding TasksVideoExtension, Mode=TwoWay}"/>
</ctc:SettingsCard>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TasksAudioExtension">
<ComboBox ItemsSource="{ct:EnumValues Type=m:AudioExtension}"
SelectedItem="{Binding TasksAudioExtension, Mode=TwoWay}"/>
</ctc:SettingsCard>
</ctc:SettingsExpander.Items>
</ctc:SettingsExpander>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TasksFilenameTemplate">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewTasksFilenameTemplate}"/>
</ctc:SettingsCard.HeaderIcon>
<TextBox Text="{Binding TasksFilenameTemplate, Mode=TwoWay}"
ToolTipService.ToolTip="{Binding TasksFilenameTemplateTooltip}"/>
</ctc:SettingsCard>
<ctc:SettingsExpander x:Uid="/VDownload.Core.Strings/SettingsViewResources/TasksSaveLastOutputDirectory">
<ctc:SettingsExpander.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewTasksOutputDirectory}"/>
</ctc:SettingsExpander.HeaderIcon>
<ToggleSwitch IsOn="{Binding TasksSaveLastOutputDirectory, Mode=TwoWay}"/>
<ctc:SettingsExpander.Items>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TasksDefaultOutputDirectory"
IsEnabled="{Binding TasksSaveLastOutputDirectory, Converter={StaticResource BoolNegationConverter}}"
Description="{Binding TasksDefaultOutputDirectory}">
<Button x:Uid="/VDownload.Core.Strings/SettingsViewResources/TasksDefaultOutputDirectoryButton"
Command="{Binding BrowseTasksDefaultOutputDirectoryCommand}"/>
</ctc:SettingsCard>
</ctc:SettingsExpander.Items>
</ctc:SettingsExpander>
</StackPanel>
<!-- Processing -->
<StackPanel Spacing="5">
<TextBlock x:Uid="/VDownload.Core.Strings/SettingsViewResources/ProcessingHeader"
FontWeight="Bold"
FontSize="15"/>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/ProcessingFFmpegLocation"
Description="{Binding ProcessingFFmpegLocation}">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewProcessingFFmpegLocation}"/>
</ctc:SettingsCard.HeaderIcon>
<Button x:Uid="/VDownload.Core.Strings/SettingsViewResources/ProcessingFFmpegLocationButton"
Command="{Binding BrowseProcessingFFmpegLocationCommand}"/>
</ctc:SettingsCard>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/ProcessingUseMultithreading">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewProcessingUseMultithreading}"/>
</ctc:SettingsCard.HeaderIcon>
<ToggleSwitch IsOn="{Binding ProcessingUseMultithreading, Mode=TwoWay}"/>
</ctc:SettingsCard>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/ProcessingUseHardwareAcceleration">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewProcessingUseHardwareAcceleration}"/>
</ctc:SettingsCard.HeaderIcon>
<ToggleSwitch IsOn="{Binding ProcessingUseHardwareAcceleration, Mode=TwoWay}"/>
</ctc:SettingsCard>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/ProcessingSpeed">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewProcessingSpeed}"/>
</ctc:SettingsCard.HeaderIcon>
<ComboBox ItemsSource="{ct:EnumValues Type=m:ProcessingSpeed}"
SelectedItem="{Binding ProcessingSpeed, Mode=TwoWay}">
<ComboBox.ItemTemplate>
<DataTemplate>
<ctuc:SwitchPresenter Value="{Binding Converter={StaticResource ObjectToStringConverter}}">
<ctuc:Case Value="VerySlow">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/ProcessingSpeedVerySlow"/>
</ctuc:Case>
<ctuc:Case Value="Slower">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/ProcessingSpeedSlower"/>
</ctuc:Case>
<ctuc:Case Value="Slow">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/ProcessingSpeedSlow"/>
</ctuc:Case>
<ctuc:Case Value="Medium">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/ProcessingSpeedMedium"/>
</ctuc:Case>
<ctuc:Case Value="Fast">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/ProcessingSpeedFast"/>
</ctuc:Case>
<ctuc:Case Value="Faster">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/ProcessingSpeedFaster"/>
</ctuc:Case>
<ctuc:Case Value="VeryFast">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/ProcessingSpeedVeryFast"/>
</ctuc:Case>
<ctuc:Case Value="SuperFast">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/ProcessingSpeedSuperFast"/>
</ctuc:Case>
<ctuc:Case Value="UltraFast">
<TextBlock x:Uid="/VDownload.Core.Strings/CommonResources/ProcessingSpeedUltraFast"/>
</ctuc:Case>
</ctuc:SwitchPresenter>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</ctc:SettingsCard>
</StackPanel>
<!-- Notifications -->
<StackPanel Spacing="5">
<TextBlock x:Uid="/VDownload.Core.Strings/SettingsViewResources/NotificationsHeader"
FontWeight="Bold"
FontSize="15"/>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/NotificationsOnSuccessful">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewNotificationOnSuccessful}"/>
</ctc:SettingsCard.HeaderIcon>
<ToggleSwitch IsOn="{Binding NotificationsOnSuccessful, Mode=TwoWay}"/>
</ctc:SettingsCard>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/NotificationsOnUnsuccessful">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewNotificationOnUnsuccessful}"/>
</ctc:SettingsCard.HeaderIcon>
<ToggleSwitch IsOn="{Binding NotificationsOnUnsuccessful, Mode=TwoWay}"/>
</ctc:SettingsCard>
</StackPanel>
<!-- Temporary files -->
<StackPanel Spacing="5">
<TextBlock x:Uid="/VDownload.Core.Strings/SettingsViewResources/TempHeader"
FontWeight="Bold"
FontSize="15"/>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TempDirectory"
Description="{Binding TempDirectory}">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewTempDirectory}"/>
</ctc:SettingsCard.HeaderIcon>
<Button x:Uid="/VDownload.Core.Strings/SettingsViewResources/TempDirectoryButton"
Command="{Binding BrowseTempDirectoryCommand}"/>
</ctc:SettingsCard>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TempDeleteOnFail">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{ThemeResource ImageSettingsViewTempDeleteOnFail}"/>
</ctc:SettingsCard.HeaderIcon>
<ToggleSwitch IsOn="{Binding TempDeleteOnFail, Mode=TwoWay}"/>
</ctc:SettingsCard>
</StackPanel>
<!-- Twitch -->
<StackPanel Spacing="5">
<TextBlock x:Uid="/VDownload.Core.Strings/SettingsViewResources/TwitchHeader"
FontWeight="Bold"
FontSize="15"/>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TwitchVodPassiveTrimming">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{StaticResource ImageSourcesTwitch}"/>
</ctc:SettingsCard.HeaderIcon>
<ToggleSwitch IsOn="{Binding TwitchVodPassiveTrimming, Mode=TwoWay}"/>
</ctc:SettingsCard>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TwitchVodParallelDownloads">
<ctc:SettingsCard.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{StaticResource ImageSourcesTwitch}"/>
</ctc:SettingsCard.HeaderIcon>
<NumberBox Value="{Binding TwitchVodParallelDownloads, Mode=TwoWay}"
Minimum="1"
SmallChange="1"
LargeChange="10"
SpinButtonPlacementMode="Compact"/>
</ctc:SettingsCard>
<ctc:SettingsExpander x:Uid="/VDownload.Core.Strings/SettingsViewResources/TwitchVodChunkDownloadingErrorRetry">
<ctc:SettingsExpander.HeaderIcon>
<BitmapIcon ShowAsMonochrome="False"
UriSource="{StaticResource ImageSourcesTwitch}"/>
</ctc:SettingsExpander.HeaderIcon>
<ToggleSwitch IsOn="{Binding TwitchVodChunkDownloadingErrorRetry, Mode=TwoWay}"/>
<ctc:SettingsExpander.Items>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TwitchVodChunkDownloadingErrorRetryCount"
IsEnabled="{Binding TwitchVodChunkDownloadingErrorRetry}">
<NumberBox Value="{Binding TwitchVodChunkDownloadingErrorRetryCount, Mode=TwoWay}"
Minimum="1"
SmallChange="1"
LargeChange="10"
SpinButtonPlacementMode="Compact"/>
</ctc:SettingsCard>
<ctc:SettingsCard x:Uid="/VDownload.Core.Strings/SettingsViewResources/TwitchVodChunkDownloadingErrorRetryDelay"
IsEnabled="{Binding TwitchVodChunkDownloadingErrorRetry}">
<NumberBox Value="{Binding TwitchVodChunkDownloadingErrorRetryDelay, Mode=TwoWay}"
Minimum="0"
SmallChange="1"
LargeChange="10"
SpinButtonPlacementMode="Compact"/>
</ctc:SettingsCard>
</ctc:SettingsExpander.Items>
</ctc:SettingsExpander>
</StackPanel>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
<Button x:Uid="/VDownload.Core.Strings/SettingsViewResources/RestoreToDefaultButton"
Command="{Binding RestoreToDefaultCommand}"/>
</StackPanel>
</StackPanel>
</ScrollViewer>
</Grid>
</Page>

View File

@@ -5,14 +5,6 @@ namespace VDownload.Core.Views.Settings
{
public sealed partial class SettingsView : Page
{
#region PROPERTIES
public new SettingsViewModel DataContext { get; set; }
#endregion
#region CONSTRUCTORS
public SettingsView(SettingsViewModel viewModel)

View File

@@ -12,8 +12,8 @@ namespace VDownload.Services.Data.Settings
{
public class CommonSettings
{
[JsonProperty("max_number_of_videos_to_get_from_playlist")]
public int MaxNumberOfVideosToGetFromPlaylist { get; set; } = 0;
[JsonProperty("searching")]
public Searching Searching { get; set; } = new Searching();
[JsonProperty("temp")]
public Temp Temp { get; set; } = new Temp();

View File

@@ -0,0 +1,15 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace VDownload.Services.Data.Settings.Models
{
public class Searching
{
[JsonProperty("max_number_of_videos_to_get_from_playlist")]
public int MaxNumberOfVideosToGetFromPlaylist { get; set; } = 0;
}
}

View File

@@ -15,6 +15,8 @@ namespace VDownload.Services.UI.StringResources
StringResources SearchResources { get; }
StringResources CommonResources { get; }
StringResources DialogButtonsResources { get; }
StringResources SettingsViewResources { get; }
StringResources FilenameTemplateResources { get; }
}
@@ -41,6 +43,8 @@ namespace VDownload.Services.UI.StringResources
public StringResources SearchResources { get; protected set; }
public StringResources CommonResources { get; protected set; }
public StringResources DialogButtonsResources { get; protected set; }
public StringResources SettingsViewResources { get; protected set; }
public StringResources FilenameTemplateResources { get; protected set; }
#endregion
@@ -62,6 +66,8 @@ namespace VDownload.Services.UI.StringResources
SearchResources = BuildResource("SearchResources");
CommonResources = BuildResource("CommonResources");
DialogButtonsResources = BuildResource("DialogButtonsResources");
SettingsViewResources = BuildResource("SettingsViewResources");
FilenameTemplateResources = BuildResource("FilenameTemplateResources");
}
#endregion

View File

@@ -18,6 +18,7 @@
<ResourceDictionary Source="Dictionaries/Images/ImagesHomeDownloadsView.xaml"/>
<ResourceDictionary Source="Dictionaries/Images/ImagesHomePlaylistView.xaml"/>
<ResourceDictionary Source="Dictionaries/Images/ImagesHomeVideoView.xaml"/>
<ResourceDictionary Source="Dictionaries/Images/ImagesSettingsView.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -12,4 +12,5 @@
<ct:StringFormatConverter x:Key="StringFormatConverter"/>
<ct:BoolToVisibilityConverter x:Key="BoolToVisibilityConverter"/>
<ct:BoolNegationConverter x:Key="BoolNegationConverter"/>
</ResourceDictionary>

View File

@@ -3,4 +3,5 @@
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<x:String x:Key="ImageLogo">/Assets/Logo/Logo.png</x:String>
<x:String x:Key="ImageLogoIcon">/Assets/Logo/Logo.ico</x:String>
</ResourceDictionary>

View File

@@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<ResourceDictionary.ThemeDictionaries>
<ResourceDictionary x:Key="Light">
<x:String x:Key="ImageSettingsViewSearchingPlaylistCount">/Assets/SettingsView/SearchingPlaylistCountLight.png</x:String>
<x:String x:Key="ImageSettingsViewTasksDefaultMediaOptions">/Assets/SettingsView/TasksDefaultMediaOptionsLight.png</x:String>
<x:String x:Key="ImageSettingsViewTasksRunningTasks">/Assets/SettingsView/TasksRunningTasksLight.png</x:String>
<x:String x:Key="ImageSettingsViewTasksFilenameTemplate">/Assets/SettingsView/TasksFilenameTemplateLight.png</x:String>
<x:String x:Key="ImageSettingsViewTasksOutputDirectory">/Assets/SettingsView/TasksOutputDirectoryLight.png</x:String>
<x:String x:Key="ImageSettingsViewTempDirectory">/Assets/SettingsView/TempDirectoryLight.png</x:String>
<x:String x:Key="ImageSettingsViewTempDeleteOnFail">/Assets/SettingsView/TempDeleteOnFailLight.png</x:String>
<x:String x:Key="ImageSettingsViewNotificationOnSuccessful">/Assets/SettingsView/NotificationOnSuccessfulLight.png</x:String>
<x:String x:Key="ImageSettingsViewNotificationOnUnsuccessful">/Assets/SettingsView/NotificationOnUnsuccessfulLight.png</x:String>
<x:String x:Key="ImageSettingsViewProcessingFFmpegLocation">/Assets/SettingsView/ProcessingFFmpegLocationLight.png</x:String>
<x:String x:Key="ImageSettingsViewProcessingUseHardwareAcceleration">/Assets/SettingsView/ProcessingUseHardwareAccelerationLight.png</x:String>
<x:String x:Key="ImageSettingsViewProcessingUseMultithreading">/Assets/SettingsView/ProcessingUseMultithreadingLight.png</x:String>
<x:String x:Key="ImageSettingsViewProcessingSpeed">/Assets/SettingsView/ProcessingSpeedLight.png</x:String>
</ResourceDictionary>
<ResourceDictionary x:Key="Dark">
<x:String x:Key="ImageSettingsViewSearchingPlaylistCount">/Assets/SettingsView/SearchingPlaylistCountDark.png</x:String>
<x:String x:Key="ImageSettingsViewTasksDefaultMediaOptions">/Assets/SettingsView/TasksDefaultMediaOptionsDark.png</x:String>
<x:String x:Key="ImageSettingsViewTasksRunningTasks">/Assets/SettingsView/TasksRunningTasksDark.png</x:String>
<x:String x:Key="ImageSettingsViewTasksFilenameTemplate">/Assets/SettingsView/TasksFilenameTemplateDark.png</x:String>
<x:String x:Key="ImageSettingsViewTasksOutputDirectory">/Assets/SettingsView/TasksOutputDirectoryDark.png</x:String>
<x:String x:Key="ImageSettingsViewTempDirectory">/Assets/SettingsView/TempDirectoryDark.png</x:String>
<x:String x:Key="ImageSettingsViewTempDeleteOnFail">/Assets/SettingsView/TempDeleteOnFailDark.png</x:String>
<x:String x:Key="ImageSettingsViewNotificationOnSuccessful">/Assets/SettingsView/NotificationOnSuccessfulDark.png</x:String>
<x:String x:Key="ImageSettingsViewNotificationOnUnsuccessful">/Assets/SettingsView/NotificationOnUnsuccessfulDark.png</x:String>
<x:String x:Key="ImageSettingsViewProcessingFFmpegLocation">/Assets/SettingsView/ProcessingFFmpegLocationDark.png</x:String>
<x:String x:Key="ImageSettingsViewProcessingUseHardwareAcceleration">/Assets/SettingsView/ProcessingUseHardwareAccelerationDark.png</x:String>
<x:String x:Key="ImageSettingsViewProcessingUseMultithreading">/Assets/SettingsView/ProcessingUseMultithreadingDark.png</x:String>
<x:String x:Key="ImageSettingsViewProcessingSpeed">/Assets/SettingsView/ProcessingSpeedDark.png</x:String>
</ResourceDictionary>
</ResourceDictionary.ThemeDictionaries>
</ResourceDictionary>

View File

@@ -13,6 +13,7 @@
<WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
<UseRidGraph>true</UseRidGraph>
<EnableCoreMrtTooling Condition=" '$(BuildingInsideVisualStudio)' != 'true' ">false</EnableCoreMrtTooling>
<ApplicationIcon>Assets\Logo\Logo.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Content Remove="Assets\BaseView\AuthenticationDark.png" />
@@ -76,8 +77,6 @@
<Content Remove="Assets\HomeVideoView\FilenameLight.png" />
<Content Remove="Assets\HomeVideoView\MediaDark.png" />
<Content Remove="Assets\HomeVideoView\MediaLight.png" />
<Content Remove="Assets\HomeVideoView\QualityDark.png" />
<Content Remove="Assets\HomeVideoView\QualityLight.png" />
<Content Remove="Assets\HomeVideoView\TimeDark.png" />
<Content Remove="Assets\HomeVideoView\TimeLight.png" />
<Content Remove="Assets\HomeVideoView\TrimDark.png" />
@@ -96,6 +95,12 @@
<Content Remove="Assets\Logo\Square44x44Logo.altform-unplated_targetsize-256.png" />
<Content Remove="Assets\Logo\Square44x44Logo.altform-unplated_targetsize-32.png" />
<Content Remove="Assets\Logo\Square44x44Logo.altform-unplated_targetsize-48.png" />
<Content Remove="Assets\SettingsView\ProcessingFFmpegLocationDark.png" />
<Content Remove="Assets\SettingsView\ProcessingFFmpegLocationLight.png" />
<Content Remove="Assets\SettingsView\TasksFilenameTemplateDark.png" />
<Content Remove="Assets\SettingsView\TasksFilenameTemplateLight.png" />
<Content Remove="Assets\SettingsView\TasksOutputDirectoryDark.png" />
<Content Remove="Assets\SettingsView\TasksOutputDirectoryLight.png" />
<Content Remove="Assets\Sources\Twitch.png" />
</ItemGroup>
<ItemGroup>
@@ -139,6 +144,8 @@
<None Remove="Assets\Logo\Wide310x150Logo.scale-150.png" />
<None Remove="Assets\Logo\Wide310x150Logo.scale-200.png" />
<None Remove="Assets\Logo\Wide310x150Logo.scale-400.png" />
<None Remove="Assets\SettingsView\TasksDefaultMediaOptionsDark.png" />
<None Remove="Assets\SettingsView\TasksDefaultMediaOptionsLight.png" />
<None Remove="Dictionaries\Colors.xaml" />
<None Remove="Dictionaries\Converters.xaml" />
<None Remove="Dictionaries\Images\ImagesBaseView.xaml" />
@@ -148,6 +155,7 @@
<None Remove="Dictionaries\Images\ImagesHomeView.xaml" />
<None Remove="Dictionaries\Images\ImagesLogo.xaml" />
<None Remove="Dictionaries\Images\ImagesOther.xaml" />
<None Remove="Dictionaries\Images\ImagesSettingsView.xaml" />
<None Remove="Dictionaries\Images\ImagesSources.xaml" />
</ItemGroup>
@@ -189,9 +197,75 @@
<ProjectReference Include="..\VDownload.Sources\VDownload.Sources\VDownload.Sources.csproj" />
</ItemGroup>
<ItemGroup>
<Content Update="Assets\HomeVideoView\QualityDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\HomeVideoView\QualityLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\Other\Thumbnail.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\NotificationOnSuccessfulDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\NotificationOnSuccessfulLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\NotificationOnUnsuccessfulDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\NotificationOnUnsuccessfulLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\ProcessingSpeedDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\ProcessingSpeedLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\ProcessingUseHardwareAccelerationDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\ProcessingUseHardwareAccelerationLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\ProcessingUseMultithreadingLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\ProcessingUseMultithreadingDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\TasksDefaultMediaOptionsDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\TasksDefaultMediaOptionsLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\TasksRunningTasksDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\TasksRunningTasksLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\SearchingPlaylistCountDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\SearchingPlaylistCountLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\TempDeleteOnFailDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\TempDeleteOnFailLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\TempDirectoryDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Update="Assets\SettingsView\TempDirectoryLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<None Update="Assets\BaseView\AuthenticationDark.png">
@@ -404,15 +478,39 @@
<None Update="Assets\HomeView\Error.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Assets\Logo\Logo.ico">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Assets\Logo\Logo.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Assets\SettingsView\ProcessingFFmpegLocationDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Assets\SettingsView\TasksOutputDirectoryDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Assets\SettingsView\ProcessingFFmpegLocationLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Assets\SettingsView\TasksOutputDirectoryLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Assets\SettingsView\TasksFilenameTemplateDark.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Assets\SettingsView\TasksFilenameTemplateLight.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Assets\Sources\Twitch.png">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="configuration.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<Page Update="Dictionaries\Images\ImagesSettingsView.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>
<Page Update="Dictionaries\Images\ImagesHomeView.xaml">
<Generator>MSBuild:Compile</Generator>
</Page>