优化token获取业务逻辑 2357/1 2357/head 2358/target/1
authorCaisking <Casiking@zhihuishixun.com>
Sun, 21 Sep 2025 09:40:01 +0000 (17:40 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Sun, 21 Sep 2025 09:40:01 +0000 (17:40 +0800)
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/include/ThunderBirdModel.h
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdModel.cpp
code/sdk/application/wearable/ln/nativeapp/nativeui/thunderbird/src/ThunderBirdPresenter.cpp
code/sdk/open_source/openharmony/utils/native/lite/kv_store/src/kvstore_impl_posix/kv_store.c

index 4cfa4c4..9577ceb 100644 (file)
@@ -199,6 +199,7 @@ namespace OHOS
         bool m_networkStatusChanged;   // 网络状态变化标志位
 
         bool is_all_services_ready = false;
+        bool init_falg = false;
     };
 }
 
index 149cfe1..20270ef 100644 (file)
@@ -70,6 +70,8 @@
      {
          // 初始化时加载提醒数据
          // LoadRemindersFromFile();
+         //创建kv文件夹
+         uapi_create_folder("/user/system/kvstore/");
          // 读取绑定状态
          char temp[10] = { 0 };
          (void)UtilsGetValue("bind_status", temp, 10);
      // ==================== 对话文本管理函数 ====================
      std::string ThunderBirdModel::GetTextStr()
      { 
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "获取对话文本: %s", m_currentTimeStr.c_str());
          return m_currentTimeStr;
      }
      
      void ThunderBirdModel::SetTextStr(const char *textId)
      {
          if (textId == nullptr) {
-             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetTextStr: textId is null");
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "设置对话文本: textId is null");
              return;
          }
 
          
          // 添加文本内容
          m_currentTimeStr = textId;
-         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetTextStr: added text, current length: %zu", m_currentTimeStr.length());
+         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "设置对话文本: %s", m_currentTimeStr.c_str());
      }
      
      void ThunderBirdModel::ClearTextStr()
         // 更新网络状态信息(包括SIM卡、信号强度、网络连接等)
         UpdateNetworkStatus();
         
-        // 检查网络状态是否发生变化
-        if (IsNetworkStatusChanged()) {
-            if (HasNetwork()) {
-                // 网络连接成功,调用HTTP服务获取设备Token
-                do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_GET_DEVICE_TOKEN, NULL, 0);
-                // 获取一下OTA 是否有最新版本
-                ota_update_boot();
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Network connected, calling HTTP service");
-                #if JUHEPINGTAI
-                uapi_init_all_websocket_servers();
-                uapi_start_all_websocket_servers(); // 连接服务器
-                #endif
-            } else {
-                // 网络断开,记录状态变化日志
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Network disconnected");
+        // 检查网络状态是否有网
+        if(HasNetwork())
+        {
+            if(get_is_ln_get_device_token_success() == 0)
+            {
+                    do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_GET_DEVICE_TOKEN, NULL, 0);
+            }
+            else
+            {
+                if (init_falg == false) 
+                {
+                    // 网络连接成功,调用HTTP服务获取设备Token
+                    // 获取一下OTA 是否有最新版本
+                    ota_update_boot();
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Network connected, calling HTTP service");
+                    #if JUHEPINGTAI
+                    uapi_init_all_websocket_servers();
+                    uapi_start_all_websocket_servers(); // 连接服务器
+                    #endif
+                    init_falg = true;
+                }
             }
-            // 重置网络状态变化标志位,避免重复处理
-            SetNetworkStatusChanged(false);
         }
         
         #if JUHEPINGTAI
         }
         
         // 记录网络状态更新日志
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Network status updated: sim=%d, power=%d, signal=%d, network=%d, type=%d, hasNetwork=%d", 
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"Network status updated: sim=%d, power=%d, signal=%d, network=%d, type=%d, hasNetwork=%d", 
                      m_simStatus, m_cat1PowerStatus, m_signalStrength, m_networkStatus, m_networkType, m_hasNetwork);
     }
 
     {
     }
 
+    /**
+     * @brief WebSocket AI答案回调函数
+     * @param buf AI返回的文本内容(可能为NULL)
+     * @param type 消息类型
+     * @note 此函数由WebSocket服务器管理器调用,SetTextStr会进行深拷贝,内存安全
+     */
     void ws_register_ai_answer_cb(char *buf, uint8_t type)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ws_register_ai_answer_cb:%s\n", buf ? buf : "<null>");
         if (buf && buf[0] != '\0') {
             // 先写入文本,再置对话标志,避免UI读到标志已置但文本尚未更新
-            ThunderBirdModel::GetInstance()->SetTextStr(buf);
             set_start_conversation_flag(START_CONVERSATION_FLAG_START);
+            
+            // SetTextStr使用std::string,会自动进行深拷贝,内存安全
+            // ThunderBirdModel::GetInstance()->SetTextStr(buf);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "buf processed: %s", buf);
         } else {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ws_register_ai_answer_cb: empty buf, skip update");
         }
index 96c1949..3374801 100644 (file)
@@ -318,8 +318,12 @@ namespace OHOS
     void ThunderBirdPresenter::HandleDialogueFunction(int16_t currentView, int16_t currentSubView)
     {
         bool flag = ThunderBirdModel::GetInstance()->Get_is_all_services_ready();
-        if (currentView == THUNDERBIRD_DIALOGUEVIEW && 
-            currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING && flag == true) {
+        if(flag == false)
+        {
+            return;
+        }
+
+        if (currentView == THUNDERBIRD_DIALOGUEVIEW && currentSubView == ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_LISTENING) {
             // 停止录音并发送
             // ThunderBirdModel::GetInstance()->StopRecording();
             ThunderBirdMainView::GetInstance()->ChangeView(currentView, THUNDERBIRD_DIALOGUEVIEW, ThunderBirdDialogueView::THUNDERBIRD_DIALOGUEVIEW_SPEAKING);
index f13f0c8..86b238a 100644 (file)
@@ -150,7 +150,7 @@ static int InitKv(const char* dataPath)
         free(kvPath);
         return EC_FAILURE;
     }
-    // printf("kvPath: %s\n", kvPath);
+    printf("kvPath: %s\n", kvPath);
     if (access(kvPath, F_OK) == F_OK) {
         free(kvPath);
         return EC_SUCCESS;