• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 #define MLOG_TAG "Media_Cloud_Controller"
17 
18 #include "cloud_media_photo_controller_processor.h"
19 
20 #include "media_log.h"
21 #include "cloud_file_data_vo.h"
22 #include "cloud_file_data_dto.h"
23 #include "photos_vo.h"
24 #include "photos_dto.h"
25 
26 namespace OHOS::Media::CloudSync {
SetFdirtyDataVoFromDto(std::vector<PhotosDto> & fdirtyDataDtos)27 std::vector<PhotosVo> CloudMediaPhotoControllerProcessor::SetFdirtyDataVoFromDto(std::vector<PhotosDto> &fdirtyDataDtos)
28 {
29     std::vector<PhotosVo> fdirtyDatas;
30     if (fdirtyDataDtos.size() <= 0) {
31         return fdirtyDatas;
32     }
33     for (auto fdirtyDataDto : fdirtyDataDtos) {
34         PhotosVo fdirtyDataVo;
35         fdirtyDataVo.cloudId = fdirtyDataDto.cloudId;
36         fdirtyDataVo.fileName = fdirtyDataDto.displayName;
37         fdirtyDataVo.path = fdirtyDataDto.path;
38         fdirtyDataVo.type = fdirtyDataDto.mediaType;
39         fdirtyDataVo.size = fdirtyDataDto.size;
40         fdirtyDataVo.modifiedTime = fdirtyDataDto.modifiedTime;
41         fdirtyDataVo.originalCloudId = fdirtyDataDto.originalCloudId;
42         for (auto &nodePair : fdirtyDataDto.attachment) {
43             CloudFileDataVo fileData;
44             fileData.fileName = nodePair.second.fileName;
45             fileData.filePath = nodePair.second.path;
46             fileData.size = nodePair.second.size;
47             fdirtyDataVo.attachment[nodePair.first] = fileData;
48         }
49         fdirtyDatas.emplace_back(fdirtyDataVo);
50     }
51     return fdirtyDatas;
52 }
SetNewDataVoFromDto(std::vector<PhotosDto> & newDataDtos)53 std::vector<PhotosVo> CloudMediaPhotoControllerProcessor::SetNewDataVoFromDto(std::vector<PhotosDto> &newDataDtos)
54 {
55     std::vector<PhotosVo> newDatas;
56     if (newDataDtos.size() <= 0) {
57         return newDatas;
58     }
59     for (auto newDataDto : newDataDtos) {
60         PhotosVo newDataVo;
61         newDataVo.cloudId = newDataDto.cloudId;
62         newDataVo.fileName = newDataDto.fileName;
63         newDataVo.path = newDataDto.path;
64         newDataVo.type = newDataDto.mediaType;
65         newDataVo.size = newDataDto.size;
66         newDataVo.modifiedTime = newDataDto.modifiedTime;
67         newDataVo.originalCloudId = newDataDto.originalCloudId;
68         for (auto &nodePair : newDataDto.attachment) {
69             CloudFileDataVo fileData;
70             fileData.fileName = nodePair.second.fileName;
71             fileData.filePath = nodePair.second.path;
72             fileData.size = nodePair.second.size;
73             newDataVo.attachment[nodePair.first] = fileData;
74         }
75         newDatas.emplace_back(newDataVo);
76     }
77     return newDatas;
78 }
79 using CheckData = GetCheckRecordsRespBodyCheckData;
GetCheckRecordsRespBody(std::vector<PhotosDto> photosDtoVec)80 std::unordered_map<std::string, CheckData> CloudMediaPhotoControllerProcessor::GetCheckRecordsRespBody(
81     std::vector<PhotosDto> photosDtoVec)
82 {
83     std::unordered_map<std::string, GetCheckRecordsRespBodyCheckData> checkDataList;
84     for (auto &photosDto : photosDtoVec) {
85         GetCheckRecordsRespBodyCheckData checkData;
86         checkData.cloudId = photosDto.cloudId;
87         checkData.size = photosDto.size;
88         checkData.data = photosDto.path;
89         checkData.displayName = photosDto.displayName;
90         checkData.fileName = photosDto.fileName;
91         checkData.mediaType = photosDto.mediaType;
92         checkData.cloudVersion = photosDto.cloudVersion;
93         checkData.position = photosDto.position;
94         checkData.dateModified = photosDto.dateModified;
95         checkData.dirty = photosDto.dirty;
96         checkData.syncStatus = photosDto.syncStatus;
97         checkData.thmStatus = photosDto.thumbStatus;
98         for (auto &[key, value] : photosDto.attachment) {
99             CloudFileDataVo vo;
100             vo.fileName = value.fileName;
101             vo.filePath = value.path;
102             vo.size = value.size;
103             checkData.attachment[key] = vo;
104         }
105         checkDataList[checkData.cloudId] = checkData;
106         MEDIA_DEBUG_LOG("CloudMediaDataControllerProcessor CheckData: %{public}s", checkData.ToString().c_str());
107     }
108     return checkDataList;
109 }
110 
GetBasicInfo(const PhotosPo & record,CloudMdkRecordPhotosVo & photosVo)111 bool CloudMediaPhotoControllerProcessor::GetBasicInfo(const PhotosPo &record, CloudMdkRecordPhotosVo &photosVo)
112 {
113     photosVo.title = record.title.value_or("");
114     photosVo.mediaType = record.mediaType.value_or(0);
115     photosVo.hidden = record.hidden.value_or(0);
116     photosVo.sourcePath = record.sourcePath.value_or("");
117     photosVo.displayName = record.displayName.value_or("");
118     photosVo.dateTrashed = record.dateTrashed.value_or(0);
119     photosVo.isFavorite = record.isFavorite.value_or(0);
120     photosVo.dirty = record.dirty.value_or(0);
121     photosVo.orientation = record.orientation.value_or(0);
122     photosVo.size = record.size.value_or(0);
123     photosVo.mimeType = record.mimeType.value_or("");
124     photosVo.albumCloudId = record.albumCloudId.value_or("");
125     photosVo.albumLPath = record.albumLPath.value_or("");
126     return true;
127 }
128 
GetAttributesInfo(const PhotosPo & record,CloudMdkRecordPhotosVo & photosVo)129 bool CloudMediaPhotoControllerProcessor::GetAttributesInfo(const PhotosPo &record, CloudMdkRecordPhotosVo &photosVo)
130 {
131     photosVo.subtype = record.subtype.value_or(0);
132     photosVo.burstCoverLevel = record.burstCoverLevel.value_or(1);
133     photosVo.burstKey = record.burstKey.value_or("");
134     photosVo.dateYear = record.dateYear.value_or("");
135     photosVo.dateMonth = record.dateMonth.value_or("");
136     photosVo.dateDay = record.dateDay.value_or("");
137     photosVo.duration = record.duration.value_or(0);
138     photosVo.relativePath = record.relativePath.value_or("");
139     photosVo.virtualPath = record.virtualPath.value_or("");
140     photosVo.shootingMode = record.shootingMode.value_or("");
141     photosVo.shootingModeTag = record.shootingModeTag.value_or("");
142     photosVo.dynamicRangeType = record.dynamicRangeType.value_or(0);
143     photosVo.frontCamera = record.frontCamera.value_or("");
144     photosVo.originalSubtype = record.originalSubtype.value_or(0);
145     photosVo.coverPosition = record.coverPosition.value_or(0);
146     photosVo.isRectificationCover = record.isRectificationCover.value_or(0);
147     photosVo.exifRotate = record.exifRotate.value_or(0);
148     photosVo.movingPhotoEffectMode = record.movingPhotoEffectMode.value_or(0);
149     photosVo.supportedWatermarkType = record.supportedWatermarkType.value_or(0);
150     photosVo.strongAssociation = record.strongAssociation.value_or(0);
151     photosVo.fileId = record.fileId.value_or(0);
152     photosVo.data = record.data.value_or("");
153     photosVo.ownerAlbumId = record.ownerAlbumId.value_or(0);
154     return true;
155 }
156 
GetPropertiesInfo(const PhotosPo & record,CloudMdkRecordPhotosVo & photosVo)157 bool CloudMediaPhotoControllerProcessor::GetPropertiesInfo(const PhotosPo &record, CloudMdkRecordPhotosVo &photosVo)
158 {
159     photosVo.metaDateModified = record.metaDateModified.value_or(0);
160     photosVo.hiddenTime = record.hiddenTime.value_or(0);
161     photosVo.editTime = record.editTime.value_or(0);
162     photosVo.dateAdded = record.dateAdded.value_or(0);
163     photosVo.dateModified = record.dateModified.value_or(0);
164     photosVo.dateTaken = record.dateTaken.value_or(0);
165     photosVo.detailTime = record.detailTime.value_or("");
166     photosVo.height = record.height.value_or(0);
167     photosVo.width = record.width.value_or(0);
168     photosVo.deviceName = record.deviceName.value_or("");
169     photosVo.latitude = record.latitude.value_or(0);
170     photosVo.longitude = record.longitude.value_or(0);
171     photosVo.userComment = record.userComment.value_or("");
172     return true;
173 }
174 
GetCloudInfo(const PhotosPo & record,CloudMdkRecordPhotosVo & photosVo)175 bool CloudMediaPhotoControllerProcessor::GetCloudInfo(const PhotosPo &record, CloudMdkRecordPhotosVo &photosVo)
176 {
177     photosVo.cloudId = record.cloudId.value_or("");
178     photosVo.originalAssetCloudId = record.originalAssetCloudId.value_or("");
179     photosVo.recordType = record.recordType.value_or("");
180     photosVo.recordId = record.cloudId.value_or("");
181     photosVo.baseVersion = record.baseVersion.value_or(0);
182     photosVo.isNew = record.isNew.value_or(false);
183     return true;
184 }
185 
ConvertRecordPoToVo(const PhotosPo & record)186 CloudMdkRecordPhotosVo CloudMediaPhotoControllerProcessor::ConvertRecordPoToVo(const PhotosPo &record)
187 {
188     CloudMdkRecordPhotosVo photosVo;
189     this->GetBasicInfo(record, photosVo);
190     this->GetAttributesInfo(record, photosVo);
191     this->GetPropertiesInfo(record, photosVo);
192     this->GetCloudInfo(record, photosVo);
193     return photosVo;
194 }
195 
GetBasicInfo(const OnFetchPhotosVo & photosVo,CloudMediaPullDataDto & data)196 bool CloudMediaPhotoControllerProcessor::GetBasicInfo(const OnFetchPhotosVo &photosVo, CloudMediaPullDataDto &data)
197 {
198     data.basicFileName = photosVo.fileName;
199     data.basicDisplayName = photosVo.fileName;
200     data.propertiesSourceFileName = photosVo.fileName;
201     data.propertiesSourcePath = photosVo.fileSourcePath;
202     data.basicFileType = photosVo.fileType;
203     data.basicSize = photosVo.size;
204     data.localSize = photosVo.size;
205     data.lcdSize = photosVo.lcdSize;
206     data.thmSize = photosVo.thmSize;
207     data.propertiesRotate = photosVo.rotation;
208     data.basicIsFavorite = photosVo.isFavorite;
209     data.attributesHidden = photosVo.hidden;
210     data.basicRecycledTime = photosVo.recycledTime;
211     data.latitude = photosVo.latitude;
212     data.longitude = photosVo.longitude;
213     data.localPath = photosVo.localPath;
214     data.basicDeviceName = photosVo.source;
215     data.basicDescription = photosVo.description;
216     return true;
217 }
218 
GetAttributesInfo(const OnFetchPhotosVo & photosVo,CloudMediaPullDataDto & data)219 bool CloudMediaPhotoControllerProcessor::GetAttributesInfo(const OnFetchPhotosVo &photosVo, CloudMediaPullDataDto &data)
220 {
221     data.attributesFileId = photosVo.fileId;
222     data.basicMimeType = photosVo.mimeType;
223     data.basicIsRecycle = photosVo.isRecycle;
224     data.propertiesHeight = photosVo.photoHeight;
225     data.propertiesWidth = photosVo.photoWidth;
226     data.propertiesDetailTime = photosVo.detailTime;
227     data.attributesTitle = photosVo.title;
228     data.attributesMediaType = photosVo.mediaType;
229     data.duration = photosVo.duration;
230     data.attributesHiddenTime = photosVo.hiddenTime;
231     data.attributesRelativePath = photosVo.relativePath;
232     data.attributesVirtualPath = photosVo.virtualPath;
233     data.attributesShootingMode = photosVo.shootingMode;
234     data.attributesShootingModeTag = photosVo.shootingModeTag;
235     data.attributesBurstKey = photosVo.burstKey;
236     data.attributesBurstCoverLevel = photosVo.burstCoverLevel;
237     data.attributesSubtype = photosVo.subtype;
238     data.attributesOriginalSubtype = photosVo.originalSubtype;
239     data.attributesDynamicRangeType = photosVo.dynamicRangeType;
240     data.attributesFrontCamera = photosVo.frontCamera;
241     data.attributesMovingPhotoEffectMode = photosVo.movingPhotoEffectMode;
242     data.attributesCoverPosition = photosVo.coverPosition;
243     data.attributesIsRectificationCover = photosVo.isRectificationCover;
244     data.exifRotate = photosVo.exifRotate;
245     data.attributesEditDataCamera = photosVo.editDataCamera;
246     data.attributesSupportedWatermarkType = photosVo.supportedWatermarkType;
247     data.attributesStrongAssociation = photosVo.strongAssociation;
248     return true;
249 }
250 
GetPropertiesInfo(const OnFetchPhotosVo & photosVo,CloudMediaPullDataDto & data)251 bool CloudMediaPhotoControllerProcessor::GetPropertiesInfo(const OnFetchPhotosVo &photosVo, CloudMediaPullDataDto &data)
252 {
253     data.basicCreatedTime = photosVo.createTime;
254     data.basicEditedTime = photosVo.dualEditTime;
255     data.attributesEditedTimeMs = photosVo.editedTimeMs;
256     data.modifiedTime = photosVo.editedTimeMs;
257     data.attributesDateYear = photosVo.dateYear;
258     data.attributesDateMonth = photosVo.dateMonth;
259     data.attributesDateDay = photosVo.dateDay;
260     data.attributesEditTime = photosVo.editTime;
261     data.propertiesFirstUpdateTime = photosVo.firstVisitTime;
262     data.attributesMetaDateModified = photosVo.metaDateModified;
263     return true;
264 }
265 
GetCloudInfo(const OnFetchPhotosVo & photosVo,CloudMediaPullDataDto & data)266 bool CloudMediaPhotoControllerProcessor::GetCloudInfo(const OnFetchPhotosVo &photosVo, CloudMediaPullDataDto &data)
267 {
268     data.cloudId = photosVo.cloudId;
269     data.attributesFixVersion = photosVo.fixVersion;
270     data.basicCloudVersion = photosVo.version;
271     data.basicIsDelete = photosVo.isDelete;
272     data.hasAttributes = photosVo.hasAttributes;
273     data.hasProperties = photosVo.hasproperties;
274     return true;
275 }
276 
GetAlbumInfo(const OnFetchPhotosVo & photosVo,CloudMediaPullDataDto & data)277 bool CloudMediaPhotoControllerProcessor::GetAlbumInfo(const OnFetchPhotosVo &photosVo, CloudMediaPullDataDto &data)
278 {
279     data.attributesSrcAlbumIds = photosVo.sourceAlbumIds;
280     return true;
281 }
282 
ConvertToCloudMediaPullData(const OnFetchPhotosVo & photosVo)283 CloudMediaPullDataDto CloudMediaPhotoControllerProcessor::ConvertToCloudMediaPullData(const OnFetchPhotosVo &photosVo)
284 {
285     CloudMediaPullDataDto data;
286     this->GetBasicInfo(photosVo, data);
287     this->GetAttributesInfo(photosVo, data);
288     this->GetPropertiesInfo(photosVo, data);
289     this->GetCloudInfo(photosVo, data);
290     this->GetAlbumInfo(photosVo, data);
291     return data;
292 }
293 
ConvertToPhotoDto(const OnCreateRecord & recordVo)294 PhotosDto CloudMediaPhotoControllerProcessor::ConvertToPhotoDto(const OnCreateRecord &recordVo)
295 {
296     PhotosDto record;
297     record.fileId = recordVo.fileId;
298     record.localId = recordVo.localId;
299     record.rotation = recordVo.rotation;
300     record.fileType = recordVo.fileType;
301     record.size = recordVo.size;
302     record.createTime = recordVo.createTime;
303     record.modifiedTime = recordVo.modifiedTime;
304     record.editedTimeMs = recordVo.editedTimeMs;
305     record.metaDateModified = recordVo.metaDateModified;
306     record.version = recordVo.version;
307     record.cloudId = recordVo.cloudId;
308     record.path = recordVo.path;
309     record.fileName = recordVo.fileName;
310     record.sourcePath = recordVo.sourcePath;
311     record.isSuccess = recordVo.isSuccess;
312     record.errorType = recordVo.errorType;
313     record.serverErrorCode = recordVo.serverErrorCode;
314     record.livePhotoCachePath = recordVo.livePhotoCachePath;
315     record.errorDetails = recordVo.errorDetails;
316     return record;
317 }
318 
ConvertToPhotosDto(const OnFileDirtyRecord & recordVo,PhotosDto & dto)319 void CloudMediaPhotoControllerProcessor::ConvertToPhotosDto(const OnFileDirtyRecord &recordVo, PhotosDto &dto)
320 {
321     dto.fileId = recordVo.fileId;
322     dto.rotation = recordVo.rotation;
323     dto.fileType = recordVo.fileType;
324     dto.size = recordVo.size;
325     dto.createTime = recordVo.createTime;
326     dto.modifiedTime = recordVo.modifyTime;
327     dto.version = recordVo.version;
328     dto.cloudId = recordVo.cloudId;
329     dto.path = recordVo.path;
330     dto.fileName = recordVo.fileName;
331     dto.sourcePath = recordVo.sourcePath;
332     dto.metaDateModified = recordVo.metaDateModified;
333     dto.errorDetails = recordVo.errorDetails;
334     dto.serverErrorCode = recordVo.serverErrorCode;
335     dto.errorType = recordVo.errorType;
336     dto.isSuccess = recordVo.isSuccess;
337     return;
338 }
339 
ConvertToPhotosDto(const OnModifyRecord & recordVo,PhotosDto & dto)340 void CloudMediaPhotoControllerProcessor::ConvertToPhotosDto(const OnModifyRecord &recordVo, PhotosDto &dto)
341 {
342     dto.cloudId = recordVo.cloudId;
343     dto.fileId = recordVo.fileId;
344     dto.fileName = recordVo.fileName;
345     dto.modifiedTime = recordVo.modifyTime;
346     dto.metaDateModified = recordVo.metaDateModified;
347     dto.path = recordVo.path;
348     dto.version = recordVo.version;
349     dto.isSuccess = recordVo.isSuccess;
350     dto.errorType = recordVo.errorType;
351     dto.serverErrorCode = recordVo.serverErrorCode;
352     dto.errorDetails = recordVo.errorDetails;
353     return;
354 }
355 
GetReportFailureDto(const ReportFailureReqBody & reqBody)356 ReportFailureDto CloudMediaPhotoControllerProcessor::GetReportFailureDto(const ReportFailureReqBody &reqBody)
357 {
358     ReportFailureDto reportFailureDto;
359     reportFailureDto.apiCode = reqBody.apiCode;
360     reportFailureDto.errorCode = reqBody.errorCode;
361     reportFailureDto.fileId = reqBody.fileId;
362     reportFailureDto.cloudId = reqBody.cloudId;
363     return reportFailureDto;
364 }
365 }  // namespace OHOS::Media::CloudSync