优化故事模式无故事下发,直接停止,不等超时。 3103/2 3103/head 3104/target/1
author孙春阳 <snickersun@163.com>
Sat, 17 Jan 2026 04:58:53 +0000 (12:58 +0800)
committer孙春阳 <snickersun@163.com>
Sat, 17 Jan 2026 04:58:53 +0000 (12:58 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp

index 98ffdb5..6cea8cc 100644 (file)
@@ -3116,8 +3116,30 @@ extern "C" {
             if (lullabyView != nullptr) {
                 std::string currentText = lullabyView->GetCurrentText();
                 if (currentText == "正在准备故事...") {
-                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleStoryResponseFinished: 当前文本为'正在准备故事...',忽略finished信号");
-                    return; // 忽略这个finished信号
+                    // 如果文本仍然是"正在准备故事...",说明服务器返回finished=true但没有内容
+                    // 这可能是服务器错误,但finished=true是明确的结束信号,应该结束故事模式
+                    // 由于没有音频播放,HandleAudioPlaybackEnd不会被调用,所以需要直接退出故事模式
+                    // 但需要先检查是否还在故事模式,避免重复退出
+                    ThunderBirdMainView *view = ThunderBirdMainView::GetInstance();
+                    if (view) {
+                        int16_t currentView = view->GetCurrentView();
+                        int16_t currentSubView = view->GetCurrentSubView();
+                        if (currentView == THUNDERBIRD_LULLABYVIEW && 
+                            currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_4) {
+                            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleStoryResponseFinished: 当前文本为'正在准备故事...',但收到finished=true,服务器可能没有返回内容,直接退出故事模式");
+                            // 停止故事模式超时定时器(因为已经收到finished信号)
+                            StopStoryModeTimeoutTimer();
+                            // 直接退出故事模式(因为没有音频播放,不会触发HandleAudioPlaybackEnd)
+                            HandleSleepModeEnd();
+                            return;
+                        } else {
+                            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleStoryResponseFinished: 当前不在故事模式,忽略finished信号");
+                            return;
+                        }
+                    }else {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleStoryResponseFinished: 当前不在故事模式,忽略finished信号");
+                        return;
+                    }
                 }
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleStoryResponseFinished: 当前文本为'%s',确认为真正的finished", currentText.c_str());
             }