feat: add file format library quality label

This commit is contained in:
zarzet
2026-08-27 16:50:46 +07:00
parent 4609e59806
commit 2b117415ae
20 changed files with 137 additions and 5 deletions
+28 -2
View File
@@ -11,6 +11,8 @@ final RegExp _bitDepthQualityPattern = RegExp(
String normalizeLibraryQualityLabelMode(String? mode) {
return switch (mode) {
AppSettings.libraryQualityLabelFileFormat =>
AppSettings.libraryQualityLabelFileFormat,
AppSettings.libraryQualityLabelBitDepthOnly =>
AppSettings.libraryQualityLabelBitDepthOnly,
AppSettings.libraryQualityLabelBitDepth =>
@@ -21,9 +23,29 @@ String normalizeLibraryQualityLabelMode(String? mode) {
};
}
String? _libraryFileFormatLabel(String? format) {
final rawFormat = normalizeOptionalString(format);
if (rawFormat == null) return null;
return switch (normalizeAudioFormatValue(rawFormat)) {
'flac' => 'FLAC',
'alac' => 'ALAC',
'wav' => 'WAV',
'aiff' => 'AIFF',
'aac' => 'AAC',
'eac3' => 'EAC3',
'ac3' => 'AC3',
'ac4' => 'AC4',
'mp3' => 'MP3',
'opus' => 'OPUS',
'm4a' => 'M4A',
_ => rawFormat.replaceFirst(RegExp(r'^\.'), '').toUpperCase(),
};
}
/// Builds a Library label from metadata already held in memory. Lossy formats
/// keep their bitrate label because bit depth is not a useful quality signal
/// for encoded MP3/AAC/Opus audio.
/// keep their bitrate label in quality modes because bit depth is not a useful
/// quality signal for encoded MP3/AAC/Opus audio.
String? buildLibraryAudioQualityLabel({
required String mode,
String? format,
@@ -53,6 +75,10 @@ String? buildLibraryAudioQualityLabel({
: null;
final normalizedMode = normalizeLibraryQualityLabelMode(mode);
if (normalizedMode == AppSettings.libraryQualityLabelFileFormat) {
return _libraryFileFormatLabel(format);
}
if (isLossyAudioFormat(format)) {
return bitrateLabel;
}