metadata读取能力已达成,接下来会顺着路径完成部分缓存指针设计

This commit is contained in:
2026-08-25 21:57:04 +08:00
parent b75ea9e4ce
commit 7bd23bfee6
8 changed files with 107 additions and 35 deletions
+8 -10
View File
@@ -4,20 +4,19 @@ import 'metadata_model.dart';
class MetadataNormalizer {
NormalizedMetadata normalize(RawMetadata raw,
{String fileName = '', String filePath = ''}) {
// 1. 修剪空格
// 1. 修剪
final title = raw.title.trim();
final artist = raw.artist.trim();
final album = raw.album.trim();
// 2. 如果 title 为空,从文件名推断
final finalTitle =
title.isNotEmpty ? title : _inferTitleFromFileName(fileName);
// 3. 如果 artist 为空,从路径推断或使用默认值
// 3. 如果 artist 为空,从路径推断
final finalArtist =
artist.isNotEmpty ? artist : _inferArtistFromPath(filePath);
// 4. 如果 performers 不为空且 artist 为空,用 performers 的第一个
// 4. 如果 performers 不为空且 artist 为空,使用 performers
final finalArtist2 = finalArtist.isNotEmpty
? finalArtist
: (raw.performers.isNotEmpty ? raw.performers.first : '未知艺术家');
@@ -25,7 +24,7 @@ class MetadataNormalizer {
return NormalizedMetadata(
title: finalTitle,
artist: finalArtist2,
album: album,
album: raw.album,
genres: raw.genres,
performers: raw.performers,
year: raw.year,
@@ -40,17 +39,16 @@ class MetadataNormalizer {
String _inferTitleFromFileName(String fileName) {
final dotIndex = fileName.lastIndexOf('.');
if (dotIndex > 0) {
return fileName.substring(0, dotIndex).trim();
}
return fileName.trim();
return dotIndex > 0
? fileName.substring(0, dotIndex).trim()
: fileName.trim();
}
String _inferArtistFromPath(String filePath) {
final parts = filePath.split(RegExp(r'[/\\]'));
if (parts.length >= 2) {
final candidate = parts[parts.length - 2].trim();
if (candidate.isNotEmpty && !candidate.contains(' ')) {
if (candidate.isNotEmpty && !candidate.startsWith('http')) {
return candidate;
}
}