mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-07-09 14:18:11 +02:00
feat: expose audio codec in download result and skip lossy-to-lossless conversion
Go backend: - Add AudioCodec field to DownloadResult and DownloadResponse - Extension download results can now include audio_codec/audioCodec - ffmpegGetInfo and probeAudioQuality now return codec field - Add trackItemBytes option to file.download() for custom progress handling Flutter: - Check audio_codec before container conversion - Skip FLAC conversion if source codec is lossy (AAC, MP3, Opus, etc.) - Prevents fake upscale from lossy to lossless containers
This commit is contained in:
@@ -6246,6 +6246,16 @@ class DownloadQueueNotifier extends Notifier<DownloadQueueState> {
|
||||
if (context.quality == 'HIGH' || context.outputExt != '.flac') {
|
||||
return filePath;
|
||||
}
|
||||
final resultAudioFormat = _normalizeAudioFormatValue(
|
||||
result['audio_codec']?.toString() ??
|
||||
result['actual_audio_codec']?.toString(),
|
||||
);
|
||||
if (_isLossyAudioFormat(resultAudioFormat)) {
|
||||
_log.d(
|
||||
'Native-worker output is $resultAudioFormat; preserving native container.',
|
||||
);
|
||||
return filePath;
|
||||
}
|
||||
final requiresContainerConversion =
|
||||
result['requires_container_conversion'] == true ||
|
||||
result['requiresContainerConversion'] == true;
|
||||
@@ -7411,10 +7421,16 @@ class DownloadQueueNotifier extends Notifier<DownloadQueueState> {
|
||||
result,
|
||||
filePath: filePath,
|
||||
);
|
||||
final resultAudioFormat = _normalizeAudioFormatValue(
|
||||
result['audio_codec']?.toString() ??
|
||||
result['actual_audio_codec']?.toString(),
|
||||
);
|
||||
final resultIsLossyAudio = _isLossyAudioFormat(resultAudioFormat);
|
||||
final requiresContainerConversion =
|
||||
result['requires_container_conversion'] == true ||
|
||||
result['requiresContainerConversion'] == true ||
|
||||
_shouldRequestContainerConversion(actualService, safOutputExt);
|
||||
(!resultIsLossyAudio &&
|
||||
_shouldRequestContainerConversion(actualService, safOutputExt));
|
||||
final preferredOutputExt = _extensionPreferredOutputExt(actualService);
|
||||
final shouldPreserveNativeM4a =
|
||||
!requiresContainerConversion &&
|
||||
|
||||
Reference in New Issue
Block a user