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