feat(metadata): 元数据补全后主动推送界面刷新
之前标签补全后,收藏/文件列表要退出重进才显示新信息。 - 新增 MetadataEvents 事件总线(MetadataUpdate: path + songs 行) - MetadataService 写库成功后 publish - 首页收藏列表订阅:按 path 替换对应 SongItem(标题/艺术家/封面) - WebDAV 文件列表订阅:按 path 更新 _metaByPath 效果:歌曲播完标签抓取完成后,列表里的那一行自动变成标签信息, 不需要返回重进。
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
// lib/services/metadata_events.dart
|
||||
import 'dart:async';
|
||||
|
||||
/// 一条元数据更新(path + songs 表的最新行)
|
||||
class MetadataUpdate {
|
||||
final String path;
|
||||
final Map<String, dynamic> row;
|
||||
|
||||
const MetadataUpdate(this.path, this.row);
|
||||
}
|
||||
|
||||
/// 元数据更新事件总线。
|
||||
///
|
||||
/// 之前各列表页靠"返回时重查"来刷新,歌曲补全标签后要退出重进才看得到。
|
||||
/// 现在 MetadataService 写库成功后 publish,订阅的页面按 path 局部更新。
|
||||
class MetadataEvents {
|
||||
static final MetadataEvents _instance = MetadataEvents._internal();
|
||||
factory MetadataEvents() => _instance;
|
||||
MetadataEvents._internal();
|
||||
|
||||
final StreamController<MetadataUpdate> _controller =
|
||||
StreamController<MetadataUpdate>.broadcast();
|
||||
|
||||
Stream<MetadataUpdate> get stream => _controller.stream;
|
||||
|
||||
void publish(String path, Map<String, dynamic> row) {
|
||||
if (path.isEmpty) return;
|
||||
_controller.add(MetadataUpdate(path, row));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user