From 697a0a74fc1053c7bcf4ae39ffcd03e4a5a98a65 Mon Sep 17 00:00:00 2001 From: xue <2144439972@qq.com> Date: Sun, 28 Dec 2025 15:45:14 +0800 Subject: [PATCH] =?utf8?q?=E5=9B=9E=E9=80=80=E5=AF=B9=E8=AF=9D=E7=BA=BF?= =?utf8?q?=E7=A8=8B=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../thunderbird/src/ThunderBirdMainView.cpp | 38 ++++----- .../thunderbird/src/ThunderBirdModel.cpp | 85 +++++++++---------- .../thunderbird/src/ThunderBirdPresenter.cpp | 68 +++++++++++---- code/sdk/zhihui/leiniao/imsl_ln/ln_api.c | 8 +- 4 files changed, 114 insertions(+), 85 deletions(-) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp index 49c5df61b..17c13b677 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdMainView.cpp @@ -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) diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp index 140a93a4a..a1989ba41 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp @@ -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(×tamp) == ERRCODE_SUCC) { + m_statusChangeTime = timestamp; + } else { + m_statusChangeTime = 0; + } WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Status changed: %d -> %d", static_cast(oldStatus), static_cast(status)); @@ -1975,7 +1980,7 @@ extern "C" { void ThunderBirdModel::UpdateDeviceStatus() { uint32_t currentTime = 0; - uapi_get_timestampe_ss(¤tTime); + uapi_get_timestampe_ss(¤tTime); 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) { diff --git a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp index 0dbe31ff3..79231a007 100644 --- a/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp +++ b/code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp @@ -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("退出对话"); diff --git a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c index a35d84b77..d9751c8dc 100644 --- a/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c +++ b/code/sdk/zhihui/leiniao/imsl_ln/ln_api.c @@ -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); } } -- 2.17.1