1 /* 2 * Copyright (C) 2021 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 METADATA_H 17 #define METADATA_H 18 19 #include <unordered_map> 20 #include <variant> 21 #include "scanner_utils.h" 22 #include "fetch_result.h" 23 #include "abs_shared_result_set.h" 24 25 namespace OHOS { 26 namespace Media { 27 #define EXPORT __attribute__ ((visibility ("default"))) 28 class Metadata { 29 public: 30 EXPORT Metadata(); 31 EXPORT ~Metadata() = default; 32 using VariantData = std::variant<int32_t, std::string, int64_t, double>; 33 34 EXPORT void SetFileId(const VariantData &id); 35 EXPORT int32_t GetFileId() const; 36 37 EXPORT void SetFilePath(const VariantData &path); 38 EXPORT const std::string &GetFilePath() const; 39 40 EXPORT void SetUri(const VariantData &uri); 41 EXPORT const std::string &GetUri() const; 42 43 EXPORT void SetRelativePath(const VariantData &relativePath); 44 EXPORT const std::string &GetRelativePath() const; 45 46 EXPORT void SetFileMimeType(const VariantData &mimeType); 47 EXPORT const std::string &GetFileMimeType() const; 48 49 EXPORT void SetFileMediaType(const VariantData &mediaType); 50 EXPORT MediaType GetFileMediaType() const; 51 52 EXPORT void SetFileName(const VariantData &name); 53 EXPORT const std::string &GetFileName() const; 54 55 EXPORT void SetFileSize(const VariantData &size); 56 EXPORT int64_t GetFileSize() const; 57 58 EXPORT void SetFileDateAdded(const VariantData &dateAdded); 59 EXPORT int64_t GetFileDateAdded() const; 60 61 EXPORT void SetFileDateModified(const VariantData &dateModified); 62 EXPORT int64_t GetFileDateModified() const; 63 64 EXPORT void SetFileExtension(const VariantData &fileExt); 65 EXPORT const std::string &GetFileExtension() const; 66 67 EXPORT void SetFileTitle(const VariantData &title); 68 EXPORT const std::string &GetFileTitle() const; 69 70 EXPORT void SetFileArtist(const VariantData &artist); 71 EXPORT const std::string &GetFileArtist() const; 72 73 EXPORT void SetAlbum(const VariantData &album); 74 EXPORT const std::string &GetAlbum() const; 75 76 EXPORT void SetFileHeight(const VariantData &height); 77 EXPORT int32_t GetFileHeight() const; 78 79 EXPORT void SetFileWidth(const VariantData &width); 80 EXPORT int32_t GetFileWidth() const; 81 82 EXPORT void SetOrientation(const VariantData &orientation); 83 EXPORT int32_t GetOrientation() const; 84 85 EXPORT void SetExifRotate(const VariantData &exifRotate); 86 EXPORT int32_t GetExifRotate() const; 87 88 EXPORT void SetFileDuration(const VariantData &duration); 89 EXPORT int32_t GetFileDuration() const; 90 91 EXPORT int32_t GetParentId() const; 92 EXPORT void SetParentId(const VariantData &id); 93 94 EXPORT void SetAlbumId(const VariantData &albumId); 95 EXPORT int32_t GetAlbumId() const; 96 97 EXPORT void SetAlbumName(const VariantData &album); 98 EXPORT const std::string &GetAlbumName() const; 99 100 EXPORT void SetRecyclePath(const VariantData &recyclePath); 101 EXPORT const std::string &GetRecyclePath() const; 102 103 EXPORT void SetDateTaken(const VariantData &dateTaken); 104 EXPORT int64_t GetDateTaken() const; 105 106 EXPORT void SetLongitude(const VariantData &longitude); 107 EXPORT double GetLongitude() const; 108 109 EXPORT void SetLatitude(const VariantData &latitude); 110 EXPORT double GetLatitude() const; 111 112 EXPORT void SetTimePending(const VariantData &timePending); 113 EXPORT int64_t GetTimePending() const; 114 115 EXPORT void SetUserComment(const VariantData &userComment); 116 EXPORT const std::string &GetUserComment() const; 117 118 EXPORT void SetAllExif(const VariantData &allExif); 119 EXPORT const std::string &GetAllExif() const; 120 121 EXPORT void SetDateYear(const VariantData &dateYear); 122 EXPORT const std::string &GetDateYear() const; 123 124 EXPORT void SetDateMonth(const VariantData &dateMonth); 125 EXPORT const std::string &GetDateMonth() const; 126 127 EXPORT void SetDateDay(const VariantData &dateDay); 128 EXPORT const std::string &GetDateDay() const; 129 130 EXPORT void SetShootingMode(const VariantData &shootingMode); 131 EXPORT const std::string &GetShootingMode() const; 132 133 EXPORT void SetShootingModeTag(const VariantData &shootingMode); 134 EXPORT const std::string &GetShootingModeTag() const; 135 136 EXPORT void SetLastVisitTime(const VariantData &lastVisitTime); 137 EXPORT int64_t GetLastVisitTime() const; 138 139 EXPORT void SetPhotoSubType(const VariantData &photoSubType); 140 EXPORT int32_t GetPhotoSubType() const; 141 142 EXPORT void SetMovingPhotoEffectMode(const VariantData &movingPhotoEffectMode); 143 EXPORT int32_t GetMovingPhotoEffectMode() const; 144 145 EXPORT void SetFrontCamera(const VariantData &forntcamera); 146 EXPORT std::string GetFrontCamera() const; 147 148 void SetMovingPhotoImagePath(const VariantData &imagePath); 149 EXPORT std::string GetMovingPhotoImagePath() const; 150 151 EXPORT void SetDynamicRangeType(const VariantData &type); 152 EXPORT int32_t GetDynamicRangeType() const; 153 154 EXPORT void SetCoverPosition(const VariantData &coverPosition); 155 EXPORT int64_t GetCoverPosition() const; 156 157 void SetFrameIndex(const VariantData &frameIndex); 158 int32_t GetFrameIndex() const; 159 160 EXPORT void SetIsTemp(const VariantData &isTemp); 161 EXPORT int32_t GetIsTemp() const; 162 163 EXPORT void SetPhotoQuality(const VariantData &photoQuality); 164 EXPORT int32_t GetPhotoQuality() const; 165 166 EXPORT void SetDirty(const VariantData &dirty); 167 EXPORT int32_t GetDirty() const; 168 169 EXPORT void SetDetailTime(const VariantData &detailTime); 170 EXPORT std::string GetDetailTime() const; 171 172 EXPORT void SetForAdd(bool forAdd); 173 EXPORT bool GetForAdd() const; 174 EXPORT void SetTableName(const std::string &tableName); 175 EXPORT std::string GetTableName(); 176 void SetOwnerPackage(const VariantData &ownerPackage); 177 const std::string GetOwnerPackage() const; 178 179 void SetBurstCoverLevel(const VariantData &burstCoverLevel); 180 int32_t GetBurstCoverLevel() const; 181 182 void SetStageVideoTaskStatus(const VariantData &stageVideoTaskStatus); 183 int32_t GetStageVideoTaskStatus() const; 184 185 EXPORT void Init(); 186 void InitV2(); 187 188 using MetadataFnPtr = void (Metadata::*)(const VariantData &); 189 EXPORT std::unordered_map<std::string, std::pair<ResultSetDataType, MetadataFnPtr>> memberFuncMap_; 190 191 private: 192 int32_t id_; 193 std::string uri_; 194 std::string filePath_; 195 std::string relativePath_; 196 197 std::string mimeType_; 198 MediaType mediaType_; 199 std::string name_; 200 201 int64_t size_; 202 int64_t dateModified_; 203 int64_t dateAdded_; 204 205 std::string fileExt_; 206 int32_t parentId_; 207 208 // audio 209 std::string title_; 210 std::string artist_; 211 std::string album_; 212 213 // video, image 214 int32_t height_; 215 int32_t width_; 216 int32_t duration_; 217 int32_t orientation_; 218 int32_t exifRotate_ {0}; 219 string dateYear_; 220 string dateMonth_; 221 string dateDay_; 222 string shootingMode_; 223 string shootingModeTag_; 224 int64_t lastVisitTime_; 225 int32_t dynamicRangeType_; 226 227 // video, audio, image 228 int64_t dateTaken_ {0}; 229 230 // image 231 double longitude_; 232 double latitude_; 233 std::string userComment_; 234 std::string allExif_; 235 236 // album 237 int32_t albumId_; 238 std::string albumName_; 239 240 // recycle 241 std::string recyclePath_; 242 243 // pending 244 int64_t timePending_; 245 246 // photo subtype 247 int32_t photoSubType_ = 0; 248 249 int32_t movingPhotoEffectMode_ = 0; 250 251 bool forAdd_ = false; 252 std::string tableName_; 253 254 // packageName 255 std::string ownerPackage_; 256 257 // image path 258 std::string movingPhotoImagePath_; 259 260 // cover position of moving photo 261 int64_t coverPosition_ = 0; 262 263 // frame index of live photo 264 int32_t frameIndex_ = 0; 265 266 int32_t isTemp_; 267 int32_t photoQuality_ = 0; 268 int32_t dirty_ = 0; 269 270 // front camera 271 std::string frontcamera_; 272 273 std::string detailTime_; 274 275 int32_t burstCoverLevel_; 276 277 int32_t stageVideoTaskStatus_; 278 }; 279 } // namespace Media 280 } // namespace OHOS 281 282 #endif // METADATA_H 283