fix: 长按阈值从会话开始计时,扣除 ASR 握手耗时
arm_voice_agent_long_press 之前在 begin_session(含 ASR 握手)之后才睡 550ms, 握手慢时实际长按阈值被拉长、判定不稳。改为从 state.started_at(≈按下时刻)算起 睡剩余时间,阈值稳定。
This commit is contained in:
1 parent
ee50665278
commit
e9e7ba50c4
1 file changed
+8
-2
@@ -556,10 +556,16 @@ pub(super) async fn handle_released(inner: &Arc<Inner>) {
|
||||
/// 长按计时器:begin_session 后武装。到点时若热键仍按住、仍是同一会话、且尚未升级,
|
||||
/// 就把当前会话标记为语音 Agent。短按(计时器到点前已松手)不受影响。
|
||||
fn arm_voice_agent_long_press(inner: &Arc<Inner>) {
|
||||
let session_id = inner.state.lock().session_id;
|
||||
// 阈值从会话开始(≈按下时刻)算起,扣掉 begin_session(含 ASR 握手)已耗时间,
|
||||
// 否则握手慢时实际阈值会被拉长、长按判定不稳定。
|
||||
let (session_id, started_at) = {
|
||||
let st = inner.state.lock();
|
||||
(st.session_id, st.started_at)
|
||||
};
|
||||
let remaining = VOICE_AGENT_LONG_PRESS.saturating_sub(started_at.elapsed());
|
||||
let inner = Arc::clone(inner);
|
||||
async_runtime::spawn(async move {
|
||||
tokio::time::sleep(VOICE_AGENT_LONG_PRESS).await;
|
||||
tokio::time::sleep(remaining).await;
|
||||
// 已松手 → 这是一次普通点按(听写),不升级。
|
||||
if !inner.hotkey_trigger_held.load(Ordering::SeqCst) {
|
||||
return;
|
||||
|
||||
Reference in new issue
Block a user