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 // update burst_cover_level from gallery 96 EXPORT int32_t UpdateBurstCoverLevelFromGallery(); 97 98 EXPORT std::shared_ptr<MediaLibraryRdbStore> rdbStore_; 99 100 EXPORT int32_t InitMediaLibraryMgr(const std::shared_ptr<OHOS::AbilityRuntime::Context> &context, 101 const std::shared_ptr<OHOS::AbilityRuntime::Context> &extensionContext, int32_t &sceneCode); 102 EXPORT void ClearMediaLibraryMgr(); 103 EXPORT int32_t MakeDirQuerySetMap(std::unordered_map<std::string, DirAsset> &outDirQuerySetMap); 104 EXPORT void CreateThumbnailAsync(const std::string &uri, const std::string &path); 105 EXPORT static std::unordered_map<std::string, DirAsset> GetDirQuerySetMap(); 106 EXPORT std::shared_ptr<MediaDataShareExtAbility> GetOwner(); 107 EXPORT void SetOwner(const std::shared_ptr<MediaDataShareExtAbility> &datashareExtension); 108 EXPORT int GetThumbnail(const std::string &uri); 109 EXPORT void SetStartupParameter(); 110 EXPORT void ReCreateMediaDir(); 111 EXPORT int32_t CheckCloudThumbnailDownloadFinish(); 112 EXPORT void UploadDBFileInner(); 113 EXPORT int32_t UpdateDateTakenWhenZero(); 114 115 private: 116 int32_t InitMediaLibraryRdbStore(); 117 void InitResourceInfo(); 118 void HandleUpgradeRdbAsync(); 119 120 #ifdef DISTRIBUTED 121 bool QuerySync(const std::string &networkId, const std::string &tableName); 122 #endif 123 int32_t HandleThumbnailOperations(MediaLibraryCommand &cmd); 124 125 EXPORT int32_t SolveInsertCmd(MediaLibraryCommand &cmd); 126 EXPORT int32_t SetCmdBundleAndDevice(MediaLibraryCommand &outCmd); 127 #ifdef DISTRIBUTED 128 int32_t InitDeviceData(); 129 #endif 130 EXPORT int32_t InitialiseThumbnailService(const std::shared_ptr<OHOS::AbilityRuntime::Context> &extensionContext); 131 std::shared_ptr<NativeRdb::ResultSet> QuerySet(MediaLibraryCommand &cmd, const std::vector<std::string> &columns, 132 const DataShare::DataSharePredicates &predicates, int &errCode); 133 void InitACLPermission(); 134 void InitDatabaseACLPermission(); 135 std::shared_ptr<NativeRdb::ResultSet> QueryInternal(MediaLibraryCommand &cmd, 136 const std::vector<std::string> &columns, const DataShare::DataSharePredicates &predicates); 137 #ifdef DISTRIBUTED 138 int32_t LcdDistributeAging(); 139 int32_t DistributeDeviceAging(); 140 #endif 141 EXPORT std::shared_ptr<ThumbnailService> thumbnailService_; 142 int32_t RevertPendingByFileId(const std::string &fileId); 143 #ifdef DISTRIBUTED 144 int32_t SyncPullThumbnailKeys(const Uri &uri); 145 #endif 146 int32_t DeleteInRdbPredicates(MediaLibraryCommand &cmd, NativeRdb::RdbPredicates &rdbPredicate); 147 int32_t DeleteInRdbPredicatesAnalysis(MediaLibraryCommand &cmd, NativeRdb::RdbPredicates &rdbPredicate); 148 int32_t UpdateInternal(MediaLibraryCommand &cmd, NativeRdb::ValuesBucket &value, 149 const DataShare::DataSharePredicates &predicates); 150 int32_t SolveInsertCmdSub(MediaLibraryCommand &cmd); 151 void HandleOtherInitOperations(); 152 void InitRefreshAlbum(); 153 int32_t ProcessThumbnailBatchCmd(const MediaLibraryCommand &cmd, 154 const NativeRdb::ValuesBucket &value, const DataShare::DataSharePredicates &predicates); 155 void SubscriberPowerConsumptionDetection(); 156 std::shared_mutex mgrSharedMutex_; 157 #ifdef DISTRIBUTED 158 std::shared_ptr<DistributedKv::SingleKvStore> kvStorePtr_; 159 DistributedKv::DistributedKvDataManager dataManager_; 160 #endif 161 std::shared_ptr<OHOS::AbilityRuntime::Context> context_; 162 std::string bundleName_ {BUNDLE_NAME}; 163 static std::mutex mutex_; 164 static std::unique_ptr<MediaLibraryDataManager> instance_; 165 static std::unordered_map<std::string, DirAsset> dirQuerySetMap_; 166 std::atomic<int> refCnt_ {0}; 167 std::shared_ptr<MediaDataShareExtAbility> extension_; 168 std::shared_ptr<CloudSyncObserver> cloudPhotoObserver_; 169 std::shared_ptr<CloudSyncObserver> cloudPhotoAlbumObserver_; 170 }; 171 172 // Scanner callback objects 173 class ScanFileCallback : public IMediaScannerCallback { 174 public: 175 ScanFileCallback() = default; 176 ~ScanFileCallback() = default; 177 int32_t OnScanFinished(const int32_t status, const std::string &uri, const std::string &path) override; 178 }; 179 } // namespace Media 180 } // namespace OHOS 181 #endif // OHOS_MEDIALIBRARY_DATA_ABILITY_H 182