fix(metadata): match by primary artist and review results #511

This commit is contained in:
zarzet
2026-08-11 16:20:03 +07:00
parent dacc5abde0
commit 28538395c2
5 changed files with 325 additions and 29 deletions
+17 -1
View File
@@ -1,5 +1,5 @@
final RegExp _artistNameSplitPattern = RegExp(
r'\s*(?:,|&|\bx\b)\s*|\s+\b(?:feat(?:uring)?|ft|with)\.?(?=\s|$)\s*',
r'\s*(?:,|;|&|\bx\b)\s*|\s+\b(?:feat(?:uring)?|ft|with)\.?(?=\s|$)\s*',
caseSensitive: false,
);
@@ -17,6 +17,22 @@ List<String> splitArtistNames(String rawArtists) {
.toList(growable: false);
}
String primaryArtistName(String artists, {String? albumArtist}) {
final preferred = albumArtist?.trim() ?? '';
final normalizedPreferred = preferred.toLowerCase();
final useAlbumArtist =
preferred.isNotEmpty &&
normalizedPreferred != 'various artists' &&
normalizedPreferred != 'various' &&
normalizedPreferred != 'va';
final source = useAlbumArtist ? preferred : artists.trim();
final split = splitArtistNames(source);
if (split.isNotEmpty) return split.first;
final fallback = splitArtistNames(artists);
return fallback.isNotEmpty ? fallback.first : artists.trim();
}
bool shouldSplitVorbisArtistTags(String mode) {
return mode == artistTagModeSplitVorbis;
}