1 /* 2 * Copyright (C) 2024 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_ALBUM_FUSION_UTILS_H 17 #define OHOS_MEDIALIBRARY_ALBUM_FUSION_UTILS_H 18 19 #include <vector> 20 #include <mutex> 21 22 #include "media_column.h" 23 #include "media_file_utils.h" 24 #include "media_log.h" 25 #include "medialibrary_album_compatibility_fusion_sql.h" 26 #include "medialibrary_errno.h" 27 #include "photo_map_column.h" 28 #include "source_album.h" 29 #include "medialibrary_rdb_transaction.h" 30 #include "medialibrary_rdb_utils.h" 31 #include "medialibrary_rdbstore.h" 32 #include "medialibrary_unistore.h" 33 #include "medialibrary_unistore_manager.h" 34 35 namespace OHOS { 36 namespace Media { 37 38 enum class AlbumFusionState { 39 START = 1, 40 SUCCESS = 2, 41 FAILED = 3 42 }; 43 class MediaLibraryAlbumFusionUtils { 44 public: 45 EXPORT static int32_t RemoveMisAddedHiddenData(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore); 46 EXPORT static int32_t HandleMatchedDataFusion(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore); 47 EXPORT static int32_t HandleNotMatchedDataFusion(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore); 48 EXPORT static int32_t HandleNotMatchedDataMigration(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore, 49 std::multimap<int32_t, std::vector<int32_t>> ¬MatchedMap); 50 EXPORT static int32_t HandleSingleFileCopy(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore, 51 const int32_t &assetId, const int32_t &ownerAlbumId, int64_t &newAssetId); 52 EXPORT static int32_t RebuildAlbumAndFillCloudValue(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore); 53 EXPORT static int32_t HandleChangeNameAlbum(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore); 54 EXPORT static int32_t CompensateLpathForLocalAlbum(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore); 55 EXPORT static int32_t MergeClashSourceAlbum(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore, 56 std::shared_ptr<NativeRdb::ResultSet> &resultSet, const int32_t &sourceAlbumId, const int64_t &targetAlbumId); 57 EXPORT static void SetParameterToStopSync(); 58 EXPORT static void SetParameterToStartSync(); 59 EXPORT static int32_t CleanInvalidCloudAlbumAndData(); 60 EXPORT static int32_t CloneSingleAsset(const int64_t &assetId, const std::string title); 61 EXPORT static int32_t CopyLocalSingleFile(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore, 62 const int32_t &ownerAlbumId, std::shared_ptr<NativeRdb::ResultSet> &resultSet, 63 int64_t &newAssetId, std::string displayName = ""); 64 EXPORT static int32_t CopyCloudSingleFile(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore, 65 const int32_t &assetId, const int32_t &ownerAlbumId, std::shared_ptr<NativeRdb::ResultSet> &resultSet, 66 int64_t &newAssetId); 67 EXPORT static int32_t DeleteAlbumAndUpdateRelationship(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore, 68 const int32_t &oldAlbumId, const int64_t &newAlbumId, bool isCloudAblum); 69 EXPORT static bool IsCloudAlbum(std::shared_ptr<NativeRdb::ResultSet> resultSet); 70 EXPORT static void BuildAlbumInsertValuesSetName(const std::shared_ptr<MediaLibraryRdbStore>& upgradeStore, 71 NativeRdb::ValuesBucket &values, std::shared_ptr<NativeRdb::ResultSet> &resultSet, 72 const std::string &newAlbumName); 73 EXPORT static int32_t RefreshAllAlbums(); 74 EXPORT static int32_t GetAlbumFuseUpgradeStatus(); 75 EXPORT static int32_t SetAlbumFuseUpgradeStatus(int32_t upgradeStatus); 76 EXPORT static void ReportAlbumFusionData(int64_t albumFusionTag, AlbumFusionState albumFusionState, 77 const std::shared_ptr<MediaLibraryRdbStore> rdbStore); 78 79 private: 80 static void SetRefreshAlbum(bool needRefresh); 81 static int32_t HandleRestData(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore, const int32_t &assetId, 82 const std::vector<int32_t> &restOwnerAlbumIds, int32_t &handledCount); 83 static int32_t HandleNoOwnerData(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore); 84 static int32_t HandleExpiredAlbumData(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore); 85 static int32_t QueryNoMatchedMap(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore, 86 std::multimap<int32_t, std::vector<int32_t>> ¬MatchedMap, bool isUpgrade); 87 static int32_t HandleNewCloudDirtyData(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore, 88 std::multimap<int32_t, std::vector<int32_t>> ¬MatchedMap); 89 static int32_t HandleDuplicateAlbum(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore); 90 static int32_t HandleMisMatchScreenRecord(const std::shared_ptr<MediaLibraryRdbStore> upgradeStore); 91 92 private: 93 static std::mutex cloudAlbumAndDataMutex_; 94 static std::atomic<bool> isNeedRefreshAlbum; 95 }; 96 } 97 } 98 #endif // OHOS_MEDIALIBRARY_ALBUM_FUSION_UTILS_H