mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-08-02 09:08:35 +02:00
perf(metadata): avoid SAF copies during quality probes
This commit is contained in:
@@ -792,6 +792,53 @@ void main() {
|
||||
});
|
||||
|
||||
group('audio conversion utils', () {
|
||||
test('normalizes lightweight library scan metadata for display probes', () {
|
||||
final normalized = normalizeScannedAudioMetadata({
|
||||
'trackName': 'Song',
|
||||
'artistName': 'Artist',
|
||||
'albumName': 'Album',
|
||||
'albumArtist': 'Album Artist',
|
||||
'releaseDate': '2026',
|
||||
'trackNumber': 2,
|
||||
'totalTracks': 10,
|
||||
'discNumber': 1,
|
||||
'totalDiscs': 2,
|
||||
'bitDepth': 24,
|
||||
'sampleRate': 96000,
|
||||
'bitrate': 1840,
|
||||
'format': 'flac',
|
||||
});
|
||||
|
||||
expect(normalized['title'], 'Song');
|
||||
expect(normalized['artist'], 'Artist');
|
||||
expect(normalized['album'], 'Album');
|
||||
expect(normalized['album_artist'], 'Album Artist');
|
||||
expect(normalized['date'], '2026');
|
||||
expect(normalized['track_number'], 2);
|
||||
expect(normalized['total_tracks'], 10);
|
||||
expect(normalized['disc_number'], 1);
|
||||
expect(normalized['total_discs'], 2);
|
||||
expect(normalized['bit_depth'], 24);
|
||||
expect(normalized['sample_rate'], 96000);
|
||||
expect(normalized['bitrate'], 1840);
|
||||
expect(normalized['audio_codec'], 'flac');
|
||||
});
|
||||
|
||||
test('does not replace stored tags with filename scan fallbacks', () {
|
||||
final normalized = normalizeScannedAudioMetadata({
|
||||
'trackName': 'Filename fallback',
|
||||
'artistName': 'Unknown Artist',
|
||||
'albumName': 'Unknown Album',
|
||||
'metadataFromFilename': true,
|
||||
'format': 'flac',
|
||||
});
|
||||
|
||||
expect(normalized['title'], isNull);
|
||||
expect(normalized['artist'], isNull);
|
||||
expect(normalized['album'], isNull);
|
||||
expect(normalized['audio_codec'], 'flac');
|
||||
});
|
||||
|
||||
test('distinguishes an ALAC codec from its M4A container', () {
|
||||
expect(normalizeAudioFormatValue('ALAC'), 'alac');
|
||||
expect(
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:spotiflac_android/services/platform_bridge.dart';
|
||||
|
||||
void main() {
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
const backendChannel = MethodChannel('com.zarz.spotiflac/backend');
|
||||
|
||||
tearDown(() async {
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(backendChannel, null);
|
||||
});
|
||||
|
||||
test('display metadata uses the lightweight scan result directly', () async {
|
||||
final invokedMethods = <String>[];
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(backendChannel, (call) async {
|
||||
invokedMethods.add(call.method);
|
||||
if (call.method == 'readAudioMetadata') {
|
||||
return jsonEncode({
|
||||
'trackName': 'Song',
|
||||
'artistName': 'Artist',
|
||||
'bitDepth': 24,
|
||||
'sampleRate': 96000,
|
||||
'bitrate': 1800,
|
||||
'format': 'flac',
|
||||
});
|
||||
}
|
||||
fail('Unexpected full metadata read: ${call.method}');
|
||||
});
|
||||
|
||||
final result = await PlatformBridge.readDisplayAudioMetadata(
|
||||
'content://downloads/song.flac',
|
||||
);
|
||||
|
||||
expect(invokedMethods, ['readAudioMetadata']);
|
||||
expect(result['title'], 'Song');
|
||||
expect(result['artist'], 'Artist');
|
||||
expect(result['bit_depth'], 24);
|
||||
expect(result['sample_rate'], 96000);
|
||||
expect(result['audio_codec'], 'flac');
|
||||
});
|
||||
|
||||
test(
|
||||
'display metadata falls back when scan only parsed the filename',
|
||||
() async {
|
||||
final invokedMethods = <String>[];
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(backendChannel, (call) async {
|
||||
invokedMethods.add(call.method);
|
||||
if (call.method == 'readAudioMetadata') {
|
||||
return jsonEncode({
|
||||
'trackName': 'Filename fallback',
|
||||
'metadataFromFilename': true,
|
||||
'format': 'flac',
|
||||
});
|
||||
}
|
||||
if (call.method == 'readFileMetadata') {
|
||||
return jsonEncode({
|
||||
'title': 'Embedded title',
|
||||
'audio_codec': 'opus',
|
||||
});
|
||||
}
|
||||
fail('Unexpected method: ${call.method}');
|
||||
});
|
||||
|
||||
final result = await PlatformBridge.readDisplayAudioMetadata(
|
||||
'content://downloads/misnamed.flac',
|
||||
);
|
||||
|
||||
expect(invokedMethods, ['readAudioMetadata', 'readFileMetadata']);
|
||||
expect(result['title'], 'Embedded title');
|
||||
expect(result['audio_codec'], 'opus');
|
||||
},
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user