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 MEDIA_SCANNER_DB_H 17 #define MEDIA_SCANNER_DB_H 18 19 #include <list> 20 #include <set> 21 #include <string> 22 #include <unordered_map> 23 #include <vector> 24 25 #include "medialibrary_command.h" 26 #include "medialibrary_db_const.h" 27 #include "medialibrary_type_const.h" 28 #include "metadata.h" 29 #include "datashare_values_bucket.h" 30 #include "rdb_errno.h" 31 #include "result_set.h" 32 #include "uri.h" 33 #include "userfile_manager_types.h" 34 #include "values_bucket.h" 35 #include "want.h" 36 #include "datashare_result_set.h" 37 38 namespace OHOS { 39 namespace Media { 40 #define EXPORT __attribute__ ((visibility ("default"))) 41 class MediaScannerDb { 42 public: 43 EXPORT MediaScannerDb(); 44 EXPORT MediaScannerDb(MediaScannerDb &other) = delete; 45 EXPORT void operator=(const MediaScannerDb &) = delete; 46 EXPORT ~MediaScannerDb() = default; 47 48 EXPORT static std::unique_ptr<MediaScannerDb> GetDatabaseInstance(); 49 EXPORT bool DeleteMetadata(const std::vector<std::string> &idList, const std::string &tableName); 50 EXPORT void NotifyDatabaseChange(const MediaType mediaType); 51 EXPORT void SetRdbHelper(void); 52 53 EXPORT std::string InsertMetadata(const Metadata &metadata, std::string &tableName, 54 MediaLibraryApi api = MediaLibraryApi::API_OLD); 55 EXPORT std::string UpdateMetadata(const Metadata &metadata, std::string &tableName, 56 MediaLibraryApi api = MediaLibraryApi::API_OLD, bool skipPhoto = true); 57 EXPORT std::string GetFileDBUriFromPath(const std::string &path); 58 EXPORT int32_t InsertAlbum(const Metadata &metadata); 59 EXPORT int32_t UpdateAlbum(const Metadata &metadata); 60 EXPORT int32_t ReadAlbums(const std::string &path, std::unordered_map<std::string, Metadata> &albumMap); 61 EXPORT std::unordered_map<int32_t, MediaType> GetIdsFromFilePath(const std::string &path, 62 const std::string &tableName, const std::string &whitePath = ""); 63 64 EXPORT int32_t GetIdFromPath(const std::string &path); 65 EXPORT int32_t GetFileBasicInfo(const std::string &path, std::unique_ptr<Metadata> &ptr, 66 MediaLibraryApi api = MediaLibraryApi::API_OLD, int32_t fileId = 0); 67 68 EXPORT int32_t RecordError(const std::string &err); 69 EXPORT std::set<std::string> ReadError(); 70 EXPORT int32_t DeleteError(const std::string &err); 71 static void UpdateAlbumInfo(const std::vector<std::string> &subtypes = {}, 72 const std::vector<std::string> &userAlbumIds = {}, const std::vector<std::string> &sourceAlbumIds = {}); 73 static void UpdateAlbumInfoByMetaData(const Metadata &metadata); 74 75 private: 76 int32_t FillMetadata(const std::shared_ptr<NativeRdb::ResultSet> &resultSet, 77 std::unique_ptr<Metadata> &ptr); 78 int32_t GetFileSet(MediaLibraryCommand &cmd, const vector<string> &columns, 79 std::shared_ptr<NativeRdb::ResultSet> &resultSet); 80 void ExtractMetaFromColumn(const std::shared_ptr<NativeRdb::ResultSet> &resultSet, 81 std::unique_ptr<Metadata> &metadata, const std::string &col); 82 bool InsertData(const NativeRdb::ValuesBucket values, const std::string &tableName, int64_t &rowNum); 83 std::string MakeFileUri(const std::string &mediaTypeUri, const Metadata &metadata); 84 }; 85 } // namespace Media 86 } // namespace OHOS 87 #endif // MEDIA_SCANNER_DB_H 88