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 <memory> 20 #include <string> 21 #include <unordered_map> 22 #include <shared_mutex> 23 24 #include "ability_context.h" 25 #include "cloud_thumbnail_observer.h" 26 #include "context/context.h" 27 #include "dir_asset.h" 28 #include "datashare_predicates.h" 29 #include "datashare_values_bucket.h" 30 #include "distributed_kv_data_manager.h" 31 #include "imedia_scanner_callback.h" 32 #include "medialibrary_command.h" 33 #include "medialibrary_data_manager_utils.h" 34 #include "medialibrary_helper_container.h" 35 #include "medialibrary_db_const.h" 36 #include "rdb_predicates.h" 37 #include "rdb_store.h" 38 #include "result_set_bridge.h" 39 #include "timer.h" 40 #include "uri.h" 41 #include "values_bucket.h" 42 #include "thumbnail_service.h" 43 #include "bundle_mgr_interface.h" 44 45 #define EXPORT __attribute__ ((visibility ("default"))) 46 47 namespace OHOS { 48 namespace AbilityRuntime { 49 class MediaDataShareExtAbility; 50 } 51 namespace Media { 52 using OHOS::AbilityRuntime::MediaDataShareExtAbility; 53 class MediaLibraryDataManager { 54 public: 55 EXPORT MediaLibraryDataManager(); 56 EXPORT ~MediaLibraryDataManager(); 57 EXPORT static std::shared_ptr<MediaLibraryDataManager> GetInstance(); 58 59 EXPORT int32_t Insert(MediaLibraryCommand &cmd, const DataShare::DataShareValuesBucket &value); 60 EXPORT int32_t InsertExt(MediaLibraryCommand &cmd, const DataShare::DataShareValuesBucket &value, 61 std::string &result); 62 EXPORT int32_t Delete(MediaLibraryCommand &cmd, const DataShare::DataSharePredicates &predicates); 63 EXPORT int32_t BatchInsert(MediaLibraryCommand &cmd, 64 const std::vector<DataShare::DataShareValuesBucket> &values); 65 EXPORT int32_t Update(MediaLibraryCommand &cmd, const DataShare::DataShareValuesBucket &value, 66 const DataShare::DataSharePredicates &predicates); 67 EXPORT std::shared_ptr<DataShare::ResultSetBridge> Query(MediaLibraryCommand &cmd, 68 const std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates, int &errCode); 69 EXPORT std::shared_ptr<NativeRdb::ResultSet> 70 EXPORT QueryRdb(MediaLibraryCommand &cmd, const std::vector<std::string> &columns, 71 const DataShare::DataSharePredicates &predicates, int &errCode); 72 EXPORT int32_t OpenFile(MediaLibraryCommand &cmd, const std::string &mode); 73 EXPORT std::string GetType(const Uri &uri); 74 EXPORT void NotifyChange(const Uri &uri); 75 EXPORT int32_t GenerateThumbnails(); 76 void InterruptBgworker(); 77 EXPORT int32_t DoAging(); 78 EXPORT int32_t DoTrashAging(std::shared_ptr<int> countPtr = nullptr); 79 /** 80 * @brief Revert the pending state through the package name 81 * @param bundleName packageName 82 * @return revert result 83 */ 84 EXPORT int32_t RevertPendingByPackage(const std::string &bundleName); 85 86 EXPORT std::shared_ptr<NativeRdb::RdbStore> rdbStore_; 87 88 EXPORT int32_t InitMediaLibraryMgr(const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, 89 const std::shared_ptr<OHOS::AbilityRuntime::Context> &extensionContext); 90 EXPORT void ClearMediaLibraryMgr(); 91 EXPORT int32_t MakeDirQuerySetMap(std::unordered_map<std::string, DirAsset> &outDirQuerySetMap); 92 EXPORT void CreateThumbnailAsync(const std::string &uri, const std::string &path); 93 EXPORT static std::unordered_map<std::string, DirAsset> GetDirQuerySetMap(); 94 EXPORT std::shared_ptr<MediaDataShareExtAbility> GetOwner(); 95 EXPORT void SetOwner(const std::shared_ptr<MediaDataShareExtAbility> &datashareExtension); 96 EXPORT int GetThumbnail(const std::string &uri); 97 int32_t GetAgingDataSize(const int64_t &time, int &count); 98 int32_t QueryNewThumbnailCount(const int64_t &time, int &count); 99 EXPORT void RegisterTimer(); 100 EXPORT void StopTimer(); 101 EXPORT void UnregisterTimer(); 102 103 private: 104 int32_t InitMediaLibraryRdbStore(); 105 106 #ifdef DISTRIBUTED 107 bool QuerySync(const std::string &networkId, const std::string &tableName); 108 #endif 109 int32_t HandleThumbnailOperations(MediaLibraryCommand &cmd); 110 111 EXPORT int32_t SolveInsertCmd(MediaLibraryCommand &cmd); 112 EXPORT int32_t SetCmdBundleAndDevice(MediaLibraryCommand &outCmd); 113 #ifdef DISTRIBUTED 114 int32_t InitDeviceData(); 115 #endif 116 EXPORT int32_t InitialiseThumbnailService(const std::shared_ptr<OHOS::AbilityRuntime::Context> &extensionContext); 117 std::shared_ptr<NativeRdb::ResultSet> QuerySet(MediaLibraryCommand &cmd, const std::vector<std::string> &columns, 118 const DataShare::DataSharePredicates &predicates, int &errCode); 119 void InitACLPermission(); 120 #ifdef DISTRIBUTED 121 int32_t LcdDistributeAging(); 122 int32_t DistributeDeviceAging(); 123 #endif 124 EXPORT std::shared_ptr<ThumbnailService> thumbnailService_; 125 int32_t RevertPendingByFileId(const std::string &fileId); 126 #ifdef DISTRIBUTED 127 int32_t SyncPullThumbnailKeys(const Uri &uri); 128 #endif 129 int32_t DeleteInRdbPredicates(MediaLibraryCommand &cmd, NativeRdb::RdbPredicates &rdbPredicate); 130 int32_t DeleteInRdbPredicatesAnalysis(MediaLibraryCommand &cmd, NativeRdb::RdbPredicates &rdbPredicate); 131 int32_t UpdateInternal(MediaLibraryCommand &cmd, NativeRdb::ValuesBucket &value, 132 const DataShare::DataSharePredicates &predicates); 133 void InitRefreshAlbum(); 134 std::shared_mutex mgrSharedMutex_; 135 #ifdef DISTRIBUTED 136 std::shared_ptr<DistributedKv::SingleKvStore> kvStorePtr_; 137 DistributedKv::DistributedKvDataManager dataManager_; 138 #endif 139 std::shared_ptr<OHOS::AbilityRuntime::Context> context_; 140 std::string bundleName_ {BUNDLE_NAME}; 141 static std::mutex mutex_; 142 static std::shared_ptr<MediaLibraryDataManager> instance_; 143 static std::unordered_map<std::string, DirAsset> dirQuerySetMap_; 144 std::atomic<int> refCnt_ {0}; 145 std::shared_ptr<MediaDataShareExtAbility> extension_; 146 std::shared_ptr<CloudThumbnailObserver> cloudDataObserver_; 147 static Utils::Timer timer_; 148 static uint32_t timerId_; 149 }; 150 151 // Scanner callback objects 152 class ScanFileCallback : public IMediaScannerCallback { 153 public: 154 ScanFileCallback() = default; 155 ~ScanFileCallback() = default; 156 int32_t OnScanFinished(const int32_t status, const std::string &uri, const std::string &path) override; 157 }; 158 } // namespace Media 159 } // namespace OHOS 160 #endif // OHOS_MEDIALIBRARY_DATA_ABILITY_H 161