You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
2.1 KiB
58 lines
2.1 KiB
import 'package:device_plugin_interface/device_plugin_interface.dart';
|
|
import 'package:get/get.dart';
|
|
|
|
import '../../devices/device_hub.dart';
|
|
import '../../devices/device_vendors.dart';
|
|
import '../models/agent_module.dart';
|
|
import '../models/device_category.dart';
|
|
import 'agent_module_service.dart';
|
|
|
|
/// 设备品类**首次连接成功**时,把该品类的默认功能铺到 AI 页。
|
|
///
|
|
/// 挂在 [DeviceHub.sessions] 上,谁上线就按厂商 → 品类映射铺一次;
|
|
/// 「只铺一次」由 [AgentModuleService.applyDeviceDefaults] 记录。
|
|
class AgentDefaults {
|
|
AgentDefaults._();
|
|
|
|
static const Map<String, String> _vendorCategory = {
|
|
DeviceVendors.bes: DeviceCategories.earphone,
|
|
DeviceVendors.holder: DeviceCategories.phoneHolder,
|
|
DeviceVendors.smartcar: DeviceCategories.carAroma,
|
|
};
|
|
|
|
/// 厂商 → 品类。设备按键唤醒时用它找该接哪个 agent(见
|
|
/// `DeviceAiSessionService._resolveAgentAppId`)。
|
|
static String? categoryForVendor(String vendor) => _vendorCategory[vendor];
|
|
|
|
/// 这个品类默认该由哪个 agent 接管对话 —— 取默认编排里的第一个模块。
|
|
/// 找不到返回 null,调用方回退到全局默认(EMAI)。
|
|
static String? primaryModuleForVendor(String vendor) {
|
|
final cat = _vendorCategory[vendor];
|
|
if (cat == null) return null;
|
|
final list = AgentModules.defaultsForCategory(cat);
|
|
return list.isEmpty ? null : list.first;
|
|
}
|
|
|
|
static Worker? _worker;
|
|
|
|
static void bind(DeviceHub hub) {
|
|
_worker?.dispose();
|
|
_worker = ever<List<DeviceSession>>(hub.sessions, (list) {
|
|
for (final s in list) {
|
|
final cat = _vendorCategory[s.vendor];
|
|
if (cat != null) applyAgentDefaultsFor(cat);
|
|
}
|
|
});
|
|
}
|
|
|
|
static void applyAgentDefaultsFor(String categoryId) {
|
|
try {
|
|
final service = Get.isRegistered<AgentModuleService>()
|
|
? AgentModuleService.to
|
|
: Get.put<AgentModuleService>(AgentModuleService(), permanent: true);
|
|
service.applyDeviceDefaults(categoryId);
|
|
} catch (_) {
|
|
// 铺默认功能失败不能影响连接本身
|
|
}
|
|
}
|
|
}
|
|
|