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 #ifndef OHOS_MEDIA_CLOUD_SYNC_CLOUD_MEDIA_DATA_CONTROLLER_SERVICE_H 17 #define OHOS_MEDIA_CLOUD_SYNC_CLOUD_MEDIA_DATA_CONTROLLER_SERVICE_H 18 19 #include <string> 20 #include <vector> 21 #include <map> 22 23 #include "message_parcel.h" 24 #include "datashare_stub.h" 25 #include "sys_utils.h" 26 #include "photos_dto.h" 27 #include "photos_vo.h" 28 #include "rdb_store.h" 29 #include "i_media_controller_service.h" 30 #include "cloud_media_operation_code.h" 31 #include "medialibrary_errno.h" 32 #include "media_resp_vo.h" 33 #include "media_empty_obj_vo.h" 34 #include "user_define_ipc.h" 35 #include "cloud_media_data_controller_processor.h" 36 #include "cloud_media_data_service.h" 37 #include "cloud_media_define.h" 38 #include "cloud_media_enhance_service.h" 39 40 namespace OHOS::Media::CloudSync { 41 class EXPORT CloudMediaDataControllerService : public IPC::IMediaControllerService { 42 private: 43 int32_t UpdateDirty(MessageParcel &data, MessageParcel &reply); 44 int32_t UpdatePosition(MessageParcel &data, MessageParcel &reply); 45 int32_t UpdateThmStatus(MessageParcel &data, MessageParcel &reply); 46 int32_t GetAgingFile(MessageParcel &data, MessageParcel &reply); 47 int32_t GetActiveAgingFile(MessageParcel &data, MessageParcel &reply); 48 int32_t GetVideoToCache(MessageParcel &data, MessageParcel &reply); 49 int32_t GetFilePosStat(MessageParcel &data, MessageParcel &reply); 50 int32_t GetCloudThmStat(MessageParcel &data, MessageParcel &reply); 51 int32_t GetDirtyTypeStat(MessageParcel &data, MessageParcel &reply); 52 int32_t UpdateLocalFileDirty(MessageParcel &data, MessageParcel &reply); 53 int32_t UpdateSyncStatus(MessageParcel &data, MessageParcel &reply); 54 int32_t GetCloudSyncUnPreparedData(MessageParcel &data, MessageParcel &reply); 55 int32_t SubmitCloudSyncPreparedDataTask(MessageParcel &data, MessageParcel &reply); 56 57 private: 58 using RequestHandle = int32_t (CloudMediaDataControllerService::*)(MessageParcel &, MessageParcel &); 59 const std::map<uint32_t, RequestHandle> HANDLERS = { 60 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_UPDATE_DIRTY_FOR_CLOUD_CHECK), 61 &CloudMediaDataControllerService::UpdateDirty}, 62 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_UPDATE_POSITION_FOR_CLOUD_CHECK), 63 &CloudMediaDataControllerService::UpdatePosition}, 64 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_UPDATE_THM_STATUS_FOR_CLOUD_CHECK), 65 &CloudMediaDataControllerService::UpdateThmStatus}, 66 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_GET_VIDEO_TO_CACHE), 67 &CloudMediaDataControllerService::GetVideoToCache}, 68 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_GET_FILE_POS_STAT), 69 &CloudMediaDataControllerService::GetFilePosStat}, 70 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_GET_CLOUD_THM_STAT), 71 &CloudMediaDataControllerService::GetCloudThmStat}, 72 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_GET_DIRTY_TYPE_STAT), 73 &CloudMediaDataControllerService::GetDirtyTypeStat}, 74 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_GET_AGING_ASSET), 75 &CloudMediaDataControllerService::GetAgingFile}, 76 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_GET_ACTIVE_AGING_ASSET), 77 &CloudMediaDataControllerService::GetActiveAgingFile}, 78 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_UPDATE_LOCAL_FILE_DIRTY), 79 &CloudMediaDataControllerService::UpdateLocalFileDirty}, 80 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_UPDATE_SYNC_STATUS), 81 &CloudMediaDataControllerService::UpdateSyncStatus}, 82 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_GET_CLOUD_SYNC_UNPREPARED_DATA), 83 &CloudMediaDataControllerService::GetCloudSyncUnPreparedData}, 84 {static_cast<uint32_t>(CloudMediaOperationCode::CMD_SUBMIT_CLOUD_SYNC_UNPREPARED_DATA_TASK), 85 &CloudMediaDataControllerService::SubmitCloudSyncPreparedDataTask}, 86 }; 87 88 public: 89 virtual ~CloudMediaDataControllerService() = default; Accept(uint32_t code)90 bool Accept(uint32_t code) override 91 { 92 return this->HANDLERS.find(code) != this->HANDLERS.end(); 93 } OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,OHOS::Media::IPC::IPCContext & context)94 int32_t OnRemoteRequest( 95 uint32_t code, MessageParcel &data, MessageParcel &reply, OHOS::Media::IPC::IPCContext &context) override 96 { 97 auto it = this->HANDLERS.find(code); 98 if (!this->Accept(code) || it == this->HANDLERS.end()) { 99 return IPC::UserDefineIPC().WriteResponseBody(reply, E_IPC_SEVICE_NOT_FOUND); 100 } 101 SysUtils::SlowDown(); 102 return (this->*(it->second))(data, reply); 103 } GetPermissionPolicy(uint32_t code,std::vector<std::vector<PermissionType>> & permissionPolicy,bool & isBypass)104 int32_t GetPermissionPolicy( 105 uint32_t code, std::vector<std::vector<PermissionType>> &permissionPolicy, bool &isBypass) override 106 { 107 permissionPolicy = {{CLOUD_READ, CLOUD_WRITE}}; 108 return E_SUCCESS; 109 } 110 111 private: 112 CloudMediaDataControllerProcessor processor_; 113 CloudMediaDataService dataService_; 114 CloudMediaEnhanceService enhanceService_; 115 }; 116 } // namespace OHOS::Media::CloudSync 117 #endif // OHOS_MEDIA_CLOUD_SYNC_CLOUD_MEDIA_DATA_CONTROLLER_SERVICE_H