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
Load(const RestoreTaskInfo & taskInfo)45 MediaRestoreResultInfo UpgradeRestoreGalleryMediaTask::Load(const RestoreTaskInfo &taskInfo)
46 {
47 MediaRestoreResultInfo info;
48 info.sceneCode = this->sceneCode_;
49 info.taskId = this->taskId_;
50 info.errorCode = taskInfo.errorCode;
51 info.errorInfo = taskInfo.errorInfo;
52 info.successCount = taskInfo.successCount;
53 info.failedCount = taskInfo.failedCount;
54 info.duplicateCount = taskInfo.duplicateCount;
55 info.type = taskInfo.type;
56 return info;
57 }
58
ParseFromJsonStr(const std::string & jsonStr)59 CallbackResultData UpgradeRestoreGalleryMediaTask::ParseFromJsonStr(const std::string &jsonStr)
60 {
61 JsonUtils jsonUtils;
62 nlohmann::json jsonObj = jsonUtils.Parse(jsonStr);
63 CallbackResultData resultData;
64 for (const auto &info : jsonUtils.GetArray(jsonObj, "resultInfo")) {
65 // Parse the resultInfo
66 bool isResultInfo = jsonUtils.IsExists(info, "errorCode");
67 isResultInfo = isResultInfo && jsonUtils.IsExists(info, "errorInfo");
68 isResultInfo = isResultInfo && jsonUtils.IsExists(info, "type");
69 if (isResultInfo) {
70 CallbackResultInfo resultInfo;
71 resultInfo.errorCode = jsonUtils.GetString(info, "errorCode");
72 resultInfo.errorInfo = jsonUtils.GetString(info, "errorInfo");
73 resultInfo.type = jsonUtils.GetString(info, "type");
74 resultData.resultInfo = resultInfo;
75 continue;
76 }
77 // Parse the backupInfo
78 bool isBackupInfo = jsonUtils.IsExists(info, "infos");
79 CHECK_AND_CONTINUE(isBackupInfo);
80 for (const auto &backup : jsonUtils.GetArray(info, "infos")) {
81 CallbackBackupInfo backupInfo;
82 backupInfo.backupInfo = jsonUtils.GetString(backup, "backupInfo");
83 backupInfo.duplicateCount = jsonUtils.GetInt(backup, "duplicateCount");
84 backupInfo.failedCount = jsonUtils.GetInt(backup, "failedCount");
85 backupInfo.successCount = jsonUtils.GetInt(backup, "successCount");
86 resultData.infos.emplace_back(backupInfo);
87 }
88 }
89 return resultData;
90 }
91
Parse(const CallbackResultData & resultData)92 std::vector<MediaRestoreResultInfo> UpgradeRestoreGalleryMediaTask::Parse(const CallbackResultData &resultData)
93 {
94 std::vector<MediaRestoreResultInfo> result;
95 const CallbackResultInfo &resultInfo = resultData.resultInfo;
96 for (const auto &backupInfo : resultData.infos) {
97 MediaRestoreResultInfo eventInfo;
98 eventInfo.sceneCode = this->sceneCode_;
99 eventInfo.taskId = this->taskId_;
100 eventInfo.errorCode = resultInfo.errorCode;
101 eventInfo.errorInfo = resultInfo.errorInfo;
102 eventInfo.type = resultInfo.type;
103 eventInfo.backupInfo = backupInfo.backupInfo;
104 eventInfo.duplicateCount = backupInfo.duplicateCount;
105 eventInfo.failedCount = backupInfo.failedCount;
106 eventInfo.successCount = backupInfo.successCount;
107 result.emplace_back(eventInfo);
108 }
109 return result;
110 }
111 } // namespace OHOS::Media