diff --git a/EmbyToolbox/Services/AppSettingsService.cs b/EmbyToolbox/Services/AppSettingsService.cs index 8e65a52..92e5db3 100644 --- a/EmbyToolbox/Services/AppSettingsService.cs +++ b/EmbyToolbox/Services/AppSettingsService.cs @@ -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 /// Конвертация: выключать default у всех subtitle-дорожек. public bool DisableSubtitleDefault { get; set; } + public bool RemoveForeignTracksByDefault { get; set; } + /// После завершения очереди конвертации воспроизводить системный звук Windows. public bool NotifyCompletionSoundAfterQueue { get; set; } = true; diff --git a/EmbyToolbox/ViewModels/AddFilesOptionsViewModel.cs b/EmbyToolbox/ViewModels/AddFilesOptionsViewModel.cs index 60b7825..6823e6e 100644 --- a/EmbyToolbox/ViewModels/AddFilesOptionsViewModel.cs +++ b/EmbyToolbox/ViewModels/AddFilesOptionsViewModel.cs @@ -18,12 +18,14 @@ public sealed class AddFilesOptionsViewModel : INotifyPropertyChanged IReadOnlyList profiles, string selectedProfileName, bool disableSubtitleDefault, + bool removeForeignAudioAndSubtitles, Action onAdd, Action onCancel) { _onAdd = onAdd; _onCancel = onCancel; _disableSubtitleDefault = disableSubtitleDefault; + _removeForeignAudioAndSubtitles = removeForeignAudioAndSubtitles; Profiles = new ObservableCollection(profiles); _selectedProfile = Profiles.FirstOrDefault(p => p.Profile.Equals(selectedProfileName, StringComparison.OrdinalIgnoreCase)) ?? Profiles.FirstOrDefault(p => p.Profile.Equals("Emby", StringComparison.OrdinalIgnoreCase)) diff --git a/EmbyToolbox/ViewModels/ConversionViewModel.cs b/EmbyToolbox/ViewModels/ConversionViewModel.cs index da050a4..95b8525 100644 --- a/EmbyToolbox/ViewModels/ConversionViewModel.cs +++ b/EmbyToolbox/ViewModels/ConversionViewModel.cs @@ -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 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(); diff --git a/EmbyToolbox/ViewModels/MainWindowViewModel.cs b/EmbyToolbox/ViewModels/MainWindowViewModel.cs index 040630b..2047afd 100644 --- a/EmbyToolbox/ViewModels/MainWindowViewModel.cs +++ b/EmbyToolbox/ViewModels/MainWindowViewModel.cs @@ -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; diff --git a/EmbyToolbox/Views/AddFilesOptionsDialog.xaml b/EmbyToolbox/Views/AddFilesOptionsDialog.xaml index 1b5171c..5d50c32 100644 --- a/EmbyToolbox/Views/AddFilesOptionsDialog.xaml +++ b/EmbyToolbox/Views/AddFilesOptionsDialog.xaml @@ -15,58 +15,46 @@ - - - - - - - - - - - - - + + + + + - - + + + + + + + + + - - + + + +