1 /* 2 * Copyright (C) 2021-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 16 #ifndef OHOS_MEDIALIBRARY_DATA_MANAGER_H 17 #define OHOS_MEDIALIBRARY_DATA_MANAGER_H 18 19 #include <string> 20 #include <unordered_map> 21 #include <shared_mutex> 22 23 #include "ability_context.h" 24 #include "context/context.h" 25 #include "dir_asset.h" 26 #include "datashare_predicates.h" 27 #include "datashare_values_bucket.h" 28 #include "distributed_kv_data_manager.h" 29 #include "imedia_scanner_callback.h" 30 #include "medialibrary_command.h" 31 #include "medialibrary_data_manager_utils.h" 32 #include "medialibrary_db_const.h" 33 #include "rdb_store.h" 34 #include "result_set_bridge.h" 35 #include "uri.h" 36 #include "values_bucket.h" 37 #include "thumbnail_service.h" 38 39 #define EXPORT __attribute__ ((visibility ("default"))) 40 41 namespace OHOS { 42 namespace AbilityRuntime { 43 class MediaDataShareExtAbility; 44 } 45 namespace Media { 46 using OHOS::AbilityRuntime::MediaDataShareExtAbility; 47 class MediaLibraryDataManager { 48 public: 49 EXPORT MediaLibraryDataManager(); 50 EXPORT ~MediaLibraryDataManager(); 51 static std::shared_ptr<MediaLibraryDataManager> GetInstance(); 52 53 EXPORT int32_t InitMediaLibraryRdbStore(); 54 EXPORT void InitialiseKvStore(); 55 56 EXPORT int32_t Insert(const Uri &uri, const DataShare::DataShareValuesBucket &value); 57 EXPORT int32_t Delete(const Uri &uri, const DataShare::DataSharePredicates &predicates); 58 EXPORT int32_t BatchInsert(const Uri &uri, const std::vector<DataShare::DataShareValuesBucket> &values); 59 EXPORT int32_t Update(const Uri &uri, const DataShare::DataShareValuesBucket &value, 60 const DataShare::DataSharePredicates &predicates); 61 EXPORT std::shared_ptr<DataShare::ResultSetBridge> Query(const Uri &uri, const std::vector<std::string> &columns, 62 const DataShare::DataSharePredicates &predicates); 63 EXPORT std::shared_ptr<NativeRdb::AbsSharedResultSet> 64 QueryRdb(const Uri &uri, const std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates); 65 EXPORT int32_t OpenFile(const Uri &uri, const std::string &mode); 66 EXPORT std::string GetType(const Uri &uri); 67 EXPORT void NotifyChange(const Uri &uri); 68 EXPORT int32_t GenerateThumbnails(); 69 EXPORT void InterruptBgworker(); 70 EXPORT int32_t DoAging(); 71 72 std::shared_ptr<NativeRdb::RdbStore> rdbStore_; 73 74 void InitMediaLibraryMgr(const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, 75 const std::shared_ptr<OHOS::AbilityRuntime::Context> &extensionContext); 76 void ClearMediaLibraryMgr(); 77 void MakeDirQuerySetMap(std::unordered_map<std::string, DirAsset> &outDirQuerySetMap); 78 void CreateThumbnailAsync(const std::string &uri); 79 std::unordered_map<std::string, DirAsset> GetDirQuerySetMap() const; 80 std::shared_ptr<MediaDataShareExtAbility> GetOwner(); 81 void SetOwner(const std::shared_ptr<MediaDataShareExtAbility> &datashareExtension); 82 83 private: 84 bool QuerySync(const std::string &networkId, const std::string &tableName); 85 int32_t HandleThumbnailOperations(MediaLibraryCommand &cmd); 86 bool CheckFileNameValid(const DataShare::DataShareValuesBucket &value); 87 void NeedQuerySync(const std::string &networkId, OperationObject oprnObject); 88 void ScanFile(const NativeRdb::ValuesBucket &values, const std::shared_ptr<NativeRdb::RdbStore> &rdbStore1); 89 void InitDeviceData(); 90 void InitialiseThumbnailService(const std::shared_ptr<OHOS::AbilityRuntime::Context> &extensionContext); 91 std::shared_ptr<DataShare::ResultSetBridge> GenThumbnail(const std::string &uri); 92 int32_t CreateThumbnail(const NativeRdb::ValuesBucket &values); 93 int32_t LcdDistributeAging(); 94 int32_t DistributeDeviceAging(); 95 std::shared_ptr<ThumbnailService> thumbnailService_; 96 97 std::shared_mutex mgrSharedMutex_; 98 std::shared_ptr<DistributedKv::SingleKvStore> kvStorePtr_; 99 DistributedKv::DistributedKvDataManager dataManager_; 100 std::shared_ptr<OHOS::AbilityRuntime::Context> context_; 101 std::string bundleName_{BUNDLE_NAME}; 102 OHOS::sptr<AppExecFwk::IBundleMgr> bundleMgr_; 103 static std::mutex mutex_; 104 static std::shared_ptr<MediaLibraryDataManager> instance_; 105 std::unordered_map<std::string, DirAsset> dirQuerySetMap_; 106 std::atomic<int> refCnt_{0}; 107 std::shared_ptr<MediaDataShareExtAbility> extension_; 108 }; 109 110 // Scanner callback objects 111 class ScanFileCallback : public IMediaScannerCallback { 112 public: 113 ScanFileCallback() = default; 114 ~ScanFileCallback() = default; 115 int32_t OnScanFinished(const int32_t status, const std::string &uri, const std::string &path) override; 116 }; 117 } // namespace Media 118 } // namespace OHOS 119 #endif // OHOS_MEDIALIBRARY_DATA_ABILITY_H 120