1 /*
2 * Copyright (c) 2025 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License"){return 0;}
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_data_controller_service.h"
19
20 #include "cloud_sync_unprepared_data_vo.h"
21 #include "media_log.h"
22 #include "media_column.h"
23 #include "user_define_ipc.h"
24 #include "media_req_vo.h"
25 #include "media_resp_vo.h"
26 #include "medialibrary_errno.h"
27 #include "update_dirty_vo.h"
28 #include "update_position_vo.h"
29 #include "update_sync_status_vo.h"
30 #include "update_thm_status_vo.h"
31 #include "get_aging_file_vo.h"
32 #include "get_video_to_cache_vo.h"
33 #include "get_file_pos_stat_vo.h"
34 #include "get_cloud_thm_stat_vo.h"
35 #include "get_dirty_type_stat_vo.h"
36 #include "cloud_mdkrecord_photos_vo.h"
37 #include "update_local_file_dirty_vo.h"
38 #include "media_operate_result_vo.h"
39
40 namespace OHOS::Media::CloudSync {
UpdateDirty(MessageParcel & data,MessageParcel & reply)41 int32_t CloudMediaDataControllerService::UpdateDirty(MessageParcel &data, MessageParcel &reply)
42 {
43 MEDIA_INFO_LOG("enter UpdateDirtyForCloudCheck");
44 UpdateDirtyReqBody reqBody;
45 int32_t ret = IPC::UserDefineIPC().ReadRequestBody(data, reqBody);
46 if (ret != E_OK) {
47 MEDIA_ERR_LOG("UpdateDirtyForCloudCheck Read Req Error");
48 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
49 }
50 ret = this->dataService_.UpdateDirty(reqBody.cloudId, reqBody.dirtyType);
51 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
52 }
53
UpdatePosition(MessageParcel & data,MessageParcel & reply)54 int32_t CloudMediaDataControllerService::UpdatePosition(MessageParcel &data, MessageParcel &reply)
55 {
56 MEDIA_INFO_LOG("enter UpdatePositionForCloudCheck");
57 UpdatePositionReqBody reqBody;
58 int32_t ret = IPC::UserDefineIPC().ReadRequestBody(data, reqBody);
59 if (ret != E_OK) {
60 MEDIA_ERR_LOG("UpdatePositionForCloudCheck Read Req Error");
61 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
62 }
63 ret = this->dataService_.UpdatePosition(reqBody.cloudIds, reqBody.position);
64 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
65 }
66
UpdateSyncStatus(MessageParcel & data,MessageParcel & reply)67 int32_t CloudMediaDataControllerService::UpdateSyncStatus(MessageParcel &data, MessageParcel &reply)
68 {
69 MEDIA_INFO_LOG("enter UpdateSyncStatus");
70 UpdateSyncStatusReqBody reqBody;
71 int32_t ret = IPC::UserDefineIPC().ReadRequestBody(data, reqBody);
72 if (ret != E_OK) {
73 MEDIA_ERR_LOG("UpdateSyncStatus Read Req Error");
74 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
75 }
76 ret = this->dataService_.UpdateSyncStatus(reqBody.cloudId, reqBody.syncStatus);
77 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
78 }
79
UpdateThmStatus(MessageParcel & data,MessageParcel & reply)80 int32_t CloudMediaDataControllerService::UpdateThmStatus(MessageParcel &data, MessageParcel &reply)
81 {
82 UpdateThmStatusReqBody reqBody;
83 int32_t ret = IPC::UserDefineIPC().ReadRequestBody(data, reqBody);
84 if (ret != E_OK) {
85 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
86 }
87 ret = this->dataService_.UpdateThmStatus(reqBody.cloudId, reqBody.thmStatus);
88 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
89 }
90
GetAgingFile(MessageParcel & data,MessageParcel & reply)91 int32_t CloudMediaDataControllerService::GetAgingFile(MessageParcel &data, MessageParcel &reply)
92 {
93 GetAgingFileReqBody reqBody;
94 int32_t ret = IPC::UserDefineIPC().ReadRequestBody(data, reqBody);
95 if (ret != E_OK) {
96 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
97 }
98 int32_t sizeLimit = reqBody.sizeLimit;
99 if (sizeLimit <= 0 || sizeLimit > LIMIT_SIZE) {
100 MEDIA_ERR_LOG("GetAgingFile param error, sizeLimit = %{public}d", sizeLimit);
101 return IPC::UserDefineIPC().WriteResponseBody(reply, E_MEDIA_CLOUD_ARGS_INVAILD);
102 }
103 AgingFileQueryDto queryDto;
104 this->processor_.GetAgingFileQueryDto(reqBody, queryDto);
105 std::vector<PhotosDto> photosDtoList;
106 ret = this->dataService_.GetAgingFile(queryDto, photosDtoList);
107 if (ret != E_OK) {
108 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
109 }
110 std::vector<PhotosVo> photosVoList;
111 for (auto photosDto : photosDtoList) {
112 PhotosVo photosVo = this->processor_.ConvertPhotosDtoToPhotosVo(photosDto);
113 photosVoList.push_back(photosVo);
114 }
115 GetAgingFileRespBody respBody;
116 respBody.photos = photosVoList;
117 return IPC::UserDefineIPC().WriteResponseBody(reply, respBody);
118 }
119
GetActiveAgingFile(MessageParcel & data,MessageParcel & reply)120 int32_t CloudMediaDataControllerService::GetActiveAgingFile(MessageParcel &data, MessageParcel &reply)
121 {
122 GetAgingFileReqBody reqBody;
123 int32_t ret = IPC::UserDefineIPC().ReadRequestBody(data, reqBody);
124 if (ret != E_OK) {
125 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
126 }
127 int32_t sizeLimit = reqBody.sizeLimit;
128 if (sizeLimit <= 0 || sizeLimit > LIMIT_SIZE) {
129 MEDIA_ERR_LOG("GetActiveAgingFile param error, sizeLimit = %{public}d", sizeLimit);
130 return IPC::UserDefineIPC().WriteResponseBody(reply, E_MEDIA_CLOUD_ARGS_INVAILD);
131 }
132 AgingFileQueryDto queryDto;
133 this->processor_.GetAgingFileQueryDto(reqBody, queryDto);
134 std::vector<PhotosDto> photosDtoList;
135 ret = this->dataService_.GetActiveAgingFile(queryDto, photosDtoList);
136 if (ret != E_OK) {
137 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
138 }
139 std::vector<PhotosVo> photosVoList;
140 for (auto photosDto : photosDtoList) {
141 PhotosVo photosVo = this->processor_.ConvertPhotosDtoToPhotosVo(photosDto);
142 photosVoList.push_back(photosVo);
143 }
144 GetAgingFileRespBody respBody;
145 respBody.photos = photosVoList;
146 return IPC::UserDefineIPC().WriteResponseBody(reply, respBody);
147 }
148
GetVideoToCache(MessageParcel & data,MessageParcel & reply)149 int32_t CloudMediaDataControllerService::GetVideoToCache(MessageParcel &data, MessageParcel &reply)
150 {
151 std::vector<PhotosDto> photosDtoVec;
152 int32_t ret = this->dataService_.GetVideoToCache(photosDtoVec);
153 if (ret != E_OK) {
154 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
155 }
156 std::vector<PhotosVo> photosVoList;
157 for (auto &photosDto : photosDtoVec) {
158 PhotosVo photosVo = this->processor_.ConvertPhotosDtoToPhotosVo(photosDto);
159 photosVoList.push_back(photosVo);
160 }
161 GetVideoToCacheRespBody respBody;
162 respBody.photos = photosVoList;
163 return IPC::UserDefineIPC().WriteResponseBody(reply, respBody);
164 }
165
GetFilePosStat(MessageParcel & data,MessageParcel & reply)166 int32_t CloudMediaDataControllerService::GetFilePosStat(MessageParcel &data, MessageParcel &reply)
167 {
168 MEDIA_INFO_LOG("GetFilePosStat enter");
169 std::vector<uint64_t> statList = this->dataService_.GetFilePosStat();
170 GetFilePosStatRespBody respBody;
171 respBody.statList = statList;
172 return IPC::UserDefineIPC().WriteResponseBody(reply, respBody);
173 }
174
GetCloudThmStat(MessageParcel & data,MessageParcel & reply)175 int32_t CloudMediaDataControllerService::GetCloudThmStat(MessageParcel &data, MessageParcel &reply)
176 {
177 MEDIA_INFO_LOG("enter CloudMediaDataControllerService::GetCloudThmStat");
178 std::vector<uint64_t> statList = this->dataService_.GetCloudThmStat();
179 GetCloudThmStatRespBody respBody;
180 respBody.statList = statList;
181 return IPC::UserDefineIPC().WriteResponseBody(reply, respBody);
182 }
183
GetDirtyTypeStat(MessageParcel & data,MessageParcel & reply)184 int32_t CloudMediaDataControllerService::GetDirtyTypeStat(MessageParcel &data, MessageParcel &reply)
185 {
186 MEDIA_INFO_LOG("enter CloudMediaDataControllerService::GetDirtyTypeStat");
187 std::vector<uint64_t> statList;
188 int32_t ret = this->dataService_.GetDirtyTypeStat(statList);
189 if (ret != E_OK) {
190 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
191 }
192 GetDirtyTypeStatRespBody respBody;
193 respBody.statList = statList;
194 return IPC::UserDefineIPC().WriteResponseBody(reply, respBody);
195 }
196
UpdateLocalFileDirty(MessageParcel & data,MessageParcel & reply)197 int32_t CloudMediaDataControllerService::UpdateLocalFileDirty(MessageParcel &data, MessageParcel &reply)
198 {
199 UpdateLocalFileDirtyReqBody req;
200 int32_t ret = IPC::UserDefineIPC().ReadRequestBody(data, req);
201 if (ret != E_OK) {
202 MEDIA_ERR_LOG("UpdateLocalFileDirty Get Req Error");
203 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
204 }
205 ret = this->dataService_.UpdateLocalFileDirty(req.cloudIds);
206 MEDIA_INFO_LOG("UpdateLocalFileDirty %{public}zu, %{public}d", req.cloudIds.size(), ret);
207 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
208 }
209
GetCloudSyncUnPreparedData(MessageParcel & data,MessageParcel & reply)210 int32_t CloudMediaDataControllerService::GetCloudSyncUnPreparedData(MessageParcel &data, MessageParcel &reply)
211 {
212 CloudSyncUnPreparedDataRespBody respBody;
213 int32_t ret = this->enhanceService_.GetCloudSyncUnPreparedData(respBody.count);
214 MEDIA_INFO_LOG("GetCloudSyncUnPreparedData %{public}d, %{public}d", respBody.count, ret);
215 return IPC::UserDefineIPC().WriteResponseBody(reply, respBody);
216 }
217
SubmitCloudSyncPreparedDataTask(MessageParcel & data,MessageParcel & reply)218 int32_t CloudMediaDataControllerService::SubmitCloudSyncPreparedDataTask(MessageParcel &data, MessageParcel &reply)
219 {
220 int32_t ret = this->enhanceService_.SubmitCloudSyncPreparedDataTask();
221 MEDIA_INFO_LOG("SubmitCloudSyncPreparedDataTask, %{public}d", ret);
222 return IPC::UserDefineIPC().WriteResponseBody(reply, ret);
223 }
224 } // namespace OHOS::Media::CloudSync