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 #ifndef FRAMEWORKS_SERVICES_MEDIA_LIBRARY_EXTENTION_UTILS_H_
16 #define FRAMEWORKS_SERVICES_MEDIA_LIBRARY_EXTENTION_UTILS_H_
17 
18 #include "abs_shared_result_set.h"
19 #include "datashare_result_set.h"
20 #include "file_access_extension_info.h"
21 #include "file_filter.h"
22 #include "image_source.h"
23 #include "uri.h"
24 
25 namespace OHOS {
26 namespace Media {
27 // root dirs
28 const std::vector<std::string> directoryEnumValues {
29     "Camera/",
30     "Videos/",
31     "Pictures/",
32     "Audios/",
33     "Documents/",
34     "Download/"
35 };
36 // parent id is root path
37 const int32_t ROOT_PARENT_ID = 0;
38 // device virtual root node
39 static const std::string MEDIALIBRARY_ROOT = "/root";
40 static const std::string MEDIALIBRARY_LOCAL_DEVICE_NAME = "LOCAL";
41 // mimetype prefix
42 const std::string DEFAULT_AUDIO_MIME_TYPE_PREFIX = "audio/";
43 const std::string DEFAULT_VIDEO_MIME_TYPE_PREFIX = "video/";
44 const std::string DEFAULT_IMAGE_MIME_TYPE_PREFIX = "image/";
45 const std::string DEFAULT_FILE_MIME_TYPE_PREFIX = "file/";
46 enum MediaFileUriType {
47     URI_ROOT,
48     URI_MEDIA_ROOT,
49     URI_FILE_ROOT,
50     URI_DIR,
51     URI_ALBUM,
52     URI_FILE,
53 };
54 
55 class MediaFileExtentionUtils {
56 public:
57     static bool CheckUriValid(const std::string &uri);
58     static bool CheckDistributedUri(const std::string &uri);
59     static int32_t CheckUriSupport(const std::string &uri);
60     static std::shared_ptr<NativeRdb::ResultSet> GetResultSetFromDb(std::string field, const std::string &uri,
61         const std::vector<std::string> &columns);
62     static bool IsFileExistInDb(const std::string &path);
63     static int32_t ResolveUri(const FileAccessFwk::FileInfo &fileInfo, MediaFileUriType &uriType);
64     static bool CheckValidDirName(const std::string &displayName);
65     static int32_t CheckMkdirValid(MediaFileUriType uriType, const std::string &parentUriStr,
66         const std::string &displayName);
67     static bool GetAlbumRelativePathFromDB(const std::string &selectUri, std::string &relativePath);
68 
69     static int32_t OpenFile(const Uri &uri, const int flags, int &fd);
70     static int32_t CreateFile(const Uri &parentUri, const std::string &displayName,  Uri &newFileUri);
71     static int32_t Mkdir(const Uri &parentUri, const std::string &displayName, Uri &newFileUri);
72     static int32_t Delete(const Uri &sourceFileUri);
73     static int32_t Move(const Uri &sourceFileUri, const Uri &targetParentUri, Uri &newFileUri);
74     static int32_t Copy(const Uri &sourceUri, const Uri &destUri, std::vector<FileAccessFwk::Result> &copyResult,
75         bool force = false);
76     static int32_t Rename(const Uri &sourceFileUri, const std::string &displayName, Uri &newFileUri);
77     static int32_t ListFile(const FileAccessFwk::FileInfo &parentInfo, const int64_t offset, const int64_t maxCount,
78         const FileAccessFwk::FileFilter &filter, std::vector<FileAccessFwk::FileInfo> &fileList);
79     static int32_t ScanFile(const FileAccessFwk::FileInfo &parentInfo, const int64_t offset, const int64_t maxCount,
80         const FileAccessFwk::FileFilter &filter, std::vector<FileAccessFwk::FileInfo> &fileList);
81     static int32_t Query(const Uri &uri, std::vector<std::string> &columns, std::vector<std::string> &results);
82     static int32_t GetRoots(std::vector<FileAccessFwk::RootInfo> &rootList);
83     static int Access(const Uri &uri, bool &isExist);
84     static int GetThumbnail(const Uri &uri, const Size &size, std::unique_ptr<PixelMap> &pixelMap);
85     static int GetFileInfoFromUri(const Uri &selectFile, FileAccessFwk::FileInfo &fileInfo);
86     static int GetFileInfoFromRelativePath(const std::string &relativePath, FileAccessFwk::FileInfo &fileInfo);
87 };
88 } // Media
89 } // OHOS
90 
91 #endif // FRAMEWORKS_SERVICES_MEDIA_LIBRARY_EXTENTION_UTILS_H_