1 /* 2 * Copyright (C) 2022 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_MEDIALIBRARY_COMMAND_PARSE_H 17 #define OHOS_MEDIALIBRARY_COMMAND_PARSE_H 18 19 #include <string> 20 #include <unordered_map> 21 #include <vector> 22 23 #include "abs_rdb_predicates.h" 24 #include "datashare_predicates.h" 25 #include "dir_asset.h" 26 #include "medialibrary_db_const.h" 27 #include "uri.h" 28 #include "values_bucket.h" 29 30 namespace OHOS { 31 namespace Media { 32 #define EXPORT __attribute__ ((visibility ("default"))) 33 enum class EXPORT OperationObject : uint32_t { 34 UNKNOWN_OBJECT = 0, 35 FILESYSTEM_ASSET, 36 FILESYSTEM_PHOTO, 37 FILESYSTEM_AUDIO, 38 FILESYSTEM_DIR, 39 FILESYSTEM_ALBUM, 40 SMART_ALBUM, 41 SMART_ALBUM_MAP, 42 THUMBNAIL, 43 THUMBNAIL_ASTC, 44 SMART_ALBUM_ASSETS, 45 ASSETMAP, 46 ALL_DEVICE, 47 ACTIVE_DEVICE, 48 MEDIA_VOLUME, 49 BUNDLE_PERMISSION, 50 PHOTO_ALBUM, 51 PHOTO_MAP, 52 UFM_PHOTO, 53 UFM_AUDIO, 54 UFM_ALBUM, 55 UFM_MAP, 56 PAH_PHOTO, 57 PAH_ALBUM, 58 PAH_MAP, 59 TOOL_PHOTO, 60 TOOL_AUDIO, 61 VISION_START, 62 VISION_OCR = VISION_START, 63 VISION_LABEL, 64 VISION_AESTHETICS, 65 VISION_OBJECT, 66 VISION_RECOMMENDATION, 67 VISION_SEGMENTATION, 68 VISION_COMPOSITION, 69 VISION_TOTAL, 70 VISION_IMAGE_FACE, 71 VISION_FACE_TAG, 72 VISION_SALIENCY, 73 VISION_END = VISION_SALIENCY, 74 GEO_DICTIONARY, 75 GEO_KNOWLEDGE, 76 GEO_PHOTO, 77 ANALYSIS_PHOTO_ALBUM, 78 ANALYSIS_PHOTO_MAP, 79 PAH_FORM_MAP, 80 SEARCH_TOTAL, // search 81 PAH_MULTISTAGES_CAPTURE, 82 }; 83 84 enum class EXPORT OperationType : uint32_t { 85 UNKNOWN_TYPE = 0, 86 OPEN, 87 CLOSE, 88 CREATE, 89 DELETE, 90 DELETE_TOOL, 91 UPDATE, 92 QUERY, 93 GETCAPACITY, 94 SCAN, 95 TRASH, 96 GENERATE, 97 AGING, 98 DISTRIBUTE_AGING, 99 COPY, 100 INSERT_PERMISSION, 101 ALBUM_ADD_PHOTOS, 102 ALBUM_REMOVE_PHOTOS, 103 ALBUM_RECOVER_ASSETS, 104 ALBUM_DELETE_ASSETS, // Delete assets permanently from system 105 TRASH_PHOTO, 106 UPDATE_PENDING, 107 SET_USER_COMMENT, 108 INDEX, 109 COMPAT_ALBUM_DELETE_ASSETS, 110 COMMIT_EDIT, 111 REVERT_EDIT, 112 HIDE, 113 QUERY_HIDDEN, 114 ALBUM_ORDER, 115 OPRN_STORE_FORM_ID, 116 OPRN_REMOVE_FORM_ID, 117 PORTRAIT_DISPLAY_LEVEL, 118 PORTRAIT_IS_ME, 119 PORTRAIT_ALBUM_NAME, 120 PORTRAIT_MERGE_ALBUM, 121 DISMISS_ASSET, 122 PORTRAIT_COVER_URI, 123 SUBMIT_CACHE, 124 BATCH_UPDATE_FAV, 125 BATCH_UPDATE_USER_COMMENT, 126 SET_PHOTO_QUALITY, 127 ADD_IMAGE, 128 PROCESS_IMAGE, 129 SET_LOCATION, 130 }; 131 132 class MediaLibraryCommand { 133 public: 134 EXPORT explicit MediaLibraryCommand(const Uri &uri); 135 EXPORT MediaLibraryCommand(const Uri &uri, const NativeRdb::ValuesBucket &value); 136 EXPORT MediaLibraryCommand(const Uri &uri, const OperationType &oprnType); 137 EXPORT MediaLibraryCommand(const OperationObject &oprnObject, const OperationType &oprnType, 138 MediaLibraryApi api = MediaLibraryApi::API_OLD); 139 EXPORT MediaLibraryCommand(const OperationObject &oprnObject, const OperationType &oprnType, 140 const NativeRdb::ValuesBucket &value, MediaLibraryApi api = MediaLibraryApi::API_OLD); 141 EXPORT MediaLibraryCommand(const OperationObject &oprnObject, const OperationType &oprnType, 142 const std::string &networkId, MediaLibraryApi api = MediaLibraryApi::API_OLD); 143 EXPORT MediaLibraryCommand() = delete; 144 EXPORT ~MediaLibraryCommand(); 145 EXPORT MediaLibraryCommand(const MediaLibraryCommand &) = delete; 146 EXPORT MediaLibraryCommand &operator=(const MediaLibraryCommand &) = delete; 147 EXPORT MediaLibraryCommand(MediaLibraryCommand &&) = delete; 148 EXPORT MediaLibraryCommand &operator=(MediaLibraryCommand &&) = delete; 149 150 OperationObject GetOprnObject() const; 151 OperationType GetOprnType() const; 152 const std::string &GetTableName(); 153 NativeRdb::ValuesBucket &GetValueBucket(); 154 EXPORT NativeRdb::AbsRdbPredicates *GetAbsRdbPredicates(); 155 const std::string &GetOprnFileId(); 156 const std::string &GetOprnDevice(); 157 const Uri &GetUri() const; 158 const std::string &GetBundleName(); 159 const std::string &GetDeviceName(); 160 EXPORT std::string GetUriStringWithoutSegment() const; 161 MediaLibraryApi GetApi(); 162 std::string GetQuerySetParam(const std::string &key); 163 EXPORT void SetDataSharePred(const DataShare::DataSharePredicates &pred); 164 const DataShare::DataSharePredicates &GetDataSharePred() const; 165 const std::string &GetResult(); 166 167 EXPORT void SetOprnObject(OperationObject object); 168 EXPORT void SetOprnAssetId(const std::string &oprnId); 169 EXPORT void SetValueBucket(const NativeRdb::ValuesBucket &value); 170 EXPORT void SetTableName(const std::string &tableName); 171 void SetBundleName(const std::string &bundleName); 172 void SetDeviceName(const std::string &deviceName); 173 void SetResult(const std::string &result); 174 175 private: 176 void ParseOprnObjectFromUri(); 177 void ParseOprnTypeFromUri(); 178 void ParseTableName(); 179 void InitAbsRdbPredicates(); 180 void ParseFileId(); 181 void ParseQuerySetMapFromUri(); 182 void SetApiFromQuerySetMap(); 183 void ParseOprnObjectFromFileUri(); 184 185 Uri uri_ {""}; 186 NativeRdb::ValuesBucket insertValue_; 187 std::unique_ptr<NativeRdb::AbsRdbPredicates> absRdbPredicates_; 188 std::unique_ptr<const DataShare::DataSharePredicates> datasharePred_; 189 OperationObject oprnObject_ {OperationObject::UNKNOWN_OBJECT}; 190 OperationType oprnType_ {OperationType::UNKNOWN_TYPE}; 191 std::string oprnFileId_; 192 std::string oprnDevice_; 193 std::string tableName_; 194 std::string bundleName_; 195 std::string deviceName_; 196 std::unordered_map<std::string, std::string> querySetMap_; 197 std::string result_; 198 MediaLibraryApi api_; 199 }; 200 } // namespace Media 201 } // namespace OHOS 202 203 #endif // OHOS_MEDIALIBRARY_COMMAND_PARSE_H 204