|
|
@ -41,6 +41,7 @@ enum VoiceInputMode { |
|
|
class AgentController extends GetxController with WidgetsBindingObserver { |
|
|
class AgentController extends GetxController with WidgetsBindingObserver { |
|
|
static AgentController get to => Get.find(); //单例访问模式 |
|
|
static AgentController get to => Get.find(); //单例访问模式 |
|
|
|
|
|
|
|
|
|
|
|
final GetStorage _storage = GetStorage(); |
|
|
// 聊天消息列表 |
|
|
// 聊天消息列表 |
|
|
final messages = <Message>[].obs; |
|
|
final messages = <Message>[].obs; |
|
|
final currsessionid = ''.obs; |
|
|
final currsessionid = ''.obs; |
|
|
@ -79,7 +80,7 @@ class AgentController extends GetxController with WidgetsBindingObserver { |
|
|
// TTS启用状态 |
|
|
// TTS启用状态 |
|
|
final isTtsEnabled = true.obs; |
|
|
final isTtsEnabled = true.obs; |
|
|
// TTS播报打断启用状态 |
|
|
// TTS播报打断启用状态 |
|
|
final isTtsInterruptEnabled = true.obs; |
|
|
final isTtsInterruptEnabled = false.obs; |
|
|
// 是否显示工具调用 |
|
|
// 是否显示工具调用 |
|
|
final isShowToolInterruptEnabled = false.obs; |
|
|
final isShowToolInterruptEnabled = false.obs; |
|
|
// 图片处理状态 |
|
|
// 图片处理状态 |
|
|
@ -166,6 +167,7 @@ class AgentController extends GetxController with WidgetsBindingObserver { |
|
|
super.onInit(); |
|
|
super.onInit(); |
|
|
_initAppDir(); |
|
|
_initAppDir(); |
|
|
_loadTtsPreference(); //加载TTS偏好设置 |
|
|
_loadTtsPreference(); //加载TTS偏好设置 |
|
|
|
|
|
_loadTtsInterrupe(); //加载TTS播报打断偏好设置 |
|
|
_setupScrollListener(); //设置滚动监听器 |
|
|
_setupScrollListener(); //设置滚动监听器 |
|
|
_loadChatHistory(); //加载聊天历史记录 |
|
|
_loadChatHistory(); //加载聊天历史记录 |
|
|
_subscribeToEvents(); //订阅代理服务事件 |
|
|
_subscribeToEvents(); //订阅代理服务事件 |
|
|
@ -178,14 +180,6 @@ class AgentController extends GetxController with WidgetsBindingObserver { |
|
|
// 监听应用生命周期:当应用切到后台/失焦时兜底结束按住说话,防止 onPointerUp 未触发 |
|
|
// 监听应用生命周期:当应用切到后台/失焦时兜底结束按住说话,防止 onPointerUp 未触发 |
|
|
WidgetsBinding.instance.addObserver(this); |
|
|
WidgetsBinding.instance.addObserver(this); |
|
|
|
|
|
|
|
|
// 获取设备类型以确定检查策略 |
|
|
|
|
|
String deviceName = getDeviceName(); |
|
|
|
|
|
DBProduct? product = AppConfig.getproduct(deviceName); |
|
|
|
|
|
if (product != null) { |
|
|
|
|
|
isTtsInterruptEnabled.value = !product.iscontinuouschat!; |
|
|
|
|
|
} else { |
|
|
|
|
|
isTtsInterruptEnabled.value = false; |
|
|
|
|
|
} |
|
|
|
|
|
// _qqmusicManager.syncCurrentPlayInfo(); |
|
|
// _qqmusicManager.syncCurrentPlayInfo(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -269,30 +263,47 @@ class AgentController extends GetxController with WidgetsBindingObserver { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 加载TTS偏好设置 |
|
|
|
|
|
Future<void> _loadTtsInterrupe() async { |
|
|
|
|
|
try { |
|
|
|
|
|
if (!_storage.hasData("agent_tts_interrupe")) { |
|
|
|
|
|
// 获取设备类型以确定检查策略 |
|
|
|
|
|
String deviceName = getDeviceName(); |
|
|
|
|
|
DBProduct? product = AppConfig.getproduct(deviceName); |
|
|
|
|
|
if (deviceName != "" && product != null) { |
|
|
|
|
|
// Logger.d('AgentController', |
|
|
|
|
|
// 'liwe----------product $deviceName ${product.toJson()}'); |
|
|
|
|
|
isTtsInterruptEnabled.value = !product.iscontinuouschat!; |
|
|
|
|
|
} else { |
|
|
|
|
|
isTtsInterruptEnabled.value = false; |
|
|
|
|
|
} |
|
|
|
|
|
} else { |
|
|
|
|
|
isTtsInterruptEnabled.value = |
|
|
|
|
|
_storage.read('agent_tts_interrupe') ?? false; |
|
|
|
|
|
} |
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
// 如果读取失败,使用默认值 |
|
|
|
|
|
Logger.e(TAG, '加载TTS偏好设置失败: $e'); |
|
|
|
|
|
isTtsInterruptEnabled.value = false; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
/// 切换TTS播报打断状态 |
|
|
/// 切换TTS播报打断状态 |
|
|
/// 当启用播报打断时,用户说话会自动停止当前的TTS播放 |
|
|
/// 当启用播报打断时,用户说话会自动停止当前的TTS播放 |
|
|
Future<void> toggleTtsInterrupt() async { |
|
|
Future<void> toggleTtsInterrupt() async { |
|
|
isTtsInterruptEnabled.toggle(); |
|
|
isTtsInterruptEnabled.toggle(); |
|
|
|
|
|
await _storage.write('agent_tts_interrupe', isTtsInterruptEnabled.value); |
|
|
// 保存偏好设置 |
|
|
// 保存偏好设置 |
|
|
try { |
|
|
try { |
|
|
await AgentService.isInterrupt(); |
|
|
await AgentService.isInterrupt(isTtsInterruptEnabled.value); |
|
|
} catch (e) { |
|
|
} catch (e) { |
|
|
Logger.e(TAG, '保存TTS播报打断偏好设置失败: $e'); |
|
|
Logger.e(TAG, '保存TTS播报打断偏好设置失败: $e'); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/// 切换TTS播报打断状态 |
|
|
/// 当启用显示工具调用效果 |
|
|
/// 当启用播报打断时,用户说话会自动停止当前的TTS播放 |
|
|
|
|
|
Future<void> toggleShowAIToolInterrupt() async { |
|
|
Future<void> toggleShowAIToolInterrupt() async { |
|
|
isShowToolInterruptEnabled.toggle(); |
|
|
isShowToolInterruptEnabled.toggle(); |
|
|
|
|
|
|
|
|
// 保存偏好设置 |
|
|
|
|
|
try { |
|
|
|
|
|
await AgentService.isInterrupt(); |
|
|
|
|
|
} catch (e) { |
|
|
|
|
|
Logger.e(TAG, '保存TTS播报打断偏好设置失败: $e'); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 设置文本输入监听器 |
|
|
// 设置文本输入监听器 |
|
|
|