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 SetFileDuration(const VariantData &duration); 86 EXPORT int32_t GetFileDuration() const; 87 88 EXPORT int32_t GetParentId() const; 89 EXPORT void SetParentId(const VariantData &id); 90 91 EXPORT void SetAlbumId(const VariantData &albumId); 92 EXPORT int32_t GetAlbumId() const; 93 94 EXPORT void SetAlbumName(const VariantData &album); 95 EXPORT const std::string &GetAlbumName() const; 96 97 EXPORT void SetRecyclePath(const VariantData &recyclePath); 98 EXPORT const std::string &GetRecyclePath() const; 99 100 EXPORT void SetDateTaken(const VariantData &dateTaken); 101 EXPORT int64_t GetDateTaken() const; 102 103 EXPORT void SetLongitude(const VariantData &longitude); 104 EXPORT double GetLongitude() const; 105 106 EXPORT void SetLatitude(const VariantData &latitude); 107 EXPORT double GetLatitude() const; 108 109 EXPORT void SetTimePending(const VariantData &timePending); 110 EXPORT int64_t GetTimePending() const; 111 112 EXPORT void SetUserComment(const VariantData &userComment); 113 EXPORT const std::string &GetUserComment() const; 114 115 EXPORT void SetAllExif(const VariantData &allExif); 116 EXPORT const std::string &GetAllExif() const; 117 118 EXPORT void SetDateYear(const VariantData &dateYear); 119 EXPORT const std::string &getDateYear() const; 120 121 EXPORT void SetDateMonth(const VariantData &dateMonth); 122 EXPORT const std::string &getDateMonth() const; 123 124 EXPORT void SetDateDay(const VariantData &dateDay); 125 EXPORT const std::string &GetDateDay() const; 126 127 EXPORT void SetShootingMode(const VariantData &shootingMode); 128 EXPORT const std::string &GetShootingMode() const; 129 130 EXPORT void SetShootingModeTag(const VariantData &shootingMode); 131 EXPORT const std::string &GetShootingModeTag() const; 132 133 EXPORT void SetLastVisitTime(const VariantData &lastVisitTime); 134 EXPORT int64_t GetLastVisitTime() const; 135 136 EXPORT void SetPhotoSubType(const VariantData &photoSubType); 137 EXPORT int32_t GetPhotoSubType() const; 138 139 EXPORT void SetMovingPhotoEffectMode(const VariantData &movingPhotoEffectMode); 140 EXPORT int32_t GetMovingPhotoEffectMode() const; 141 142 void SetFrontCamera(const VariantData &forntcamera); 143 EXPORT std::string GetFrontCamera() const; 144 145 void SetMovingPhotoImagePath(const VariantData &imagePath); 146 EXPORT std::string GetMovingPhotoImagePath() const; 147 148 void SetDynamicRangeType(const VariantData &type); 149 EXPORT int32_t GetDynamicRangeType() const; 150 151 void SetCoverPosition(const VariantData &coverPosition); 152 int64_t GetCoverPosition() const; 153 154 void SetFrameIndex(const VariantData &frameIndex); 155 int32_t GetFrameIndex() const; 156 157 EXPORT void SetIsTemp(const VariantData &isTemp); 158 EXPORT int32_t GetIsTemp() const; 159 160 EXPORT void SetPhotoQuality(const VariantData &photoQuality); 161 EXPORT int32_t GetPhotoQuality() const; 162 163 EXPORT void SetDirty(const VariantData &dirty); 164 EXPORT int32_t GetDirty() const; 165 166 EXPORT void SetDetailTime(const VariantData &detailTime); 167 EXPORT std::string GetDetailTime() const; 168 169 EXPORT void SetForAdd(bool forAdd); 170 EXPORT bool GetForAdd() const; 171 EXPORT void SetTableName(const std::string &tableName); 172 EXPORT std::string GetTableName(); 173 void SetOwnerPackage(const VariantData &ownerPackage); 174 const std::string GetOwnerPackage() const; 175 176 EXPORT void Init(); 177 178 using MetadataFnPtr = void (Metadata::*)(const VariantData &); 179 EXPORT std::unordered_map<std::string, std::pair<ResultSetDataType, MetadataFnPtr>> memberFuncMap_; 180 181 private: 182 int32_t id_; 183 std::string uri_; 184 std::string filePath_; 185 std::string relativePath_; 186 187 std::string mimeType_; 188 MediaType mediaType_; 189 std::string name_; 190 191 int64_t size_; 192 int64_t dateModified_; 193 int64_t dateAdded_; 194 195 std::string fileExt_; 196 int32_t parentId_; 197 198 // audio 199 std::string title_; 200 std::string artist_; 201 std::string album_; 202 203 // video, image 204 int32_t height_; 205 int32_t width_; 206 int32_t duration_; 207 int32_t orientation_; 208 string dateYear_; 209 string dateMonth_; 210 string dateDay_; 211 string shootingMode_; 212 string shootingModeTag_; 213 int64_t lastVisitTime_; 214 int32_t dynamicRangeType_; 215 216 // video, audio, image 217 int64_t dateTaken_; 218 219 // image 220 double longitude_; 221 double latitude_; 222 std::string userComment_; 223 std::string allExif_; 224 225 // album 226 int32_t albumId_; 227 std::string albumName_; 228 229 // recycle 230 std::string recyclePath_; 231 232 // pending 233 int64_t timePending_; 234 235 // photo subtype 236 int32_t photoSubType_ = 0; 237 238 int32_t movingPhotoEffectMode_ = 0; 239 240 bool forAdd_ = false; 241 std::string tableName_; 242 243 // packageName 244 std::string ownerPackage_; 245 246 // image path of moving photo 247 std::string movingPhotoImagePath_; 248 249 // cover position of moving photo 250 int64_t coverPosition_ = 0; 251 252 // frame index of live photo 253 int32_t frameIndex_ = 0; 254 255 int32_t isTemp_; 256 int32_t photoQuality_ = 0; 257 int32_t dirty_ = 0; 258 259 // front camera 260 std::string frontcamera_; 261 262 std::string detailTime_; 263 }; 264 } // namespace Media 265 } // namespace OHOS 266 267 #endif // METADATA_H 268