mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-04-21 11:06:25 +02:00
feat: add preserveNativeOutputExtensions capability for extensions
This commit is contained in:
@@ -2369,6 +2369,21 @@ class DownloadQueueNotifier extends Notifier<DownloadQueueState> {
|
||||
return null;
|
||||
}
|
||||
|
||||
bool _extensionPreservesNativeOutputExt(String service, String ext) {
|
||||
final normalizedService = service.trim().toLowerCase();
|
||||
final normalizedExt = ext.trim().toLowerCase();
|
||||
if (normalizedService.isEmpty || normalizedExt.isEmpty) return false;
|
||||
|
||||
final extensionState = ref.read(extensionProvider);
|
||||
return extensionState.extensions.any(
|
||||
(ext) =>
|
||||
ext.enabled &&
|
||||
ext.hasDownloadProvider &&
|
||||
ext.id.toLowerCase() == normalizedService &&
|
||||
ext.preservedNativeOutputExtensions.contains(normalizedExt),
|
||||
);
|
||||
}
|
||||
|
||||
String _determineOutputExt(String quality, String service) {
|
||||
final extensionPreferred = _extensionPreferredOutputExt(service);
|
||||
if (extensionPreferred != null) {
|
||||
@@ -4874,7 +4889,9 @@ class DownloadQueueNotifier extends Notifier<DownloadQueueState> {
|
||||
((result['service'] as String?)?.toLowerCase()) ??
|
||||
item.service.toLowerCase();
|
||||
final preferredOutputExt = _extensionPreferredOutputExt(actualService);
|
||||
final shouldPreserveNativeM4a = preferredOutputExt == '.m4a';
|
||||
final shouldPreserveNativeM4a =
|
||||
preferredOutputExt == '.m4a' ||
|
||||
_extensionPreservesNativeOutputExt(actualService, '.m4a');
|
||||
final decryptionDescriptor =
|
||||
DownloadDecryptionDescriptor.fromDownloadResult(result);
|
||||
trackToDownload = _buildTrackForMetadataEmbedding(
|
||||
|
||||
@@ -179,6 +179,20 @@ class Extension {
|
||||
final trimmed = value.trim();
|
||||
return trimmed.isEmpty ? null : trimmed;
|
||||
}
|
||||
|
||||
List<String> get preservedNativeOutputExtensions {
|
||||
final value = capabilities['preserveNativeOutputExtensions'];
|
||||
if (value is! List) return const [];
|
||||
|
||||
final normalized = <String>[];
|
||||
for (final item in value) {
|
||||
if (item is! String) continue;
|
||||
final trimmed = item.trim().toLowerCase();
|
||||
if (trimmed.isEmpty) continue;
|
||||
normalized.add(trimmed.startsWith('.') ? trimmed : '.$trimmed');
|
||||
}
|
||||
return normalized;
|
||||
}
|
||||
}
|
||||
|
||||
class SearchFilter {
|
||||
|
||||
Reference in New Issue
Block a user