1 /*
2 * Copyright (C) 2025 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 #define MLOG_TAG "Media_Client"
16
17 #include "cloud_media_photo_handler.h"
18
19 #include <string>
20
21 #include "cloud_file_data_convert.h"
22 #include "cloud_media_operation_code.h"
23 #include "cloud_mdkrecord_photos_vo.h"
24 #include "get_retey_records_vo.h"
25 #include "medialibrary_errno.h"
26 #include "media_log.h"
27 #include "media_req_vo.h"
28 #include "media_resp_vo.h"
29 #include "mdk_record_photos_data.h"
30 #include "on_copy_records_photos_vo.h"
31 #include "on_create_records_photos_vo.h"
32 #include "on_delete_records_photos_vo.h"
33 #include "on_modify_records_photos_vo.h"
34 #include "on_dentry_file_vo.h"
35 #include "on_fetch_records_vo.h"
36 #include "on_fetch_photos_vo.h"
37 #include "user_define_ipc_client.h"
38 #include "failed_size_resp_vo.h"
39 #include "get_check_records_vo.h"
40
41 namespace OHOS::Media::CloudSync {
SetUserId(const int32_t & userId)42 void CloudMediaPhotoHandler::SetUserId(const int32_t &userId)
43 {
44 this->userId_ = userId;
45 }
46
SetTraceId(const std::string & traceId)47 void CloudMediaPhotoHandler::SetTraceId(const std::string &traceId)
48 {
49 this->traceId_ = traceId;
50 }
51
GetTraceId() const52 std::string CloudMediaPhotoHandler::GetTraceId() const
53 {
54 return this->traceId_;
55 }
56
57 /**
58 * stats: 引用入参,按照以下顺序进行返回 [新增,合一,元数据修改,文件修改,删除]:
59 * stats: [100, 30, 50, 10, 10]
60 */
OnFetchRecords(const std::vector<MDKRecord> & records,std::vector<CloudMetaData> & newData,std::vector<CloudMetaData> & fdirtyData,std::vector<std::string> & failedRecords,std::vector<int32_t> & stats)61 int32_t CloudMediaPhotoHandler::OnFetchRecords(const std::vector<MDKRecord> &records,
62 std::vector<CloudMetaData> &newData, std::vector<CloudMetaData> &fdirtyData,
63 std::vector<std::string> &failedRecords, std::vector<int32_t> &stats)
64 {
65 MEDIA_INFO_LOG("OnFetchRecords, size: %{public}zu", records.size());
66 CHECK_AND_RETURN_RET_LOG(!records.empty(), E_OK, "OnFetchRecords records is empty");
67 int32_t ret;
68 OnFetchRecordsReqBody reqBody;
69 OnFetchRecordsRespBody respBody;
70 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_DATA_MODIFY, userId_};
71 for (auto record : records) {
72 OnFetchPhotosVo onFetchPhotoVo;
73 if (dataConvertor.ConverMDKRecordToOnFetchPhotosVo(record, onFetchPhotoVo) != E_OK) {
74 MEDIA_ERR_LOG("OnFetchRecords ConverMDKRecordToOnFetchPhotosVo error, recordId: %{public}s",
75 record.GetRecordId().c_str());
76 continue;
77 }
78 MEDIA_INFO_LOG("OnFetchRecords OnFetchPhotoVo: %{public}s", onFetchPhotoVo.ToString().c_str());
79 reqBody.AddOnFetchPhotoData(onFetchPhotoVo);
80 }
81 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_FETCH_RECORDS);
82 ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, reqBody,
83 respBody);
84 failedRecords = respBody.failedRecords;
85 stats = respBody.stats;
86 newData = this->processor_.GetCloudNewData(respBody.newDatas);
87 MEDIA_INFO_LOG("OnFetchRecords NewDataBody: %{public}s", respBody.ToString().c_str());
88 fdirtyData = this->processor_.GetCloudFdirtyData(respBody.fdirtyDatas);
89 return ret;
90 }
91
OnDentryFileInsert(std::vector<MDKRecord> & records,std::vector<std::string> & failedRecords)92 int32_t CloudMediaPhotoHandler::OnDentryFileInsert(
93 std::vector<MDKRecord> &records, std::vector<std::string> &failedRecords)
94 {
95 MEDIA_INFO_LOG("OnDentryFileInsert, size: %{public}zu", records.size());
96 CHECK_AND_RETURN_RET_LOG(!records.empty(), E_OK, "OnDentryFileInsert records is empty");
97 int32_t ret;
98 OnDentryFileReqBody reqBody;
99 OnDentryFileRespBody respBody;
100 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_DATA_MODIFY, userId_};
101 for (auto record : records) {
102 OnFetchPhotosVo onDentryRecord;
103 if (dataConvertor.ConverMDKRecordToOnFetchPhotosVo(record, onDentryRecord) != E_OK) {
104 MEDIA_ERR_LOG("OnDentryFileInsert ConverMDKRecordToOnFetchPhotosVo error");
105 continue;
106 }
107 MEDIA_INFO_LOG("OnDentryFileInsert OnFetchPhotosVo: %{public}s", onDentryRecord.ToString().c_str());
108 reqBody.AddOnDentryFileRecord(onDentryRecord);
109 }
110 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_DENTRY_FILE_INSERT);
111 ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, reqBody,
112 respBody);
113 failedRecords = respBody.failedRecords;
114 MEDIA_INFO_LOG("OnDentryFileInsert end");
115 return ret;
116 }
117
GetRetryRecords(std::vector<std::string> & records)118 int32_t CloudMediaPhotoHandler::GetRetryRecords(std::vector<std::string> &records)
119 {
120 MEDIA_INFO_LOG("enter CloudMediaPhotoHandler::GetRetryRecords");
121 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_GET_RETRY_RECORDS);
122 GetRetryRecordsRespBody respBody;
123 int32_t ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Get(operationCode,
124 respBody);
125 records = respBody.cloudIds;
126 return ret;
127 }
128
GetCheckRecords(const std::vector<std::string> & cloudIds,std::unordered_map<std::string,CloudCheckData> & checkRecords)129 int32_t CloudMediaPhotoHandler::GetCheckRecords(
130 const std::vector<std::string> &cloudIds, std::unordered_map<std::string, CloudCheckData> &checkRecords)
131 {
132 MEDIA_INFO_LOG("enter CloudMediaPhotoHandler::GetCheckRecords %{public}zu", cloudIds.size());
133 CHECK_AND_RETURN_RET_LOG(!cloudIds.empty(), E_OK, "GetCheckRecords cloudIds is empty");
134 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_GET_CHECK_RECORDS);
135 GetCheckRecordsReqBody reqBody;
136 reqBody.cloudIds = cloudIds;
137 GetCheckRecordsRespBody respBody;
138 int32_t ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, reqBody,
139 respBody);
140 if (ret != E_OK) {
141 MEDIA_ERR_LOG("Failed to GetCheckRecords");
142 return ret;
143 }
144 MEDIA_INFO_LOG("GetCheckRecords GetCheckRecordsRespBody: %{public}s", respBody.ToString().c_str());
145 checkRecords.clear();
146 for (auto &[cloudId, info] : respBody.checkDataList) {
147 CloudCheckData cloudCheckData;
148 cloudCheckData.cloudId = cloudId;
149 cloudCheckData.size = info.size;
150 cloudCheckData.path = info.data;
151 cloudCheckData.fileName = info.fileName;
152 cloudCheckData.type = info.mediaType;
153 cloudCheckData.version = info.cloudVersion;
154 cloudCheckData.position = info.position;
155 cloudCheckData.modifiedTime = info.dateModified;
156 cloudCheckData.dirtyType = info.dirty;
157 cloudCheckData.syncStatus = info.syncStatus;
158 cloudCheckData.thmStatus = info.thmStatus;
159 for (auto &[key, value] : info.attachment) {
160 CloudFileData fileData;
161 fileData.fileName = value.fileName;
162 fileData.filePath = value.filePath;
163 fileData.size = value.size;
164 cloudCheckData.attachment[key] = fileData;
165 }
166 checkRecords[cloudId] = cloudCheckData;
167 MEDIA_INFO_LOG("GetCheckRecords CloudCheckData: %{public}s", cloudCheckData.ToString().c_str());
168 }
169 return E_OK;
170 }
171
GetCreatedRecords(std::vector<MDKRecord> & records,int32_t size)172 int32_t CloudMediaPhotoHandler::GetCreatedRecords(std::vector<MDKRecord> &records, int32_t size)
173 {
174 MEDIA_INFO_LOG("CloudMediaPhotoHandler::GetCreatedRecords %{public}d", size);
175 CloudMdkRecordPhotosReqBody reqBody;
176 reqBody.size = size;
177 CloudMdkRecordPhotosRespBody respBody;
178 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_GET_CREATED_RECORDS);
179 int32_t ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, reqBody,
180 respBody);
181 if (ret != E_OK) {
182 MEDIA_ERR_LOG("GetCreatedRecords fail to call service function");
183 return ret;
184 }
185 std::vector<CloudMdkRecordPhotosVo> createdRecords = respBody.GetPhotosRecords();
186 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_CREATE, userId_};
187 for (auto &record : createdRecords) {
188 MDKRecord dkRecord;
189 ret = dataConvertor.ConvertToMdkRecord(record, dkRecord);
190 if (ret == E_OK) {
191 records.push_back(dkRecord);
192 } else {
193 MEDIA_ERR_LOG("GetCreatedRecords ReportFailure, ret: %{public}d, photosVo: %{public}s",
194 ret,
195 record.ToString().c_str());
196 this->ReportFailure(
197 ReportFailureReqBody()
198 .SetApiCode(static_cast<int32_t>(CloudMediaPhotoOperationCode::CMD_GET_CREATED_RECORDS))
199 .SetErrorCode(ret)
200 .SetFileId(record.fileId)
201 .SetCloudId(record.cloudId));
202 }
203 }
204 return E_OK;
205 }
206
GetMetaModifiedRecords(std::vector<MDKRecord> & records,int32_t size,int32_t dirtyType)207 int32_t CloudMediaPhotoHandler::GetMetaModifiedRecords(std::vector<MDKRecord> &records, int32_t size, int32_t dirtyType)
208 {
209 CloudMdkRecordPhotosReqBody reqBody;
210 reqBody.size = size;
211 reqBody.dirtyType = dirtyType;
212 CloudMdkRecordPhotosRespBody respBody;
213 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_GET_META_MODIFIED_RECORDS);
214 int32_t ret =
215 IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, reqBody, respBody);
216 if (ret != E_OK) {
217 MEDIA_ERR_LOG("CloudMediaPhotoHandler::GetMetaModifiedRecords Call IPC Error");
218 return ret;
219 }
220 std::vector<CloudMdkRecordPhotosVo> metaModifiedRecord = respBody.GetPhotosRecords();
221 MEDIA_INFO_LOG("Enter CloudMediaPhotoHandler::GetMetaModifiedRecords size: %{public}zu", metaModifiedRecord.size());
222 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_METADATA_MODIFY, userId_};
223 for (auto &record : metaModifiedRecord) {
224 MDKRecord dkRecord;
225 MEDIA_INFO_LOG("SetUpdateSourceAlbum CloudMdkRecordPhotosVo: %{public}s", record.ToString().c_str());
226 ret = dataConvertor.ConvertToMdkRecord(record, dkRecord);
227 MEDIA_INFO_LOG(
228 "Enter CloudMediaPhotoHandler::GetMetaModifiedRecords ConvertToMdkRecord: %{public}s, ret: %{public}d",
229 dkRecord.GetRecordId().c_str(),
230 ret);
231 if (ret == E_OK) {
232 records.push_back(dkRecord);
233 if (!record.removeAlbumCloudId.empty()) {
234 ret = dataConvertor.InsertAlbumIdChanges(dkRecord, records, record);
235 }
236 } else {
237 MEDIA_ERR_LOG("GetMetaModifiedRecords ReportFailure, ret: %{public}d, photosVo: %{public}s",
238 ret,
239 record.ToString().c_str());
240 this->ReportFailure(
241 ReportFailureReqBody()
242 .SetApiCode(static_cast<int32_t>(CloudMediaPhotoOperationCode::CMD_GET_META_MODIFIED_RECORDS))
243 .SetErrorCode(ret)
244 .SetFileId(record.fileId)
245 .SetCloudId(record.cloudId));
246 }
247 }
248 return E_OK;
249 }
250
GetFileModifiedRecords(std::vector<MDKRecord> & records,int32_t size)251 int32_t CloudMediaPhotoHandler::GetFileModifiedRecords(std::vector<MDKRecord> &records, int32_t size)
252 {
253 MEDIA_INFO_LOG("CloudMediaPhotoHandler::GetFileModifiedRecords");
254 CloudMdkRecordPhotosReqBody reqBody;
255 reqBody.size = size;
256 CloudMdkRecordPhotosRespBody respBody;
257 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_GET_FILE_MODIFIED_RECORDS);
258 int32_t ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, reqBody,
259 respBody);
260 if (ret != E_OK) {
261 MEDIA_ERR_LOG("GetFileModifiedRecords fail to call service function");
262 return ret;
263 }
264 std::vector<CloudMdkRecordPhotosVo> fileModifiedRecord = respBody.GetPhotosRecords();
265 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_DATA_MODIFY, userId_};
266 for (auto &record : fileModifiedRecord) {
267 MDKRecord dkRecord;
268 ret = dataConvertor.ConvertToMdkRecord(record, dkRecord);
269 if (ret == E_OK) {
270 records.push_back(dkRecord);
271 if (!record.removeAlbumCloudId.empty()) {
272 ret = dataConvertor.InsertAlbumIdChanges(dkRecord, records, record);
273 }
274 } else {
275 MEDIA_ERR_LOG("GetFileModifiedRecords ReportFailure, ret: %{public}d, photosVo: %{public}s",
276 ret,
277 record.ToString().c_str());
278 this->ReportFailure(
279 ReportFailureReqBody()
280 .SetApiCode(static_cast<int32_t>(CloudMediaPhotoOperationCode::CMD_GET_FILE_MODIFIED_RECORDS))
281 .SetErrorCode(ret)
282 .SetFileId(record.fileId)
283 .SetCloudId(record.cloudId));
284 }
285 }
286 return E_OK;
287 }
288
GetDeletedRecords(std::vector<MDKRecord> & records,int32_t size)289 int32_t CloudMediaPhotoHandler::GetDeletedRecords(std::vector<MDKRecord> &records, int32_t size)
290 {
291 MEDIA_INFO_LOG("CloudSync test info %{public}d", size);
292 CloudMdkRecordPhotosReqBody reqBody;
293 reqBody.size = size;
294 CloudMdkRecordPhotosRespBody respBody;
295 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_GET_DELETED_RECORDS);
296 int32_t ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, reqBody,
297 respBody);
298 if (ret != E_OK) {
299 MEDIA_ERR_LOG("GetDeletedRecords fail to call service function");
300 return ret;
301 }
302 std::vector<CloudMdkRecordPhotosVo> deletedRecord = respBody.GetPhotosRecords();
303 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_DELETE, userId_};
304 for (auto &record : deletedRecord) {
305 MDKRecord dkRecord;
306 ret = dataConvertor.ConvertToMdkRecord(record, dkRecord);
307 if (ret == E_OK) {
308 records.push_back(dkRecord);
309 } else {
310 MEDIA_ERR_LOG("GetDeletedRecords ReportFailure, ret: %{public}d, photosVo: %{public}s",
311 ret,
312 record.ToString().c_str());
313 this->ReportFailure(
314 ReportFailureReqBody()
315 .SetApiCode(static_cast<int32_t>(CloudMediaPhotoOperationCode::CMD_GET_DELETED_RECORDS))
316 .SetErrorCode(ret)
317 .SetFileId(record.fileId)
318 .SetCloudId(record.cloudId));
319 }
320 }
321 return E_OK;
322 }
323
GetCopyRecords(std::vector<MDKRecord> & records,int32_t size)324 int32_t CloudMediaPhotoHandler::GetCopyRecords(std::vector<MDKRecord> &records, int32_t size)
325 {
326 MEDIA_INFO_LOG("enter CloudMediaPhotoHandler::GetCopyRecords size:%{public}d", size);
327 CloudMdkRecordPhotosReqBody reqBody;
328 reqBody.size = size;
329 CloudMdkRecordPhotosRespBody respBody;
330 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_GET_COPY_RECORDS);
331 int32_t ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, reqBody,
332 respBody);
333 if (ret != E_OK) {
334 MEDIA_ERR_LOG("GetCopyRecords fail to call service function");
335 return ret;
336 }
337 std::vector<CloudMdkRecordPhotosVo> copyRecord = respBody.GetPhotosRecords();
338 MEDIA_INFO_LOG("CloudMediaPhotoHandler::GetCopyRecords result count: %{public}zu", copyRecord.size());
339 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_DATA_MODIFY, userId_};
340 for (auto &record : copyRecord) {
341 MDKRecord dkRecord;
342 ret = dataConvertor.ConvertToMdkRecord(record, dkRecord);
343 if (ret == E_OK) {
344 dkRecord.SetSrcRecordId(record.originalAssetCloudId);
345 records.push_back(dkRecord);
346 } else {
347 MEDIA_ERR_LOG(
348 "GetCopyRecords ReportFailure, ret: %{public}d, photosVo: %{public}s", ret, record.ToString().c_str());
349 this->ReportFailure(
350 ReportFailureReqBody()
351 .SetApiCode(static_cast<int32_t>(CloudMediaPhotoOperationCode::CMD_GET_COPY_RECORDS))
352 .SetErrorCode(ret)
353 .SetFileId(record.fileId)
354 .SetCloudId(record.cloudId));
355 }
356 }
357 return E_OK;
358 }
359
DeleteTempLivePhotoFile(std::string & livePhotoCachePath)360 void CloudMediaPhotoHandler::DeleteTempLivePhotoFile(std::string &livePhotoCachePath)
361 {
362 CHECK_AND_RETURN_LOG(!livePhotoCachePath.empty(), "livePhotoCachePath is empty");
363 int result = unlink(livePhotoCachePath.c_str());
364 CHECK_AND_RETURN_LOG(result == 0, "unlink err: %{public}d, result: %{public}d, livePhotoCachePath: %{public}s",
365 errno, result, livePhotoCachePath.c_str());
366 }
367
OnCreateRecords(const std::map<std::string,MDKRecordOperResult> & map,int32_t & failSize)368 int32_t CloudMediaPhotoHandler::OnCreateRecords(
369 const std::map<std::string, MDKRecordOperResult> &map, int32_t &failSize)
370 {
371 MEDIA_INFO_LOG("OnCreateRecords, size: %{public}zu", map.size());
372 CHECK_AND_RETURN_RET_LOG(!map.empty(), E_OK, "OnCreateRecords records is empty");
373 OnCreateRecordsPhotosReqBody req;
374 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_CREATE, userId_};
375 for (auto &entry : map) {
376 OnCreateRecord record;
377 if (dataConvertor.ConvertToOnCreateRecord(entry.first, entry.second, record) != E_OK) {
378 MEDIA_ERR_LOG("OnCreateRecords ConvertToOnCreateRecord error");
379 continue;
380 }
381 MEDIA_INFO_LOG("OnCreateRecords Record:%{public}s", record.ToString().c_str());
382 req.records.emplace_back(record);
383 DeleteTempLivePhotoFile(record.livePhotoCachePath);
384 }
385 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_CREATE_RECORDS);
386 FailedSizeResp resp;
387 resp.failedSize = 0;
388 int32_t ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, req,
389 resp);
390 failSize = resp.failedSize;
391 MEDIA_INFO_LOG("OnCreateRecords Resp:%{public}s", resp.ToString().c_str());
392 return ret;
393 }
394
OnMdirtyRecords(const std::map<std::string,MDKRecordOperResult> & map,int32_t & failSize)395 int32_t CloudMediaPhotoHandler::OnMdirtyRecords(
396 const std::map<std::string, MDKRecordOperResult> &map, int32_t &failSize)
397 {
398 MEDIA_INFO_LOG("OnMdirtyRecords, size: %{public}zu", map.size());
399 CHECK_AND_RETURN_RET_LOG(!map.empty(), E_OK, "OnMdirtyRecords records is empty");
400 OnModifyRecordsPhotosReqBody req;
401 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_DATA_MODIFY, userId_};
402 for (auto &entry : map) {
403 OnModifyRecord record;
404 if (dataConvertor.BuildModifyRecord(entry.first, entry.second, record) != E_OK) {
405 MEDIA_ERR_LOG("OnMdirtyRecords BuildModifyRecord error");
406 continue;
407 }
408 MEDIA_INFO_LOG("enter OnMdirtyRecords Record:%{public}s", record.ToString().c_str());
409 req.AddModifyRecord(record);
410 }
411 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_MDIRTY_RECORDS);
412 FailedSizeResp resp;
413 resp.failedSize = 0;
414 int32_t ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, req,
415 resp);
416 failSize = resp.failedSize;
417 MEDIA_INFO_LOG("OnMdirtyRecords Resp:%{public}s", resp.ToString().c_str());
418 return ret;
419 }
420
OnFdirtyRecords(const std::map<std::string,MDKRecordOperResult> & map,int32_t & failSize)421 int32_t CloudMediaPhotoHandler::OnFdirtyRecords(
422 const std::map<std::string, MDKRecordOperResult> &map, int32_t &failSize)
423 {
424 MEDIA_INFO_LOG("OnFdirtyRecords, size: %{public}zu", map.size());
425 CHECK_AND_RETURN_RET_LOG(!map.empty(), E_OK, "OnFdirtyRecords records is empty");
426 OnFileDirtyRecordsReqBody req;
427 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_FDIRTY_RECORDS);
428 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_DATA_MODIFY, userId_};
429 for (const auto &entry : map) {
430 OnFileDirtyRecord record;
431 if (dataConvertor.ConvertFdirtyRecord(entry.first, entry.second, record) != E_OK) {
432 MEDIA_ERR_LOG("OnFdirtyRecords ConvertFdirtyRecord Error");
433 continue;
434 }
435 MEDIA_INFO_LOG("OnFdirtyRecords Record: %{public}s", record.ToString().c_str());
436 req.AddRecord(record);
437 DeleteTempLivePhotoFile(record.livePhotoCachePath);
438 }
439 FailedSizeResp resp;
440 resp.failedSize = 0;
441 int32_t ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, req,
442 resp);
443 failSize = resp.failedSize;
444 MEDIA_INFO_LOG("OnFdirtyRecords Resp:%{public}s", resp.ToString().c_str());
445 return ret;
446 }
447
OnDeleteRecords(const std::map<std::string,MDKRecordOperResult> & map,int32_t & failSize)448 int32_t CloudMediaPhotoHandler::OnDeleteRecords(
449 const std::map<std::string, MDKRecordOperResult> &map, int32_t &failSize)
450 {
451 MEDIA_INFO_LOG("OnDeleteRecords, size: %{public}zu", map.size());
452 CHECK_AND_RETURN_RET_LOG(!map.empty(), E_OK, "OnDeleteRecords records is empty");
453 OnDeleteRecordsPhotosReqBody reqBody;
454 OnDeleteRecordsPhotosRespBody resp;
455 resp.failSize = 0;
456 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_DATA_MODIFY, userId_};
457 for (auto &entry : map) {
458 const MDKRecordOperResult &result = entry.second;
459 OnDeleteRecordsPhoto deleteRecord;
460 deleteRecord.dkRecordId = entry.first;
461 deleteRecord.cloudId = entry.first;
462 deleteRecord.isSuccess = result.IsSuccess();
463 reqBody.AddDeleteRecord(deleteRecord);
464 MEDIA_INFO_LOG("CloudMediaPhotoHandler::OnDeleteRecords ID: %{public}s", deleteRecord.cloudId.c_str());
465 }
466 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_DELETE_RECORDS);
467 int32_t ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, reqBody,
468 resp);
469 failSize = resp.failSize;
470 return ret;
471 }
472
OnCopyRecords(const std::map<std::string,MDKRecordOperResult> & map,int32_t & failSize)473 int32_t CloudMediaPhotoHandler::OnCopyRecords(const std::map<std::string, MDKRecordOperResult> &map, int32_t &failSize)
474 {
475 MEDIA_INFO_LOG("OnCopyRecords, size: %{public}zu", map.size());
476 CHECK_AND_RETURN_RET_LOG(!map.empty(), E_OK, "OnCopyRecords records is empty");
477 OnCopyRecordsPhotosReqBody req;
478 CloudFileDataConvert dataConvertor{CloudOperationType::FILE_COPY, userId_};
479 for (auto &entry : map) {
480 OnCopyRecord copyRecord;
481 if (dataConvertor.BuildCopyRecord(entry.first, entry.second, copyRecord) != E_OK) {
482 MEDIA_ERR_LOG("OnCopyRecords BuildCopyRecord error");
483 continue;
484 }
485 MEDIA_INFO_LOG("OnCopyRecords Record JSON:%{public}s", copyRecord.ToString().c_str());
486 req.AddCopyRecord(copyRecord);
487 }
488 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_COPY_RECORDS);
489 FailedSizeResp resp;
490 resp.failedSize = 0;
491 int32_t ret = IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, req,
492 resp);
493 failSize = resp.failedSize;
494 MEDIA_INFO_LOG("OnCopyRecords Resp:%{public}s", resp.ToString().c_str());
495 return ret;
496 }
497
OnStartSync()498 int32_t CloudMediaPhotoHandler::OnStartSync()
499 {
500 MEDIA_INFO_LOG("OnStartSync enter");
501 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_START_SYNC);
502 return IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode);
503 }
504
OnCompleteSync()505 int32_t CloudMediaPhotoHandler::OnCompleteSync()
506 {
507 MEDIA_INFO_LOG("OnCompleteSync enter");
508 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_COMPLETE_SYNC);
509 return IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode);
510 }
511
OnCompletePull()512 int32_t CloudMediaPhotoHandler::OnCompletePull()
513 {
514 MEDIA_INFO_LOG("OnCompletePull enter");
515 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_COMPLETE_PULL);
516 return IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode);
517 }
518
OnCompletePush()519 int32_t CloudMediaPhotoHandler::OnCompletePush()
520 {
521 MEDIA_INFO_LOG("OnCompletePush enter");
522 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_COMPLETE_PUSH);
523 return IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode);
524 }
525
OnCompleteCheck()526 int32_t CloudMediaPhotoHandler::OnCompleteCheck()
527 {
528 MEDIA_INFO_LOG("OnCompleteCheck begin");
529 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_ON_COMPLETE_CHECK);
530 return IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode);
531 }
532
ReportFailure(const ReportFailureReqBody & reqBody)533 int32_t CloudMediaPhotoHandler::ReportFailure(const ReportFailureReqBody &reqBody)
534 {
535 uint32_t operationCode = static_cast<uint32_t>(CloudMediaPhotoOperationCode::CMD_REPORT_FAILURE);
536 MEDIA_INFO_LOG("ReportFailure begin, reqBody: %{public}s", reqBody.ToString().c_str());
537 return IPC::UserDefineIPCClient().SetUserId(userId_).SetTraceId(this->traceId_).Post(operationCode, reqBody);
538 }
539 } // namespace OHOS::Media::CloudSync