}
// 加载Message文件
- bool MessageModel::LoadMessagesFromStorage()
- {
- // 加载消息过滤文件
- filtration_file_read();
- std::ifstream file(MESSAGE_JSON_FILE);
- if (!file.is_open())
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file for reading");
- return false;
- }
-
- std::string fileContent((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
- file.close();
-
- cJSON *root = cJSON_Parse(fileContent.c_str());
- if (!root)
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error parsing JSON file");
- return false;
- }
-
- cJSON *messageArray = cJSON_GetObjectItem(root, "messages");
- if (!messageArray || !cJSON_IsArray(messageArray))
- {
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid data format in JSON file");
- cJSON_Delete(root);
- return false;
- }
-
- // 清空现有数据
- // MessageVector.clear();
-
- // 将JSON数据转换为MessageData并添加到消息数组中
- int dataCount = cJSON_GetArraySize(messageArray);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dataCount is %d", dataCount);
- for (int i = 0; i < dataCount; i++)
- {
- cJSON *item = cJSON_GetArrayItem(messageArray, i);
-
- cJSON *isRead = cJSON_GetObjectItem(item, "isRead");
- cJSON *labelDetails = cJSON_GetObjectItem(item, "labelDetails");
- cJSON *labelTitle = cJSON_GetObjectItem(item, "labelTitle");
- cJSON *timestamp = cJSON_GetObjectItem(item, "timestamp");
-
- MessageData data;
- data.isRead = cJSON_IsTrue(isRead) ? true : false;
- data.labelDetails = labelDetails->valuestring;
- data.labelTitle = labelTitle->valuestring;
- data.timestamp = timestamp->valuedouble;
-
- char labelTime[20];
- if (uapi_get_TIME_STR(data.timestamp, labelTime, '.', ':', DATE_Y_M_D_H_M) != ERRCODE_SUCC)
- {
- data.labelTime = std::string("--");
- }
- else
- {
- data.labelTime = std::string(labelTime);
- }
-
- MessageVector.push_back(data);
- }
-
- cJSON_Delete(root);
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Messages loaded from storage successfully");
- return true;
+ bool MessageModel::LoadMessagesFromStorage()
+ {
+ // 加载消息过滤文件
+ filtration_file_read();
+
+ std::ifstream file(MESSAGE_JSON_FILE);
+ if (!file.is_open())
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file for reading");
+ return false;
+ }
+
+ std::string fileContent((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
+ file.close();
+
+ cJSON *root = cJSON_Parse(fileContent.c_str());
+ if (!root)
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error parsing JSON file");
+ return false; // JSON 解析失败,直接返回
+ }
+
+ cJSON *messageArray = cJSON_GetObjectItem(root, "messages");
+ if (!messageArray || !cJSON_IsArray(messageArray))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid data format in JSON file");
+ cJSON_Delete(root);
+ return false; // 无效的消息数组,直接返回
+ }
+
+ // 清空现有数据
+ MessageVector.clear();
+
+ // 将JSON数据转换为MessageData并添加到消息数组中
+ int dataCount = cJSON_GetArraySize(messageArray);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dataCount is %d", dataCount);
+
+ for (int i = 0; i < dataCount; i++)
+ {
+ cJSON *item = cJSON_GetArrayItem(messageArray, i);
+ if (!item) // 检查数组项是否有效
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid item at index %d", i);
+ cJSON_Delete(root);
+ return false; // 找到无效项,直接返回
+ }
+
+ // 验证并获取各字段
+ cJSON *isRead = cJSON_GetObjectItem(item, "isRead");
+ cJSON *labelDetails = cJSON_GetObjectItem(item, "labelDetails");
+ cJSON *labelTitle = cJSON_GetObjectItem(item, "labelTitle");
+ cJSON *timestamp = cJSON_GetObjectItem(item, "timestamp");
+
+ // 检查必要字段是否存在
+ if (!isRead || !cJSON_IsBool(isRead) ||
+ !timestamp || !cJSON_IsNumber(timestamp))
+ {
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid message format at index %d", i);
+ cJSON_Delete(root);
+ return false; // 找到无效数据格式,直接返回
+ }
+
+ // 如果所有必要字段有效,则解析并构造 MessageData
+ MessageData data;
+ data.isRead = cJSON_IsTrue(isRead);
+
+ // 允许 labelDetails 和 labelTitle 字段为空字符串
+ data.labelDetails = (labelDetails && cJSON_IsString(labelDetails)) ? labelDetails->valuestring : "";
+ data.labelTitle = (labelTitle && cJSON_IsString(labelTitle)) ? labelTitle->valuestring : "";
+ data.timestamp = timestamp->valuedouble;
+
+ // 处理时间字符串
+ char labelTime[20];
+ if (uapi_get_TIME_STR(data.timestamp, labelTime, '.', ':', DATE_Y_M_D_H_M) != ERRCODE_SUCC)
+ {
+ data.labelTime = std::string("--");
+ }
+ else
+ {
+ data.labelTime = std::string(labelTime);
+ }
+
+ MessageVector.push_back(data);
+ }
+
+ cJSON_Delete(root);
+ WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Messages loaded from storage successfully");
+ return true; // 所有消息成功加载
}
-
// 保存Message文件
bool MessageModel::SaveMessagesToStorage()
{