删除单项信息数据 348/1
authorCaisking <3449750381@qq.com>
Fri, 21 Jun 2024 11:12:36 +0000 (19:12 +0800)
committerCaisking <3449750381@qq.com>
Fri, 21 Jun 2024 11:12:36 +0000 (19:12 +0800)
code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp
code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp

index 3d84156..effb3cf 100644 (file)
@@ -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<MessageData> 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<MessageData> LoadMessageData();                          // 加载消息数据
+        void SaveMessageData(const std::vector<MessageData> &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}; // 弹出视图状态
index 0ec8dcb..0f7f6d4 100644 (file)
@@ -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<MessageData> &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<MessageData> 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;
+    }
 }
index 2043ac7..3150eff 100644 (file)
@@ -118,17 +118,14 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the index is %d", index);
             // 读取json数据
             std::vector<MessageData> 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");
index cecca33..0596b6f 100644 (file)
@@ -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;