total_written += written;
}
}
+ else
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DOWNLOAD] recv_res = %d, break", recv_res);
+ break;
+ }
} while (client_data.isMore);
if (client_data.responseContentLen == 0)
case WS_CMD_DEVICE_BIND: {
printf("[WS] DeviceBind:设备绑定\n");
push_bind_and_unbind_notification(LN_DEVICE_BIND_STATUS_BOUND);
- if(json_str)
- {
- // ln_parse_device_bind(json_str, (int)strlen(json_str));
- }
break;
}
case WS_CMD_DEVICE_UNBIND: {
printf("[WS] DeviceUnbind:设备解绑\n");
push_bind_and_unbind_notification(LN_DEVICE_BIND_STATUS_UNBOUND);
- if(json_str)
- {
- // ln_parse_device_unbind(json_str, (int)strlen(json_str));
- }
break;
}
case WS_CMD_SCHEDULE_REMINDER: {
printf("LN_HTTP_SERVICE_CMD_EMOJI_REPORT_ALL:上报所有角色表情组状态\n");
// ln_emoji_report_all(mail.data);
}
+ else if (mail.cmd == LN_HTTP_SERVICE_CMD_DOWNLOAD_SCREEN_IMAGE)
+ {
+ printf("LN_HTTP_SERVICE_CMD_DOWNLOAD_SCREEN_IMAGE:下载屏保文件\n");
+ if(mail.data)
+ {
+ ln_download_file_req_t req;
+ memcpy(&req, mail.data, sizeof(req));
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DEVICE_CHARACTER] 屏保下载URL: %s, 保存路径: %s", req.url, req.save_path);
+ errcode_t ret = uapi_ln_download_file(req.url, req.save_path);
+ if (ERRCODE_SUCC != ret)
+ {
+ int i = 1;
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DEVICE_CHARACTER] 屏保下载失败,重试3次,第%d次", i);
+ // 如果下载失败重试3次
+ for (i = 1; i <= 3; i++)
+ {
+ ret = uapi_ln_download_file(req.url, req.save_path);
+ if (ERRCODE_SUCC == ret)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DEVICE_CHARACTER] 屏保下载成功,第%d次", i);
+ break;
+ }
+ }
+ }
+ /* 释放由发送方分配的指针 */
+ if (req.url) { free(req.url); req.url = NULL; }
+ if (req.save_path) { free(req.save_path); req.save_path = NULL; }
+ }
+ }
if (mail.data != NULL)
{
printf("free(mail.data)\n");
}
cJSON *errorCode = cJSON_GetObjectItem(root, "errorCode");
+ cJSON *message = cJSON_GetObjectItem(root, "message");
if (errorCode && !cJSON_IsNull(errorCode))
{
- printf("[DEVICE_CHARACTER] server error: %s\n",
- cJSON_IsString(errorCode) ? errorCode->valuestring : "unknown");
+ printf("[DEVICE_CHARACTER] server error: %s\n",cJSON_IsString(errorCode) ? errorCode->valuestring : "unknown");
+ printf("[DEVICE_CHARACTER] server message: %s\n",cJSON_IsString(message) ? message->valuestring : "unknown");
+ // 推送协议错误通知到UI
+ push_api_error_notification(cJSON_IsString(message) ? message->valuestring : "unknown");
cJSON_Delete(root);
free(text);
return;
ln_assign_dup(&g_ln_character_config.character_name,
(cname && cJSON_IsString(cname)) ? cname->valuestring : "");
+
+ // "data": {
+ // "characterId": "char_001",
+ // "characterName": "小艾",
+ // "characterAvatar": {
+ // "eyesShape": "upturned-eyes",
+ // "hairColor": "blue",
+ // "eyesColor": "green",
+ // "hairStyle": "side-parted-comma",
+ // "deviceScreen": "https://example.com/new_avatar.bin",
+ // "screenImageAsEmoji": true
+ // }
+
/* 头像配置 */
cJSON *avatar = cJSON_GetObjectItem(data, "characterAvatar");
if (avatar && cJSON_IsObject(avatar))
cJSON *eyesColor = cJSON_GetObjectItem(avatar, "eyesColor");
cJSON *hairStyle = cJSON_GetObjectItem(avatar, "hairStyle");
cJSON *eyesShape = cJSON_GetObjectItem(avatar, "eyesShape");
- cJSON *screenImage = cJSON_GetObjectItem(avatar, "screenImage");
- cJSON *screenImageAsEmoji = cJSON_GetObjectItem(avatar, "screenImageAsEmoji");
+ cJSON *deviceScreen = cJSON_GetObjectItem(avatar, "deviceScreen");
+ cJSON *deviceScreenAsEmoji = cJSON_GetObjectItem(avatar, "screenImageAsEmoji");
ln_assign_dup(&g_ln_character_config.avatar_hair_color,
(hairColor && cJSON_IsString(hairColor)) ? hairColor->valuestring : "");
(eyesShape && cJSON_IsString(eyesShape)) ? eyesShape->valuestring : "");
ln_assign_dup(&g_ln_character_config.avatar_screen_image,
- (screenImage && cJSON_IsString(screenImage)) ? screenImage->valuestring : "");
+ (deviceScreen && cJSON_IsString(deviceScreen)) ? deviceScreen->valuestring : "");
g_ln_character_config.avatar_screen_image_as_emoji =
- (screenImageAsEmoji && cJSON_IsBool(screenImageAsEmoji)) ? (cJSON_IsTrue(screenImageAsEmoji) ? 1 : 0) : 0;
+ (deviceScreenAsEmoji && cJSON_IsBool(deviceScreenAsEmoji)) ? (cJSON_IsTrue(deviceScreenAsEmoji) ? 1 : 0) : 0;
}
else
{
printf(" avatar_screen_image_as_emoji: %d\n", g_ln_character_config.avatar_screen_image_as_emoji);
// 如果屏保图片不为空,则保存到本地
- int ret = ERRCODE_SUCC;
- if (g_ln_character_config.avatar_screen_image)
+ if (g_ln_character_config.avatar_screen_image && strlen(g_ln_character_config.avatar_screen_image) > 0
+ && g_ln_character_config.avatar_screen_image_as_emoji == 1)
{
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DEVICE_CHARACTER] 屏保图片不为空,下载屏保图片");
// 下载屏保图片,eg:"https://example.com/new_avatar.bin"
- ret = uapi_ln_download_file(g_ln_character_config.avatar_screen_image, LN_DEVICE_SCREEN_IMAGE_FILE);
- if (ERRCODE_SUCC != ret)
+ ln_download_file_req_t req;
+ memset(&req, 0, sizeof(req));
+ /* 分配与拷贝,发送方分配,接收方负责释放 */
+ if (g_ln_character_config.avatar_screen_image) {
+ size_t ulen = strlen(g_ln_character_config.avatar_screen_image);
+ req.url = (char *)malloc(ulen + 1);
+ if (req.url) {
+ memcpy(req.url, g_ln_character_config.avatar_screen_image, ulen + 1);
+ }
+ }
{
- int i = 1;
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DEVICE_CHARACTER] 屏保下载失败,重试3次,第%d次", i);
- // 如果下载失败重试3次
- for (i = 1; i <= 3; i++)
- {
- ret = uapi_ln_download_file(g_ln_character_config.avatar_screen_image, LN_DEVICE_SCREEN_IMAGE_FILE);
- if (ERRCODE_SUCC == ret)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DEVICE_CHARACTER] 屏保下载成功,第%d次", i);
- break;
- }
+ const char *save = LN_DEVICE_SCREEN_IMAGE_FILE;
+ size_t slen = strlen(save);
+ req.save_path = (char *)malloc(slen + 1);
+ if (req.save_path) {
+ memcpy(req.save_path, save, slen + 1);
}
}
- }
- if (ERRCODE_SUCC != ret)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[DEVICE_CHARACTER] 屏保下载失败,最终失败");
+ do_ln_http_server_send_data(LN_HTTP_SERVICE_CMD_DOWNLOAD_SCREEN_IMAGE, (char *)&req, sizeof(req));
+
}
/* 推送角色配置更改通知 */
g_ln_character_config.avatar_hair_color,
g_ln_character_config.avatar_eyes_color,
g_ln_character_config.avatar_hair_style,
- ret == ERRCODE_SUCC ? 1 : 0);
+ g_ln_character_config.avatar_screen_image_as_emoji);
cJSON_Delete(root);
free(text);
if (code != 200)
{
printf("device getCharacter: HTTP %d\n", code);
- if (clientData.responseBuf && clientData.responseBufLen > 0)
- {
- // int real_len = clientData.responseContentLen > 0 ? clientData.responseContentLen : clientData.responseBufLen;
- printf("device getCharacter: responseBuf=%s\n", clientData.responseBuf);
- }
goto end;
}
if (clientData.responseBuf && clientData.responseBufLen > 0)
{
int real_len = clientData.responseContentLen > 0 ? clientData.responseContentLen : clientData.responseBufLen;
+ ln_parse_character_config(clientData.responseBuf, real_len);
}
end: