perf(metadata): avoid SAF copies during quality probes

This commit is contained in:
zarzet
2026-07-28 01:50:41 +07:00
parent 26570792a9
commit 80d9d87870
7 changed files with 186 additions and 3 deletions
+47
View File
@@ -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(
+78
View File
@@ -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');
},
);
}