metadata读取能力已达成,接下来会顺着路径完成部分缓存指针设计
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user