From f10a62bc4afe058b63e76164df6a955ac689e367 Mon Sep 17 00:00:00 2001 From: Caisking <3449750381@qq.com> Date: Fri, 21 Jun 2024 19:12:36 +0800 Subject: [PATCH] =?utf8?q?=E5=88=A0=E9=99=A4=E5=8D=95=E9=A1=B9=E4=BF=A1?= =?utf8?q?=E6=81=AF=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/message/include/MessageModel.h | 29 ++++---- .../nativeui/message/src/MessageModel.cpp | 68 ++++++++++++++++++- .../nativeui/message/src/MessagePresenter.cpp | 5 +- .../message/src/MessageShowPresenter.cpp | 10 +++ 4 files changed, 93 insertions(+), 19 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h b/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h index 3d8415698..effb3cfde 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h @@ -25,6 +25,7 @@ namespace OHOS std::string labelTitle; // 消息标题 std::string labelDetails; // 消息详情 std::string labelTime; // 消息时间 + uint32 timestamp; // 消息时间戳 }; // 消息模型类 @@ -36,18 +37,21 @@ namespace OHOS const MessageListItem *GetMessageListItems() const; // 获取消息列表项 // uint8_t GetMessageListCount() const; // 获取消息列表数量 - bool HasDataJson(); // 判断是否存在数据Json - bool GetJsonLoadStatus(); // 获取Json加载状态 - std::vector LoadMessageData(); // 加载消息数据 - uint8_t GetMessageCount() const; // 获取消息数量 - void SetPopupViewState(bool state); // 设置弹出视图状态 - bool GetPopupViewState(); // 获取弹出视图状态 - void PrintData(const MessageData messageData); // 打印数据 - MessageData *GetCurrentMessageData(); // 获取当前消息数据 - void SetCurrentMessageData(MessageData *data); // 设置当前消息数据 - bool ClearAllData(); // 清除所有数据 - bool DeleteSingleItem(); // 删除单个项 - MessageData *GetNewestData(); // 获取最新信息项 + bool HasDataJson(); // 判断是否存在数据Json + bool GetJsonLoadStatus(); // 获取Json加载状态 + std::vector LoadMessageData(); // 加载消息数据 + void SaveMessageData(const std::vector &messageVector); // 保存json数据 + uint8_t GetMessageCount() const; // 获取消息数量 + void SetPopupViewState(bool state); // 设置弹出视图状态 + bool GetPopupViewState(); // 获取弹出视图状态 + void PrintData(const MessageData messageData); // 打印数据 + MessageData *GetCurrentMessageData(); // 获取当前消息数据 + void SetCurrentMessageData(MessageData *data); // 设置当前消息数据 + bool ClearAllData(); // 清除所有数据 + bool DeleteSingleItem(int currentIndex); // 删除单个项 + MessageData *GetNewestData(); // 获取最新信息项 + void SetCurrentIndex(uint8_t index); // 设置当前项 + uint8_t GetCurrentIndex(); // 获取当前项 private: MessageModel(); @@ -58,6 +62,7 @@ namespace OHOS uint8_t numberOfItems; // 项数 static const uint16_t MaxMessageListCount = 11; // 消息列表最大数量 MessageListItem Messages[MaxMessageListCount] = {0, false, nullptr, nullptr, nullptr}; // 消息列表 + uint8_t indexCurrent; // 选择的项 bool jsonDataExists{false}; // Json数据存在标志 bool popupViewState{false}; // 弹出视图状态 diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp index 0ec8dcb67..0f7f6d4ee 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp @@ -93,12 +93,12 @@ namespace OHOS cJSON *item = cJSON_GetArrayItem(dataArray, i); MessageData messagedata; - // 使用 strdup 复制字符串,确保每个字符串都有独立的内存空间 messagedata.labelTitle = cJSON_GetObjectItem(item, "title")->valuestring; messagedata.labelDetails = cJSON_GetObjectItem(item, "msg")->valuestring; // 获取时间 uint32 timestamp = cJSON_GetObjectItem(item, "time")->valueint; + messagedata.timestamp = timestamp; char labelTime[20]; if (uapi_get_TIME_STR(timestamp, labelTime, '.', false) != ERRCODE_SUCC) { @@ -118,7 +118,40 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadMessageJson is ok"); return MessageVector; } + /*保存json数据*/ + void MessageModel::SaveMessageData(const std::vector &messageVector) + { + cJSON *root = cJSON_CreateObject(); + cJSON *dataArray = cJSON_CreateArray(); + + for (const auto &message : messageVector) + { + cJSON *item = cJSON_CreateObject(); + cJSON_AddStringToObject(item, "title", message.labelTitle.c_str()); + cJSON_AddStringToObject(item, "msg", message.labelDetails.c_str()); + cJSON_AddNumberToObject(item, "time", message.timestamp); + cJSON_AddNumberToObject(item, "read", message.isRead); + + cJSON_AddItemToArray(dataArray, item); + } + + cJSON_AddItemToObject(root, "infor", dataArray); + + std::string jsonString = cJSON_Print(root); + cJSON_Delete(root); + std::ofstream file(MESSAGE_JSON_FILE); + 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"); + } + } void MessageModel::PrintData(MessageData messagedata) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "**************************************"); @@ -189,11 +222,30 @@ namespace OHOS // 清除所有数据 bool MessageModel::ClearAllData() { - return true; + if (uapi_delete_files(MESSAGE_JSON_FILE)) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClearAllData is ok"); + return true; + } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClearAllData is fail"); + return false; } // 删除单个项 - bool MessageModel::DeleteSingleItem() + bool MessageModel::DeleteSingleItem(int currentIndex) { + std::vector messageVector = LoadMessageData(); + + if (currentIndex < 0 || currentIndex >= messageVector.size()) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid index for deletion"); + return false; + } + + messageVector.erase(messageVector.begin() + currentIndex); + + // 保存修改后的数据 + SaveMessageData(messageVector); + return true; } // 获取最新消息项 @@ -205,4 +257,14 @@ namespace OHOS return &messageVector[numberOfItems - 1]; } + // 设置当前项 + void MessageModel::SetCurrentIndex(uint8_t index) + { + indexCurrent = index; + } + // 获取当前项 + uint8_t MessageModel::GetCurrentIndex() + { + return indexCurrent; + } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp index 2043ac78e..3150eff01 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp @@ -118,17 +118,14 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the index is %d", index); // 读取json数据 std::vector messageDataVector = MessageModel::GetInstance().LoadMessageData(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the index is %d", index); if (!messageDataVector.empty()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the index is %d", index); // 选择点击按键的历史数据 int arraynum = messageDataVector.size() - 1; MessageData messageData = messageDataVector[arraynum - index]; // 显示是倒序 id同理 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the index is %d", index); MessageModel::GetInstance().SetCurrentMessageData(&messageData); + MessageModel::GetInstance().SetCurrentIndex(arraynum - index); NativeAbility::GetInstance().ChangeSlice(VIEW_MESSAGE_SHOW); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the index is %d", index); return true; } WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the messageDataVector is error"); diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp index cecca3391..0596b6fcb 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-06-17 19:39:36 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-06-21 18:57:04 + * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp + */ /*** * @Date: 2024-06-17 19:39:36 * @LastEditors: Caisking 3449750381@qq.com @@ -77,6 +83,10 @@ namespace OHOS UNUSED(event); if (strcmp(view.GetViewId(), DELETEBUTTON) == 0) { + // 删除当前项 + uint8_t index = MessageModel::GetInstance().GetCurrentIndex(); + MessageModel::GetInstance().DeleteSingleItem(index); + NativeAbility::GetInstance().ChangeSlice(VIEW_MESSAGE); } return true; -- 2.17.1