Persist remove foreign tracks add option
This commit is contained in:
parent
642656971c
commit
62c700c8cd
@ -76,7 +76,8 @@ public sealed class AppSettingsService
|
||||
LastTrackExtractDestinationFolder = settings.LastTrackExtractDestinationFolder,
|
||||
LastCommonFolder = settings.LastCommonFolder,
|
||||
CopyPreviousTrackSettings = settings.CopyPreviousTrackSettings,
|
||||
DisableSubtitleDefault = settings.DisableSubtitleDefault
|
||||
DisableSubtitleDefault = settings.DisableSubtitleDefault,
|
||||
RemoveForeignTracksByDefault = settings.RemoveForeignTracksByDefault
|
||||
};
|
||||
|
||||
var settingsDir = Path.GetDirectoryName(_settingsFilePath)!;
|
||||
@ -97,6 +98,7 @@ public sealed class AppSettingsService
|
||||
IsLogCollapsed = true,
|
||||
CopyPreviousTrackSettings = false,
|
||||
DisableSubtitleDefault = false,
|
||||
RemoveForeignTracksByDefault = false,
|
||||
NotifyCompletionSoundAfterQueue = true,
|
||||
NotifyWindowsToastAfterQueue = true,
|
||||
ConversionProfiles = CreateDefaultProfiles()
|
||||
@ -351,6 +353,8 @@ public sealed record AppSettings
|
||||
/// <summary>Конвертация: выключать default у всех subtitle-дорожек.</summary>
|
||||
public bool DisableSubtitleDefault { get; set; }
|
||||
|
||||
public bool RemoveForeignTracksByDefault { get; set; }
|
||||
|
||||
/// <summary>После завершения очереди конвертации воспроизводить системный звук Windows.</summary>
|
||||
public bool NotifyCompletionSoundAfterQueue { get; set; } = true;
|
||||
|
||||
|
||||
@ -18,12 +18,14 @@ public sealed class AddFilesOptionsViewModel : INotifyPropertyChanged
|
||||
IReadOnlyList<ConversionProfilePresetRow> profiles,
|
||||
string selectedProfileName,
|
||||
bool disableSubtitleDefault,
|
||||
bool removeForeignAudioAndSubtitles,
|
||||
Action<AddFilesOptions> onAdd,
|
||||
Action onCancel)
|
||||
{
|
||||
_onAdd = onAdd;
|
||||
_onCancel = onCancel;
|
||||
_disableSubtitleDefault = disableSubtitleDefault;
|
||||
_removeForeignAudioAndSubtitles = removeForeignAudioAndSubtitles;
|
||||
Profiles = new ObservableCollection<ConversionProfilePresetRow>(profiles);
|
||||
_selectedProfile = Profiles.FirstOrDefault(p => p.Profile.Equals(selectedProfileName, StringComparison.OrdinalIgnoreCase))
|
||||
?? Profiles.FirstOrDefault(p => p.Profile.Equals("Emby", StringComparison.OrdinalIgnoreCase))
|
||||
|
||||
@ -43,6 +43,7 @@ public sealed class ConversionViewModel : INotifyPropertyChanged
|
||||
private string _defaultQueueProfile = "Emby";
|
||||
private bool _copyPreviousTrackSettings;
|
||||
private bool _disableSubtitleDefault;
|
||||
private bool _removeForeignTracksByDefault;
|
||||
private ConversionProfilePresetRow? _selectedDefaultProfile;
|
||||
private bool _isQueueDropHighlight;
|
||||
private bool _isExecutionRunning;
|
||||
@ -459,6 +460,21 @@ public sealed class ConversionViewModel : INotifyPropertyChanged
|
||||
}
|
||||
}
|
||||
|
||||
public bool RemoveForeignTracksByDefault
|
||||
{
|
||||
get => _removeForeignTracksByDefault;
|
||||
set
|
||||
{
|
||||
if (_removeForeignTracksByDefault == value)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
_removeForeignTracksByDefault = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public void SyncDefaultProfileFromList(IReadOnlyList<ConversionProfilePresetRow> profiles)
|
||||
{
|
||||
if (profiles is null || profiles.Count == 0)
|
||||
@ -1757,11 +1773,13 @@ public sealed class ConversionViewModel : INotifyPropertyChanged
|
||||
_presetRowsForSetup(),
|
||||
CurrentProfileNameForNewTasks(),
|
||||
DisableSubtitleDefault,
|
||||
RemoveForeignTracksByDefault,
|
||||
options =>
|
||||
{
|
||||
selected = options;
|
||||
_defaultQueueProfile = options.Profile;
|
||||
DisableSubtitleDefault = options.DisableSubtitleDefault;
|
||||
RemoveForeignTracksByDefault = options.RemoveForeignAudioAndSubtitles;
|
||||
SyncDefaultProfileFromList(_presetRowsForSetup());
|
||||
dialog.DialogResult = true;
|
||||
dialog.Close();
|
||||
|
||||
@ -97,6 +97,7 @@ public sealed class MainWindowViewModel : INotifyPropertyChanged
|
||||
ApplyConversionProfilesFromQueueSetupDocument);
|
||||
Conversion.CopyPreviousTrackSettings = _loadedSettings.CopyPreviousTrackSettings;
|
||||
Conversion.DisableSubtitleDefault = _loadedSettings.DisableSubtitleDefault;
|
||||
Conversion.RemoveForeignTracksByDefault = _loadedSettings.RemoveForeignTracksByDefault;
|
||||
Conversion.SyncDefaultProfileFromList(ConversionProfiles.ToList());
|
||||
VideoInfo = new VideoInfoViewModel(
|
||||
ff,
|
||||
@ -378,6 +379,7 @@ public sealed class MainWindowViewModel : INotifyPropertyChanged
|
||||
IsLogCollapsed = true,
|
||||
CopyPreviousTrackSettings = Conversion.CopyPreviousTrackSettings,
|
||||
DisableSubtitleDefault = Conversion.DisableSubtitleDefault,
|
||||
RemoveForeignTracksByDefault = Conversion.RemoveForeignTracksByDefault,
|
||||
NotifyCompletionSoundAfterQueue = NotifyCompletionSoundAfterQueue,
|
||||
NotifyWindowsToastAfterQueue = NotifyWindowsToastAfterQueue,
|
||||
ConversionProfiles = ConversionProfiles
|
||||
@ -421,6 +423,7 @@ public sealed class MainWindowViewModel : INotifyPropertyChanged
|
||||
LoadConversionProfiles(_loadedSettings.ConversionProfiles);
|
||||
Conversion.CopyPreviousTrackSettings = _loadedSettings.CopyPreviousTrackSettings;
|
||||
Conversion.DisableSubtitleDefault = _loadedSettings.DisableSubtitleDefault;
|
||||
Conversion.RemoveForeignTracksByDefault = _loadedSettings.RemoveForeignTracksByDefault;
|
||||
_logging.Info("изменения в настройках отменены", "settings");
|
||||
}
|
||||
|
||||
@ -601,6 +604,10 @@ public sealed class MainWindowViewModel : INotifyPropertyChanged
|
||||
{
|
||||
PersistDisableSubtitleDefault();
|
||||
}
|
||||
else if (e.PropertyName == nameof(ConversionViewModel.RemoveForeignTracksByDefault))
|
||||
{
|
||||
PersistRemoveForeignTracksByDefault();
|
||||
}
|
||||
|
||||
if (e.PropertyName == nameof(ConversionViewModel.IsExecutionRunning)
|
||||
|| e.PropertyName == nameof(ConversionViewModel.OverallProgressPercent)
|
||||
@ -664,6 +671,21 @@ public sealed class MainWindowViewModel : INotifyPropertyChanged
|
||||
}
|
||||
}
|
||||
|
||||
private void PersistRemoveForeignTracksByDefault()
|
||||
{
|
||||
try
|
||||
{
|
||||
var settings = _settingsService.Load();
|
||||
settings.RemoveForeignTracksByDefault = Conversion.RemoveForeignTracksByDefault;
|
||||
_settingsService.Save(settings);
|
||||
_loadedSettings = settings;
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignore persistence errors for UI convenience flag
|
||||
}
|
||||
}
|
||||
|
||||
private void RefreshStatusBar()
|
||||
{
|
||||
var dispatcher = Application.Current?.Dispatcher ?? Dispatcher.CurrentDispatcher;
|
||||
|
||||
@ -15,58 +15,46 @@
|
||||
|
||||
<Grid Grid.Row="0"
|
||||
VerticalAlignment="Top">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid.RowDefinitions>
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
<RowDefinition Height="Auto" />
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
<TextBlock Grid.Row="0"
|
||||
Grid.Column="0"
|
||||
Text="Профиль"
|
||||
Style="{StaticResource UiTextCaption}"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0,0,12,12" />
|
||||
<ComboBox Grid.Row="0"
|
||||
Grid.Column="1"
|
||||
Style="{StaticResource UiCombo}"
|
||||
ItemsSource="{Binding Profiles}"
|
||||
SelectedItem="{Binding SelectedProfile, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
|
||||
Margin="0,0,0,12">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Profile, Mode=OneWay}"
|
||||
TextTrimming="CharacterEllipsis" />
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
<Grid Grid.Row="0"
|
||||
Margin="0,0,0,12">
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition Width="Auto" />
|
||||
<ColumnDefinition Width="*" />
|
||||
</Grid.ColumnDefinitions>
|
||||
|
||||
<TextBlock Grid.Row="1"
|
||||
Grid.Column="0"
|
||||
Text="Отключать субтитры"
|
||||
Style="{StaticResource UiTextCaption}"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0,0,12,12" />
|
||||
<CheckBox Grid.Row="1"
|
||||
Grid.Column="1"
|
||||
VerticalAlignment="Center"
|
||||
IsChecked="{Binding DisableSubtitleDefault, Mode=TwoWay}"
|
||||
Margin="0,0,0,12" />
|
||||
<TextBlock Grid.Column="0"
|
||||
Text="Профиль"
|
||||
Style="{StaticResource UiTextCaption}"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0,0,12,0" />
|
||||
<ComboBox Grid.Column="1"
|
||||
Style="{StaticResource UiCombo}"
|
||||
ItemsSource="{Binding Profiles}"
|
||||
SelectedItem="{Binding SelectedProfile, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}">
|
||||
<ComboBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding Profile, Mode=OneWay}"
|
||||
TextTrimming="CharacterEllipsis" />
|
||||
</DataTemplate>
|
||||
</ComboBox.ItemTemplate>
|
||||
</ComboBox>
|
||||
</Grid>
|
||||
|
||||
<TextBlock Grid.Row="2"
|
||||
Grid.Column="0"
|
||||
Text="Удалять иностранные дорожки"
|
||||
Style="{StaticResource UiTextCaption}"
|
||||
VerticalAlignment="Center"
|
||||
Margin="0,0,12,0" />
|
||||
<CheckBox Grid.Row="2"
|
||||
Grid.Column="1"
|
||||
VerticalAlignment="Center"
|
||||
IsChecked="{Binding RemoveForeignAudioAndSubtitles, Mode=TwoWay}" />
|
||||
<StackPanel Grid.Row="1"
|
||||
Orientation="Horizontal">
|
||||
<CheckBox VerticalAlignment="Center"
|
||||
Content="Отключать субтитры"
|
||||
IsChecked="{Binding DisableSubtitleDefault, Mode=TwoWay}"
|
||||
Margin="0,0,18,0" />
|
||||
<CheckBox VerticalAlignment="Center"
|
||||
Content="Удалять иностранные дорожки"
|
||||
IsChecked="{Binding RemoveForeignAudioAndSubtitles, Mode=TwoWay}" />
|
||||
</StackPanel>
|
||||
</Grid>
|
||||
|
||||
<StackPanel Grid.Row="1" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,12,0,0">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user