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 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+