1066 lines
78 KiB
XML
1066 lines
78 KiB
XML
<Window xmlns="https://github.com/avaloniaui"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
|
||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||
xmlns:vm="using:OF_DL.Gui.ViewModels"
|
||
x:Class="OF_DL.Gui.Views.MainWindow"
|
||
x:DataType="vm:MainWindowViewModel"
|
||
Width="1320"
|
||
Height="860"
|
||
MinWidth="1150"
|
||
MinHeight="700"
|
||
Title="OF DL"
|
||
Background="#EEF3FB"
|
||
mc:Ignorable="d">
|
||
<Window.Styles>
|
||
<Style Selector="Border.surface">
|
||
<Setter Property="Background" Value="#FFFFFF" />
|
||
<Setter Property="BorderBrush" Value="#DDE5F3" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="CornerRadius" Value="12" />
|
||
</Style>
|
||
|
||
<Style Selector="Button.primary">
|
||
<Setter Property="Background" Value="#2E6EEA" />
|
||
<Setter Property="Foreground" Value="#FFFFFF" />
|
||
<Setter Property="Padding" Value="14,8" />
|
||
<Setter Property="CornerRadius" Value="8" />
|
||
<Setter Property="FontWeight" Value="SemiBold" />
|
||
</Style>
|
||
|
||
<Style Selector="Button.secondary">
|
||
<Setter Property="Background" Value="#FFFFFF" />
|
||
<Setter Property="Foreground" Value="#1F2A44" />
|
||
<Setter Property="Padding" Value="14,8" />
|
||
<Setter Property="CornerRadius" Value="8" />
|
||
<Setter Property="BorderBrush" Value="#CFD9EB" />
|
||
<Setter Property="BorderThickness" Value="1" />
|
||
<Setter Property="FontWeight" Value="SemiBold" />
|
||
</Style>
|
||
</Window.Styles>
|
||
|
||
<Grid RowDefinitions="Auto,Auto,*">
|
||
<Menu Grid.Row="0">
|
||
<MenuItem Header="_File">
|
||
<MenuItem Header="_Logout"
|
||
IsVisible="{Binding IsAuthenticated}"
|
||
Command="{Binding LogoutCommand}" />
|
||
<MenuItem Header="E_xit" Command="{Binding ExitApplicationCommand}" />
|
||
</MenuItem>
|
||
<MenuItem Header="_Edit">
|
||
<MenuItem Header="_Refresh Users" Command="{Binding RefreshUsersCommand}" />
|
||
<MenuItem Header="Edit _Config" Command="{Binding EditConfigCommand}" />
|
||
</MenuItem>
|
||
</Menu>
|
||
|
||
<Border Grid.Row="1"
|
||
Padding="16"
|
||
BorderThickness="0,0,0,1"
|
||
BorderBrush="#CFD9EB"
|
||
Background="#DDEAFF">
|
||
<Grid ColumnDefinitions="*,Auto" VerticalAlignment="Center">
|
||
<TextBlock Grid.Column="0"
|
||
Foreground="#304261"
|
||
FontWeight="SemiBold"
|
||
Text="{Binding AuthenticatedUserDisplay}"
|
||
TextWrapping="Wrap"
|
||
VerticalAlignment="Center" />
|
||
|
||
<StackPanel Grid.Column="1"
|
||
Orientation="Horizontal"
|
||
Spacing="8"
|
||
HorizontalAlignment="Right">
|
||
<Button Classes="secondary"
|
||
IsVisible="{Binding IsAuthenticated}"
|
||
Command="{Binding LogoutCommand}"
|
||
Content="Logout" />
|
||
</StackPanel>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<Grid Grid.Row="2" Margin="14">
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="*" />
|
||
<RowDefinition Height="Auto" />
|
||
</Grid.RowDefinitions>
|
||
|
||
<Grid Grid.Row="0">
|
||
<StackPanel IsVisible="{Binding IsLoadingScreen}"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"
|
||
Spacing="12"
|
||
Width="420">
|
||
<TextBlock HorizontalAlignment="Center"
|
||
FontSize="22"
|
||
FontWeight="SemiBold"
|
||
Text="Loading" />
|
||
<ProgressBar IsIndeterminate="True" Height="14" />
|
||
<TextBlock HorizontalAlignment="Center" Text="{Binding LoadingMessage}" TextWrapping="Wrap" />
|
||
</StackPanel>
|
||
|
||
<ScrollViewer IsVisible="{Binding IsConfigScreen}">
|
||
<StackPanel Spacing="14" Margin="2,0,4,0">
|
||
<TextBlock FontSize="22" FontWeight="SemiBold" Text="Configuration" />
|
||
|
||
<Grid ColumnDefinitions="3*,5*" Margin="0,0,0,2">
|
||
<Border Grid.Column="0" Classes="surface" Padding="12" Margin="0,0,10,0">
|
||
<StackPanel Spacing="8">
|
||
<TextBlock FontSize="16" FontWeight="Bold" Foreground="#1F2A44" Text="External" />
|
||
<StackPanel Orientation="Horizontal" Spacing="6">
|
||
<TextBlock FontWeight="SemiBold"
|
||
Foreground="#1F2A44"
|
||
Text="FFmpeg Path" />
|
||
<Button Width="20"
|
||
Height="20"
|
||
MinWidth="20"
|
||
MinHeight="20"
|
||
Padding="0"
|
||
HorizontalContentAlignment="Center"
|
||
VerticalContentAlignment="Center"
|
||
FontSize="12"
|
||
FontWeight="Bold"
|
||
Background="#EAF0FB"
|
||
BorderBrush="#C5D4EC"
|
||
BorderThickness="1"
|
||
CornerRadius="10"
|
||
Content="?"
|
||
ToolTip.Tip="{Binding FfmpegPathHelpText}" />
|
||
</StackPanel>
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<TextBox Grid.Column="0"
|
||
VerticalAlignment="Center"
|
||
Text="{Binding FfmpegPath}"
|
||
Watermark="Select ffmpeg executable" />
|
||
<Button Grid.Column="1"
|
||
Margin="8,0,0,0"
|
||
Classes="secondary"
|
||
Content="Browse..."
|
||
Click="OnBrowseFfmpegPathClick" />
|
||
</Grid>
|
||
<TextBlock IsVisible="{Binding HasFfmpegPathError}"
|
||
Foreground="#FF5A5A"
|
||
Text="{Binding FfmpegPathError}"
|
||
TextWrapping="Wrap" />
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<Border Grid.Column="1" Classes="surface" Padding="12">
|
||
<StackPanel Spacing="8">
|
||
<TextBlock FontSize="16"
|
||
FontWeight="Bold"
|
||
Foreground="#1F2A44"
|
||
Text="Download Media Types" />
|
||
|
||
<StackPanel Spacing="4">
|
||
<TextBlock FontWeight="SemiBold" Foreground="#1F2A44" Text="Media Types" />
|
||
<ItemsControl ItemsSource="{Binding MediaTypeOptions}">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate>
|
||
<WrapPanel Orientation="Horizontal" />
|
||
</ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:MultiSelectOptionViewModel">
|
||
<StackPanel Margin="0,0,14,6" Orientation="Horizontal" Spacing="6">
|
||
<CheckBox Content="{Binding DisplayName}"
|
||
IsChecked="{Binding IsSelected}" />
|
||
<Button IsVisible="{Binding HasHelpText}"
|
||
Width="18"
|
||
Height="18"
|
||
MinWidth="18"
|
||
MinHeight="18"
|
||
Padding="0"
|
||
HorizontalContentAlignment="Center"
|
||
VerticalContentAlignment="Center"
|
||
FontSize="11"
|
||
FontWeight="Bold"
|
||
Background="#EAF0FB"
|
||
BorderBrush="#C5D4EC"
|
||
BorderThickness="1"
|
||
CornerRadius="9"
|
||
Content="?"
|
||
ToolTip.Tip="{Binding HelpText}" />
|
||
</StackPanel>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock IsVisible="{Binding HasMediaTypesError}"
|
||
Foreground="#FF5A5A"
|
||
Text="{Binding MediaTypesError}"
|
||
TextWrapping="Wrap" />
|
||
</StackPanel>
|
||
|
||
<StackPanel Spacing="4">
|
||
<TextBlock FontWeight="SemiBold" Foreground="#1F2A44" Text="Sources" />
|
||
<ItemsControl ItemsSource="{Binding MediaSourceOptions}">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate>
|
||
<WrapPanel Orientation="Horizontal" />
|
||
</ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:MultiSelectOptionViewModel">
|
||
<StackPanel Margin="0,0,14,6" Orientation="Horizontal" Spacing="6">
|
||
<CheckBox Content="{Binding DisplayName}"
|
||
IsChecked="{Binding IsSelected}" />
|
||
<Button IsVisible="{Binding HasHelpText}"
|
||
Width="18"
|
||
Height="18"
|
||
MinWidth="18"
|
||
MinHeight="18"
|
||
Padding="0"
|
||
HorizontalContentAlignment="Center"
|
||
VerticalContentAlignment="Center"
|
||
FontSize="11"
|
||
FontWeight="Bold"
|
||
Background="#EAF0FB"
|
||
BorderBrush="#C5D4EC"
|
||
BorderThickness="1"
|
||
CornerRadius="9"
|
||
Content="?"
|
||
ToolTip.Tip="{Binding HelpText}" />
|
||
</StackPanel>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<TextBlock IsVisible="{Binding HasMediaSourcesError}"
|
||
Foreground="#FF5A5A"
|
||
Text="{Binding MediaSourcesError}"
|
||
TextWrapping="Wrap" />
|
||
</StackPanel>
|
||
</StackPanel>
|
||
</Border>
|
||
</Grid>
|
||
|
||
<Border Classes="surface" Padding="12">
|
||
<StackPanel Spacing="14">
|
||
<Grid ColumnDefinitions="*,*">
|
||
<ItemsControl x:Name="LeftConfigCategories"
|
||
Grid.Column="0"
|
||
Margin="0,0,6,0"
|
||
ItemsSource="{Binding ConfigCategoriesLeft}">
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:ConfigCategoryViewModel">
|
||
<Border Classes="surface"
|
||
Margin="0,0,0,12"
|
||
HorizontalAlignment="Stretch"
|
||
Padding="10">
|
||
<StackPanel Spacing="8">
|
||
<TextBlock FontSize="16"
|
||
FontWeight="Bold"
|
||
Foreground="#1F2A44"
|
||
Text="{Binding CategoryName}" />
|
||
<StackPanel IsVisible="{Binding IsDownloadBehavior}"
|
||
Spacing="4"
|
||
Margin="0,0,0,10"
|
||
x:CompileBindings="False">
|
||
<StackPanel Orientation="Horizontal" Spacing="6">
|
||
<TextBlock FontWeight="SemiBold"
|
||
Foreground="#1F2A44"
|
||
Text="Download Path" />
|
||
<Button Width="20"
|
||
Height="20"
|
||
MinWidth="20"
|
||
MinHeight="20"
|
||
Padding="0"
|
||
HorizontalContentAlignment="Center"
|
||
VerticalContentAlignment="Center"
|
||
FontSize="12"
|
||
FontWeight="Bold"
|
||
Background="#EAF0FB"
|
||
BorderBrush="#C5D4EC"
|
||
BorderThickness="1"
|
||
CornerRadius="10"
|
||
Content="?"
|
||
ToolTip.Tip="{Binding DataContext.DownloadPathHelpText, RelativeSource={RelativeSource AncestorType=Window}}" />
|
||
</StackPanel>
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<TextBox Grid.Column="0"
|
||
VerticalAlignment="Center"
|
||
HorizontalAlignment="Stretch"
|
||
Text="{Binding DataContext.DownloadPath, RelativeSource={RelativeSource AncestorType=Window}}"
|
||
Watermark="Select download folder" />
|
||
<Button Grid.Column="1"
|
||
Margin="8,0,0,0"
|
||
Classes="secondary"
|
||
Content="Browse..."
|
||
Click="OnBrowseDownloadPathClick" />
|
||
</Grid>
|
||
<TextBlock
|
||
IsVisible="{Binding DataContext.HasDownloadPathError, RelativeSource={RelativeSource AncestorType=Window}}"
|
||
Foreground="#FF5A5A"
|
||
Text="{Binding DataContext.DownloadPathError, RelativeSource={RelativeSource AncestorType=Window}}"
|
||
TextWrapping="Wrap" />
|
||
</StackPanel>
|
||
<StackPanel IsVisible="{Binding HasSpecificDateFilterFields}"
|
||
Margin="0,0,0,6"
|
||
Spacing="6"
|
||
HorizontalAlignment="Stretch"
|
||
x:CompileBindings="False">
|
||
<StackPanel Orientation="Horizontal"
|
||
Spacing="6"
|
||
VerticalAlignment="Center">
|
||
<TextBlock FontWeight="SemiBold"
|
||
Foreground="#1F2A44"
|
||
Text="Download Posts from Specific Dates"
|
||
VerticalAlignment="Center"
|
||
TextWrapping="Wrap" />
|
||
<Button IsVisible="{Binding HasSpecificDateFilterHelpText}"
|
||
Width="20"
|
||
Height="20"
|
||
MinWidth="20"
|
||
MinHeight="20"
|
||
Padding="0"
|
||
HorizontalContentAlignment="Center"
|
||
VerticalContentAlignment="Center"
|
||
FontSize="12"
|
||
FontWeight="Bold"
|
||
Background="#EAF0FB"
|
||
BorderBrush="#C5D4EC"
|
||
BorderThickness="1"
|
||
CornerRadius="10"
|
||
Content="?"
|
||
ToolTip.Tip="{Binding SpecificDateFilterHelpText}" />
|
||
</StackPanel>
|
||
<Grid ColumnDefinitions="Auto,Auto,Auto"
|
||
HorizontalAlignment="Left">
|
||
<CheckBox Grid.Column="0"
|
||
Content="Enable"
|
||
VerticalAlignment="Center"
|
||
Margin="0,0,8,0"
|
||
IsChecked="{Binding DownloadOnlySpecificDatesField.BoolValue}" />
|
||
<ComboBox Grid.Column="1"
|
||
Width="140"
|
||
VerticalAlignment="Center"
|
||
Margin="0,0,8,0"
|
||
IsEnabled="{Binding DownloadOnlySpecificDatesField.BoolValue}"
|
||
ItemsSource="{Binding DownloadDateSelectionField.EnumOptions}"
|
||
SelectedItem="{Binding DownloadDateSelectionField.EnumValue}" />
|
||
<DatePicker Grid.Column="2"
|
||
MinWidth="200"
|
||
VerticalAlignment="Center"
|
||
IsEnabled="{Binding DownloadOnlySpecificDatesField.BoolValue}"
|
||
SelectedDate="{Binding CustomDateField.DateValue}" />
|
||
</Grid>
|
||
</StackPanel>
|
||
<Grid IsVisible="{Binding HasRateLimitFields}"
|
||
Margin="0,0,0,10"
|
||
ColumnDefinitions="190,*"
|
||
x:CompileBindings="False">
|
||
<Grid Grid.Column="0"
|
||
ColumnDefinitions="*,Auto"
|
||
Margin="0,6,10,0"
|
||
ClipToBounds="True">
|
||
<TextBlock Grid.Column="0"
|
||
FontWeight="SemiBold"
|
||
Foreground="#1F2A44"
|
||
Text="Limit Download Rate"
|
||
TextWrapping="Wrap"
|
||
VerticalAlignment="Top" />
|
||
<Button Grid.Column="1"
|
||
IsVisible="{Binding HasRateLimitHelpText}"
|
||
Width="20"
|
||
Height="20"
|
||
MinWidth="20"
|
||
MinHeight="20"
|
||
Margin="6,0,0,0"
|
||
Padding="0"
|
||
VerticalAlignment="Top"
|
||
HorizontalAlignment="Right"
|
||
HorizontalContentAlignment="Center"
|
||
VerticalContentAlignment="Center"
|
||
FontSize="12"
|
||
FontWeight="Bold"
|
||
Background="#EAF0FB"
|
||
BorderBrush="#C5D4EC"
|
||
BorderThickness="1"
|
||
CornerRadius="10"
|
||
Content="?"
|
||
ToolTip.Tip="{Binding RateLimitHelpText}" />
|
||
</Grid>
|
||
<StackPanel Grid.Column="1"
|
||
Orientation="Horizontal"
|
||
Spacing="8"
|
||
VerticalAlignment="Center">
|
||
<CheckBox Content="Enable"
|
||
IsChecked="{Binding LimitDownloadRateField.BoolValue}" />
|
||
<NumericUpDown MinWidth="120"
|
||
IsEnabled="{Binding LimitDownloadRateField.BoolValue}"
|
||
Value="{Binding DownloadLimitInMbPerSecField.NumericValue}"
|
||
Increment="1"
|
||
FormatString="N0" />
|
||
<TextBlock Text="Mbps"
|
||
Foreground="#4A5B78"
|
||
VerticalAlignment="Center" />
|
||
</StackPanel>
|
||
</Grid>
|
||
<Grid IsVisible="{Binding HasFolderStructureFields}"
|
||
Margin="0,0,0,10"
|
||
ColumnDefinitions="190,*"
|
||
x:CompileBindings="False">
|
||
<Grid Grid.Column="0"
|
||
ColumnDefinitions="*,Auto"
|
||
Margin="0,6,10,0"
|
||
ClipToBounds="True">
|
||
<TextBlock Grid.Column="0"
|
||
FontWeight="SemiBold"
|
||
Foreground="#1F2A44"
|
||
Text="Create Separate Folders For Each"
|
||
TextWrapping="Wrap"
|
||
VerticalAlignment="Top" />
|
||
<Button Grid.Column="1"
|
||
IsVisible="{Binding HasFolderStructureHelpText}"
|
||
Width="20"
|
||
Height="20"
|
||
MinWidth="20"
|
||
MinHeight="20"
|
||
Margin="6,0,0,0"
|
||
Padding="0"
|
||
VerticalAlignment="Top"
|
||
HorizontalAlignment="Right"
|
||
HorizontalContentAlignment="Center"
|
||
VerticalContentAlignment="Center"
|
||
FontSize="12"
|
||
FontWeight="Bold"
|
||
Background="#EAF0FB"
|
||
BorderBrush="#C5D4EC"
|
||
BorderThickness="1"
|
||
CornerRadius="10"
|
||
Content="?"
|
||
ToolTip.Tip="{Binding FolderStructureHelpText}" />
|
||
</Grid>
|
||
<StackPanel Grid.Column="1" Spacing="6">
|
||
<CheckBox Content="Paid Posts"
|
||
IsChecked="{Binding FolderPerPaidPostField.BoolValue}" />
|
||
<CheckBox Content="Free Posts"
|
||
IsChecked="{Binding FolderPerPostField.BoolValue}" />
|
||
<CheckBox Content="Paid Messages"
|
||
IsChecked="{Binding FolderPerPaidMessageField.BoolValue}" />
|
||
<CheckBox Content="Free Messages"
|
||
IsChecked="{Binding FolderPerMessageField.BoolValue}" />
|
||
</StackPanel>
|
||
</Grid>
|
||
<ItemsControl ItemsSource="{Binding Fields}">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate>
|
||
<StackPanel Spacing="10" />
|
||
</ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:ConfigFieldViewModel">
|
||
<Grid Margin="0" ColumnDefinitions="190,*">
|
||
<Grid Grid.Column="0"
|
||
ColumnDefinitions="*,Auto"
|
||
Margin="0,6,10,0"
|
||
ClipToBounds="True">
|
||
<TextBlock Grid.Column="0"
|
||
FontWeight="SemiBold"
|
||
Foreground="#1F2A44"
|
||
Text="{Binding DisplayName}"
|
||
TextWrapping="Wrap"
|
||
VerticalAlignment="Top" />
|
||
<Button Grid.Column="1"
|
||
IsVisible="{Binding HasHelpText}"
|
||
Width="20"
|
||
Height="20"
|
||
MinWidth="20"
|
||
MinHeight="20"
|
||
Margin="6,0,0,0"
|
||
Padding="0"
|
||
VerticalAlignment="Top"
|
||
HorizontalAlignment="Right"
|
||
HorizontalContentAlignment="Center"
|
||
VerticalContentAlignment="Center"
|
||
FontSize="12"
|
||
FontWeight="Bold"
|
||
Background="#EAF0FB"
|
||
BorderBrush="#C5D4EC"
|
||
BorderThickness="1"
|
||
CornerRadius="10"
|
||
Content="?"
|
||
ToolTip.Tip="{Binding HelpText}" />
|
||
</Grid>
|
||
<StackPanel Grid.Column="1" Spacing="4">
|
||
<CheckBox IsVisible="{Binding IsBoolean}"
|
||
IsChecked="{Binding BoolValue}" />
|
||
|
||
<ComboBox IsVisible="{Binding IsEnum}"
|
||
HorizontalAlignment="Left"
|
||
MinWidth="160"
|
||
ItemsSource="{Binding EnumOptions}"
|
||
SelectedItem="{Binding EnumValue}" />
|
||
|
||
<DatePicker IsVisible="{Binding IsDate}"
|
||
HorizontalAlignment="Stretch"
|
||
SelectedDate="{Binding DateValue}" />
|
||
|
||
<NumericUpDown
|
||
IsVisible="{Binding IsNumericAndNotTimeout}"
|
||
HorizontalAlignment="Left"
|
||
MinWidth="120"
|
||
Value="{Binding NumericValue}"
|
||
Increment="1"
|
||
FormatString="N0" />
|
||
|
||
<StackPanel IsVisible="{Binding IsTimeoutField}"
|
||
Orientation="Horizontal"
|
||
Spacing="8">
|
||
<NumericUpDown MinWidth="120"
|
||
Minimum="-1"
|
||
Value="{Binding NumericValue}"
|
||
Increment="1"
|
||
FormatString="N0" />
|
||
<TextBlock Text="seconds"
|
||
Foreground="#4A5B78"
|
||
VerticalAlignment="Center" />
|
||
</StackPanel>
|
||
|
||
<TextBox IsVisible="{Binding IsRegularTextInput}"
|
||
HorizontalAlignment="Stretch"
|
||
AcceptsReturn="{Binding IsMultiline}"
|
||
TextWrapping="Wrap"
|
||
MinHeight="{Binding TextBoxMinHeight}"
|
||
Text="{Binding TextValue}" />
|
||
|
||
<Grid IsVisible="{Binding IsIgnoredUsersListField}"
|
||
ColumnDefinitions="*,Auto"
|
||
x:CompileBindings="False">
|
||
<ComboBox Grid.Column="0"
|
||
HorizontalAlignment="Stretch"
|
||
ItemsSource="{Binding IgnoredUsersListOptions}"
|
||
SelectedItem="{Binding SelectedIgnoredUsersListOption}">
|
||
<ComboBox.ItemTemplate>
|
||
<DataTemplate
|
||
x:DataType="vm:ConfigSelectOptionViewModel">
|
||
<TextBlock
|
||
Text="{Binding DisplayName}" />
|
||
</DataTemplate>
|
||
</ComboBox.ItemTemplate>
|
||
</ComboBox>
|
||
<Button Grid.Column="1"
|
||
Width="34"
|
||
Height="34"
|
||
MinWidth="34"
|
||
MinHeight="34"
|
||
Margin="8,0,0,0"
|
||
Padding="0"
|
||
FontSize="16"
|
||
FontWeight="SemiBold"
|
||
HorizontalContentAlignment="Center"
|
||
VerticalContentAlignment="Center"
|
||
Background="#EAF0FB"
|
||
BorderBrush="#C5D4EC"
|
||
BorderThickness="1"
|
||
CornerRadius="8"
|
||
Content="⟳"
|
||
ToolTip.Tip="Refresh list names from OnlyFans"
|
||
Command="{Binding DataContext.RefreshIgnoredUsersListsCommand, RelativeSource={RelativeSource AncestorType=Window}}"
|
||
CommandParameter="{Binding}" />
|
||
</Grid>
|
||
|
||
<StackPanel
|
||
IsVisible="{Binding IsFileNameFormatField}"
|
||
Spacing="6">
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<ComboBox Grid.Column="0"
|
||
HorizontalAlignment="Stretch"
|
||
ItemsSource="{Binding AvailableFileNameVariables}"
|
||
SelectedItem="{Binding SelectedFileNameVariable}" />
|
||
<Button Grid.Column="1"
|
||
Margin="8,0,0,0"
|
||
Classes="secondary"
|
||
Content="Insert Variable"
|
||
Command="{Binding InsertSelectedFileNameVariableCommand}" />
|
||
</Grid>
|
||
|
||
<Border Padding="8"
|
||
Background="#F5F8FE"
|
||
BorderBrush="#D8E3F4"
|
||
BorderThickness="1"
|
||
CornerRadius="8">
|
||
<ItemsControl
|
||
ItemsSource="{Binding FileNameFormatSegments}">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate>
|
||
<WrapPanel
|
||
Orientation="Horizontal" />
|
||
</ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate
|
||
x:DataType="vm:FileNameFormatSegmentViewModel">
|
||
<TextBlock
|
||
Text="{Binding Text}"
|
||
Foreground="{Binding Foreground}"
|
||
FontFamily="Consolas"
|
||
TextWrapping="Wrap" />
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
</Border>
|
||
|
||
<TextBlock
|
||
IsVisible="{Binding HasUnknownFileNameVariables}"
|
||
Foreground="#FF5A5A"
|
||
Text="{Binding UnknownFileNameVariablesMessage}"
|
||
TextWrapping="Wrap" />
|
||
|
||
</StackPanel>
|
||
|
||
<StackPanel IsVisible="{Binding IsCreatorConfigsField}"
|
||
Spacing="6"
|
||
x:CompileBindings="False">
|
||
<Button Classes="secondary"
|
||
HorizontalAlignment="Left"
|
||
Command="{Binding DataContext.AddCreatorConfigCommand, RelativeSource={RelativeSource AncestorType=Window}}">
|
||
<StackPanel Orientation="Horizontal" Spacing="6">
|
||
<TextBlock Text="+" FontWeight="Bold" />
|
||
<TextBlock Text="Add Creator" />
|
||
</StackPanel>
|
||
</Button>
|
||
|
||
<ItemsControl ItemsSource="{Binding DataContext.CreatorConfigEditor.Rows, RelativeSource={RelativeSource AncestorType=Window}}">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate>
|
||
<StackPanel Spacing="6" />
|
||
</ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:CreatorConfigRowViewModel">
|
||
<Border Background="#F5F8FE"
|
||
BorderBrush="#D8E3F4"
|
||
BorderThickness="1"
|
||
CornerRadius="8"
|
||
Padding="10">
|
||
<Grid ColumnDefinitions="*,Auto,Auto">
|
||
<TextBlock Grid.Column="0"
|
||
FontWeight="SemiBold"
|
||
Foreground="#1F2A44"
|
||
Text="{Binding Username}"
|
||
VerticalAlignment="Center" />
|
||
<Button Grid.Column="1"
|
||
Width="28"
|
||
Height="28"
|
||
MinWidth="28"
|
||
MinHeight="28"
|
||
Margin="0,0,6,0"
|
||
Padding="0"
|
||
FontSize="14"
|
||
FontWeight="SemiBold"
|
||
HorizontalContentAlignment="Center"
|
||
VerticalContentAlignment="Center"
|
||
Background="#EAF0FB"
|
||
BorderBrush="#C5D4EC"
|
||
BorderThickness="1"
|
||
CornerRadius="6"
|
||
Content="✎"
|
||
ToolTip.Tip="Edit"
|
||
Command="{Binding EditCommand}" />
|
||
<Button Grid.Column="2"
|
||
Width="28"
|
||
Height="28"
|
||
MinWidth="28"
|
||
MinHeight="28"
|
||
Padding="0"
|
||
FontSize="14"
|
||
FontWeight="SemiBold"
|
||
HorizontalContentAlignment="Center"
|
||
VerticalContentAlignment="Center"
|
||
Background="#FFE8E8"
|
||
BorderBrush="#E8C5C5"
|
||
BorderThickness="1"
|
||
CornerRadius="6"
|
||
Content="×"
|
||
ToolTip.Tip="Delete"
|
||
Command="{Binding DeleteCommand}" />
|
||
</Grid>
|
||
</Border>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
</StackPanel>
|
||
|
||
<TextBlock IsVisible="{Binding HasError}"
|
||
Foreground="#FF5A5A"
|
||
Text="{Binding ErrorMessage}"
|
||
TextWrapping="Wrap" />
|
||
</StackPanel>
|
||
</Grid>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
</StackPanel>
|
||
</Border>
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
<ItemsControl Grid.Column="1"
|
||
Margin="6,0,0,0"
|
||
ItemsSource="{Binding ConfigCategoriesRight}"
|
||
ItemTemplate="{Binding ItemTemplate, ElementName=LeftConfigCategories}" />
|
||
</Grid>
|
||
</StackPanel>
|
||
</Border>
|
||
|
||
<StackPanel Orientation="Horizontal" Spacing="10" HorizontalAlignment="Right">
|
||
<Button Content="Save Configuration"
|
||
Classes="primary"
|
||
Command="{Binding SaveConfigCommand}" />
|
||
<Button Content="Cancel"
|
||
Classes="secondary"
|
||
Command="{Binding CancelConfigCommand}" />
|
||
</StackPanel>
|
||
</StackPanel>
|
||
</ScrollViewer>
|
||
|
||
<StackPanel IsVisible="{Binding IsAuthScreen}"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"
|
||
Width="640"
|
||
Spacing="14">
|
||
<TextBlock HorizontalAlignment="Center"
|
||
FontSize="24"
|
||
FontWeight="SemiBold"
|
||
Text="Authentication Required" />
|
||
<TextBlock TextWrapping="Wrap"
|
||
TextAlignment="Center"
|
||
HorizontalAlignment="Center"
|
||
Text="{Binding AuthScreenMessage}" />
|
||
<StackPanel Orientation="Horizontal" Spacing="10" HorizontalAlignment="Center">
|
||
<Button Content="Login with Browser"
|
||
Classes="primary"
|
||
Command="{Binding StartBrowserLoginCommand}" />
|
||
</StackPanel>
|
||
</StackPanel>
|
||
|
||
<Grid IsVisible="{Binding IsUserSelectionScreen}" RowDefinitions="Auto,*,Auto" ColumnDefinitions="2*,3*">
|
||
<Border Grid.Row="0"
|
||
Grid.ColumnSpan="2"
|
||
Padding="10"
|
||
Margin="0,0,0,10"
|
||
Classes="surface">
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<StackPanel Grid.Column="0"
|
||
Orientation="Horizontal"
|
||
Spacing="8"
|
||
VerticalAlignment="Center">
|
||
<Button Content="Download Selected"
|
||
Classes="primary"
|
||
Command="{Binding DownloadSelectedCommand}" />
|
||
<Button Content="Download Purchased Tab"
|
||
Classes="secondary"
|
||
Command="{Binding DownloadPurchasedTabCommand}" />
|
||
</StackPanel>
|
||
<Button Grid.Column="1"
|
||
IsVisible="{Binding IsDownloading}"
|
||
Classes="primary"
|
||
Background="#D84E4E"
|
||
Command="{Binding StopWorkCommand}"
|
||
Content="Stop" />
|
||
</Grid>
|
||
</Border>
|
||
|
||
<Border Grid.Row="1"
|
||
Grid.Column="0"
|
||
Margin="0,0,8,0"
|
||
Padding="10"
|
||
Classes="surface">
|
||
<Grid RowDefinitions="Auto,*">
|
||
<Grid Grid.Row="0" ColumnDefinitions="*,Auto" VerticalAlignment="Center">
|
||
<StackPanel Grid.Column="0" Spacing="3">
|
||
<TextBlock FontWeight="SemiBold" Foreground="#1F2A44" Text="Users" />
|
||
<CheckBox IsThreeState="True"
|
||
IsChecked="{Binding AllUsersSelected}"
|
||
Content="{Binding SelectedUsersSummary}" />
|
||
</StackPanel>
|
||
<ComboBox Grid.Column="1"
|
||
Width="280"
|
||
VerticalAlignment="Center"
|
||
PlaceholderText="Select a list of users"
|
||
ItemsSource="{Binding UserLists}"
|
||
SelectedItem="{Binding SelectedListName}" />
|
||
</Grid>
|
||
<ListBox Grid.Row="1" Margin="0,8,0,0" ItemsSource="{Binding AvailableUsers}">
|
||
<ListBox.Styles>
|
||
<Style Selector="ListBoxItem">
|
||
<Setter Property="Padding" Value="0" />
|
||
</Style>
|
||
</ListBox.Styles>
|
||
<ListBox.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:SelectableUserViewModel">
|
||
<CheckBox Content="{Binding Username}" IsChecked="{Binding IsSelected}" />
|
||
</DataTemplate>
|
||
</ListBox.ItemTemplate>
|
||
</ListBox>
|
||
</Grid>
|
||
</Border>
|
||
|
||
<Border Grid.Row="1"
|
||
Grid.Column="1"
|
||
Margin="8,0,0,0"
|
||
Padding="10"
|
||
Classes="surface">
|
||
<Grid RowDefinitions="Auto,*">
|
||
<TextBlock Grid.Row="0" FontWeight="SemiBold" Foreground="#1F2A44" Text="Activity Log" />
|
||
<ListBox Grid.Row="1" Margin="0,8,0,0" ItemsSource="{Binding ActivityLog}" />
|
||
</Grid>
|
||
</Border>
|
||
|
||
<Border Grid.Row="2"
|
||
Grid.ColumnSpan="2"
|
||
Margin="0,10,0,0"
|
||
Padding="10"
|
||
Classes="surface"
|
||
IsVisible="{Binding IsDownloadProgressVisible}">
|
||
<StackPanel Spacing="8">
|
||
<TextBlock FontWeight="SemiBold" Foreground="#1F2A44"
|
||
Text="{Binding DownloadProgressDescription}" />
|
||
<ProgressBar IsIndeterminate="{Binding IsDownloadProgressIndeterminate}"
|
||
Minimum="0"
|
||
Maximum="{Binding DownloadProgressMaximum}"
|
||
Value="{Binding DownloadProgressValue}" />
|
||
</StackPanel>
|
||
</Border>
|
||
</Grid>
|
||
|
||
<StackPanel IsVisible="{Binding IsErrorScreen}"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"
|
||
Width="640"
|
||
Spacing="14">
|
||
<TextBlock HorizontalAlignment="Center"
|
||
FontSize="24"
|
||
FontWeight="SemiBold"
|
||
Text="Startup Error" />
|
||
<TextBlock TextWrapping="Wrap" Text="{Binding ErrorMessage}" />
|
||
<StackPanel Orientation="Horizontal" Spacing="10" HorizontalAlignment="Center">
|
||
<Button Content="Retry Startup" Classes="primary" Command="{Binding RetryStartupCommand}" />
|
||
</StackPanel>
|
||
</StackPanel>
|
||
</Grid>
|
||
</Grid>
|
||
|
||
<!-- Modal Overlay -->
|
||
<Grid Grid.RowSpan="3"
|
||
IsVisible="{Binding CreatorConfigEditor.ModalViewModel.IsOpen}"
|
||
Background="#80000000"
|
||
ZIndex="1000">
|
||
<Border Background="#FFFFFF"
|
||
BorderBrush="#DDE5F3"
|
||
BorderThickness="1"
|
||
CornerRadius="12"
|
||
Padding="24"
|
||
Width="700"
|
||
MaxHeight="750"
|
||
HorizontalAlignment="Center"
|
||
VerticalAlignment="Center"
|
||
BoxShadow="0 8 32 0 #26000000">
|
||
<ScrollViewer DataContext="{Binding CreatorConfigEditor.ModalViewModel}">
|
||
<StackPanel Spacing="14" Margin="8,4,8,4" x:DataType="vm:CreatorConfigModalViewModel">
|
||
<TextBlock FontSize="18"
|
||
FontWeight="SemiBold"
|
||
Foreground="#1F2A44"
|
||
Text="{Binding DialogTitle}" />
|
||
|
||
<StackPanel Spacing="6">
|
||
<TextBlock FontWeight="SemiBold" Foreground="#1F2A44" Text="Username" />
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<AutoCompleteBox Grid.Column="0"
|
||
Text="{Binding Username}"
|
||
ItemsSource="{Binding AvailableUsers}"
|
||
Watermark="Enter or select username"
|
||
FilterMode="Contains" />
|
||
</Grid>
|
||
<TextBlock IsVisible="{Binding HasUsernameError}"
|
||
Foreground="#FF5A5A"
|
||
Text="{Binding UsernameError}"
|
||
TextWrapping="Wrap" />
|
||
</StackPanel>
|
||
|
||
<TextBlock FontWeight="SemiBold"
|
||
Foreground="#4A5B78"
|
||
Text="Filename Formats (leave blank to use global defaults)" />
|
||
|
||
<StackPanel Spacing="8">
|
||
<TextBlock FontWeight="SemiBold" Foreground="#1F2A44" Text="Paid Post Filename Format" />
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<ComboBox Grid.Column="0"
|
||
HorizontalAlignment="Stretch"
|
||
ItemsSource="{Binding PaidPostVariables}"
|
||
SelectedItem="{Binding SelectedPaidPostVariable}" />
|
||
<Button Grid.Column="1"
|
||
Margin="8,0,0,0"
|
||
Classes="secondary"
|
||
Content="Insert"
|
||
Command="{Binding InsertPaidPostVariableCommand}" />
|
||
</Grid>
|
||
<TextBox Text="{Binding PaidPostFileNameFormat}"
|
||
Watermark="Optional: override global paid post format" />
|
||
<Border Padding="8"
|
||
Background="#F5F8FE"
|
||
BorderBrush="#D8E3F4"
|
||
BorderThickness="1"
|
||
CornerRadius="8">
|
||
<ItemsControl ItemsSource="{Binding PaidPostSegments}">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate>
|
||
<WrapPanel Orientation="Horizontal" />
|
||
</ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:FileNameFormatSegmentViewModel">
|
||
<TextBlock Text="{Binding Text}"
|
||
Foreground="{Binding Foreground}"
|
||
FontFamily="Consolas"
|
||
TextWrapping="Wrap" />
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
</Border>
|
||
<TextBlock IsVisible="{Binding HasUnknownPaidPostVariables}"
|
||
Foreground="#FF5A5A"
|
||
Text="{Binding UnknownPaidPostVariablesMessage}"
|
||
TextWrapping="Wrap" />
|
||
</StackPanel>
|
||
|
||
<StackPanel Spacing="8">
|
||
<TextBlock FontWeight="SemiBold" Foreground="#1F2A44" Text="Post Filename Format" />
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<ComboBox Grid.Column="0"
|
||
HorizontalAlignment="Stretch"
|
||
ItemsSource="{Binding PostVariables}"
|
||
SelectedItem="{Binding SelectedPostVariable}" />
|
||
<Button Grid.Column="1"
|
||
Margin="8,0,0,0"
|
||
Classes="secondary"
|
||
Content="Insert"
|
||
Command="{Binding InsertPostVariableCommand}" />
|
||
</Grid>
|
||
<TextBox Text="{Binding PostFileNameFormat}"
|
||
Watermark="Optional: override global post format" />
|
||
<Border Padding="8"
|
||
Background="#F5F8FE"
|
||
BorderBrush="#D8E3F4"
|
||
BorderThickness="1"
|
||
CornerRadius="8">
|
||
<ItemsControl ItemsSource="{Binding PostSegments}">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate>
|
||
<WrapPanel Orientation="Horizontal" />
|
||
</ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:FileNameFormatSegmentViewModel">
|
||
<TextBlock Text="{Binding Text}"
|
||
Foreground="{Binding Foreground}"
|
||
FontFamily="Consolas"
|
||
TextWrapping="Wrap" />
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
</Border>
|
||
<TextBlock IsVisible="{Binding HasUnknownPostVariables}"
|
||
Foreground="#FF5A5A"
|
||
Text="{Binding UnknownPostVariablesMessage}"
|
||
TextWrapping="Wrap" />
|
||
</StackPanel>
|
||
|
||
<StackPanel Spacing="8">
|
||
<TextBlock FontWeight="SemiBold" Foreground="#1F2A44" Text="Paid Message Filename Format" />
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<ComboBox Grid.Column="0"
|
||
HorizontalAlignment="Stretch"
|
||
ItemsSource="{Binding PaidMessageVariables}"
|
||
SelectedItem="{Binding SelectedPaidMessageVariable}" />
|
||
<Button Grid.Column="1"
|
||
Margin="8,0,0,0"
|
||
Classes="secondary"
|
||
Content="Insert"
|
||
Command="{Binding InsertPaidMessageVariableCommand}" />
|
||
</Grid>
|
||
<TextBox Text="{Binding PaidMessageFileNameFormat}"
|
||
Watermark="Optional: override global paid message format" />
|
||
<Border Padding="8"
|
||
Background="#F5F8FE"
|
||
BorderBrush="#D8E3F4"
|
||
BorderThickness="1"
|
||
CornerRadius="8">
|
||
<ItemsControl ItemsSource="{Binding PaidMessageSegments}">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate>
|
||
<WrapPanel Orientation="Horizontal" />
|
||
</ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:FileNameFormatSegmentViewModel">
|
||
<TextBlock Text="{Binding Text}"
|
||
Foreground="{Binding Foreground}"
|
||
FontFamily="Consolas"
|
||
TextWrapping="Wrap" />
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
</Border>
|
||
<TextBlock IsVisible="{Binding HasUnknownPaidMessageVariables}"
|
||
Foreground="#FF5A5A"
|
||
Text="{Binding UnknownPaidMessageVariablesMessage}"
|
||
TextWrapping="Wrap" />
|
||
</StackPanel>
|
||
|
||
<StackPanel Spacing="8">
|
||
<TextBlock FontWeight="SemiBold" Foreground="#1F2A44" Text="Message Filename Format" />
|
||
<Grid ColumnDefinitions="*,Auto">
|
||
<ComboBox Grid.Column="0"
|
||
HorizontalAlignment="Stretch"
|
||
ItemsSource="{Binding MessageVariables}"
|
||
SelectedItem="{Binding SelectedMessageVariable}" />
|
||
<Button Grid.Column="1"
|
||
Margin="8,0,0,0"
|
||
Classes="secondary"
|
||
Content="Insert"
|
||
Command="{Binding InsertMessageVariableCommand}" />
|
||
</Grid>
|
||
<TextBox Text="{Binding MessageFileNameFormat}"
|
||
Watermark="Optional: override global message format" />
|
||
<Border Padding="8"
|
||
Background="#F5F8FE"
|
||
BorderBrush="#D8E3F4"
|
||
BorderThickness="1"
|
||
CornerRadius="8">
|
||
<ItemsControl ItemsSource="{Binding MessageSegments}">
|
||
<ItemsControl.ItemsPanel>
|
||
<ItemsPanelTemplate>
|
||
<WrapPanel Orientation="Horizontal" />
|
||
</ItemsPanelTemplate>
|
||
</ItemsControl.ItemsPanel>
|
||
<ItemsControl.ItemTemplate>
|
||
<DataTemplate x:DataType="vm:FileNameFormatSegmentViewModel">
|
||
<TextBlock Text="{Binding Text}"
|
||
Foreground="{Binding Foreground}"
|
||
FontFamily="Consolas"
|
||
TextWrapping="Wrap" />
|
||
</DataTemplate>
|
||
</ItemsControl.ItemTemplate>
|
||
</ItemsControl>
|
||
</Border>
|
||
<TextBlock IsVisible="{Binding HasUnknownMessageVariables}"
|
||
Foreground="#FF5A5A"
|
||
Text="{Binding UnknownMessageVariablesMessage}"
|
||
TextWrapping="Wrap" />
|
||
</StackPanel>
|
||
|
||
<StackPanel Orientation="Horizontal" Spacing="10" HorizontalAlignment="Right">
|
||
<Button Content="Cancel"
|
||
Classes="secondary"
|
||
Command="{Binding CancelCommand}" />
|
||
<Button Content="Confirm"
|
||
Classes="primary"
|
||
Command="{Binding ConfirmCommand}" />
|
||
</StackPanel>
|
||
</StackPanel>
|
||
</ScrollViewer>
|
||
</Border>
|
||
</Grid>
|
||
</Grid>
|
||
</Window>
|