Merge #2173 into sdk650pathc0423 from refs/changes/2173/head 2175/target/1
author袁清梦 <3449750381@qq.com>
Fri, 29 Aug 2025 06:59:18 +0000 (06:59 +0000)
committer袁清梦 <3449750381@qq.com>
Fri, 29 Aug 2025 06:59:18 +0000 (06:59 +0000)
Code review from 袁清梦

* refs/changes/2173/head: (2 commits squashed)

  - 增加消息提醒

  - Merge branch &#39;sdk650pathc0423&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into sdk650pathc0423

Signed-off-by: Caisking <3449750381@qq.com>
Merged-by: Caisking <3449750381@qq.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/2173
code/sdk/application/wearable/fd230/nativeapp/nativeui/message/include/MessageModel.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/message/src/MessageModel.cpp

index ce8f886..08bc09e 100644 (file)
@@ -7,6 +7,7 @@
 #include <bleEvent.h>
 #include "bleService.h"
 #include "bleInstruct.h"
+#include "bleANCS.h"
 #endif
 
 #include "message/include/MessagePresenter.h"
@@ -35,7 +36,9 @@ public:
   void InitMessageListItems(); // 初始化消息列表项
   const MessageListItem *GetMessageListItems() const; // 获取消息列表项
   uint8_t GetMessageCount() const;                    // 获取消息数量
-  // void AddMessageData(ancs_data_info_t *messageInfo); // 增加消息项
+  #ifdef SUPPORT_BLE_SERVICE
+  void AddMessageData(ancs_data_info_t *messageInfo); // 增加消息项
+  #endif
   bool LoadMessagesFromStorage(); // 初始化信息数组 {开机调用一次}
   bool SaveMessagesToStorage();   // 保存信息数组   {关机时候调用}
   bool SetMessageAsRead();        // 设置当前项已读
index d630382..42d3462 100644 (file)
@@ -13,9 +13,9 @@
 #include "main/include/MainViewSample.h"
 #include "NativeAbility.h"
 #include "UiConfig.h"
-
-// #include "bleANCS.h"
-
+#ifdef SUPPORT_BLE_SERVICE
+#include "bleANCS.h"
+#endif
 #include "broadcast_feature.h"
 #include "broadcast_service.h"
 #include "cJSON.h"
 #include "message/include/MessageControlView.h"
 #include "message/include/MessageView.h"
 
-// #include "traing/include/TraingModel.h"
+#include "traing/include/TraingModel.h"
 
 #define MESSAGE_JSON_FILE "user/userdata/ancs.json"
 #define MESSAGE_JSON_DIR "user/userdata/message/"
 #define PRINTFDATA 0
 
-// #include "message_notification.h"
+#include "message_notification.h"
 #include "msg_center.h"
 #include "notification_manager.h"
 
@@ -62,12 +62,12 @@ extern "C" errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time,
 
 // #include "msg_center_customerC.h"
 
-// void show_notify_messgae() {
-//   // printf("show_notify_messgae\n");
-//   OHOS::NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_THREE);
-//   OHOS::NotificationManager::GetInstance()->ShowNotify(
-//       OHOS::CreateMessageView, TOPIC_EVENT_MESSAGENOTE, true);
-// }
+void show_notify_messgae() {
+  // printf("show_notify_messgae\n");
+  OHOS::NotificationManager::GetInstance()->SetNotifyPriority(PRIORITY_THREE);
+  OHOS::NotificationManager::GetInstance()->ShowNotify(
+      OHOS::CreateMessageView, TOPIC_EVENT_MESSAGENOTE, true);
+}
 
 #ifdef __cplusplus
 extern "C" {
@@ -140,102 +140,102 @@ static void Notify(void *args, const Topic topic, Request *request) {
     return;
   }
 
-  // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Received request %d", request->msgId);
-
-  // if (request->msgId == TOPIC_EVENT_MESSAGE_UPDATA) {
-  //   WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-  //                 "Processing TOPIC_EVENT_MESSAGE_UPDATA");
-
-  //   if (request->data == NULL) {
-  //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Received NULL data");
-  //     return;
-  //   }
-
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Received request %d",
-  //                 request->msgId);
-  //   ancs_data_info_t *messageInfo = (ancs_data_info_t *)request->data;
-  //   ancs_data_info_t messageInfo_;
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "messageInfo");
-
-  //   messageInfo_.title = (char *)malloc(messageInfo->titlelen + 1);
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "messageInfo.title");
-  //   if (messageInfo_.title == NULL) {
-  //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-  //                   "Failed to allocate memory for title");
-  //     return;
-  //   }
-
-  //   memcpy(messageInfo_.title, messageInfo->title, messageInfo->titlelen);
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "memcpy");
-  //   messageInfo_.title[messageInfo->titlelen] = '\0';
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
-  //                 "messageInfo.title[messageInfo->titlelen]");
-  //   messageInfo_.msg = (char *)malloc(messageInfo->msglen + 1);
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "messageInfo_.msg");
-  //   if (messageInfo_.msg == NULL) {
-  //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-  //                   "Failed to allocate memory for message");
-  //     free(messageInfo_.title); // Free previously allocated title
-  //     return;
-  //   }
-
-  //   memcpy(messageInfo_.msg, messageInfo->msg, messageInfo->msglen);
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
-  //                 "messageInfo.msg[messageInfo->msglen]");
-  //   messageInfo_.msg[messageInfo->msglen] = '\0';
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
-  //                 "messageInfo_.msg[messageInfo->msglen end");
-
-  //   messageInfo_.appid = messageInfo->appid;
-  //   messageInfo_.uid = messageInfo->uid;
-  //   messageInfo_.time = messageInfo->time;
-  //   messageInfo_.read = 0;
-
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "message_data %p %p\r\n",
-  //                 messageInfo_.title, messageInfo_.msg);
-
-  //   MessageModel::GetInstance().AddMessageData(&messageInfo_);
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AddMessageData");
-
-  //   // uint32_t currentTimestamp = OHOS::TraingModel::GetInstance()->get_current_time();
-  //   uint32_t currentTimestamp = 0;
-  //   if (currentTimestamp - messageTimestamp <= 1) {
-  //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageTimestamp too short");
-  //     free(messageInfo_.title);
-  //     free(messageInfo_.msg);
-  //     return;
-  //   }
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "get_current_time end");
-
-  //   messageTimestamp = currentTimestamp;
-
-  //   /*
-  //     以下状态不进行消息弹窗
-  //     -训练中
-  //     -省电模式
-  //     -呼吸训练中
-  //     -使用语音助手
-  //   */
-  //   if (uapi_dev_runtime_get_train_status() ||
-  //       uapi_dev_runtime_get_saveele_status() ||
-  //       uapi_dev_runtime_get_respiratory_training_status() ||
-  //       uapi_dev_runtime_get_voice_status()) {
-
-  //     free(messageInfo_.title);
-  //     free(messageInfo_.msg);
-  //     return;
-  //   }
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "status end");
-
-  //   CustomEventPublish(TOPIC_EVENT_MESSAGENOTE, NULL, 0);
-
-  //   // show_notify_messgae();
-
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Message popup sent");
-
-  //   free(messageInfo_.title);
-  //   free(messageInfo_.msg);
-  // }
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Received request %d", request->msgId);
+
+  if (request->msgId == TOPIC_EVENT_MESSAGE_UPDATA) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Processing TOPIC_EVENT_MESSAGE_UPDATA");
+
+    if (request->data == NULL) {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Received NULL data");
+      return;
+    }
+#ifdef SUPPORT_BLE_SERVICE
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Received request %d",
+                  request->msgId);
+    ancs_data_info_t *messageInfo = (ancs_data_info_t *)request->data;
+    ancs_data_info_t messageInfo_;
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "messageInfo");
+
+    messageInfo_.title = (char *)malloc(messageInfo->titlelen + 1);
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "messageInfo.title");
+    if (messageInfo_.title == NULL) {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                    "Failed to allocate memory for title");
+      return;
+    }
+
+    memcpy(messageInfo_.title, messageInfo->title, messageInfo->titlelen);
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "memcpy");
+    messageInfo_.title[messageInfo->titlelen] = '\0';
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                  "messageInfo.title[messageInfo->titlelen]");
+    messageInfo_.msg = (char *)malloc(messageInfo->msglen + 1);
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "messageInfo_.msg");
+    if (messageInfo_.msg == NULL) {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                    "Failed to allocate memory for message");
+      free(messageInfo_.title); // Free previously allocated title
+      return;
+    }
+
+    memcpy(messageInfo_.msg, messageInfo->msg, messageInfo->msglen);
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                  "messageInfo.msg[messageInfo->msglen]");
+    messageInfo_.msg[messageInfo->msglen] = '\0';
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                  "messageInfo_.msg[messageInfo->msglen end");
+
+    messageInfo_.appid = messageInfo->appid;
+    messageInfo_.uid = messageInfo->uid;
+    messageInfo_.time = messageInfo->time;
+    messageInfo_.read = 0;
+
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "message_data %p %p\r\n",
+                  messageInfo_.title, messageInfo_.msg);
+
+    MessageModel::GetInstance().AddMessageData(&messageInfo_);
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AddMessageData");
+
+    uint32_t currentTimestamp =OHOS::TraingModel::GetInstance()->get_current_time();
+    if (currentTimestamp - messageTimestamp <= 1) {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageTimestamp too short");
+      free(messageInfo_.title);
+      free(messageInfo_.msg);
+      return;
+    }
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "get_current_time end");
+
+    messageTimestamp = currentTimestamp;
+
+    /*
+      以下状态不进行消息弹窗
+      -训练中
+      -省电模式
+      -呼吸训练中
+      -使用语音助手
+    */
+    if (uapi_dev_runtime_get_train_status() ||
+        uapi_dev_runtime_get_saveele_status() ||
+        uapi_dev_runtime_get_respiratory_training_status() ||
+        uapi_dev_runtime_get_voice_status()) {
+
+      free(messageInfo_.title);
+      free(messageInfo_.msg);
+      return;
+    }
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "status end");
+
+    CustomEventPublish(TOPIC_EVENT_MESSAGENOTE, NULL, 0);
+
+    // show_notify_messgae();
+
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Message popup sent");
+
+    free(messageInfo_.title);
+    free(messageInfo_.msg);
+#endif
+  }
 }
 void saveancsdata() {
   // printf("saveancs\r\n");
@@ -262,51 +262,47 @@ MessageModel &MessageModel::GetInstance() {
 }
 
 void MessageModel::at_message_test() {
-  // // Initialize timestamp
-  // uint32_t timestamp = 0;
-  // if (uapi_get_timestampe_ss(&timestamp) != ERRCODE_SUCC) {
-  //   WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
-  //   return;
-  // }
-
-  // ancs_data_info_t data;
-  // const char *title = "title"; // Assuming title and msg are defined elsewhere
-  // const char *msg = "message";
-
-  // data.title = (char *)malloc(strlen(title) + 1);
-  // data.msg = (char *)malloc(strlen(msg) + 1);
-
-  // if (data.title == NULL || data.msg == NULL) {
-  //   WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failed");
-  //   free(data.title); // Free previously allocated memory
-  //   free(data.msg);
-  //   return;
-  // }
-
-  // strcpy(data.title, title);
-  // strcpy(data.msg, msg);
-
-  // data.appid = 0;
-  // data.uid = 0;
-  // data.time = timestamp;
-  // data.read = 0;
-  // data.hasCode = 1;
-
-  // data.msglen = strlen(msg);
-  // data.titlelen = strlen(title);
-
-  // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "message_data %s %s\r\n", data.title,
-  //               data.msg);
-
-  // CustomEventPublish(TOPIC_EVENT_MESSAGE_UPDATA, (uint8_t *)&data,
-  //                    sizeof(ancs_data_info_t));
-
-  // free(data.title);
-  // free(data.msg);
-
-  // Simulate message push notification (if needed)
-  // OHOS::NotificationManager::GetInstance()->ShowNotify(
-  //     OHOS::CreateMessageView, TOPIC_EVENT_MESSAGENOTE, true);
+#ifdef SUPPORT_BLE_SERVICE
+  // Initialize timestamp
+  uint32_t timestamp = 0;
+  if (uapi_get_timestampe_ss(&timestamp) != ERRCODE_SUCC) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
+    return;
+  }
+
+  ancs_data_info_t data;
+  const char *title = "title"; // Assuming title and msg are defined elsewhere
+  const char *msg = "message";
+
+  data.title = (char *)malloc(strlen(title) + 1);
+  data.msg = (char *)malloc(strlen(msg) + 1);
+
+  if (data.title == NULL || data.msg == NULL) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Memory allocation failed");
+    free(data.title); // Free previously allocated memory
+    free(data.msg);
+    return;
+  }
+
+  strcpy(data.title, title);
+  strcpy(data.msg, msg);
+
+  data.appid = 0;
+  data.uid = 0;
+  data.time = timestamp;
+  data.read = 0;
+  data.hasCode = 1;
+
+  data.msglen = strlen(msg);
+  data.titlelen = strlen(title);
+
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "message_data %s %s\r\n", data.title,
+                data.msg);
+
+  CustomEventPublish(TOPIC_EVENT_MESSAGE_UPDATA, (uint8_t *)&data,
+                     sizeof(ancs_data_info_t));
+
+#endif
 }
 
 void MessageModel ::Init() {
@@ -323,7 +319,7 @@ uint8_t MessageModel::GetMessageCount() const { return numberOfItems; }
 // 加载Message文件
 bool MessageModel::LoadMessagesFromStorage() {
   // 加载消息过滤文件
-  // filtration_file_read();
+  filtration_file_read();
 
   std::ifstream file(MESSAGE_JSON_FILE);
   if (!file.is_open()) {
@@ -412,7 +408,7 @@ bool MessageModel::LoadMessagesFromStorage() {
 // 保存Message文件
 bool MessageModel::SaveMessagesToStorage() {
   // 消息过滤文件保存
-  // filtration_file_save();
+  filtration_file_save();
   if (MessageVector.empty()) {
     // 清空文件
     std::ofstream file(MESSAGE_JSON_FILE,
@@ -500,48 +496,49 @@ void MessageModel::SetCurrentIndex(uint8_t index) {
 
 // 获取当前项[数组下标]
 uint8_t MessageModel::GetCurrentIndex() { return currentIndex_; }
-
+#ifdef SUPPORT_BLE_SERVICE
 // 增加消息项[添加数组项]
-// void MessageModel::AddMessageData(ancs_data_info_t *messageInfo) {
-//   if (messageInfo == nullptr) {
-//     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageInfo is null");
-//     return;
-//   }
-
-//   // 创建并填充 MessageData
-//   MessageData data;
-//   data.isRead = messageInfo->read;
-//   data.labelDetails = messageInfo->msg ? messageInfo->msg : "";
-//   data.labelTitle = messageInfo->title ? messageInfo->title : "";
-//   data.timestamp = messageInfo->time;
-
-//   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
-//                 "AddMessageData data.isRead is %d, data.labelDetails is %s, "
-//                 "data.labelTitle is %s, data.timestamp is %u",
-//                 data.isRead, data.labelDetails.c_str(), data.labelTitle.c_str(),
-//                 data.timestamp);
-
-//   // 处理时间字符串
-//   char labelTime[20];
-//   if (uapi_get_TIME_STR(data.timestamp, labelTime, '.', ':', DATE_Y_M_D_H_M) !=
-//       ERRCODE_SUCC) {
-//     data.labelTime = "--"; // 默认值
-//   } else {
-//     data.labelTime = labelTime; // 直接使用 labelTime
-//   }
-
-//   // 添加数据到消息向量
-//   MessageVector.push_back(data);
-
-//   // 删除多余的数据
-//   if (MessageVector.size() > MaxMessageListCount) {
-//     MessageVector.erase(MessageVector.begin(),
-//                         MessageVector.begin() +
-//                             (MessageVector.size() - MaxMessageListCount));
-//   }
-
-//   WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageInfo add is ok");
-// }
+void MessageModel::AddMessageData(ancs_data_info_t *messageInfo) {
+  if (messageInfo == nullptr) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageInfo is null");
+    return;
+  }
+
+  // 创建并填充 MessageData
+  MessageData data;
+  data.isRead = messageInfo->read;
+  data.labelDetails = messageInfo->msg ? messageInfo->msg : "";
+  data.labelTitle = messageInfo->title ? messageInfo->title : "";
+  data.timestamp = messageInfo->time;
+
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                "AddMessageData data.isRead is %d, data.labelDetails is %s, "
+                "data.labelTitle is %s, data.timestamp is %u",
+                data.isRead, data.labelDetails.c_str(), data.labelTitle.c_str(),
+                data.timestamp);
+
+  // 处理时间字符串
+  char labelTime[20];
+  if (uapi_get_TIME_STR(data.timestamp, labelTime, '.', ':', DATE_Y_M_D_H_M) !=
+      ERRCODE_SUCC) {
+    data.labelTime = "--"; // 默认值
+  } else {
+    data.labelTime = labelTime; // 直接使用 labelTime
+  }
+
+  // 添加数据到消息向量
+  MessageVector.push_back(data);
+
+  // 删除多余的数据
+  if (MessageVector.size() > MaxMessageListCount) {
+    MessageVector.erase(MessageVector.begin(),
+                        MessageVector.begin() +
+                            (MessageVector.size() - MaxMessageListCount));
+  }
+
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageInfo add is ok");
+}
+#endif
 
 // 获取目前的项
 MessageData *MessageModel::GetCurrentMessageData() {
@@ -627,483 +624,483 @@ void MessageModel::UpdateMessageView() {
 } // namespace OHOS
 
 #if 0
- uint8_t MessageModel::GetMessageCount() const
-    {
-        return (numberOfItems != 0 ? numberOfItems : MaxMessageListCount);
-    }
-    /* -------------------------------------------------------------------------- */
-    void MessageModel::PrintData(MessageData messagedata)
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "--------------------------------------");
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Title: %s", (messagedata.labelTitle).c_str());
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Details: %s", (messagedata.labelDetails).c_str());
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Time: %s", (messagedata.labelTime).c_str());
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Read: %d", messagedata.isRead);
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "--------------------------------------");
-    }
-    /*打印文件名数组*/
-    void PrintFileName(const std::vector<std::string> &filenames)
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Filenames:");
-        for (const auto &filename : filenames)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s", filename.c_str());
-        }
-    }
-
-    /*打印message数组*/
-    void PrintMessageData(const std::vector<MessageData> &MessageVector)
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MessageVector:");
-        for (const auto &message : MessageVector)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title: %s", message.labelTitle.c_str());
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Details: %s", message.labelDetails.c_str());
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timestamp: %d", message.timestamp);
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "IsRead: %d", message.isRead);
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "");
-        }
-    }
-    /*打印map*/
-    void PrintMessageMap(const std::map<int, std::string> &messageMap)
-    {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MessageMap:");
-        for (const auto &pair : messageMap)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Key: %d, Value: %s", pair.first, pair.second.c_str());
-        }
-    }
-    /* -------------------------------------------------------------------------- */
-    /*检查是否存在数据*/
-    bool MessageModel::HasDataJson()
-    {
-        // 打开消息数据目录
-        DIR *dir = opendir(MESSAGE_JSON_DIR);
-        if (dir == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unable to open MESSAGE_JSON_DIR");
-            jsonDataExists = false;
-            return false;
-        }
-
-        // 在作用域结束时自动关闭目录
-        struct DirCloser
-        {
-            void operator()(DIR *d) const
-            {
-                if (d)
-                    closedir(d);
-            }
-        };
-        std::unique_ptr<DIR, DirCloser> dirPtr(dir);
-
-        // 检查目录是否为空
-        struct dirent *ent;
-        // 是否存在文件标志位
-        bool isEmpty = true;
-        while ((ent = readdir(dir)) != nullptr)
-        {
-            // 过滤掉当前目录和上级目录
-            if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0)
-            {
-                continue;
-            }
-            // 普通文件
-            if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN)
-            {
-                isEmpty = false;
-                break;
-            }
-        }
-
-        if (isEmpty)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "No data files found in MESSAGE_JSON_DIR");
-            jsonDataExists = false;
-            return false;
-        }
-
-        jsonDataExists = true;
-        return true;
-    }
-
-    /*加载json函数*/
-    /*
-        加载messagejson文件夹 MESSAGE_JSON_DIR
-        文件夹里面的文件[一条数据]一个文件 按序号命名,0.json 1.json 2.json...
-        需要建立一个文件名和数组下标对应的map ->方便进行对文件操作?
-        最多加载10条数据(先按序号排序??)
-        如果还有多余的遍历删除序号最小的文件(消息最早的)
-        获取到一个 MessageData 数组返回
-
-            1.遍历文件夹的每一个文件 排序
-            2.先加载?
-            3.每次加载一个文件 更新一下map
-            4.超过10条。后面的文件直接删除
-            5.返回数组
-    */
-
-    /*遍历文件夹*/
-    std::vector<std::string> GetFileNamesInDirectory(const std::string &directory)
-    {
-        std::vector<std::string> filenames;
-        DIR *dir;
-        struct dirent *ent;
-        if ((dir = opendir(directory.c_str())) != nullptr)
-        {
-            while ((ent = readdir(dir)) != nullptr)
-            {
-                std::string fileName = ent->d_name;
-                if (fileName != "." && fileName != "..")
-                {
-                    // 2.遍历文件夹里面的文件名生成文件名数组
-                    if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN) // 普通文件
-                    {
-                        fileName = directory + fileName;
-                        filenames.push_back(fileName);
-                        // printf("GetFileNamesInDirectory:%s\r\n", fileName.c_str());
-                    }
-                    else if (ent->d_type == DT_DIR) // 目录
-                    {
-                        continue;
-                    }
-                }
-            }
-            closedir(dir);
-            return filenames;
-        }
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s is null!", directory.c_str());
-        return filenames;
-    }
-
-    /*文件名数组 删除多余项*/
-    void MessageModel::DeleteExcessFiles(std::vector<std::string> &filenames)
-    {
-        if (filenames.size() > MaxMessageListCount)
-        {
-            int numFilesToDelete = filenames.size() - MaxMessageListCount;
-            for (int i = 0; i < numFilesToDelete; i++)
-            {
-                std::remove(filenames[i].c_str());      // 删除文件
-                filenames.erase(filenames.begin() + i); // 从数组中删除相应的文件名
-            }
-        }
-    }
-
-    /*message json 加载*/
-    std::vector<MessageData> MessageModel::LoadMessageData()
-    {
-        std::vector<MessageData> MessageVector; // 返回的数据列表
-        std::vector<std::string> filenames;     // 文件名数组
-
-        // 1.检查消息目录是否存在
-        filenames = GetFileNamesInDirectory(MESSAGE_JSON_DIR);
-        // 3.检查文件夹是否为空
-        if (filenames.empty())
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message directory is empty");
-            return MessageVector;
-        }
-
-        // 4.文件名排序
-        // std::sort(filenames.begin(), filenames.end());
-
-        // 5.文件数量超出限制删除多余文件
-        DeleteExcessFiles(filenames); // 删除多余文件
-
-        // 6.解析json
-        for (int i = 0; i < filenames.size(); i++)
-        {
-            std::ifstream file((filenames[i]));
-            if (!file.is_open())
-            {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unable to open file %s ", filenames[i].c_str());
-                continue; // 跳过当前文件
-            }
-
-            std::string jsonData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
-            file.close();
-
-            cJSON *root = cJSON_Parse(jsonData.c_str());
-            if (root == nullptr)
-            {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to parse JSON in file %s ", filenames[i].c_str());
-                continue; // 跳过当前文件
-            }
-
-            MessageData messagedata;
-
-            messagedata.labelTitle = cJSON_GetObjectItem(root, "title")->valuestring;
-            messagedata.labelDetails = cJSON_GetObjectItem(root, "msg")->valuestring;
-            messagedata.isRead = cJSON_GetObjectItem(root, "read")->valueint;
-
-            // 获取时间
-            uint32 timestamp = cJSON_GetObjectItem(root, "time")->valueint;
-            messagedata.timestamp = timestamp;
-            char labelTime[20];
-            if (uapi_get_TIME_STR(timestamp, labelTime, '.', ':', DATE_Y_M_D_H_M) != ERRCODE_SUCC)
-            {
-                messagedata.labelTime = std::string("2024.1.1 00:00");
-            }
-            else
-            {
-                messagedata.labelTime = std::string(labelTime);
-            }
-
-            // 生成json数组数组
-            MessageVector.push_back(messagedata);
-            // 维护map 映射文件名和数组下标
-            fileIndexMap[i] = filenames[i];
-            cJSON_Delete(root);
-        }
+  uint8_t MessageModel::GetMessageCount() const
+     {
+         return (numberOfItems != 0 ? numberOfItems : MaxMessageListCount);
+     }
+     /* -------------------------------------------------------------------------- */
+     void MessageModel::PrintData(MessageData messagedata)
+     {
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "--------------------------------------");
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Title: %s", (messagedata.labelTitle).c_str());
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Details: %s", (messagedata.labelDetails).c_str());
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Time: %s", (messagedata.labelTime).c_str());
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Read: %d", messagedata.isRead);
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "--------------------------------------");
+     }
+     /*打印文件名数组*/
+     void PrintFileName(const std::vector<std::string> &filenames)
+     {
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Filenames:");
+         for (const auto &filename : filenames)
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s", filename.c_str());
+         }
+     }
+ 
+     /*打印message数组*/
+     void PrintMessageData(const std::vector<MessageData> &MessageVector)
+     {
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MessageVector:");
+         for (const auto &message : MessageVector)
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title: %s", message.labelTitle.c_str());
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Details: %s", message.labelDetails.c_str());
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timestamp: %d", message.timestamp);
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "IsRead: %d", message.isRead);
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "");
+         }
+     }
+     /*打印map*/
+     void PrintMessageMap(const std::map<int, std::string> &messageMap)
+     {
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MessageMap:");
+         for (const auto &pair : messageMap)
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Key: %d, Value: %s", pair.first, pair.second.c_str());
+         }
+     }
+     /* -------------------------------------------------------------------------- */
+     /*检查是否存在数据*/
+     bool MessageModel::HasDataJson()
+     {
+         // 打开消息数据目录
+         DIR *dir = opendir(MESSAGE_JSON_DIR);
+         if (dir == nullptr)
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unable to open MESSAGE_JSON_DIR");
+             jsonDataExists = false;
+             return false;
+         }
+ 
+         // 在作用域结束时自动关闭目录
+         struct DirCloser
+         {
+             void operator()(DIR *d) const
+             {
+                 if (d)
+                     closedir(d);
+             }
+         };
+         std::unique_ptr<DIR, DirCloser> dirPtr(dir);
+ 
+         // 检查目录是否为空
+         struct dirent *ent;
+         // 是否存在文件标志位
+         bool isEmpty = true;
+         while ((ent = readdir(dir)) != nullptr)
+         {
+             // 过滤掉当前目录和上级目录
+             if (strcmp(ent->d_name, ".") == 0 || strcmp(ent->d_name, "..") == 0)
+             {
+                 continue;
+             }
+             // 普通文件
+             if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN)
+             {
+                 isEmpty = false;
+                 break;
+             }
+         }
+ 
+         if (isEmpty)
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "No data files found in MESSAGE_JSON_DIR");
+             jsonDataExists = false;
+             return false;
+         }
+ 
+         jsonDataExists = true;
+         return true;
+     }
+ 
+     /*加载json函数*/
+     /*
+         加载messagejson文件夹 MESSAGE_JSON_DIR
+         文件夹里面的文件[一条数据]一个文件 按序号命名,0.json 1.json 2.json...
+         需要建立一个文件名和数组下标对应的map ->方便进行对文件操作?
+         最多加载10条数据(先按序号排序??)
+         如果还有多余的遍历删除序号最小的文件(消息最早的)
+         获取到一个 MessageData 数组返回
+ 
+             1.遍历文件夹的每一个文件 排序
+             2.先加载?
+             3.每次加载一个文件 更新一下map
+             4.超过10条。后面的文件直接删除
+             5.返回数组
+     */
+ 
+     /*遍历文件夹*/
+     std::vector<std::string> GetFileNamesInDirectory(const std::string &directory)
+     {
+         std::vector<std::string> filenames;
+         DIR *dir;
+         struct dirent *ent;
+         if ((dir = opendir(directory.c_str())) != nullptr)
+         {
+             while ((ent = readdir(dir)) != nullptr)
+             {
+                 std::string fileName = ent->d_name;
+                 if (fileName != "." && fileName != "..")
+                 {
+                     // 2.遍历文件夹里面的文件名生成文件名数组
+                     if (ent->d_type == DT_REG || ent->d_type == DT_UNKNOWN) // 普通文件
+                     {
+                         fileName = directory + fileName;
+                         filenames.push_back(fileName);
+                         // printf("GetFileNamesInDirectory:%s\r\n", fileName.c_str());
+                     }
+                     else if (ent->d_type == DT_DIR) // 目录
+                     {
+                         continue;
+                     }
+                 }
+             }
+             closedir(dir);
+             return filenames;
+         }
+         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s is null!", directory.c_str());
+         return filenames;
+     }
+ 
+     /*文件名数组 删除多余项*/
+     void MessageModel::DeleteExcessFiles(std::vector<std::string> &filenames)
+     {
+         if (filenames.size() > MaxMessageListCount)
+         {
+             int numFilesToDelete = filenames.size() - MaxMessageListCount;
+             for (int i = 0; i < numFilesToDelete; i++)
+             {
+                 std::remove(filenames[i].c_str());      // 删除文件
+                 filenames.erase(filenames.begin() + i); // 从数组中删除相应的文件名
+             }
+         }
+     }
+ 
+     /*message json 加载*/
+     std::vector<MessageData> MessageModel::LoadMessageData()
+     {
+         std::vector<MessageData> MessageVector; // 返回的数据列表
+         std::vector<std::string> filenames;     // 文件名数组
+ 
+         // 1.检查消息目录是否存在
+         filenames = GetFileNamesInDirectory(MESSAGE_JSON_DIR);
+         // 3.检查文件夹是否为空
+         if (filenames.empty())
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message directory is empty");
+             return MessageVector;
+         }
+ 
+         // 4.文件名排序
+         // std::sort(filenames.begin(), filenames.end());
+ 
+         // 5.文件数量超出限制删除多余文件
+         DeleteExcessFiles(filenames); // 删除多余文件
+ 
+         // 6.解析json
+         for (int i = 0; i < filenames.size(); i++)
+         {
+             std::ifstream file((filenames[i]));
+             if (!file.is_open())
+             {
+                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unable to open file %s ", filenames[i].c_str());
+                 continue; // 跳过当前文件
+             }
+ 
+             std::string jsonData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
+             file.close();
+ 
+             cJSON *root = cJSON_Parse(jsonData.c_str());
+             if (root == nullptr)
+             {
+                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to parse JSON in file %s ", filenames[i].c_str());
+                 continue; // 跳过当前文件
+             }
+ 
+             MessageData messagedata;
+ 
+             messagedata.labelTitle = cJSON_GetObjectItem(root, "title")->valuestring;
+             messagedata.labelDetails = cJSON_GetObjectItem(root, "msg")->valuestring;
+             messagedata.isRead = cJSON_GetObjectItem(root, "read")->valueint;
+ 
+             // 获取时间
+             uint32 timestamp = cJSON_GetObjectItem(root, "time")->valueint;
+             messagedata.timestamp = timestamp;
+             char labelTime[20];
+             if (uapi_get_TIME_STR(timestamp, labelTime, '.', ':', DATE_Y_M_D_H_M) != ERRCODE_SUCC)
+             {
+                 messagedata.labelTime = std::string("2024.1.1 00:00");
+             }
+             else
+             {
+                 messagedata.labelTime = std::string(labelTime);
+             }
+ 
+             // 生成json数组数组
+             MessageVector.push_back(messagedata);
+             // 维护map 映射文件名和数组下标
+             fileIndexMap[i] = filenames[i];
+             cJSON_Delete(root);
+         }
 
 #if PRINTFDATA
-        PrintFileName(filenames);
-        PrintMessageData(MessageVector);
-        PrintMessageMap(fileIndexMap);
+         PrintFileName(filenames);
+         PrintMessageData(MessageVector);
+         PrintMessageMap(fileIndexMap);
 #endif
-        return MessageVector;
-    }
-
-    void MessageModel::InitMessageListItems()
-    {
-        // 读取json数据
-        std::vector<MessageData> messageVector = LoadMessageData();
-        if (!messageVector.empty())
-        {
-            numberOfItems = messageVector.size();
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "the numberOfItems is %d", numberOfItems);
-            for (int i = numberOfItems - 1, count = 0; i >= 0 && count < MaxMessageListCount; i--, count++)
-            {
-                MessageData messageData;
-                messageData.isRead = messageVector[i].isRead;
-                messageData.labelTitle = messageVector[i].labelTitle;
-                messageData.labelDetails = messageVector[i].labelDetails;
-                messageData.labelTime = messageVector[i].labelTime;
-                // PrintData(messageData);
-                // 获取是否读取 来信 信息内容 时间
-                Messages[count] = {count, messageData.isRead, messageData.labelTitle, messageData.labelDetails, messageData.labelTime};
-            }
-        }
-    }
-
-    const MessageListItem *MessageModel::GetMessageListItems() const
-    {
-        return Messages;
-    }
-
-    bool MessageModel::GetJsonLoadStatus()
-    {
-        return jsonDataExists;
-    }
-
-    // 设置当前界面
-    void MessageModel::SetPopupViewState(bool state)
-    {
-        popupViewState = state;
-    }
-
-    // 获取当前界面 0:没有记录 | 1:有记录
-    bool MessageModel::GetPopupViewState()
-    {
-        return popupViewState;
-    }
-
-    /*保存json数据*/
-    void MessageModel::SaveMessageData(const MessageData data, const int index)
-    {
-        cJSON *root = cJSON_CreateObject();
-
-        cJSON *item = cJSON_CreateObject();
-        cJSON_AddStringToObject(item, "title", data.labelTitle.c_str());
-        cJSON_AddStringToObject(item, "msg", data.labelDetails.c_str());
-        cJSON_AddNumberToObject(item, "time", data.timestamp);
-        cJSON_AddNumberToObject(item, "read", data.isRead);
-
-        std::string jsonString = cJSON_Print(root);
-        cJSON_Delete(root);
-
-        std::ofstream file(fileIndexMap[index]);
-        if (file.is_open())
-        {
-            file << jsonString;
-            file.close();
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveMessageData is ok");
-        }
-        else
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file for writing");
-        }
-    }
-
-    // 获取目前的message
-    MessageData *MessageModel::GetCurrentMessageData()
-    {
-        PrintData(message_);
-        return &message_;
-    }
-
-    // 设置目前的message
-    void MessageModel::SetCurrentMessageData(MessageData *data)
-    {
-        if (data != nullptr)
-        {
-            message_.labelDetails = data->labelDetails;
-            message_.labelTime = data->labelTime;
-            message_.labelTitle = data->labelTitle;
-            message_.isRead = data->isRead;
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetMessageData is ok");
-        }
-    }
-
-    // 清除所有数据[删除文件夹内所有文件]
-    bool MessageModel::ClearAllData()
-    {
-        // 遍历fileIndexMap并删除对应文件
-        for (auto it = fileIndexMap.begin(); it != fileIndexMap.end(); ++it)
-        {
-            std::string filePath = it->second;
-            uapi_delete_files(filePath.c_str());
-        }
-
-        // 清空fileIndexMap
-        fileIndexMap.clear();
-
-        return true; // 表示清除操作成功
-    }
-
-    // 删除单个项 [通过 map 删除]
-    bool MessageModel::DeleteSingleItem(int currentIndex)
-    {
-        if (currentIndex < 0)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid index for deletion: Index is less than 0");
-            return false;
-        }
-
-        auto it = std::next(fileIndexMap.begin(), currentIndex);
-        if (it == fileIndexMap.end())
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Item at index not found");
-            return false;
-        }
-
-        // 删除文件
-        uapi_delete_files(it->second.c_str());
-
-        // 删除对应项
-        fileIndexMap.erase(it);
-
-        return true;
-    }
-    // 设置当前项已读
-    bool MessageModel::SetMessageIsread()
-    {
-        // 1.找到对应的项文件
-        if (fileIndexMap.find(indexCurrent) == fileIndexMap.end())
-        {
-            // 检查索引是否存在于map中
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Index not found in fileIndexMap");
-            return false;
-        }
-        std::ofstream file(fileIndexMap[indexCurrent]);
-        if (!file.is_open())
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "filename is error");
-            return false;
-        }
-
-        // 2.获取文件内容
-        std::string jsonData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
-        file.close();
-        if (jsonData.empty())
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonData is null");
-            return false;
-        }
-
-        // 3.设置属性已读
-        cJSON *root = cJSON_Parse(jsonData.c_str());
-        if (root == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to parse JSON in file");
-            return false;
-        }
-
-        // 4.更新数据并保存文件
-        cJSON_ReplaceItemInObject(root, "isRead", cJSON_CreateNumber(1)); // 将"isRead"属性值设为1,表示已读
-
-        // 5.重新生成 JSON 字符串
-        char *updatedJsonData = cJSON_Print(root);
-
-        // 6.打开文件以写入更新后的数据
-        outFile.open(fileIndexMap[indexCurrent]);
-        if (outFile.is_open())
-        {
-            outFile << updatedJsonData; // 将更新后的 JSON 数据写入文件
-            outFile.close();
-            cJSON_free(updatedJsonData);
-        }
-        else
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to open file for writing");
-            cJSON_free(updatedJsonData);
-            cJSON_Delete(root);
-            return false;
-        }
-        // 释放 JSON 对象内存
-        cJSON_Delete(root);
-        return true;
-    }
-    // 获取最新消息项
-    MessageData *MessageModel::GetNewestData(int index)
-    {
-        // 打开文件
-        std::string filename = MESSAGE_JSON_DIR + std::to_string(index) + ".json";
-        std::ifstream file(filename);
-        if (!file.is_open())
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to open file");
-            return nullptr;
-        }
-
-        // 获取文件内容
-        std::string jsonData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
-        file.close();
-
-        if (jsonData.empty())
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: File is empty");
-            return nullptr;
-        }
-
-        // 解析JSON数据
-        cJSON *root = cJSON_Parse(jsonData.c_str());
-        if (root == nullptr)
-        {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to parse JSON in file");
-            return nullptr;
-        }
-
-        // 创建MessageData对象并设置属性
-        MessageData *data = new MessageData();
-        data->labelTitle = cJSON_GetObjectItem(root, "title")->valuestring;
-        data->labelDetails = cJSON_GetObjectItem(root, "msg")->valuestring;
-        data->isRead = cJSON_GetObjectItem(root, "read")->valueint;
-        data->timestamp = cJSON_GetObjectItem(root, "time")->valueint;
-
-        // 释放资源并返回数据
-        cJSON_Delete(root);
-        return data;
-    }
-    // 设置当前项
-    void MessageModel::SetCurrentIndex(uint8_t index)
-    {
-        indexCurrent = index;
-    }
-    // 获取当前项
-    uint8_t MessageModel::GetCurrentIndex()
-    {
-        return indexCurrent;
-    }
+         return MessageVector;
+     }
+ 
+     void MessageModel::InitMessageListItems()
+     {
+         // 读取json数据
+         std::vector<MessageData> messageVector = LoadMessageData();
+         if (!messageVector.empty())
+         {
+             numberOfItems = messageVector.size();
+             WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "the numberOfItems is %d", numberOfItems);
+             for (int i = numberOfItems - 1, count = 0; i >= 0 && count < MaxMessageListCount; i--, count++)
+             {
+                 MessageData messageData;
+                 messageData.isRead = messageVector[i].isRead;
+                 messageData.labelTitle = messageVector[i].labelTitle;
+                 messageData.labelDetails = messageVector[i].labelDetails;
+                 messageData.labelTime = messageVector[i].labelTime;
+                 // PrintData(messageData);
+                 // 获取是否读取 来信 信息内容 时间
+                 Messages[count] = {count, messageData.isRead, messageData.labelTitle, messageData.labelDetails, messageData.labelTime};
+             }
+         }
+     }
+ 
+     const MessageListItem *MessageModel::GetMessageListItems() const
+     {
+         return Messages;
+     }
+ 
+     bool MessageModel::GetJsonLoadStatus()
+     {
+         return jsonDataExists;
+     }
+ 
+     // 设置当前界面
+     void MessageModel::SetPopupViewState(bool state)
+     {
+         popupViewState = state;
+     }
+ 
+     // 获取当前界面 0:没有记录 | 1:有记录
+     bool MessageModel::GetPopupViewState()
+     {
+         return popupViewState;
+     }
+ 
+     /*保存json数据*/
+     void MessageModel::SaveMessageData(const MessageData data, const int index)
+     {
+         cJSON *root = cJSON_CreateObject();
+ 
+         cJSON *item = cJSON_CreateObject();
+         cJSON_AddStringToObject(item, "title", data.labelTitle.c_str());
+         cJSON_AddStringToObject(item, "msg", data.labelDetails.c_str());
+         cJSON_AddNumberToObject(item, "time", data.timestamp);
+         cJSON_AddNumberToObject(item, "read", data.isRead);
+ 
+         std::string jsonString = cJSON_Print(root);
+         cJSON_Delete(root);
+ 
+         std::ofstream file(fileIndexMap[index]);
+         if (file.is_open())
+         {
+             file << jsonString;
+             file.close();
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveMessageData is ok");
+         }
+         else
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file for writing");
+         }
+     }
+ 
+     // 获取目前的message
+     MessageData *MessageModel::GetCurrentMessageData()
+     {
+         PrintData(message_);
+         return &message_;
+     }
+ 
+     // 设置目前的message
+     void MessageModel::SetCurrentMessageData(MessageData *data)
+     {
+         if (data != nullptr)
+         {
+             message_.labelDetails = data->labelDetails;
+             message_.labelTime = data->labelTime;
+             message_.labelTitle = data->labelTitle;
+             message_.isRead = data->isRead;
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetMessageData is ok");
+         }
+     }
+ 
+     // 清除所有数据[删除文件夹内所有文件]
+     bool MessageModel::ClearAllData()
+     {
+         // 遍历fileIndexMap并删除对应文件
+         for (auto it = fileIndexMap.begin(); it != fileIndexMap.end(); ++it)
+         {
+             std::string filePath = it->second;
+             uapi_delete_files(filePath.c_str());
+         }
+ 
+         // 清空fileIndexMap
+         fileIndexMap.clear();
+ 
+         return true; // 表示清除操作成功
+     }
+ 
+     // 删除单个项 [通过 map 删除]
+     bool MessageModel::DeleteSingleItem(int currentIndex)
+     {
+         if (currentIndex < 0)
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid index for deletion: Index is less than 0");
+             return false;
+         }
+ 
+         auto it = std::next(fileIndexMap.begin(), currentIndex);
+         if (it == fileIndexMap.end())
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Item at index not found");
+             return false;
+         }
+ 
+         // 删除文件
+         uapi_delete_files(it->second.c_str());
+ 
+         // 删除对应项
+         fileIndexMap.erase(it);
+ 
+         return true;
+     }
+     // 设置当前项已读
+     bool MessageModel::SetMessageIsread()
+     {
+         // 1.找到对应的项文件
+         if (fileIndexMap.find(indexCurrent) == fileIndexMap.end())
+         {
+             // 检查索引是否存在于map中
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Index not found in fileIndexMap");
+             return false;
+         }
+         std::ofstream file(fileIndexMap[indexCurrent]);
+         if (!file.is_open())
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "filename is error");
+             return false;
+         }
+ 
+         // 2.获取文件内容
+         std::string jsonData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
+         file.close();
+         if (jsonData.empty())
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "jsonData is null");
+             return false;
+         }
+ 
+         // 3.设置属性已读
+         cJSON *root = cJSON_Parse(jsonData.c_str());
+         if (root == nullptr)
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to parse JSON in file");
+             return false;
+         }
+ 
+         // 4.更新数据并保存文件
+         cJSON_ReplaceItemInObject(root, "isRead", cJSON_CreateNumber(1)); // 将"isRead"属性值设为1,表示已读
+ 
+         // 5.重新生成 JSON 字符串
+         char *updatedJsonData = cJSON_Print(root);
+ 
+         // 6.打开文件以写入更新后的数据
+         outFile.open(fileIndexMap[indexCurrent]);
+         if (outFile.is_open())
+         {
+             outFile << updatedJsonData; // 将更新后的 JSON 数据写入文件
+             outFile.close();
+             cJSON_free(updatedJsonData);
+         }
+         else
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to open file for writing");
+             cJSON_free(updatedJsonData);
+             cJSON_Delete(root);
+             return false;
+         }
+         // 释放 JSON 对象内存
+         cJSON_Delete(root);
+         return true;
+     }
+     // 获取最新消息项
+     MessageData *MessageModel::GetNewestData(int index)
+     {
+         // 打开文件
+         std::string filename = MESSAGE_JSON_DIR + std::to_string(index) + ".json";
+         std::ifstream file(filename);
+         if (!file.is_open())
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to open file");
+             return nullptr;
+         }
+ 
+         // 获取文件内容
+         std::string jsonData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
+         file.close();
+ 
+         if (jsonData.empty())
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: File is empty");
+             return nullptr;
+         }
+ 
+         // 解析JSON数据
+         cJSON *root = cJSON_Parse(jsonData.c_str());
+         if (root == nullptr)
+         {
+             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to parse JSON in file");
+             return nullptr;
+         }
+ 
+         // 创建MessageData对象并设置属性
+         MessageData *data = new MessageData();
+         data->labelTitle = cJSON_GetObjectItem(root, "title")->valuestring;
+         data->labelDetails = cJSON_GetObjectItem(root, "msg")->valuestring;
+         data->isRead = cJSON_GetObjectItem(root, "read")->valueint;
+         data->timestamp = cJSON_GetObjectItem(root, "time")->valueint;
+ 
+         // 释放资源并返回数据
+         cJSON_Delete(root);
+         return data;
+     }
+     // 设置当前项
+     void MessageModel::SetCurrentIndex(uint8_t index)
+     {
+         indexCurrent = index;
+     }
+     // 获取当前项
+     uint8_t MessageModel::GetCurrentIndex()
+     {
+         return indexCurrent;
+     }
 #endif
\ No newline at end of file