From e47c35558d537d6d7b02e1758d49e54a69e2b676 Mon Sep 17 00:00:00 2001 From: zhaokaixiao Date: Thu, 9 Nov 2023 12:44:44 +0000 Subject: [PATCH] =?UTF-8?q?=E7=9B=B8=E5=86=8C=E6=8E=92=E5=BA=8Fbugfix=20&?= =?UTF-8?q?=20tdd=E8=A1=A5=E5=85=85=20Signed-off-by:=20zhaokaixiao=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I4c4786fa749a6c66f173852275a7a9a62be2b837 --- .../src/photo_album_column.cpp | 3 +- .../src/medialibrary_command.cpp | 2 +- .../src/medialibrary_rdbstore.cpp | 6 +- .../photo_album_test/src/photo_album_test.cpp | 71 +++++++++++++++++-- .../src/media_album_change_request_napi.cpp | 2 +- frameworks/utils/include/userfilemgr_uri.h | 6 +- 6 files changed, 76 insertions(+), 14 deletions(-) diff --git a/frameworks/innerkitsimpl/media_library_helper/src/photo_album_column.cpp b/frameworks/innerkitsimpl/media_library_helper/src/photo_album_column.cpp index d3170c5ee9..f82cfaf46f 100644 --- a/frameworks/innerkitsimpl/media_library_helper/src/photo_album_column.cpp +++ b/frameworks/innerkitsimpl/media_library_helper/src/photo_album_column.cpp @@ -115,7 +115,8 @@ const std::string PhotoAlbumColumns::ALBUM_INSERT_ORDER_TRIGGER = " CREATE TRIGGER insert_order_trigger AFTER INSERT ON " + PhotoAlbumColumns::TABLE + " BEGIN " + " UPDATE " + PhotoAlbumColumns::TABLE + " SET album_order = (" + - " SELECT Max(album_order) FROM " + PhotoAlbumColumns::TABLE + ") + 1 WHERE rowid = new.rowid;" + " SELECT COALESCE(MAX(album_order), 0) + 1 FROM " + PhotoAlbumColumns::TABLE + + ") WHERE rowid = new.rowid;" + " END"; bool PhotoAlbumColumns::IsPhotoAlbumColumn(const string &columnName) diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_command.cpp b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_command.cpp index 899c81c097..9e4bca4039 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_command.cpp +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_command.cpp @@ -42,7 +42,6 @@ static const map OPRN_TYPE_MAP = { { MEDIA_ALBUMOPRN_CREATEALBUM, OperationType::CREATE }, { MEDIA_FILEOPRN_DELETEASSET, OperationType::DELETE }, { MEDIA_ALBUMOPRN_DELETEALBUM, OperationType::DELETE }, - { MEDIA_FILEOPRN_ORDERALBUM, OperationType::ALBUM_ORDER}, { MEDIA_FILEOPRN_MODIFYASSET, OperationType::UPDATE }, { MEDIA_ALBUMOPRN_MODIFYALBUM, OperationType::UPDATE }, { MEDIA_ALBUMOPRN_QUERYALBUM, OperationType::QUERY }, @@ -82,6 +81,7 @@ static const map OPRN_TYPE_MAP = { { OPRN_REVERT_EDIT, OperationType::REVERT_EDIT }, { OPRN_HIDE, OperationType::HIDE }, { OPRN_QUERY_HIDDEN, OperationType::QUERY_HIDDEN }, + { OPRN_ORDER_ALBUM, OperationType::ALBUM_ORDER}, }; } diff --git a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp index 684988ec61..c0ed44e79b 100644 --- a/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp +++ b/frameworks/innerkitsimpl/medialibrary_data_extension/src/medialibrary_rdbstore.cpp @@ -583,8 +583,7 @@ int32_t PrepareSystemAlbums(RdbStore &store) for (int32_t i = PhotoAlbumSubType::SYSTEM_START; i <= PhotoAlbumSubType::SYSTEM_END; i++) { values.PutInt(PhotoAlbumColumns::ALBUM_TYPE, PhotoAlbumType::SYSTEM); values.PutInt(PhotoAlbumColumns::ALBUM_SUBTYPE, i); - // 1:order offset,skip 0 for first album - values.PutInt(PhotoAlbumColumns::ALBUM_ORDER, i - PhotoAlbumSubType::SYSTEM_START + 1); + values.PutInt(PhotoAlbumColumns::ALBUM_ORDER, i - PhotoAlbumSubType::SYSTEM_START); AbsRdbPredicates predicates(PhotoAlbumColumns::TABLE); predicates.EqualTo(PhotoAlbumColumns::ALBUM_TYPE, to_string(PhotoAlbumType::SYSTEM)); @@ -1543,7 +1542,8 @@ void AddAlbumOrderColumn(RdbStore &store) " CREATE TRIGGER insert_order_trigger AFTER INSERT ON " + PhotoAlbumColumns::TABLE + " BEGIN " + " UPDATE " + PhotoAlbumColumns::TABLE + " SET album_order = (" + - " SELECT Max(album_order) FROM " + PhotoAlbumColumns::TABLE + ") + 1 WHERE rowid = new.rowid;" + " SELECT COALESCE(MAX(album_order), 0) + 1 FROM " + PhotoAlbumColumns::TABLE + + ") WHERE rowid = new.rowid;" + " END"; const vector addAlbumOrder = { addAlbumOrderColumn, initOriginOrder, diff --git a/frameworks/innerkitsimpl/test/unittest/photo_album_test/src/photo_album_test.cpp b/frameworks/innerkitsimpl/test/unittest/photo_album_test/src/photo_album_test.cpp index 3820aebd58..0531aeb137 100644 --- a/frameworks/innerkitsimpl/test/unittest/photo_album_test/src/photo_album_test.cpp +++ b/frameworks/innerkitsimpl/test/unittest/photo_album_test/src/photo_album_test.cpp @@ -42,7 +42,7 @@ using OHOS::DataShare::DataSharePredicates; static shared_ptr g_rdbStore; const std::string URI_CREATE_PHOTO_ALBUM = MEDIALIBRARY_DATA_URI + "/" + PHOTO_ALBUM_OPRN + "/" + OPRN_CREATE; const std::string URI_UPDATE_PHOTO_ALBUM = MEDIALIBRARY_DATA_URI + "/" + PHOTO_ALBUM_OPRN + "/" + OPRN_UPDATE; - +const std::string URI_ORDER_ALBUM = MEDIALIBRARY_DATA_URI + "/" + PHOTO_ALBUM_OPRN + "/" + OPRN_ORDER_ALBUM; int32_t ClearTable(const string &table) { RdbPredicates predicates(table); @@ -176,7 +176,7 @@ inline int32_t UpdatePhotoAlbum(const DataShareValuesBucket &values, const DataS inline int32_t OrderAlbums(const DataShareValuesBucket &values, const DataSharePredicates &predicates) { - Uri uri(URI_UPDATE_PHOTO_ALBUM); + Uri uri(URI_ORDER_ALBUM); MediaLibraryCommand cmd(uri, OperationType::ALBUM_ORDER); return MediaLibraryDataManager::GetInstance()->Update(cmd, values, predicates); } @@ -218,6 +218,35 @@ void CheckUpdatedSystemAlbum(PhotoAlbumSubType subType, const string &expectedNa EXPECT_EQ(cover, expectedCover); } +int32_t GetAlbumOrder(int32_t albumId) +{ + RdbPredicates predicates(PhotoAlbumColumns::TABLE); + predicates.EqualTo(PhotoAlbumColumns::ALBUM_ID, to_string(albumId)); + auto resultSet = g_rdbStore->Query(predicates, { }); + EXPECT_NE(resultSet, nullptr); + if (resultSet == nullptr) { + return E_HAS_DB_ERROR; + } + + int32_t count = -1; + CHECK_AND_RETURN_RET(resultSet->GetRowCount(count) == E_OK, E_HAS_DB_ERROR); + MEDIA_INFO_LOG("Query count: %{public}d", count); + CHECK_AND_RETURN_RET(resultSet->GoToFirstRow() == E_OK, E_HAS_DB_ERROR); + int32_t albumOrder = get(ResultSetUtils::GetValFromColumn(PhotoAlbumColumns::ALBUM_ORDER, + resultSet, TYPE_INT32)); + EXPECT_GT(albumOrder, 0); + return albumOrder; +} + +void GetMaxAlbumOrder(int32_t &maxAlbumOrder) +{ + RdbPredicates predicates(PhotoAlbumColumns::TABLE); + auto resultSet = g_rdbStore->Query(predicates, { "Max(album_order)" }); + int32_t ret = resultSet->GoToFirstRow(); + CHECK_AND_RETURN_LOG(ret == E_OK, "Failed to GoToFirstRow! err: %{public}d", ret); + resultSet->GetInt(0, maxAlbumOrder); +} + void PhotoAlbumTest::SetUpTestCase() { MediaLibraryUnitTestUtils::Init(); @@ -521,12 +550,15 @@ HWTEST_F(PhotoAlbumTest, photoalbum_order_album_006, TestSize.Level0) // Try to update favorite system DataSharePredicates predicates; EXPECT_EQ(OrderAlbums(values, predicates), 0); + int32_t currentOrder = GetAlbumOrder(2); + int32_t referenceOrder = GetAlbumOrder(5); + EXPECT_LT(currentOrder, referenceOrder); MEDIA_INFO_LOG("photoalbum_order_album_006 end"); } /** * @tc.name: photoalbum_order_album_007 - * @tc.desc: order photo album. + * @tc.desc: repeat order same photo album, to see if order deranged. * move current album before reference album * @tc.type: FUNC * @tc.require: issueI6P7NG @@ -542,12 +574,15 @@ HWTEST_F(PhotoAlbumTest, photoalbum_order_album_007, TestSize.Level0) // Try to update favorite system DataSharePredicates predicates; EXPECT_EQ(OrderAlbums(values, predicates), 0); + int32_t currentOrder = GetAlbumOrder(2); + int32_t referenceOrder = GetAlbumOrder(5); + EXPECT_LT(currentOrder, referenceOrder); MEDIA_INFO_LOG("photoalbum_order_album_007 end"); } /** * @tc.name: photoalbum_order_album_007 - * @tc.desc: order photo album. + * @tc.desc: order photo album, move the album to the end. * move current album before reference album * @tc.type: FUNC * @tc.require: issueI6P7NG @@ -563,6 +598,34 @@ HWTEST_F(PhotoAlbumTest, photoalbum_order_album_008, TestSize.Level0) // Try to update favorite system DataSharePredicates predicates; EXPECT_EQ(OrderAlbums(values, predicates), 0); + int32_t currentOrder = GetAlbumOrder(3); + int32_t maxAlbumOrder = -1; + GetMaxAlbumOrder(maxAlbumOrder); + EXPECT_EQ(currentOrder, maxAlbumOrder); MEDIA_INFO_LOG("photoalbum_order_album_008 end"); } + +/** + * @tc.name: photoalbum_order_album_009 + * @tc.desc: order photo album, move the album to the end. + * move current album before reference album + * @tc.type: FUNC + * @tc.require: issueI6P7NG + */ +HWTEST_F(PhotoAlbumTest, photoalbum_order_album_009, TestSize.Level0) +{ + MEDIA_INFO_LOG("photoalbum_order_album_009 enter"); + + // Build empty values + DataShareValuesBucket values; + values.Put(PhotoAlbumColumns::ALBUM_ID, 5); // 5\2: album_id + values.Put(PhotoAlbumColumns::REFERENCE_ALBUM_ID, 2); + // Try to update favorite system + DataSharePredicates predicates; + EXPECT_EQ(OrderAlbums(values, predicates), 0); + int32_t currentOrder = GetAlbumOrder(2); + int32_t referenceOrder = GetAlbumOrder(5); + EXPECT_GT(currentOrder, referenceOrder); + MEDIA_INFO_LOG("photoalbum_order_album_009 end"); +} } // namespace OHOS::Media diff --git a/frameworks/js/src/media_album_change_request_napi.cpp b/frameworks/js/src/media_album_change_request_napi.cpp index 63f967769a..6cc901caa6 100644 --- a/frameworks/js/src/media_album_change_request_napi.cpp +++ b/frameworks/js/src/media_album_change_request_napi.cpp @@ -185,7 +185,7 @@ static bool OrderAlbumExecute(MediaAlbumChangeRequestAsyncContext& context) DataShare::DataShareValuesBucket valuesBucket; auto photoAlbum = context.objectInfo->GetPhotoAlbumInstance(); auto referenceAlum = context.objectInfo->GetReferencePhotoAlbumInstance(); - Uri updateAlbumUri(URI_COMPAT_ORDER_ALBUM); + Uri updateAlbumUri(PAH_ORDER_ALBUM); valuesBucket.Put(PhotoAlbumColumns::ALBUM_ID, photoAlbum->GetAlbumId()); int32_t referenceAlbumId = -1; if (referenceAlum != nullptr) { diff --git a/frameworks/utils/include/userfilemgr_uri.h b/frameworks/utils/include/userfilemgr_uri.h index fd0fd1445c..f79617e31e 100644 --- a/frameworks/utils/include/userfilemgr_uri.h +++ b/frameworks/utils/include/userfilemgr_uri.h @@ -45,6 +45,7 @@ const std::string OPRN_DELETE_BY_TOOL = "delete_by_tool"; const std::string OPRN_SET_USER_COMMENT = "set_user_comment"; const std::string OPRN_COMMIT_EDIT = "operation_commit_edit"; const std::string OPRN_REVERT_EDIT = "operation_revert_edit"; +const std::string OPRN_ORDER_ALBUM = "order_album"; // Asset operations constants const std::string MEDIA_FILEOPRN = "file_operation"; @@ -82,7 +83,6 @@ const std::string MEDIA_ALBUMOPRN_CREATEALBUM = "create_album"; const std::string MEDIA_ALBUMOPRN_MODIFYALBUM = "modify_album"; const std::string MEDIA_ALBUMOPRN_DELETEALBUM = "delete_album"; const std::string MEDIA_ALBUMOPRN_QUERYALBUM = "query_album"; -const std::string MEDIA_FILEOPRN_ORDERALBUM = "order_album"; const std::string MEDIA_FILEOPRN_GETALBUMCAPACITY = "get_album_capacity"; // Photo album operations constants @@ -91,8 +91,6 @@ const std::string URI_QUERY_PHOTO_ALBUM = MEDIALIBRARY_DATA_URI + "/" + PHOTO_AL const std::string URI_DELETE_PHOTOS = MEDIALIBRARY_DATA_URI + "/" + PHOTO_ALBUM_OPRN + "/" + OPRN_DELETE_PHOTOS; const std::string URI_COMPAT_DELETE_PHOTOS = MEDIALIBRARY_DATA_URI + "/" + PHOTO_ALBUM_OPRN + "/" + OPRN_COMPAT_DELETE_PHOTOS; -const std::string URI_COMPAT_ORDER_ALBUM = MEDIALIBRARY_DATA_URI + "/" + PHOTO_ALBUM_OPRN + "/" + - MEDIA_FILEOPRN_ORDERALBUM; // Photo map operations constants const std::string PHOTO_MAP_OPRN = "photo_map_v10_operation"; @@ -199,10 +197,10 @@ const std::string PAH_PHOTO_ALBUM_REMOVE_ASSET = MEDIALIBRARY_DATA_URI + "/" + P const std::string PAH_QUERY_PHOTO_MAP = MEDIALIBRARY_DATA_URI + "/" + PAH_MAP + "/" + OPRN_QUERY; const std::string PAH_RECOVER_PHOTOS = MEDIALIBRARY_DATA_URI + "/" + PAH_ALBUM + "/" + OPRN_RECOVER_PHOTOS; const std::string PAH_DELETE_PHOTOS = MEDIALIBRARY_DATA_URI + "/" + PAH_ALBUM + "/" + OPRN_DELETE_PHOTOS; +const std::string PAH_ORDER_ALBUM = MEDIALIBRARY_DATA_URI + "/" + PAH_ALBUM + "/" + OPRN_ORDER_ALBUM; const std::string PAH_COMMIT_EDIT_PHOTOS = MEDIALIBRARY_DATA_URI + "/" + PAH_PHOTO + "/" + OPRN_COMMIT_EDIT; const std::string PAH_REVERT_EDIT_PHOTOS = MEDIALIBRARY_DATA_URI + "/" + PAH_PHOTO + "/" + OPRN_REVERT_EDIT; - // mediatool operation constants const std::string TOOL_PHOTO = "mediatool_photo_operation"; const std::string TOOL_AUDIO = "mediatool_audio_operation"; -- Gitee