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 #include "bundle_mgr_interface.h" 39 40 #define EXPORT __attribute__ ((visibility ("default"))) 41 42 namespace OHOS { 43 namespace AbilityRuntime { 44 class MediaDataShareExtAbility; 45 } 46 namespace Media { 47 using OHOS::AbilityRuntime::MediaDataShareExtAbility; 48 class MediaLibraryDataManager { 49 public: 50 EXPORT MediaLibraryDataManager(); 51 EXPORT ~MediaLibraryDataManager(); 52 static std::shared_ptr<MediaLibraryDataManager> GetInstance(); 53 54 EXPORT int32_t InitMediaLibraryRdbStore(); 55 EXPORT int32_t InitialiseKvStore(); 56 57 EXPORT int32_t Insert(MediaLibraryCommand &cmd, const DataShare::DataShareValuesBucket &value); 58 EXPORT int32_t InsertExt(MediaLibraryCommand &cmd, const DataShare::DataShareValuesBucket &value, 59 std::string &result); 60 EXPORT int32_t Delete(MediaLibraryCommand &cmd, const DataShare::DataSharePredicates &predicates); 61 EXPORT int32_t BatchInsert(MediaLibraryCommand &cmd, 62 const std::vector<DataShare::DataShareValuesBucket> &values); 63 EXPORT int32_t Update(MediaLibraryCommand &cmd, const DataShare::DataShareValuesBucket &value, 64 const DataShare::DataSharePredicates &predicates); 65 EXPORT std::shared_ptr<DataShare::ResultSetBridge> Query(MediaLibraryCommand &cmd, 66 const std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates, int &errCode); 67 EXPORT std::shared_ptr<NativeRdb::ResultSet> 68 QueryRdb(MediaLibraryCommand &cmd, const std::vector<std::string> &columns, 69 const DataShare::DataSharePredicates &predicates, int &errCode); 70 EXPORT int32_t OpenFile(MediaLibraryCommand &cmd, const std::string &mode); 71 EXPORT std::string GetType(const Uri &uri); 72 EXPORT void NotifyChange(const Uri &uri); 73 EXPORT int32_t GenerateThumbnails(); 74 EXPORT void InterruptBgworker(); 75 EXPORT int32_t DoAging(); 76 EXPORT int32_t DoTrashAging(); 77 /** 78 * @brief Revert the pending state through the package name 79 * @param bundleName packageName 80 * @return revert result 81 */ 82 EXPORT int32_t RevertPendingByPackage(const std::string &bundleName); 83 84 /** 85 * @brief Revert the pending state 86 * @return revert result 87 */ 88 EXPORT int32_t HandleRevertPending(); 89 std::shared_ptr<NativeRdb::RdbStore> rdbStore_; 90 91 int32_t InitMediaLibraryMgr(const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, 92 const std::shared_ptr<OHOS::AbilityRuntime::Context> &extensionContext); 93 void ClearMediaLibraryMgr(); 94 int32_t MakeDirQuerySetMap(std::unordered_map<std::string, DirAsset> &outDirQuerySetMap); 95 void CreateThumbnailAsync(const std::string &uri, const std::string &path); 96 static std::unordered_map<std::string, DirAsset> GetDirQuerySetMap(); 97 std::shared_ptr<MediaDataShareExtAbility> GetOwner(); 98 void SetOwner(const std::shared_ptr<MediaDataShareExtAbility> &datashareExtension); 99 int GetThumbnail(const std::string &uri); 100 101 private: 102 #ifdef DISTRIBUTED 103 bool QuerySync(const std::string &networkId, const std::string &tableName); 104 #endif 105 int32_t HandleThumbnailOperations(MediaLibraryCommand &cmd); 106 void NeedQuerySync(const std::string &networkId, OperationObject oprnObject); 107 int32_t SolveInsertCmd(MediaLibraryCommand &cmd); 108 int32_t SetCmdBundleAndDevice(MediaLibraryCommand &outCmd); 109 void ScanFile(const NativeRdb::ValuesBucket &values, const std::shared_ptr<NativeRdb::RdbStore> &rdbStore1); 110 int32_t InitDeviceData(); 111 int32_t InitialiseThumbnailService(const std::shared_ptr<OHOS::AbilityRuntime::Context> &extensionContext); 112 #ifdef DISTRIBUTED 113 int32_t LcdDistributeAging(); 114 int32_t DistributeDeviceAging(); 115 #endif 116 std::shared_ptr<ThumbnailService> thumbnailService_; 117 int32_t RevertPendingByFileId(const std::string &fileId); 118 #ifdef DISTRIBUTED 119 int32_t SyncPullThumbnailKeys(const Uri &uri); 120 #endif 121 std::shared_mutex mgrSharedMutex_; 122 std::shared_ptr<DistributedKv::SingleKvStore> kvStorePtr_; 123 DistributedKv::DistributedKvDataManager dataManager_; 124 std::shared_ptr<OHOS::AbilityRuntime::Context> context_; 125 std::string bundleName_{BUNDLE_NAME}; 126 OHOS::sptr<AppExecFwk::IBundleMgr> bundleMgr_; 127 static std::mutex mutex_; 128 static std::shared_ptr<MediaLibraryDataManager> instance_; 129 static std::unordered_map<std::string, DirAsset> dirQuerySetMap_; 130 std::atomic<int> refCnt_{0}; 131 std::shared_ptr<MediaDataShareExtAbility> extension_; 132 }; 133 134 // Scanner callback objects 135 class ScanFileCallback : public IMediaScannerCallback { 136 public: 137 ScanFileCallback() = default; 138 ~ScanFileCallback() = default; 139 int32_t OnScanFinished(const int32_t status, const std::string &uri, const std::string &path) override; 140 }; 141 } // namespace Media 142 } // namespace OHOS 143 #endif // OHOS_MEDIALIBRARY_DATA_ABILITY_H 144