1 /* 2 * Copyright (C) 2021-2023 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 FRAMEWORKS_INNERKITSIMPL_MEDIA_LIBRARY_INCLUDE_MEDIA_FILE_UTILS_H_ 17 #define FRAMEWORKS_INNERKITSIMPL_MEDIA_LIBRARY_INCLUDE_MEDIA_FILE_UTILS_H_ 18 19 #include <memory> 20 #include <string> 21 #include <unordered_set> 22 23 #include "unique_fd.h" 24 #include "userfile_manager_types.h" 25 26 namespace OHOS::Media { 27 #define EXPORT __attribute__ ((visibility ("default"))) 28 EXPORT const std::string MOVING_PHOTO_URI_SPLIT = ";"; 29 EXPORT const uint8_t MOVING_PHOTO_IMAGE_POS = 0; 30 EXPORT const uint8_t MOVING_PHOTO_VIDEO_POS = 1; 31 EXPORT const std::string MEDIA_FILEMODE_READONLY = "r"; 32 EXPORT const std::string MEDIA_FILEMODE_WRITEONLY = "w"; 33 EXPORT const std::string MEDIA_FILEMODE_READWRITE = "rw"; 34 EXPORT const std::string MEDIA_FILEMODE_WRITETRUNCATE = "wt"; 35 EXPORT const std::string MEDIA_FILEMODE_WRITEAPPEND = "wa"; 36 EXPORT const std::string MEDIA_FILEMODE_READWRITETRUNCATE = "rwt"; 37 EXPORT const std::string MEDIA_FILEMODE_READWRITEAPPEND = "rwa"; 38 EXPORT const std::unordered_set<std::string> MEDIA_OPEN_MODES = { 39 MEDIA_FILEMODE_READONLY, 40 MEDIA_FILEMODE_WRITEONLY, 41 MEDIA_FILEMODE_READWRITE, 42 MEDIA_FILEMODE_WRITETRUNCATE, 43 MEDIA_FILEMODE_WRITEAPPEND, 44 MEDIA_FILEMODE_READWRITETRUNCATE, 45 MEDIA_FILEMODE_READWRITEAPPEND 46 }; 47 48 constexpr int VIRTUAL_ID_DIVIDER = 5; 49 constexpr int PHOTO_VIRTUAL_IDENTIFIER = 4; 50 constexpr int AUDIO_VIRTUAL_IDENTIFIER = 3; 51 constexpr int FILE_VIRTUAL_IDENTIFIER = 2; 52 constexpr int CAMERA_SHOT_KEY_SIZE = 30; 53 54 constexpr int64_t MSEC_TO_SEC = 1e3; 55 constexpr int64_t MSEC_TO_NSEC = 1e6; 56 57 enum EXPORT TrashType { 58 NOT_TRASHED = 0, 59 TRASHED_ASSET, 60 TRASHED_DIR, 61 TRASHED_DIR_CHILD 62 }; 63 64 enum EXPORT PortraitPages : int32_t { 65 UNFAVORITE_PAGE = 0, 66 FIRST_PAGE, 67 SECOND_PAGE, 68 FAVORITE_PAGE 69 }; 70 EXPORT const std::unordered_set<int32_t> PORTRAIT_PAGE_MODE = { 71 PortraitPages::FIRST_PAGE, 72 PortraitPages::SECOND_PAGE, 73 PortraitPages::FAVORITE_PAGE, 74 PortraitPages::UNFAVORITE_PAGE 75 }; 76 77 /** 78 * @brief Utility class for file operations 79 * 80 * @since 1.0 81 * @version 1.0 82 */ 83 class MediaFileUtils { 84 public: 85 EXPORT static bool IsFileExists(const std::string &fileName); 86 EXPORT static bool IsFileValid(const std::string &fileName); 87 EXPORT static bool IsDirEmpty(const std::string &path); 88 EXPORT static bool CreateFile(const std::string &filePath); 89 EXPORT static bool DeleteFile(const std::string &fileName); 90 EXPORT static bool DeleteDir(const std::string &dirName); 91 EXPORT static std::string GetFileName(const std::string &filePath); 92 EXPORT static std::string GetParentPath(const std::string &path); 93 EXPORT static std::string GetTitleFromDisplayName(const std::string &displayName); 94 EXPORT static bool IsDirectory(const std::string &dirName, std::shared_ptr<int> errCodePtr = nullptr); 95 EXPORT static bool MoveFile(const std::string &oldPath, const std::string &newPath); 96 EXPORT static bool CopyDirAndDelSrc(const std::string &srcPath, const std::string &destPath, 97 unsigned short curRecursionDepth = 0); 98 EXPORT static bool CopyFileAndDelSrc(const std::string &srcFile, const std::string &destFile); 99 EXPORT static bool CopyFileUtil(const std::string &filePath, const std::string &newPath); 100 EXPORT static bool WriteStrToFile(const std::string &filePath, const std::string &str); 101 EXPORT static bool ReadStrFromFile(const std::string &filePath, std::string &fileContent); 102 EXPORT static bool CopyFile(int32_t rfd, int32_t wfd); 103 EXPORT static bool RenameDir(const std::string &oldPath, const std::string &newPath); 104 EXPORT static bool CreateDirectory(const std::string &dirPath, std::shared_ptr<int> errCodePtr = nullptr); 105 EXPORT static int32_t CheckAlbumName(const std::string &albumName); 106 EXPORT static int32_t CheckDentryName(const std::string &dentryName); 107 EXPORT static int32_t CheckTitleName(const std::string &title); 108 EXPORT static std::string GetFileAssetUri(const std::string &fileAssetData, const std::string &displayName, 109 const int32_t &fileId); 110 EXPORT static int32_t CheckDisplayName(const std::string &displayName); 111 EXPORT static int32_t CheckFileDisplayName(const std::string &displayName); 112 EXPORT static int32_t CheckRelativePath(const std::string &relativePath); 113 EXPORT static void FormatRelativePath(std::string &relativePath); 114 EXPORT static void GetRootDirFromRelativePath(const std::string &relativePath, std::string &rootDir); 115 EXPORT static int64_t GetAlbumDateModified(const std::string &albumPath); 116 EXPORT static int64_t UTCTimeSeconds(); 117 EXPORT static int64_t UTCTimeMilliSeconds(); 118 EXPORT static int64_t UTCTimeNanoSeconds(); 119 EXPORT static std::string GetIdFromUri(const std::string &uri); 120 EXPORT static std::string GetNetworkIdFromUri(const std::string &uri); 121 EXPORT static std::string UpdatePath(const std::string &path, const std::string &uri); 122 EXPORT static MediaType GetMediaType(const std::string &filePath); 123 EXPORT static MediaType GetMediaTypeNotSupported(const std::string &filePath); 124 EXPORT static std::string SplitByChar(const std::string &str, const char split); 125 EXPORT static std::string GetExtensionFromPath(const std::string &path); 126 EXPORT static int32_t OpenFile(const std::string &path, const std::string &mode, 127 const std::string &clientBundleName = ""); 128 EXPORT static int32_t CreateAsset(const std::string &filePath); 129 EXPORT static int32_t ModifyAsset(const std::string &oldPath, const std::string &newPath); 130 EXPORT static int32_t OpenAsset(const std::string &filePath, const std::string &mode); 131 EXPORT static int32_t CloseAsset(int32_t fd); 132 EXPORT static std::string GetMediaTypeUri(MediaType mediaType); 133 EXPORT static std::string GetMediaTypeUriV10(MediaType mediaType); 134 EXPORT static bool CheckMode(const std::string &mode); 135 EXPORT static size_t FindIgnoreCase(const std::string &str, const std::string &key); 136 EXPORT static int64_t GetVirtualIdByType(int32_t id, MediaType type); 137 EXPORT static double GetRealIdByTable(int32_t virtualId, const std::string &tableName); 138 EXPORT static std::string GetVirtualUriFromRealUri(const std::string &uri, const std::string &extrUri = ""); 139 EXPORT static std::string GetRealUriFromVirtualUri(const std::string &uri); 140 EXPORT static bool StartsWith(const std::string &str, const std::string &prefix); 141 EXPORT static void ReplaceAll(std::string &str, const std::string &from, const std::string &to); 142 EXPORT static void UriAppendKeyValue(std::string &uri, const std::string &key, std::string value = "10"); 143 EXPORT static std::string GetExtraUri(const std::string &displayName, const std::string &path, 144 const bool isNeedEncode = true); 145 EXPORT static std::string GetUriByExtrConditions(const std::string &prefix, const std::string &fileId, 146 const std::string &suffix = ""); 147 EXPORT static std::string Encode(const std::string &uri); 148 EXPORT static bool CheckDisplayLevel(const int32_t &displayLevel); 149 EXPORT static std::string GetHighlightPath(const std::string &uri); 150 EXPORT static std::string GetHighlightVideoPath(const std::string &uri); 151 EXPORT static std::string GetTableNameByDisplayName(const std::string &displayName); 152 #ifdef MEDIALIBRARY_COMPATIBILITY 153 EXPORT static std::string GetTableFromVirtualUri(const std::string &uri); 154 #endif 155 EXPORT static bool IsUriV10(const std::string &mediaType); 156 EXPORT static bool IsFileTablePath(const std::string &path); 157 EXPORT static bool IsPhotoTablePath(const std::string &path); 158 EXPORT static std::string StrCreateTime(const std::string &format, int64_t time); 159 EXPORT static std::string StrCreateTimeByMilliseconds(const std::string &format, int64_t time); 160 EXPORT static std::string AddDocsToRelativePath(const std::string &relativePath); 161 EXPORT static std::string RemoveDocsFromRelativePath(const std::string &relativePath); 162 EXPORT static int64_t Timespec2Millisecond(const struct timespec &time); 163 EXPORT static std::string GetMovingPhotoVideoPath(const std::string &imagePath); 164 EXPORT static bool CheckMovingPhotoExtension(const std::string &extension); 165 EXPORT static bool IsMovingPhotoMimeType(const std::string &mimeType); 166 EXPORT static bool CheckMovingPhotoVideoExtension(const std::string &extension); 167 EXPORT static bool CheckMovingPhotoImage(const std::string &path); 168 EXPORT static bool CheckMovingPhotoVideo(const std::string &path); 169 EXPORT static bool CheckMovingPhotoVideo(const UniqueFd &uniqueFd); 170 EXPORT static bool CheckMovingPhotoVideoDuration(int32_t duration); 171 EXPORT static bool CheckMovingPhotoEffectMode(int32_t effectMode); 172 EXPORT static bool GetFileSize(const std::string &filePath, size_t &size); 173 EXPORT static bool SplitMovingPhotoUri(const std::string &uri, std::vector<std::string> &ret); 174 EXPORT static bool IsMediaLibraryUri(const std::string &uri); 175 EXPORT static void PrintStatInformation(const std::string& path); 176 EXPORT static void MediaFileDeletionRecord(); 177 EXPORT static void SetDeletionRecord(int fd, const std::string &fileName); 178 EXPORT static void BackupPhotoDir(); 179 EXPORT static void RecoverMediaTempDir(); 180 EXPORT static std::string DesensitizePath(const std::string &path); 181 EXPORT static void CheckDirStatus(const std::unordered_set<std::string> &dirCheckSet, const std::string &dir); 182 EXPORT static std::string GetUriWithoutDisplayname(const std::string &uri); 183 EXPORT static int32_t CreateDirectoryAndCopyFiles(const std::string &srcDir, const std::string &dstDir); 184 EXPORT static void ModifyFile(const std::string path, int64_t modifiedTime); 185 EXPORT static int32_t CopyDirectory(const std::string &srcDir, const std::string &dstDir); 186 EXPORT static bool GenerateKvStoreKey(const std::string &fileId, const std::string &dateKey, std::string &key); 187 EXPORT static bool IsCalledBySelf(); 188 EXPORT static bool CheckSupportedWatermarkType(int32_t watermarkType); 189 190 private: 191 static bool Mkdir(const std::string &subStr, std::shared_ptr<int> errCodePtr); 192 static int32_t RemoveDirectory(const std::string &path); 193 static int32_t CheckStringSize(const std::string &str, const size_t max); 194 }; 195 } // namespace OHOS::Media 196 197 #endif // FRAMEWORKS_INNERKITSIMPL_MEDIA_LIBRARY_INCLUDE_MEDIA_FILE_UTILS_H_ 198