ln:解决表情下载过程中,如果来了表情下载命令,界面错误跳转到表情下载中,而后台还在下载表情bug
authorluozheng <1732036298@qq.com>
Mon, 27 Oct 2025 09:26:56 +0000 (17:26 +0800)
committerluozheng <1732036298@qq.com>
Mon, 27 Oct 2025 09:26:56 +0000 (17:26 +0800)
code/sdk/application/wearable/ln/service/msg_center/src/notify/debug_output_notification/debug_output_notification.cpp
code/sdk/zhihui/leiniao/imsl_ln/ln_api.c
code/sdk/zhihui/leiniao/imsl_ln/ln_api.h
code/sdk/zhihui/leiniao/imsl_ln/ln_api_device_info.c
code/sdk/zhihui/leiniao/imsl_ln/ln_api_emoji.c

index fd8b533..f157506 100644 (file)
@@ -158,6 +158,28 @@ namespace OHOS
         deviceInfo += "设备iccid:" + std::string(uapi_ln_get_device_iccid()) + "\n";
         deviceInfo += "设备version:" + std::string(uapi_ln_get_device_version()) + "\n";
         deviceInfo += "设备model:" + std::string(uapi_ln_get_device_model()) + "\n";
+
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "设备连接状态:%d", ln_ws_get_connection_state());
+        switch ((int)ln_ws_get_connection_state()) {
+            case 0:
+                deviceInfo += "设备连接状态:未连接 " +std::to_string(ln_ws_get_connection_state());
+                break;
+            case 1:
+                deviceInfo += "设备连接状态:连接中 " +std::to_string(ln_ws_get_connection_state());
+                break;
+            case 2:
+                deviceInfo += "设备连接状态:连接成功 " +std::to_string(ln_ws_get_connection_state());
+                break;
+            case 3:
+                deviceInfo += "设备连接状态:休眠状态 " +std::to_string(ln_ws_get_connection_state());
+                break;
+            case 4:
+                deviceInfo += "设备连接状态:重连执行中 " +std::to_string(ln_ws_get_connection_state());
+                break;
+            default:
+                deviceInfo += "设备连接状态:未知状态 " +std::to_string(ln_ws_get_connection_state());
+                break;
+        }
         return deviceInfo;
     }
 
index 094d34d..b10d92c 100644 (file)
@@ -43,6 +43,7 @@ int g_ln_is_device_bound = 0;            /* 设备绑定状态 */
 char g_ln_device_user_id[64] = {0};      // 设备绑定用户ID
 static int g_ln_is_file_downloading = 0; // 是否正在下载文件
 char g_ln_character_id[64] = {0};        // 角色ID
+static int g_ln_file_download_type = LN_FILE_DOWNLOAD_TYPE_NONE; // 文件下载类型
 
 /* 简单的字符串读写(以.bin形式读写原始字节,末尾补'\0')*/
 static int ln_read_string_file(const char *file_path, char **out_str)
@@ -389,6 +390,17 @@ int uapi_ln_is_file_downloading(void)
     return g_ln_is_file_downloading;
 }
 
+/* 获取当前文件下载类型 */
+int uapi_ln_get_file_download_type(void)
+{
+    return g_ln_file_download_type;
+}
+/* 设置当前文件下载类型 */
+void uapi_ln_set_file_download_type(int type)
+{
+    g_ln_file_download_type = type;
+}
+
 /* 获取ota包大小 */
 static int g_ln_ota_package_size = 0;
 int uapi_ln_get_ota_package_size(void)
@@ -849,11 +861,15 @@ void ln_ws_process_message(const ws_data_msg_t *data_msg, ws_command_t type)
     //     return;
     // }
 
-    const char *json_str = data_msg->raw_json;
+    const char *json_str = NULL;
+    if(data_msg->raw_json)
+    {
+        json_str = data_msg->raw_json;
+    }
     const char *message_id = data_msg->message_id;
     const char *cmd_str = data_msg->command_str;
 
-    printf("[WS] cmd=%d message_id=%s cmd_str=%s\n", (int)type, message_id ? message_id : "", cmd_str ? cmd_str : "");
+    // printf("[WS] cmd=%d message_id=%s cmd_str=%s\n", (int)type, message_id ? message_id : "", cmd_str ? cmd_str : "");
 
     switch (type)
     {
@@ -1588,7 +1604,14 @@ static void ln_http_server_send_task(void const *arg)
         else if (mail.cmd == LN_HTTP_SERVICE_CMD_SCHEDULE_REMINDER)
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN_HTTP_SERVICE_CMD_SCHEDULE_REMINDER] 日程提醒");
-            ln_parse_schedule_reminder(mail.data, mail.len);
+            if(uapi_ln_get_file_download_type() == LN_FILE_DOWNLOAD_TYPE_NONE && uapi_ln_is_file_downloading() == 0)
+            {
+                ln_parse_schedule_reminder(mail.data, mail.len);
+            }
+            else
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN_HTTP_SERVICE_CMD_SCHEDULE_REMINDER] 文件下载类型:%d,文件下载状态:%d,跳过处理",uapi_ln_get_file_download_type(), uapi_ln_is_file_downloading());
+            }
         }
         else if(mail.cmd == LN_HTTP_SERVICE_CMD_TIMELINE_GET_STATUS)
         {
index 242f0af..f7bcd64 100644 (file)
@@ -199,6 +199,14 @@ typedef struct
     char *scheduleName; // 日程名称
 } ScheduleReminderConfig;
 
+/* 文件下载类型 */
+typedef enum
+{
+    LN_FILE_DOWNLOAD_TYPE_NONE = 0,          /* 无下载 */
+    LN_FILE_DOWNLOAD_TYPE_SCREEN_IMAGE = 1, /* 屏保下载 */
+    LN_FILE_DOWNLOAD_TYPE_EMOJI = 2,        /* 表情下载 */
+} LnFileDownloadType;
+
 /* 初始化 LN HTTP 服务 */
 errcode_t uapi_ln_http_server_init(void);
 /* 通用发送接口:向 LN HTTP 发送队列投递消息 */
@@ -233,6 +241,10 @@ char *uapi_ln_get_character_id(void);
 void uapi_ln_set_character_id(const char *character_id);
 //获取当前是否正在下载文件
 int uapi_ln_is_file_downloading(void);
+//获取当前文件下载类型,0:无下载,1:屏保下载,2:表情下载
+int uapi_ln_get_file_download_type(void);
+//设置当前文件下载类型
+void uapi_ln_set_file_download_type(int type);
 /* 获取ota包大小 */
 int uapi_ln_get_ota_package_size(void);
 /* 设置ota包大小 */
index 7d97a24..5513c5e 100644 (file)
@@ -126,6 +126,7 @@ void ln_download_screen_image(void)
         //如果本地有文件先删除文件
         uapi_delete_files(LN_DEVICE_SCREEN_IMAGE_FILE);
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[DEVICE_CHARACTER] 屏保下载URL: %s, 保存路径: %s", url, save_path);
+        uapi_ln_set_file_download_type(LN_FILE_DOWNLOAD_TYPE_SCREEN_IMAGE);
         int ret = uapi_ln_download_file_resume_with_retry(url, save_path, 5);
         if (ret == 0)
         {
@@ -137,6 +138,8 @@ void ln_download_screen_image(void)
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DEVICE_CHARACTER] 屏保下载失败");
             push_download_fail_notification(DOWNLOAD_FILE_TYPE_SCREEN_IMAGE);
         }
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DEVICE_CHARACTER] 屏保下载结束,ret=%d", ret);
+        uapi_ln_set_file_download_type(LN_FILE_DOWNLOAD_TYPE_NONE);
         /* 一次性使用后释放 */
         free(g_ln_pending_screen_image_url);
         g_ln_pending_screen_image_url = NULL;
@@ -275,7 +278,15 @@ void ln_parse_character_config(const char *json_buf, int json_len)
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DEVICE_CHARACTER] 屏保图片不为空,下载屏保图片");
         /* 解析阶段先拷贝URL,避免稍后清理结构体后URL丢失 */
         ln_set_pending_screen_image(g_ln_character_config.avatar_screen_image);
-        push_download_file_notification(DOWNLOAD_FILE_TYPE_SCREEN_IMAGE);
+        if(uapi_ln_get_file_download_type() == LN_FILE_DOWNLOAD_TYPE_NONE && uapi_ln_is_file_downloading() == 0)
+        {
+            push_download_file_notification(DOWNLOAD_FILE_TYPE_SCREEN_IMAGE);
+        }
+        else
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN_HTTP_SERVICE_CMD_DOWNLOAD_SCREEN_IMAGE] 文件下载类型:%d,文件下载状态:%d,跳过处理",uapi_ln_get_file_download_type(), uapi_ln_is_file_downloading());
+        }
+
         // 改为无参发送:由接收线程读取全局配置并下载
         //do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_DOWNLOAD_SCREEN_IMAGE, NULL, 0);
     }
index 48dd484..9d0c533 100644 (file)
@@ -499,6 +499,7 @@ static void ln_emoji_download(void *arg)
 void ln_start_emoji_download(void)
 {
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DOWNLOAD] 启动表情下载任务");
+    uapi_ln_set_file_download_type(LN_FILE_DOWNLOAD_TYPE_EMOJI);
     if (g_emoji_package.emojiCount <= 0 || !g_emoji_package.emojis)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DOWNLOAD] no emojis to download");
@@ -506,6 +507,7 @@ void ln_start_emoji_download(void)
     }
     // 下载表情
     ln_emoji_download(&g_emoji_package);
+    uapi_ln_set_file_download_type(LN_FILE_DOWNLOAD_TYPE_NONE);
 }
 
 /* 解析下载表情命令JSON */
@@ -665,10 +667,16 @@ void ln_parse_download_emoji(const char *json_buf, int json_len)
     // 解析完成后启动下载任务(通过发送队列触发下载逻辑)
     // 说明:下载所需信息已填充到全局 g_emoji_package,触发命令无需携带负载
     //通知ui切换slice下载表情
-    push_download_file_notification(DOWNLOAD_FILE_TYPE_EMOJI);
-    //do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_DOWNLOAD_EMOJI, NULL, 0);
-
-    ln_ws_send_download_emoji_ack(g_emoji_package.characterId, g_emoji_package.eyesColor, g_emoji_package.eyesShape, true, "下载表情");
+    if(uapi_ln_get_file_download_type() == LN_FILE_DOWNLOAD_TYPE_NONE && uapi_ln_is_file_downloading() == 0)
+    {
+        push_download_file_notification(DOWNLOAD_FILE_TYPE_EMOJI);
+        ln_ws_send_download_emoji_ack(g_emoji_package.characterId, g_emoji_package.eyesColor, g_emoji_package.eyesShape, true, "下载表情");
+    }
+    else
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[LN_HTTP_SERVICE_CMD_DOWNLOAD_EMOJI] 文件下载类型:%d,文件下载状态:%d,跳过处理",uapi_ln_get_file_download_type(), uapi_ln_is_file_downloading());
+        ln_ws_send_download_emoji_ack(g_emoji_package.characterId, g_emoji_package.eyesColor, g_emoji_package.eyesShape, false, "已有文件正在下载中,跳过下载");
+    }
     // 清理资源
     cJSON_Delete(root);
     free(text);