@@ -45,6 +45,8 @@ private async Task ConvertTrack(TrackFile trackFile)
4545 }
4646
4747 AudioFormat targetFormat = GetTargetFormatForTrack ( trackFormat ) ;
48+ if ( targetFormat == AudioFormat . Unknown )
49+ return ;
4850
4951 _logger . Debug ( "Converting track from {0} to {1}: {2}" , trackFormat , targetFormat , trackFile . Path ) ;
5052
@@ -61,12 +63,23 @@ private async Task ConvertTrack(TrackFile trackFile)
6163 private AudioFormat GetTargetFormatForTrack ( AudioFormat trackFormat )
6264 {
6365 foreach ( KeyValuePair < string , string > rule in Settings . CustomConversion )
64- if ( rule . Key . Equals ( trackFormat . ToString ( ) , StringComparison . OrdinalIgnoreCase ) )
65- if ( Enum . TryParse ( rule . Value , true , out AudioFormat customTargetFormat ) )
66- {
67- _logger . Trace ( "Using custom target format {0} for track format {1}" , customTargetFormat , trackFormat ) ;
68- return customTargetFormat ;
69- }
66+ {
67+ if ( rule . Key . Equals ( trackFormat . ToString ( ) , StringComparison . OrdinalIgnoreCase ) && Enum . TryParse ( rule . Value , true , out AudioFormat customTargetFormat ) )
68+ {
69+ _logger . Trace ( "Using custom target format {0} for track format {1}" , customTargetFormat , trackFormat ) ;
70+ return customTargetFormat ;
71+ }
72+ }
73+ if ( Settings . CustomConversion . FirstOrDefault ( x => x . Key . Equals ( "all" , StringComparison . OrdinalIgnoreCase ) ) is KeyValuePair < string , string > all && Enum . TryParse ( all . Value , true , out AudioFormat customAllTargetsFormat ) )
74+ {
75+ _logger . Trace ( "Using custom target format {0} for track format {1}" , customAllTargetsFormat , trackFormat ) ;
76+ if ( AudioFormatHelper . IsLossyFormat ( trackFormat ) && ! AudioFormatHelper . IsLossyFormat ( customAllTargetsFormat ) )
77+ {
78+ _logger . Warn ( "Blocked lossy ➔ lossless conversion via 'all' rule for: {0}" , trackFormat ) ;
79+ return AudioFormat . Unknown ;
80+ }
81+ return customAllTargetsFormat ;
82+ }
7083 return ( AudioFormat ) Settings . TargetFormat ;
7184 }
7285
@@ -79,10 +92,10 @@ private bool ShouldConvertTrack(TrackFile trackFile)
7992 return false ;
8093 }
8194
82- bool shouldConvertCustom = Settings . CustomConversion . Any ( ) && Settings . CustomConversion . Any ( rule => rule . Key . Equals ( trackFormat . ToString ( ) , StringComparison . OrdinalIgnoreCase ) ) ;
83- bool shouldConvertDefault = IsFormatEnabledForConversion ( trackFormat ) ;
84- bool shouldConvert = shouldConvertCustom || shouldConvertDefault ;
85- return shouldConvert ;
95+ bool hasDirectRule = Settings . CustomConversion . Any ( r => r . Key . Equals ( trackFormat . ToString ( ) , StringComparison . OrdinalIgnoreCase ) ) ;
96+ bool hasGlobalRule = Settings . CustomConversion . Any ( r => r . Key . Equals ( "all" , StringComparison . OrdinalIgnoreCase ) ) ;
97+ bool defaultConversion = IsFormatEnabledForConversion ( trackFormat ) ;
98+ return hasDirectRule || hasGlobalRule || defaultConversion ;
8699 }
87100
88101 private bool IsFormatEnabledForConversion ( AudioFormat format ) => format switch
0 commit comments