emby-toolbox/EmbyToolbox/MainWindow.xaml
2026-05-25 11:00:03 +05:00

1076 lines
56 KiB
XML

<Window x:Class="EmbyToolbox.MainWindow"
x:Name="RootWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:shell="clr-namespace:System.Windows.Shell;assembly=PresentationFramework"
xmlns:behaviors="clr-namespace:EmbyToolbox.Behaviors"
xmlns:views="clr-namespace:EmbyToolbox.Views"
xmlns:viewModels="clr-namespace:EmbyToolbox.ViewModels"
xmlns:converters="clr-namespace:EmbyToolbox.Converters"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Title="Emby Toolbox"
Icon="/Resources/AppIcon.ico"
MinWidth="800"
MinHeight="500"
Width="1100"
Height="750"
Background="{DynamicResource Ui.Brush.Window}"
WindowStartupLocation="CenterScreen">
<Window.Resources>
<converters:BooleanToVisibilityConverter x:Key="BoolToVis" />
</Window.Resources>
<Window.TaskbarItemInfo>
<shell:TaskbarItemInfo ProgressState="{Binding TaskbarProgressState, Mode=OneWay}"
ProgressValue="{Binding TaskbarProgressValue, Mode=OneWay}" />
</Window.TaskbarItemInfo>
<Grid Margin="{StaticResource Ui.PagePadding}">
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TabControl Grid.Row="0" Style="{StaticResource UiTabControl}" SelectedIndex="{Binding SelectedTabIndex, Mode=TwoWay}">
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource UiMdlGlyphTab}" Text="&#xE8AC;" />
<TextBlock Text="Переименование сериалов" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
<Grid DataContext="{Binding SeriesRenamer}">
<Grid.Resources>
<Style x:Key="SeriesTreeItemStyle" TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="Foreground" Value="{DynamicResource Ui.Brush.Text}" />
</Style>
</Grid.Resources>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Margin="0,0,0,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="8" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<TextBox x:Name="SeriesRootPathBox"
Style="{StaticResource UiTextInput}"
Text="{Binding RootFolderPath, Mode=OneWay}"
IsReadOnly="True"
HorizontalAlignment="Stretch" />
<TextBlock Margin="8,0,0,0"
VerticalAlignment="Center"
IsHitTestVisible="False"
Text="Выберите корневую папку сериала...">
<TextBlock.Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource UiTextCaption}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding Text, ElementName=SeriesRootPathBox}" Value="">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
<Button Grid.Column="2"
MinWidth="100"
Style="{StaticResource UiButtonSecondary}"
Command="{Binding SelectRootFolderCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE838;" />
<TextBlock Text="Выбрать" VerticalAlignment="Center" />
</StackPanel>
</Button>
</Grid>
<Grid Margin="0,8,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="8" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Style="{StaticResource UiTextCaption}"
Text="Имя сериала:"
VerticalAlignment="Center" />
<Grid Grid.Column="2">
<TextBox x:Name="SeriesNameBox"
Style="{StaticResource UiTextInput}"
Text="{Binding SeriesName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Stretch" />
<TextBlock Margin="8,0,0,0"
VerticalAlignment="Center"
IsHitTestVisible="False"
Text="Введите имя сериала...">
<TextBlock.Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource UiTextCaption}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding Text, ElementName=SeriesNameBox}" Value="">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
</Grid>
</StackPanel>
<StackPanel Grid.Column="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="12,0,0,0">
<Button Style="{StaticResource UiButtonSecondary}" MinWidth="108" Margin="0,0,8,0" Command="{Binding RefreshPreviewCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE72C;" />
<TextBlock Text="Обновить" VerticalAlignment="Center" />
</StackPanel>
</Button>
<Button Style="{StaticResource UiButtonPrimary}" MinWidth="108" Command="{Binding RunRenameCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphOnPrimary}" Text="&#xE768;" />
<TextBlock Text="Запустить" VerticalAlignment="Center" />
</StackPanel>
</Button>
</StackPanel>
</Grid>
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="6" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0"
Padding="6"
Background="{DynamicResource Ui.Brush.Surface}"
behaviors:SeriesRenamerDropTargetBehavior.IsEnabled="True">
<Border.Style>
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.BorderSubtle}" />
<Setter Property="BorderThickness" Value="1" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsRootTreeDragOver}" Value="True">
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.Accent}" />
<Setter Property="BorderThickness" Value="2" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<TreeView ItemsSource="{Binding CurrentTree}"
BorderThickness="0"
Background="Transparent"
ItemContainerStyle="{StaticResource SeriesTreeItemStyle}"
behaviors:TreeViewScrollSyncBehavior.SyncGroup="SeriesRenameTrees">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type viewModels:RenameTreeNodeViewModel}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource UiMdlGlyphTree}" Text="{Binding IconGlyph}" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Border>
<GridSplitter Grid.Column="1" Width="6" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="{DynamicResource Ui.Brush.BorderSubtle}" ShowsPreview="True" />
<Border Grid.Column="2" BorderBrush="{DynamicResource Ui.Brush.BorderSubtle}" BorderThickness="1" Background="{DynamicResource Ui.Brush.Surface}" Padding="6">
<Grid>
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsPreviewSupported}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<TreeView ItemsSource="{Binding PreviewTree}"
BorderThickness="0"
Background="Transparent"
ItemContainerStyle="{StaticResource SeriesTreeItemStyle}"
behaviors:TreeViewScrollSyncBehavior.SyncGroup="SeriesRenameTrees">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type viewModels:RenameTreeNodeViewModel}" ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource UiMdlGlyphTree}" Text="{Binding IconGlyph}" />
<TextBlock Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsPreviewSupported}" Value="False">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphEmpty}" Text="&#xE946;" />
<TextBlock Style="{StaticResource UiTextH2}" Text="Невозможно построить предпросмотр" Margin="0,8,0,0" HorizontalAlignment="Center" />
<TextBlock Style="{StaticResource UiTextCaption}" Text="Проверьте структуру каталогов" HorizontalAlignment="Center" Margin="0,4,0,0" />
<TextBlock Style="{StaticResource UiTextCaption}" Text="{Binding UnsupportedReason}" HorizontalAlignment="Center" Margin="0,4,0,0" TextWrapping="Wrap" MaxWidth="320" />
</StackPanel>
</Grid>
</Grid>
</Border>
</Grid>
</Grid>
</TabItem>
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource UiMdlGlyphTab}" Text="&#xE9F5;" />
<TextBlock Text="Конвертация" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
<views:ConversionView DataContext="{Binding Conversion}" />
</TabItem>
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource UiMdlGlyphTab}" Text="&#xEA3C;" />
<TextBlock Text="Объединение" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
<views:MergeView DataContext="{Binding Merge}" />
</TabItem>
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource UiMdlGlyphTab}" Text="&#xE8BF;" />
<TextBlock Text="Извлечение дорожек" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
<views:TrackExtractionView DataContext="{Binding TrackExtraction}" />
</TabItem>
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource UiMdlGlyphTab}" Text="&#xE946;" />
<TextBlock Text="Video info" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
<Grid DataContext="{Binding VideoInfo}">
<TabControl Style="{StaticResource UiTabControl}" SelectedIndex="{Binding SelectedSubTabIndex, Mode=TwoWay}">
<TabItem Header="Краткая информация">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Border Grid.Row="0"
BorderBrush="{DynamicResource Ui.Brush.BorderSubtle}"
BorderThickness="0,0,0,1"
Padding="0,0,0,8"
Margin="0,0,0,8">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<Button Style="{StaticResource UiButtonSecondary}"
MinWidth="132"
Command="{Binding SelectSummaryFilesCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE8E5;" />
<TextBlock Text="Выбрать файлы" VerticalAlignment="Center" />
</StackPanel>
</Button>
</StackPanel>
</Border>
<Border Grid.Row="1"
Padding="8"
Background="{DynamicResource Ui.Brush.Surface}"
behaviors:VideoInfoDropTargetBehavior.IsEnabled="True">
<Border.Style>
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.BorderSubtle}" />
<Setter Property="BorderThickness" Value="1" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsVideoInfoDropHighlight}" Value="True">
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.Accent}" />
<Setter Property="BorderThickness" Value="2" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<Grid>
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasSummaryData}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<TextBox Text="{Binding SummaryText, Mode=OneWay}"
IsReadOnly="True"
AcceptsReturn="True"
VerticalScrollBarVisibility="Auto"
HorizontalScrollBarVisibility="Auto"
FontFamily="Consolas"
TextWrapping="NoWrap"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
Style="{StaticResource UiLog}" />
</Grid>
<Grid>
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasSummaryData}" Value="False">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphEmpty}" Text="&#xE946;" />
<TextBlock Style="{StaticResource UiTextH2}"
Margin="0,8,0,0"
HorizontalAlignment="Center"
Text="Нет данных для отображения" />
</StackPanel>
</Grid>
</Grid>
</Border>
</Grid>
</TabItem>
<TabItem Header="Подробная информация">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.Row="0" Margin="0,0,0,12">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="8" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Grid Grid.Column="0">
<TextBox x:Name="VideoInfoFilePathBox"
Style="{StaticResource UiTextInput}"
Text="{Binding SelectedFilePath, Mode=OneWay}"
IsReadOnly="True"
HorizontalAlignment="Stretch" />
<TextBlock Margin="8,0,0,0"
VerticalAlignment="Center"
IsHitTestVisible="False"
Text="Выберите видеофайл для анализа...">
<TextBlock.Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource UiTextCaption}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding Text, ElementName=VideoInfoFilePathBox}" Value="">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
<Button Grid.Column="2"
MinWidth="100"
Style="{StaticResource UiButtonSecondary}"
Command="{Binding SelectFileCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE8E5;" />
<TextBlock Text="Выбрать" VerticalAlignment="Center" />
</StackPanel>
</Button>
</Grid>
<Border Grid.Row="1"
Padding="8,4,8,8"
Background="{DynamicResource Ui.Brush.Surface}"
behaviors:VideoInfoDropTargetBehavior.IsEnabled="True">
<Border.Style>
<Style TargetType="Border">
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.BorderSubtle}" />
<Setter Property="BorderThickness" Value="1" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsVideoInfoDropHighlight}" Value="True">
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.Accent}" />
<Setter Property="BorderThickness" Value="2" />
</DataTrigger>
</Style.Triggers>
</Style>
</Border.Style>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid Grid.RowSpan="2">
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedFilePath}" Value="">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphEmpty}" Text="&#xE946;" />
<TextBlock Style="{StaticResource UiTextH2}"
Margin="0,8,0,0"
HorizontalAlignment="Center"
Text="Нет данных для отображения" />
<TextBlock Style="{StaticResource UiTextCaption}"
Margin="0,4,0,0"
HorizontalAlignment="Center"
Text="Выберите файл для получения информации через ffprobe" />
</StackPanel>
</Grid>
<TextBlock Grid.Row="0"
Text="{Binding ErrorMessage}"
Margin="0,0,0,8"
TextWrapping="Wrap">
<TextBlock.Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource UiTextError}">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<Trigger Property="Text" Value="">
<Setter Property="Visibility" Value="Collapsed" />
</Trigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<ListBox Grid.Row="1"
ItemsSource="{Binding FormattedJsonLines}"
Margin="0"
BorderThickness="0"
Background="Transparent"
Foreground="{DynamicResource Ui.Brush.Text}"
ScrollViewer.CanContentScroll="True"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"
VirtualizingPanel.IsVirtualizing="True"
VirtualizingPanel.VirtualizationMode="Recycling"
VirtualizingPanel.ScrollUnit="Pixel"
SelectionMode="Extended">
<ListBox.Style>
<Style TargetType="ListBox">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding SelectedFilePath}" Value="">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListBox.Style>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Padding" Value="0" />
<Setter Property="Margin" Value="0" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="Focusable" Value="False" />
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding Mode=OneWay}"
BorderThickness="0"
Background="Transparent"
Foreground="{DynamicResource Ui.Brush.Text}"
FontFamily="Consolas"
FontSize="13"
IsReadOnly="True"
IsUndoEnabled="False"
IsInactiveSelectionHighlightEnabled="True"
AcceptsReturn="False"
AcceptsTab="False"
TextWrapping="NoWrap"
HorizontalScrollBarVisibility="Disabled"
VerticalScrollBarVisibility="Disabled" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Border>
</Grid>
</TabItem>
</TabControl>
</Grid>
</TabItem>
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource UiMdlGlyphTab}" Text="&#xE713;" />
<TextBlock Text="Настройки" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
<TabItem.Resources>
<Style x:Key="SettingsGroupBox" TargetType="GroupBox">
<Setter Property="Padding" Value="6,4,6,6" />
<Setter Property="Margin" Value="0" />
<Setter Property="BorderBrush" Value="{DynamicResource Ui.Brush.BorderSubtle}" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="FontSize" Value="11" />
</Style>
<Style x:Key="SettingsLabel" TargetType="TextBlock" BasedOn="{StaticResource UiTextCaption}">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="Margin" Value="0,0,6,0" />
</Style>
<Style x:Key="SettingsTextBox" TargetType="TextBox" BasedOn="{StaticResource UiTextInput}">
<Setter Property="Height" Value="26" />
<Setter Property="MinHeight" Value="26" />
<Setter Property="Padding" Value="6,2" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
<Style x:Key="SettingsComboBox" TargetType="ComboBox" BasedOn="{StaticResource UiCombo}">
<Setter Property="Height" Value="26" />
<Setter Property="MinHeight" Value="26" />
<Setter Property="Padding" Value="6,1" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
<Style x:Key="SettingsButton" TargetType="Button" BasedOn="{StaticResource UiButtonSecondary}">
<Setter Property="Height" Value="28" />
<Setter Property="MinHeight" Value="28" />
<Setter Property="Padding" Value="8,1" />
<Setter Property="FontSize" Value="12" />
</Style>
<Style x:Key="SettingsPrimaryButton" TargetType="Button" BasedOn="{StaticResource UiButtonPrimary}">
<Setter Property="Height" Value="28" />
<Setter Property="MinHeight" Value="28" />
<Setter Property="Padding" Value="8,1" />
<Setter Property="FontSize" Value="12" />
</Style>
<Style x:Key="SettingsDangerButton" TargetType="Button" BasedOn="{StaticResource UiButtonDanger}">
<Setter Property="Height" Value="28" />
<Setter Property="MinHeight" Value="28" />
<Setter Property="Padding" Value="8,1" />
<Setter Property="FontSize" Value="12" />
</Style>
<Style x:Key="SettingsDataGridHeader" TargetType="DataGridColumnHeader" BasedOn="{StaticResource UiDataGridColumnHeader}">
<Setter Property="Height" Value="26" />
<Setter Property="MinHeight" Value="26" />
<Setter Property="Padding" Value="4,2" />
<Setter Property="FontSize" Value="11" />
</Style>
<Style x:Key="SettingsDataGridCell" TargetType="DataGridCell" BasedOn="{StaticResource UiDataGridCell}">
<Setter Property="Padding" Value="4,0" />
<Setter Property="FontSize" Value="11" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
<Style x:Key="SettingsDataGridRow" TargetType="DataGridRow" BasedOn="{StaticResource UiDataGridRow}">
<Setter Property="Height" Value="26" />
<Setter Property="MinHeight" Value="26" />
</Style>
</TabItem.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="6" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2.2*" />
<ColumnDefinition Width="6" />
<ColumnDefinition Width="1.35*" />
<ColumnDefinition Width="6" />
<ColumnDefinition Width="1.15*" />
</Grid.ColumnDefinitions>
<GroupBox Grid.Column="0" Header="Пути" Style="{StaticResource SettingsGroupBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="76" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="4" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="TEMP" Style="{StaticResource SettingsLabel}" />
<Grid Grid.Column="1">
<TextBox x:Name="SettingsTempPathBox"
Style="{StaticResource SettingsTextBox}"
HorizontalAlignment="Stretch"
Text="{Binding ProcessingTempDirectory, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Margin="6,0,0,0"
VerticalAlignment="Center"
IsHitTestVisible="False"
Text="C:\Users\me\AppData\Local\Temp\EmbyToolbox">
<TextBlock.Style>
<Style TargetType="TextBlock" BasedOn="{StaticResource UiTextCaption}">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding Text, ElementName=SettingsTempPathBox}" Value="">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Grid>
<Button Grid.Column="3"
MinWidth="74"
Style="{StaticResource SettingsButton}"
Command="{Binding ChooseTempDirectoryCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE838;" />
<TextBlock Text="Обзор" VerticalAlignment="Center" />
</StackPanel>
</Button>
</Grid>
</GroupBox>
<GroupBox Grid.Column="2" Header="Выполнение" Style="{StaticResource SettingsGroupBox}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="74" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="26" />
<RowDefinition Height="4" />
<RowDefinition Height="26" />
</Grid.RowDefinitions>
<TextBlock Grid.Row="0" Grid.Column="0" Text="Лог" Style="{StaticResource SettingsLabel}" />
<ComboBox Grid.Row="0"
Grid.Column="1"
Style="{StaticResource SettingsComboBox}"
ItemsSource="{Binding LogLevelOptions}"
SelectedItem="{Binding MinimumFileLogLevel, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Grid.Row="2" Grid.Column="0" Text="GPU" Style="{StaticResource SettingsLabel}" />
<ComboBox Grid.Row="2"
Grid.Column="1"
Style="{StaticResource SettingsComboBox}"
ItemsSource="{Binding HardwareAccelerationOptions}"
SelectedItem="{Binding HardwareAcceleration, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</GroupBox>
<GroupBox Grid.Column="4" Header="Уведомления" Style="{StaticResource SettingsGroupBox}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="24" />
<RowDefinition Height="24" />
<RowDefinition Height="4" />
<RowDefinition Height="28" />
</Grid.RowDefinitions>
<CheckBox Grid.Row="0"
Margin="0"
VerticalAlignment="Center"
IsChecked="{Binding NotifyCompletionSoundAfterQueue, Mode=TwoWay}">
<TextBlock Text="Звук после очереди" VerticalAlignment="Center" />
</CheckBox>
<CheckBox Grid.Row="1"
Margin="0"
VerticalAlignment="Center"
IsChecked="{Binding NotifyWindowsToastAfterQueue, Mode=TwoWay}">
<TextBlock Text="Windows toast" VerticalAlignment="Center" />
</CheckBox>
<Button Grid.Row="3"
MinWidth="118"
HorizontalAlignment="Left"
Style="{StaticResource SettingsButton}"
Command="{Binding TestWindowsNotificationCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xEA8F;" />
<TextBlock Text="Тест" VerticalAlignment="Center" />
</StackPanel>
</Button>
</Grid>
</GroupBox>
</Grid>
<Grid Grid.Row="2" Margin="0,0,0,4">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
Text="Профили конвертации"
Style="{StaticResource UiTextH2}"
VerticalAlignment="Center" />
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button Style="{StaticResource SettingsButton}" Margin="0,0,6,0" MinWidth="104" Command="{Binding AddConversionProfileCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE710;" />
<TextBlock Text="Добавить" VerticalAlignment="Center" />
</StackPanel>
</Button>
<Button Style="{StaticResource SettingsDangerButton}" MinWidth="96" Command="{Binding RemoveConversionProfileCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE74D;" />
<TextBlock Text="Удалить" VerticalAlignment="Center" />
</StackPanel>
</Button>
</StackPanel>
</Grid>
<DataGrid Grid.Row="3"
ItemsSource="{Binding ConversionProfiles}"
SelectedItem="{Binding SelectedConversionProfile, Mode=TwoWay}"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
IsReadOnly="False"
Style="{StaticResource UiDataGrid}"
RowStyle="{StaticResource SettingsDataGridRow}"
ColumnHeaderStyle="{StaticResource SettingsDataGridHeader}"
CellStyle="{StaticResource SettingsDataGridCell}"
HeadersVisibility="Column"
GridLinesVisibility="All"
RowHeight="26"
ColumnHeaderHeight="26"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.VerticalScrollBarVisibility="Auto"
MinHeight="0">
<DataGrid.Resources>
<Style TargetType="TextBlock">
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="FontSize" Value="11" />
<Setter Property="TextTrimming" Value="CharacterEllipsis" />
</Style>
<Style TargetType="TextBox" BasedOn="{StaticResource SettingsTextBox}">
<Setter Property="Height" Value="24" />
<Setter Property="MinHeight" Value="24" />
<Setter Property="Padding" Value="4,0" />
</Style>
<Style TargetType="ComboBox" BasedOn="{StaticResource SettingsComboBox}">
<Setter Property="Height" Value="24" />
<Setter Property="MinHeight" Value="24" />
<Setter Property="Padding" Value="4,0" />
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="Профиль" Width="150">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Profile, Mode=OneWay}" VerticalAlignment="Center" Foreground="{DynamicResource Ui.Brush.Text}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsBuiltIn}" Value="True">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
<TextBox Text="{Binding Profile, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
VerticalAlignment="Center">
<TextBox.Style>
<Style TargetType="TextBox" BasedOn="{StaticResource UiTextInput}">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsBuiltIn}" Value="True">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Контейнер" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Container}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ConversionContainerOptions, ElementName=RootWindow}"
SelectedItem="{Binding Container, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Видео" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Video}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ConversionVideoCodecOptions, ElementName=RootWindow}"
SelectedItem="{Binding Video, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Pixel Format" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding PixelFormat}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ConversionPixelFormatOptions, ElementName=RootWindow}"
SelectedItem="{Binding PixelFormat, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Разрешение" Width="145">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Resolution}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ConversionResolutionOptions, ElementName=RootWindow}"
SelectedItem="{Binding Resolution, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="FPS" Width="130">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Fps}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ConversionFpsOptions, ElementName=RootWindow}"
SelectedItem="{Binding Fps, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Аудио" Width="100">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Audio}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ConversionAudioCodecOptions, ElementName=RootWindow}"
SelectedItem="{Binding Audio, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Битрейт" Width="110">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Bitrate}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ConversionBitrateOptions, ElementName=RootWindow}"
SelectedItem="{Binding Bitrate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Видеобитрейт" Width="120">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding VideoBitrateMode}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ConversionVideoBitrateOptions, ElementName=RootWindow}"
SelectedItem="{Binding VideoBitrateMode, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Внешние дорожки" Width="125">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ExternalTracks}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ConversionYesNoOptions, ElementName=RootWindow}"
SelectedItem="{Binding ExternalTracks, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Внешние субтитры" Width="135">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding ExternalSubtitles}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ConversionYesNoOptions, ElementName=RootWindow}"
SelectedItem="{Binding ExternalSubtitles, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Шрифты" Width="85">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Fonts}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ConversionYesNoOptions, ElementName=RootWindow}"
SelectedItem="{Binding Fonts, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<Grid Grid.Row="4" Margin="0,6,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Button Grid.Column="0"
Style="{StaticResource SettingsButton}"
MinWidth="154"
HorizontalAlignment="Left"
Command="{Binding CheckToolsCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE895;" />
<TextBlock Text="Проверить инструменты" VerticalAlignment="Center" />
</StackPanel>
</Button>
<StackPanel Grid.Column="2" Orientation="Horizontal" HorizontalAlignment="Right">
<Button Style="{StaticResource SettingsButton}"
MinWidth="96"
Margin="0,0,8,0"
Command="{Binding CancelSettingsCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphButton}" Text="&#xE711;" />
<TextBlock Text="Отменить" VerticalAlignment="Center" />
</StackPanel>
</Button>
<Button Style="{StaticResource SettingsPrimaryButton}"
MinWidth="98"
Command="{Binding SaveSettingsCommand}">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Style="{StaticResource UiMdlGlyphOnPrimary}" Text="&#xE74E;" />
<TextBlock Text="Сохранить" VerticalAlignment="Center" />
</StackPanel>
</Button>
</StackPanel>
</Grid>
</Grid>
</TabItem>
<TabItem>
<TabItem.Header>
<StackPanel Orientation="Horizontal">
<TextBlock Style="{StaticResource UiMdlGlyphTab}" Text="&#xE81C;" />
<TextBlock Text="Логи" VerticalAlignment="Center" />
</StackPanel>
</TabItem.Header>
<views:LogsView DataContext="{Binding Logs}" />
</TabItem>
</TabControl>
<Border Grid.Row="1"
Margin="0,8,0,0"
Padding="8,4"
BorderBrush="{DynamicResource Ui.Brush.BorderSubtle}"
BorderThickness="1"
Background="{DynamicResource Ui.Brush.Surface}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" MinWidth="100" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0"
VerticalAlignment="Center"
HorizontalAlignment="Left"
Foreground="{DynamicResource Ui.Brush.Text}"
FontWeight="SemiBold"
Text="{Binding AppStatusText}" />
<Grid Grid.Column="1"
Margin="14,0,0,0"
VerticalAlignment="Center">
<TextBlock VerticalAlignment="Center"
Foreground="{DynamicResource Ui.Brush.Caption}"
Text="Нет задач"
Visibility="{Binding ShowLongOperationIdlePlaceholder, Converter={StaticResource BoolToVis}}" />
<Grid VerticalAlignment="Center"
Visibility="{Binding IsLongOperationRunning, Converter={StaticResource BoolToVis}}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" MinWidth="24" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<ProgressBar Grid.Column="0"
Width="210"
Height="10"
MinHeight="8"
MaxHeight="12"
Style="{StaticResource UiProgressBar}"
VerticalAlignment="Center"
Minimum="0"
Maximum="100"
Value="{Binding LongOperationProgressPercent, Mode=OneWay}" />
<TextBlock Grid.Column="1"
Margin="10,0,8,0"
VerticalAlignment="Center"
TextTrimming="CharacterEllipsis"
Foreground="{DynamicResource Ui.Brush.Text}"
Text="{Binding LongOperationProgressText, Mode=OneWay}" />
<TextBlock Grid.Column="2"
VerticalAlignment="Center"
MinWidth="58"
TextAlignment="Right"
Foreground="{DynamicResource Ui.Brush.Text}"
Text="{Binding LongOperationProgressPercent, Mode=OneWay, StringFormat={}{0:F2}%}" />
</Grid>
</Grid>
</Grid>
</Border>
</Grid>
</Window>