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_sync_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 "medialibrary_rdbstore.h" 37 #include "rdb_predicates.h" 38 #include "rdb_store.h" 39 #include "result_set_bridge.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 static constexpr uint32_t URI_MIN_NUM = 3; 56 EXPORT MediaLibraryDataManager(); 57 EXPORT ~MediaLibraryDataManager(); 58 EXPORT static MediaLibraryDataManager* GetInstance(); 59 60 EXPORT int32_t Insert(MediaLibraryCommand &cmd, const DataShare::DataShareValuesBucket &value); 61 EXPORT int32_t InsertExt(MediaLibraryCommand &cmd, const DataShare::DataShareValuesBucket &value, 62 std::string &result); 63 EXPORT int32_t Delete(MediaLibraryCommand &cmd, const DataShare::DataSharePredicates &predicates); 64 EXPORT int32_t BatchInsert(MediaLibraryCommand &cmd, 65 const std::vector<DataShare::DataShareValuesBucket> &values); 66 EXPORT int32_t Update(MediaLibraryCommand &cmd, const DataShare::DataShareValuesBucket &value, 67 const DataShare::DataSharePredicates &predicates); 68 EXPORT std::shared_ptr<DataShare::ResultSetBridge> Query(MediaLibraryCommand &cmd, 69 const std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates, int &errCode); 70 EXPORT std::shared_ptr<NativeRdb::ResultSet> 71 EXPORT QueryRdb(MediaLibraryCommand &cmd, const std::vector<std::string> &columns, 72 const DataShare::DataSharePredicates &predicates, int &errCode); 73 EXPORT int32_t OpenFile(MediaLibraryCommand &cmd, const std::string &mode); 74 EXPORT std::string GetType(const Uri &uri); 75 EXPORT void NotifyChange(const Uri &uri); 76 EXPORT int32_t GenerateThumbnailBackground(); 77 78 // upgrade existed thumbnails to fix such as size, rotation and quality etc. problems 79 EXPORT int32_t UpgradeThumbnailBackground(bool isWifiConnected); 80 81 // restore thumbnail for date fronted 500 photos from dual framework upgrade or clone 82 EXPORT int32_t RestoreThumbnailDualFrame(); 83 void InterruptBgworker(); 84 EXPORT int32_t DoAging(); 85 EXPORT int32_t DoTrashAging(std::shared_ptr<int> countPtr = nullptr); 86 /** 87 * @brief Revert the pending state through the package name 88 * @param bundleName packageName 89 * @return revert result 90 */ 91 EXPORT int32_t RevertPendingByPackage(const std::string &bundleName); 92 93 // update burst photo from gallery 94 EXPORT int32_t UpdateBurstFromGallery(); 95 96 EXPORT std::shared_ptr<MediaLibraryRdbStore> rdbStore_; 97 98 EXPORT int32_t InitMediaLibraryMgr(const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, 99 const std::shared_ptr<OHOS::AbilityRuntime::Context> &extensionContext, int32_t &sceneCode); 100 EXPORT void ClearMediaLibraryMgr(); 101 EXPORT int32_t MakeDirQuerySetMap(std::unordered_map<std::string, DirAsset> &outDirQuerySetMap); 102 EXPORT void CreateThumbnailAsync(const std::string &uri, const std::string &path); 103 EXPORT static std::unordered_map<std::string, DirAsset> GetDirQuerySetMap(); 104 EXPORT std::shared_ptr<MediaDataShareExtAbility> GetOwner(); 105 EXPORT void SetOwner(const std::shared_ptr<MediaDataShareExtAbility> &datashareExtension); 106 EXPORT int GetThumbnail(const std::string &uri); 107 EXPORT void SetStartupParameter(); 108 EXPORT void ReCreateMediaDir(); 109 EXPORT int32_t CheckCloudThumbnailDownloadFinish(); 110 EXPORT void UploadDBFileInner(); 111 112 private: 113 int32_t InitMediaLibraryRdbStore(); 114 void InitResourceInfo(); 115 void HandleUpgradeRdbAsync(); 116 117 #ifdef DISTRIBUTED 118 bool QuerySync(const std::string &networkId, const std::string &tableName); 119 #endif 120 int32_t HandleThumbnailOperations(MediaLibraryCommand &cmd); 121 122 EXPORT int32_t SolveInsertCmd(MediaLibraryCommand &cmd); 123 EXPORT int32_t SetCmdBundleAndDevice(MediaLibraryCommand &outCmd); 124 #ifdef DISTRIBUTED 125 int32_t InitDeviceData(); 126 #endif 127 EXPORT int32_t InitialiseThumbnailService(const std::shared_ptr<OHOS::AbilityRuntime::Context> &extensionContext); 128 std::shared_ptr<NativeRdb::ResultSet> QuerySet(MediaLibraryCommand &cmd, const std::vector<std::string> &columns, 129 const DataShare::DataSharePredicates &predicates, int &errCode); 130 void InitACLPermission(); 131 void InitDatabaseACLPermission(); 132 std::shared_ptr<NativeRdb::ResultSet> QueryInternal(MediaLibraryCommand &cmd, 133 const std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates); 134 #ifdef DISTRIBUTED 135 int32_t LcdDistributeAging(); 136 int32_t DistributeDeviceAging(); 137 #endif 138 EXPORT std::shared_ptr<ThumbnailService> thumbnailService_; 139 int32_t RevertPendingByFileId(const std::string &fileId); 140 #ifdef DISTRIBUTED 141 int32_t SyncPullThumbnailKeys(const Uri &uri); 142 #endif 143 int32_t DeleteInRdbPredicates(MediaLibraryCommand &cmd, NativeRdb::RdbPredicates &rdbPredicate); 144 int32_t DeleteInRdbPredicatesAnalysis(MediaLibraryCommand &cmd, NativeRdb::RdbPredicates &rdbPredicate); 145 int32_t UpdateInternal(MediaLibraryCommand &cmd, NativeRdb::ValuesBucket &value, 146 const DataShare::DataSharePredicates &predicates); 147 int32_t SolveInsertCmdSub(MediaLibraryCommand &cmd); 148 void HandleOtherInitOperations(); 149 void InitRefreshAlbum(); 150 int32_t ProcessThumbnailBatchCmd(const MediaLibraryCommand &cmd, 151 const NativeRdb::ValuesBucket &value, const DataShare::DataSharePredicates &predicates); 152 void SubscriberPowerConsumptionDetection(); 153 std::shared_mutex mgrSharedMutex_; 154 #ifdef DISTRIBUTED 155 std::shared_ptr<DistributedKv::SingleKvStore> kvStorePtr_; 156 DistributedKv::DistributedKvDataManager dataManager_; 157 #endif 158 std::shared_ptr<OHOS::AbilityRuntime::Context> context_; 159 std::string bundleName_ {BUNDLE_NAME}; 160 static std::mutex mutex_; 161 static std::unique_ptr<MediaLibraryDataManager> instance_; 162 static std::unordered_map<std::string, DirAsset> dirQuerySetMap_; 163 std::atomic<int> refCnt_ {0}; 164 std::shared_ptr<MediaDataShareExtAbility> extension_; 165 std::shared_ptr<CloudSyncObserver> cloudPhotoObserver_; 166 std::shared_ptr<CloudSyncObserver> cloudPhotoAlbumObserver_; 167 }; 168 169 // Scanner callback objects 170 class ScanFileCallback : public IMediaScannerCallback { 171 public: 172 ScanFileCallback() = default; 173 ~ScanFileCallback() = default; 174 int32_t OnScanFinished(const int32_t status, const std::string &uri, const std::string &path) override; 175 }; 176 } // namespace Media 177 } // namespace OHOS 178 #endif // OHOS_MEDIALIBRARY_DATA_ABILITY_H 179