1 /*
2  * Copyright (C) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "upgrade_restore_gallery_media_task.h"
16 
17 #include <sstream>
18 #include <nlohmann/json.hpp>
19 
20 #include "media_log.h"
21 #include "hisysevent.h"
22 #include "media_backup_report_data_type.h"
23 #include "json_utils.h"
24 
25 namespace OHOS::Media {
LoadTask(const std::string & taskInfo)26 std::vector<MediaRestoreResultInfo> UpgradeRestoreGalleryMediaTask::LoadTask(const std::string &taskInfo)
27 {
28     CallbackResultData resultData = this->ParseFromJsonStr(taskInfo);
29     MEDIA_INFO_LOG("GET restoreExInfo: %{public}s", resultData.ToString().c_str());
30     return this->Parse(resultData);
31 }
32 
Load(const std::string & type,const std::string & errorCode,const std::string & errorInfo)33 MediaRestoreResultInfo UpgradeRestoreGalleryMediaTask::Load(const std::string &type, const std::string &errorCode,
34     const std::string &errorInfo)
35 {
36     MediaRestoreResultInfo info;
37     info.sceneCode = this->sceneCode_;
38     info.taskId = this->taskId_;
39     info.errorCode = errorCode;
40     info.errorInfo = errorInfo;
41     info.type = type;
42     return info;
43 }
44 
ParseFromJsonStr(const std::string & jsonStr)45 CallbackResultData UpgradeRestoreGalleryMediaTask::ParseFromJsonStr(const std::string &jsonStr)
46 {
47     JsonUtils jsonUtils;
48     nlohmann::json jsonObj = jsonUtils.Parse(jsonStr);
49     CallbackResultData resultData;
50     for (const auto &info : jsonUtils.GetArray(jsonObj, "resultInfo")) {
51         // Parse the resultInfo
52         bool isResultInfo = jsonUtils.IsExists(info, "errorCode");
53         isResultInfo = isResultInfo && jsonUtils.IsExists(info, "errorInfo");
54         isResultInfo = isResultInfo && jsonUtils.IsExists(info, "type");
55         if (isResultInfo) {
56             CallbackResultInfo resultInfo;
57             resultInfo.errorCode = jsonUtils.GetString(info, "errorCode");
58             resultInfo.errorInfo = jsonUtils.GetString(info, "errorInfo");
59             resultInfo.type = jsonUtils.GetString(info, "type");
60             resultData.resultInfo = resultInfo;
61             continue;
62         }
63         // Parse the backupInfo
64         bool isBackupInfo = jsonUtils.IsExists(info, "infos");
65         if (!isBackupInfo) {
66             continue;
67         }
68         for (const auto &backup : jsonUtils.GetArray(info, "infos")) {
69             CallbackBackupInfo backupInfo;
70             backupInfo.backupInfo = jsonUtils.GetString(backup, "backupInfo");
71             backupInfo.duplicateCount = jsonUtils.GetInt(backup, "duplicateCount");
72             backupInfo.failedCount = jsonUtils.GetInt(backup, "failedCount");
73             backupInfo.successCount = jsonUtils.GetInt(backup, "successCount");
74             resultData.infos.emplace_back(backupInfo);
75         }
76     }
77     return resultData;
78 }
79 
Parse(const CallbackResultData & resultData)80 std::vector<MediaRestoreResultInfo> UpgradeRestoreGalleryMediaTask::Parse(const CallbackResultData &resultData)
81 {
82     std::vector<MediaRestoreResultInfo> result;
83     const CallbackResultInfo &resultInfo = resultData.resultInfo;
84     for (const auto &backupInfo : resultData.infos) {
85         MediaRestoreResultInfo eventInfo;
86         eventInfo.sceneCode = this->sceneCode_;
87         eventInfo.taskId = this->taskId_;
88         eventInfo.errorCode = resultInfo.errorCode;
89         eventInfo.errorInfo = resultInfo.errorInfo;
90         eventInfo.type = resultInfo.type;
91         eventInfo.backupInfo = backupInfo.backupInfo;
92         eventInfo.duplicateCount = backupInfo.duplicateCount;
93         eventInfo.failedCount = backupInfo.failedCount;
94         eventInfo.successCount = backupInfo.successCount;
95         result.emplace_back(eventInfo);
96     }
97     return result;
98 }
99 }  // namespace OHOS::Media