回退对话线程操作
authorxue <2144439972@qq.com>
Sun, 28 Dec 2025 07:45:14 +0000 (15:45 +0800)
committerxue <2144439972@qq.com>
Sun, 28 Dec 2025 07:45:14 +0000 (15:45 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp
code/sdk/zhihui/leiniao/imsl_ln/ln_api.c

index 49c5df6..17c13b6 100644 (file)
@@ -456,26 +456,26 @@ namespace OHOS
     }
     void ThunderBirdMainView::OnStart()//开机操作
     {
-        // 创建复杂操作线程(栈大小0x1000 = 4096字节)
-        if (g_complex_operation_taskcfg.task_handle == nullptr)
-        {
-            g_complex_operation_taskcfg.create_queue_handle = create_complex_operation_queue;
-            g_complex_operation_taskcfg.attr.name = "complex_operation_task";
-            g_complex_operation_taskcfg.attr.priority = osPriorityNormal;
-            g_complex_operation_taskcfg.attr.stack_size = 0x1000;  // 4096字节
-            g_complex_operation_taskcfg.func = complex_operation_task;
-            g_complex_operation_taskcfg.use_mem = USE_EXTEND_MEM;
+        // // 创建复杂操作线程(栈大小0x1000 = 4096字节)
+        // if (g_complex_operation_taskcfg.task_handle == nullptr)
+        // {
+        //     g_complex_operation_taskcfg.create_queue_handle = create_complex_operation_queue;
+        //     g_complex_operation_taskcfg.attr.name = "complex_operation_task";
+        //     g_complex_operation_taskcfg.attr.priority = osPriorityNormal;
+        //     g_complex_operation_taskcfg.attr.stack_size = 0x1000;  // 4096字节
+        //     g_complex_operation_taskcfg.func = complex_operation_task;
+        //     g_complex_operation_taskcfg.use_mem = USE_EXTEND_MEM;
             
-            errcode_t ret = uapi_create_osThread_custom(&g_complex_operation_taskcfg);
-            if (ret != ERRCODE_SUCC)
-            {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::OnStart: Failed to create complex operation thread, ret=%d", ret);
-            }
-            else
-            {
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::OnStart: Complex operation thread created successfully");
-            }
-        }
+        //     errcode_t ret = uapi_create_osThread_custom(&g_complex_operation_taskcfg);
+        //     if (ret != ERRCODE_SUCC)
+        //     {
+        //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::OnStart: Failed to create complex operation thread, ret=%d", ret);
+        //     }
+        //     else
+        //     {
+        //         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdMainView::OnStart: Complex operation thread created successfully");
+        //     }
+        // }
 
         //下载文件被打断的恢复操作
         if(ThunderBirdModel::GetInstance()->GetDownloadFile() != -1)
index 140a93a..a1989ba 100644 (file)
@@ -1627,8 +1627,8 @@ extern "C" {
             return -1;
         }
 
-        // 清空输出缓冲区
-        memset(output_str, 0, strlen(output_str) > 0 ? strlen(output_str) : 16);
+        // 清空输出缓冲区(使用固定大小16字节,避免在未初始化缓冲区上使用strlen)
+        memset(output_str, 0, 16);
 
         // 1. 提取字符串最后4位
         char suffix_4[5] = {0};  // 存储最后4位(+1存结束符)
@@ -1791,7 +1791,6 @@ extern "C" {
                         {
                             view->ChangeView(currentView, THUNDERBIRD_GUIDEVIEW, ThunderBirdGuideView::THUNDERBIRD_GUIDEVIEW_5);
                         }
-                        ThunderBirdDialogueView::GetInstance()->DialogueFirst = true;
                         // 先设置退出标志,防止录音结束回调误判为正常录音结束
                         ThunderBirdPresenter::GetInstance()->SetDialogueing(false);
                         ln_ws_end_audio_chat();//结束对话
@@ -1957,12 +1956,18 @@ extern "C" {
     /**
      * @brief 设置当前设备状态
      */
-    void ThunderBirdModel::SetCurrentStatus(DeviceStatus status)
+    void ThunderBirdModel::SetCurrentStatus(DeviceStatus status) 
     {
         if (m_currentStatus != status) {
             DeviceStatus oldStatus = m_currentStatus;
             m_currentStatus = status;
-            m_statusChangeTime = uapi_get_timestampe_ss(nullptr) ? 0 : uapi_get_timestampe_ss(nullptr);
+            // 正确获取时间戳
+            uint32_t timestamp = 0;
+            if (uapi_get_timestampe_ss(&timestamp) == ERRCODE_SUCC) {
+                m_statusChangeTime = timestamp;
+            } else {
+                m_statusChangeTime = 0;
+            }
             
             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Status changed: %d -> %d", 
                          static_cast<int>(oldStatus), static_cast<int>(status));
@@ -1975,7 +1980,7 @@ extern "C" {
     void ThunderBirdModel::UpdateDeviceStatus()
     {
         uint32_t currentTime = 0;
-        uapi_get_timestampe_ss(&currentTime);
+        uapi_get_timestampe_ss(&currentTime); 
         m_lastStatusCheckTime = currentTime;
         
         // 根据当前状态进行状态检查和转换
@@ -2075,10 +2080,9 @@ extern "C" {
         
         // 检查IMEI有效性
         m_imeiValid = IsDeviceIdValid();
-
-        return m_imeiValid;
         
-        WEARABLE_LOGD("IMEI status checked: valid=%d", m_imeiValid);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "IMEI status checked: valid=%d", m_imeiValid);
+        return m_imeiValid;
     }
 
     // ==================== 网络状态管理函数实现 ====================
@@ -2289,7 +2293,6 @@ extern "C" {
                     do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_AUDIO_DEINIT, NULL, 0);
                     ThunderBirdPresenter::GetInstance()->SetDialogueing(false);
                     ThunderBirdModel::GetInstance()->OnExitDialogueMode();
-                    ThunderBirdDialogueView::GetInstance()->DialogueFirst = true;
                     // 退出到发呆中界面(状态界面)
                     ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_REMINDERVIEW, ThunderBirdReminderView::THUNDERBIRD_REMINDERVIEW_TASK_REMINDER);
                 }
@@ -2940,7 +2943,10 @@ extern "C" {
             // ChangeView 中会自动处理对话/哄睡界面的退出逻辑
             ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_BLUEVIEW, ThunderBirdBlueView::THUNDERBIRD_BULEVIEW_ENTER);
             //不管跳到什么界面都要先停止视频
-            ThunderBirdMainView::GetInstance()->videoPlay_->PauseVideoPlay();
+            auto* mainView = ThunderBirdMainView::GetInstance();
+            if (mainView && mainView->videoPlay_) {
+                mainView->videoPlay_->PauseVideoPlay();
+            }
         }
     }
     
@@ -3121,7 +3127,7 @@ extern "C" {
             m_dialogueModeFinished = false;
             // 停止动效
             ThunderBirdDialogueView::GetInstance()->AudioPlaybackEnd();
-            ThunderBirdDialogueView::GetInstance()->IsNormalEnd = true;
+            // ThunderBirdDialogueView::GetInstance()->IsNormalEnd = true;
             //可以开始说话了,显示小绿点
             if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::GetInstance()->listenIcon) {
                 ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(true);
@@ -3172,21 +3178,7 @@ extern "C" {
     // 录音开始处理函数
     void ThunderBirdModel::HandleAudioRecordingStart()
     {
-           // 检查 WebSocket 连接状态,如果正在重连,等待重连完成
-            int wsState = ln_ws_get_connection_state();
-            bool wsConnected = (wsState == 2); // WS_STATE_CONNECTED = 2
-            
-            if (!wsConnected) {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleDialogueFunction: WebSocket未连接(状态=%d),等待连接完成", wsState);
-                // WebSocket 未连接,不执行操作,避免状态混乱
-                return;
-            }
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingStart: 录音开始");
-        if(ThunderBirdDialogueView::GetInstance()->IsNormalEnd == false)
-        {
-            //重连
-            // ln_ws_send_voice_chat_interrupt("重连对话");
-        }
         // 取消退出对话的定时器(用户开始录音,说明要继续对话)
         StopCountUpTimer();
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingStart: 取消退出对话定时器");
@@ -3197,25 +3189,23 @@ extern "C" {
             int16_t currentView = view->GetCurrentView();
             int16_t currentSubView = view->GetCurrentSubView();
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingStart: currentView=%d, currentSubView=%d", currentView, currentSubView);
-            // 如果当前在哄睡界面(包括故事选择界面和故事模式),则不进行处理
-            // THUNDERBIRD_LULLABYVIEW_3: 故事选择界面(VAD已关闭)
-            // THUNDERBIRD_LULLABYVIEW_4: 故事模式(VAD已关闭)
             if(currentView == THUNDERBIRD_LULLABYVIEW && 
                currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_3)
             {
                 // isLullabyRecording = true;
-                ThunderBirdLullabyView::GetInstance()->listenAnimator->Start();
+                auto* lullabyView = ThunderBirdLullabyView::GetInstance();
+                if (lullabyView && lullabyView->listenAnimator) {
+                    lullabyView->listenAnimator->Start();
+                }
                 // ThunderBirdDialogueView::GetInstance()->listenIcon->SetVisible(true);
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingStart: 在哄睡界面(故事模式),忽略录音开始事件");
                 return;
             }
             if ((currentView == THUNDERBIRD_DIALOGUEVIEW && 
-                currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING) 
-                || ThunderBirdDialogueView::GetInstance()->DialogueFirst == false) {
+                currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING) ) {
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "录音开始,跳转到聆听状态");
                 view->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
-                ThunderBirdDialogueView::GetInstance()->IsNormalEnd = false;
-                // ThunderBirdDialogueView::GetInstance()->UpdateDialogueText("超认真聆听中");
+                // ThunderBirdDialogueView::GetInstance()->IsNormalEnd = false;
             }
             // 如果当前在哄睡界面,且不在故事选择状态,则跳转到故事选择状态
             else {
@@ -3227,18 +3217,8 @@ extern "C" {
     // 录音结束处理函数
     void ThunderBirdModel::HandleAudioRecordingEnd()
     {
-        // return ;//需要vad的时候在处理
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::HandleAudioRecordingEnd: 录音结束");
         
-        // 检查 WebSocket 连接状态,如果正在重连,等待重连完成
-        int wsState = ln_ws_get_connection_state();
-        bool wsConnected = (wsState == 2); // WS_STATE_CONNECTED = 2
-        
-        if (!wsConnected) {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleDialogueFunction: WebSocket未连接(状态=%d),等待连接完成", wsState);
-            // WebSocket 未连接,不执行操作,避免状态混乱
-            return;
-        }
         // 检查是否正在退出对话模式,如果是则不应该跳转到播放界面
         ThunderBirdPresenter* presenter = ThunderBirdPresenter::GetInstance();
         if (presenter != nullptr && !presenter->isDialogueing) {
@@ -3267,7 +3247,10 @@ extern "C" {
             }
             else if (currentView == THUNDERBIRD_LULLABYVIEW && 
                 currentSubView == ThunderBirdLullabyView::THUNDERBIRD_LULLABYVIEW_3 ) {
-                    ThunderBirdLullabyView::GetInstance()->listenAnimator->Stop();
+                    auto* lullabyView = ThunderBirdLullabyView::GetInstance();
+                    if (lullabyView && lullabyView->listenAnimator) {
+                        lullabyView->listenAnimator->Stop();
+                    }
                     if (ThunderBirdMainView::GetInstance() && ThunderBirdMainView::GetInstance()->listenIcon) {
                         ThunderBirdMainView::GetInstance()->listenIcon->SetVisible(false);
                     }
@@ -3444,6 +3427,12 @@ extern "C" {
         // 设置标志位,表示在对话模式中
         m_needGetTimelineExpression = true;
         
+        #ifdef SUPPORT_CAT1_SERVICE
+        // 进入对话模式时停止AT+CESQ命令,不获取4G信号
+        // cat_sync_timer_control(0);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnEnterDialogueMode: 停止cat1_getsignal和CESQ获取");
+        #endif
+        
         // 如果ReadlocalScreenImage() == 1(有屏保但不是作为对话表情),先关闭屏保
         int screenImageMode = ReadlocalScreenImage();
         if (screenImageMode == 1) {
@@ -3523,6 +3512,12 @@ extern "C" {
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitDialogueMode: 开始退出对话模式");
         
+        #ifdef SUPPORT_CAT1_SERVICE
+        // 退出对话模式时恢复AT+CESQ命令,恢复获取4G信号
+        // cat_sync_timer_control(1);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ThunderBirdModel::OnExitDialogueMode: 恢复cat1_getsignal和CESQ获取");
+        #endif
+        
         // 隐藏小绿点
         ThunderBirdMainView* mainView = ThunderBirdMainView::GetInstance();
         if (mainView != nullptr && mainView->listenIcon != nullptr) {
index 0dbe31f..79231a0 100644 (file)
@@ -443,6 +443,11 @@ namespace OHOS
             ln_ws_end_audio_chat();
             //清空音频文本队列
             ThunderBirdModel::GetInstance()->ClearAudioTextQueue();
+            //隐藏小绿点
+            auto* mainView = ThunderBirdMainView::GetInstance();
+            if (mainView && mainView->listenIcon) {
+                mainView->listenIcon->SetVisible(false);
+            }
             ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
         } else if(currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING) {
             // 检查 WebSocket 连接状态,如果正在重连,等待重连完成
@@ -454,9 +459,29 @@ namespace OHOS
                 // WebSocket 未连接,不执行操作,避免状态混乱
                 return;
             }
-            ThunderBirdMainView::ComplexOperationThread(true);
-            ThunderBirdDialogueView::GetInstance()->IsReconnect = true;
+            // 通过异步线程执行复杂操作,避免阻塞UI线程和栈溢出
+            #if 0
+            // ThunderBirdMainView::ComplexOperationThread(true);
+            #else
+            AI_ForceInterrupt();
+            int endRet = ln_ws_end_audio_chat();
+            // 只有在成功结束音频聊天时才发送打断请求(确保chat_id有效)
+            if (endRet == 0) {
+                ln_ws_send_voice_chat_interrupt("新对话开始");
+            } else {
+                WEARABLE_LOGW(WEARABLE_LOG_MODULE_APP, "HandleDialogueFunction: ln_ws_end_audio_chat failed (ret=%d), skip sending interrupt", endRet);
+            }
+            #endif // 0
+            auto* dialogueView = ThunderBirdDialogueView::GetInstance();
+            if (dialogueView) {
+                dialogueView->IsReconnect = true;
+            }
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始录音,跳转到聆听状态");
+            //显示小绿点
+            auto* mainView = ThunderBirdMainView::GetInstance();
+            if (mainView && mainView->listenIcon) {
+                mainView->listenIcon->SetVisible(true);
+            }
             // 开始录音
             ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
             // ln_ws_start_audio_chat(LN_AUDIO_CHAT_VOICE_CHAT_REQUEST);
@@ -499,12 +524,17 @@ namespace OHOS
                     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始录音");
                     // ThunderBirdModel::GetInstance()->StartRecording();
                     isLullabyRecording = true;
-                    ThunderBirdLullabyView::GetInstance()->listenAnimator->Start();
+                    auto* lullabyView = ThunderBirdLullabyView::GetInstance();
+                    if (lullabyView && lullabyView->listenAnimator) {
+                        lullabyView->listenAnimator->Start();
+                    }
                     int ret = ln_ws_start_audio_chat(LN_AUDIO_CHAT_CHOOSE_STORY_REQUEST);
                     if (ret != 0) {
                         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleLullabyFunction: 启动音频聊天失败 (ret=%d),重置标志位", ret);
                         isLullabyRecording = false;
-                        ThunderBirdLullabyView::GetInstance()->listenAnimator->Stop();
+                        if (lullabyView && lullabyView->listenAnimator) {
+                            lullabyView->listenAnimator->Stop();
+                        }
                     }
                     return;
                 }
@@ -514,14 +544,19 @@ namespace OHOS
                     // 停止录音并发送
                     // ThunderBirdModel::GetInstance()->StopRecording();
                     int ret = ln_ws_end_audio_chat();
+                    auto* lullabyView2 = ThunderBirdLullabyView::GetInstance();
                     if (ret != 0) {
                         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HandleLullabyFunction: 结束音频聊天失败 (ret=%d),可能没有活动的音频聊天", ret);
                         // 即使失败也重置标志位,避免状态不一致
                         isLullabyRecording = false;
-                        ThunderBirdLullabyView::GetInstance()->listenAnimator->Stop();
+                        if (lullabyView2 && lullabyView2->listenAnimator) {
+                            lullabyView2->listenAnimator->Stop();
+                        }
                     } else {
                         isLullabyRecording = false;
-                        ThunderBirdLullabyView::GetInstance()->listenAnimator->Stop();
+                        if (lullabyView2 && lullabyView2->listenAnimator) {
+                            lullabyView2->listenAnimator->Stop();
+                        }
                     }
                     //跳转到故事界面
                     // 进入哄睡模式时切换为眨眼表情
@@ -683,7 +718,10 @@ namespace OHOS
                             if(networkCount > 2)
                             {
                                 //关闭动画
-                                ThunderBirdGuideView::GetInstance()->bandAnimator->Stop();
+                                auto* guideView = ThunderBirdGuideView::GetInstance();
+                                if (guideView && guideView->bandAnimator) {
+                                    guideView->bandAnimator->Stop();
+                                }
                                 //重新连接网络
                                 do_custom_cmd_service_check_msg(CUSTOM_CMD_MSG_TYPE_CAT1_RESTART, NULL, 0);
                                 // 设置标志位:网络未连接
@@ -699,6 +737,10 @@ namespace OHOS
                         return true; // 不满足条件,不进入对话模式
                     }
 
+                    //降低帧率
+                    ThunderBirdModel::GetInstance()->LowFrequence();
+                    //常亮屏
+                    ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
                     ThunderBirdMainView::GetInstance()->ChangeView(THUNDERBIRD_GUIDEVIEW, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
                     isDialogueing = true;
                     //开启小绿点
@@ -1188,10 +1230,6 @@ namespace OHOS
                 }
                 // 音频已初始化,直接跳转界面
                 ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING);
-                if(ThunderBirdDialogueView::GetInstance()->DialogueFirst == true)
-                {
-                    ThunderBirdDialogueView::GetInstance()->dialogue_first();
-                }
                 if(currentView == THUNDERBIRD_GUIDEVIEW)
                 {
                     ThunderBirdDialogueView::GetInstance()->Isband(false);
@@ -1201,7 +1239,6 @@ namespace OHOS
                     ThunderBirdDialogueView::GetInstance()->Isband(true);
                 }    
                 isDialogueing = true;
-                ThunderBirdModel::GetInstance()->LowFrequence();//减低视频帧率
                 ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
                 // 进入对话模式时记录当前表情
                 ThunderBirdModel::GetInstance()->OnEnterDialogueMode();
@@ -1224,15 +1261,12 @@ namespace OHOS
                 #endif
                 
                 // 先停止定时器,避免在退出过程中继续触发
-                if(currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING)
-                {
-                    ThunderBirdModel::GetInstance()->StopCountUpTimer();
-                }
+                ThunderBirdModel::GetInstance()->StopCountUpTimer();
+                
                 ln_ws_end_audio_chat();//结束对话
 
                 // 停止实际的音频播放
                 // ai_media_play_stop();
-                ThunderBirdDialogueView::GetInstance()->DialogueFirst = true;
                 // 退出对话模式时恢复表情
                 AI_ForceInterrupt();
                 ln_ws_send_voice_chat_interrupt("退出对话");
index a35d84b..d9751c8 100644 (file)
@@ -1107,14 +1107,14 @@ void ln_ws_process_message(const ws_data_msg_t *data_msg, ws_command_t type)
     case WS_CMD_CHOOSE_STORY_RESPONSE:
     {
         if (data_msg) {
-            if (data_msg->text_content) {
+            if (data_msg->text_content[0] != '\0') {
                 push_text_to_ui(data_msg->text_content);
             }
             // 如果finished=true,通知ThunderBirdModel
             if (data_msg->finished) {
                 push_story_response_finished_notification(true);
             }
-            if (ln_http_download_is_initialized() && data_msg->audio_url && data_msg->audio_url[0] != '\0') {
+            if (ln_http_download_is_initialized() && data_msg->audio_url[0] != '\0') {
                 ln_http_download_file(data_msg->audio_url, 100*1000);
             }
         }
@@ -1124,14 +1124,14 @@ void ln_ws_process_message(const ws_data_msg_t *data_msg, ws_command_t type)
     case WS_CMD_RANDOM_STORY_RESPONSE:
     {
         if (data_msg) {
-            if (data_msg->text_content) {
+            if (data_msg->text_content[0] != '\0') {
                 push_text_to_ui(data_msg->text_content);
             }
             // 如果finished=true,通知ThunderBirdModel
             if (data_msg->finished) {
                 push_story_response_finished_notification(true);
             }
-            if (ln_http_download_is_initialized() && data_msg->audio_url && data_msg->audio_url[0] != '\0') {
+            if (ln_http_download_is_initialized() && data_msg->audio_url[0] != '\0') {
                 ln_http_download_file(data_msg->audio_url, 100*1000);
             }
         }