feat(metadata): 元数据分阶段探测(128KB → 512KB)+ song_key 改为纯 URL
渐进探测: - FileProvider.getFile 增加 maxBytes 参数,WebDAV 按需只取头部 - MetadataService 先取 128KB 读标签;title/artist 都为空时再补到 512KB - 缓存文件按上限区分(metadata_<hash>_128k.part / _512k.part) song_key: - 从 md5(url|size) 改为 md5(url)。分阶段探测的大小不同, 带 size 会让同一首歌产生两个键;URL 在各阶段稳定。 - 代价:同 URL 换内容不自动失效,由清除单曲缓存/forceRefresh 兜底 - 数据库升到 v6,清空 songs / metadata_cache(可再生) 验证(release,真机): 📦 取头部 128KB(上限 128KB,不再整文件下载) 🧭 状态机: first_seen → pending(validations=1) 📊 pending conf=0.92 evidence={...} ✅ saved: 两生关 - 谢安琪 测试:新增 song_key 3 个用例,累计 19 个全绿。
This commit is contained in:
@@ -27,7 +27,7 @@ class SongDatabase {
|
||||
_log('📂 数据库路径: $path');
|
||||
return await openDatabase(
|
||||
path,
|
||||
version: 5, // v5:song_key 改为稳定的 md5
|
||||
version: 6, // v6:song_key 改为纯 URL 的 md5(配合分阶段探测)
|
||||
onCreate: _onCreate,
|
||||
onUpgrade: _onUpgrade,
|
||||
);
|
||||
@@ -229,7 +229,7 @@ class SongDatabase {
|
||||
// ⭐ 升级到版本 5:song_key 由 String.hashCode 改为 md5(url|size|mtime)。
|
||||
// 旧键带进程级随机种子、无法换算;songs / metadata_cache 都是可再生的缓存,
|
||||
// 直接清空,下次播放时按需重建。歌单与收藏按路径(song_id)存储,不受影响。
|
||||
if (oldVersion < 5) {
|
||||
if (oldVersion < 6) {
|
||||
await db.delete('metadata_cache');
|
||||
await db.delete('songs');
|
||||
_log('🧹 已清空 songs / metadata_cache(song_key 算法升级)');
|
||||
|
||||
Reference in New Issue
Block a user