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