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());
}