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 <string> 20 #include <unordered_set> 21 22 #include "userfile_manager_types.h" 23 24 namespace OHOS::Media { 25 26 const std::string MEDIA_FILEMODE_READONLY = "r"; 27 const std::string MEDIA_FILEMODE_WRITEONLY = "w"; 28 const std::string MEDIA_FILEMODE_READWRITE = "rw"; 29 const std::string MEDIA_FILEMODE_WRITETRUNCATE = "wt"; 30 const std::string MEDIA_FILEMODE_WRITEAPPEND = "wa"; 31 const std::string MEDIA_FILEMODE_READWRITETRUNCATE = "rwt"; 32 const std::string MEDIA_FILEMODE_READWRITEAPPEND = "rwa"; 33 const std::unordered_set<std::string> MEDIA_OPEN_MODES = { 34 MEDIA_FILEMODE_READONLY, 35 MEDIA_FILEMODE_WRITEONLY, 36 MEDIA_FILEMODE_READWRITE, 37 MEDIA_FILEMODE_WRITETRUNCATE, 38 MEDIA_FILEMODE_WRITEAPPEND, 39 MEDIA_FILEMODE_READWRITETRUNCATE, 40 MEDIA_FILEMODE_READWRITEAPPEND 41 }; 42 43 const int VIRTUAL_ID_DIVIDER = 5; 44 const int PHOTO_VIRTUAL_IDENTIFIER = 4; 45 const int AUDIO_VIRTUAL_IDENTIFIER = 3; 46 const int FILE_VIRTUAL_IDENTIFIER = 2; 47 const int CAMERA_SHOT_KEY_SIZE = 30; 48 49 enum TrashType { 50 NOT_TRASHED = 0, 51 TRASHED_ASSET, 52 TRASHED_DIR, 53 TRASHED_DIR_CHILD 54 }; 55 56 /** 57 * @brief Utility class for file operations 58 * 59 * @since 1.0 60 * @version 1.0 61 */ 62 class MediaFileUtils { 63 public: 64 static bool IsFileExists(const std::string &fileName); 65 static bool IsDirEmpty(const std::string &path); 66 static bool CreateFile(const std::string &filePath); 67 static bool DeleteFile(const std::string &fileName); 68 static bool DeleteDir(const std::string &dirName); 69 static int32_t RemoveDirectory(const std::string &path); 70 static std::string GetFileName(const std::string &filePath); 71 static std::string GetFirstDentry(const std::string &path); 72 static std::string GetLastDentry(const std::string &path); 73 static std::string GetParentPath(const std::string &path); 74 static std::string GetTitleFromDisplayName(const std::string &displayName); 75 static bool IsDirectory(const std::string &dirName); 76 static std::string GetFirstDirName(const std::string &filePath); 77 static bool MoveFile(const std::string &oldPath, const std::string &newPath); 78 static bool CopyFile(const std::string &filePath, const std::string &newPath); 79 static bool RenameDir(const std::string &oldPath, const std::string &newPath); 80 static bool CreateDirectory(const std::string &dirPath); 81 static int32_t CheckStringSize(const std::string &str, const size_t max); 82 static int32_t CheckAlbumName(const std::string &albumName); 83 static int32_t CheckDentryName(const std::string &dentryName); 84 static int32_t CheckDisplayName(const std::string &displayName); 85 static int32_t CheckFileDisplayName(const std::string &displayName); 86 static int32_t CheckRelativePath(const std::string &relativePath); 87 static void FormatRelativePath(std::string &relativePath); 88 static void GetRootDirFromRelativePath(const std::string &relativePath, std::string &rootDir); 89 static int64_t GetAlbumDateModified(const std::string &albumPath); 90 static int64_t UTCTimeSeconds(); 91 static std::string GetIdFromUri(const std::string &uri); 92 static std::string GetNetworkIdFromUri(const std::string &uri); 93 static std::string UpdatePath(const std::string &path, const std::string &uri); 94 static std::string GetFileMediaTypeUri(int32_t mediaType, const std::string &networkId); 95 static std::string GetFileMediaTypeUriV10(int32_t mediaType, const std::string &networkId); 96 static std::string GetUriByNameAndId(const std::string &displayName, const std::string &networkId, int32_t id); 97 static MediaType GetMediaType(const std::string &filePath); 98 static std::string SplitByChar(const std::string &str, const char split); 99 static std::string GetExtensionFromPath(const std::string &path); 100 static int32_t OpenFile(const std::string &path, const std::string &mode); 101 static int32_t CreateAsset(const std::string &filePath); 102 static int32_t ModifyAsset(const std::string &oldPath, const std::string &newPath); 103 static int32_t DeleteAsset(const std::string &filePath); 104 static int32_t OpenAsset(const std::string &filePath, const std::string &mode); 105 static int32_t CloseAsset(int32_t fd); 106 static std::string GetMediaTypeUri(MediaType mediaType); 107 static std::string GetMediaTypeUriV10(MediaType mediaType); 108 static void AppendFetchOptionSelection(std::string &selection, const std::string &newCondition); 109 static bool CheckMode(const std::string &mode); 110 static size_t FindIgnoreCase(const std::string &str, const std::string &key); 111 static int64_t GetVirtualIdByType(int32_t id, MediaType type); 112 static double GetRealIdByTable(int32_t virtualId, const std::string &tableName); 113 static std::string GetVirtualUriFromRealUri(const std::string &uri, const std::string &extrUri = ""); 114 static std::string GetRealUriFromVirtualUri(const std::string &uri); 115 static bool StartsWith(const std::string &str, const std::string &prefix); 116 static void UriAppendKeyValue(std::string &uri, const std::string &key, std::string value = "10"); 117 static std::string GetExtraUri(const std::string &displayName, const std::string &path); 118 static std::string GetUriByExtrConditions(const std::string &prefix, const std::string &fileId, 119 const std::string &suffix = ""); 120 static std::string Encode(const std::string &uri); 121 #ifdef MEDIALIBRARY_COMPATIBILITY 122 static std::string GetTableFromVirtualUri(const std::string &uri); 123 #endif 124 static bool IsUriV10(const std::string &mediaType); 125 static bool IsFileTablePath(const std::string &path); 126 static bool IsPhotoTablePath(const std::string &path); 127 }; 128 } // namespace OHOS::Media 129 130 #endif // FRAMEWORKS_INNERKITSIMPL_MEDIA_LIBRARY_INCLUDE_MEDIA_FILE_UTILS_H_ 131