1 /*
2 * Copyright (C) 2023 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 #define MLOG_TAG "accurate_refresh_test_util"
17 #include "accurate_refresh_test_util.h"
18 #include "result_set_utils.h"
19 #include "accurate_debug_log.h"
20
21 namespace OHOS {
22 namespace Media::AccurateRefresh {
23 using namespace std;
24 using namespace OHOS::NativeRdb;
GetPhotoAlbumInsertValue(const AlbumChangeInfo & albumInfo)25 ValuesBucket GetPhotoAlbumInsertValue(const AlbumChangeInfo &albumInfo)
26 {
27 ValuesBucket value;
28 value.PutInt(PhotoAlbumColumns::ALBUM_ID, albumInfo.albumId_);
29 value.PutInt(PhotoAlbumColumns::ALBUM_TYPE, albumInfo.albumType_);
30 value.PutInt(PhotoAlbumColumns::ALBUM_SUBTYPE, albumInfo.albumSubType_);
31 value.PutInt(PhotoAlbumColumns::ALBUM_COUNT, albumInfo.count_);
32 value.PutInt(PhotoAlbumColumns::ALBUM_IMAGE_COUNT, albumInfo.imageCount_);
33 value.PutInt(PhotoAlbumColumns::ALBUM_VIDEO_COUNT, albumInfo.videoCount_);
34 value.PutString(PhotoAlbumColumns::ALBUM_COVER_URI, albumInfo.coverUri_);
35 value.PutInt(PhotoAlbumColumns::HIDDEN_COUNT, albumInfo.hiddenCount_);
36 value.PutString(PhotoAlbumColumns::HIDDEN_COVER, albumInfo.hiddenCoverUri_);
37 value.PutLong(PhotoAlbumColumns::COVER_DATE_TIME, albumInfo.coverDateTime_);
38 value.PutLong(PhotoAlbumColumns::HIDDEN_COVER_DATE_TIME, albumInfo.hiddenCoverDateTime_);
39 value.PutInt(PhotoAlbumColumns::ALBUM_DIRTY, albumInfo.dirty_);
40 value.PutString(PhotoAlbumColumns::ALBUM_NAME, albumInfo.albumName_);
41 return value;
42 }
43
GetFavoriteInsertAlbum()44 ValuesBucket GetFavoriteInsertAlbum()
45 {
46 return GetPhotoAlbumInsertValue(FAVORITE_ALBUM_INFO);
47 }
48
GetHiddenInsertAlbum()49 ValuesBucket GetHiddenInsertAlbum()
50 {
51 return GetPhotoAlbumInsertValue(HIDDEN_ALBUM_INFO);
52 }
53
IsEqualAlbumInfo(const AlbumChangeInfo & albumInfo1,const AlbumChangeInfo & albumInfo2)54 bool IsEqualAlbumInfo(const AlbumChangeInfo &albumInfo1, const AlbumChangeInfo &albumInfo2)
55 {
56 ACCURATE_DEBUG("%{public}s", albumInfo1.ToString().c_str());
57 ACCURATE_DEBUG("%{public}s", albumInfo2.ToString().c_str());
58 return albumInfo1.albumId_ == albumInfo2.albumId_ && albumInfo1.albumType_ == albumInfo2.albumType_ &&
59 albumInfo1.albumSubType_ == albumInfo2.albumSubType_ && albumInfo1.count_ == albumInfo2.count_ &&
60 albumInfo1.imageCount_ == albumInfo2.imageCount_ && albumInfo1.videoCount_ == albumInfo2.videoCount_ &&
61 albumInfo1.coverUri_ == albumInfo2.coverUri_ && albumInfo1.hiddenCount_ == albumInfo2.hiddenCount_ &&
62 albumInfo1.hiddenCoverUri_ == albumInfo2.hiddenCoverUri_ &&
63 albumInfo1.coverDateTime_ == albumInfo2.coverDateTime_ &&
64 albumInfo1.hiddenCoverDateTime_ == albumInfo2.hiddenCoverDateTime_ && albumInfo1.dirty_ == albumInfo2.dirty_;
65 }
66
GetTrashInsertAlbum()67 ValuesBucket GetTrashInsertAlbum()
68 {
69 return GetPhotoAlbumInsertValue(TRASH_ALBUM_INFO);
70 }
71
GetVideoInsertAlbum()72 ValuesBucket GetVideoInsertAlbum()
73 {
74 return GetPhotoAlbumInsertValue(VIDEO_ALBUM_INFO);
75 }
76
GetImageInsertAlbum()77 ValuesBucket GetImageInsertAlbum()
78 {
79 return GetPhotoAlbumInsertValue(IMAGE_ALBUM_INFO);
80 }
81
GetCloudEnhancementInsertAlbum()82 ValuesBucket GetCloudEnhancementInsertAlbum()
83 {
84 return GetPhotoAlbumInsertValue(CLOUD_ENHANCEMENT_ALBUM_INFO);
85 }
86
GetUserInsertInfo(int32_t albumId)87 AlbumChangeInfo GetUserInsertInfo(int32_t albumId)
88 {
89 AlbumChangeInfo albumInfo = USER_ALBUM_INFO;
90 albumInfo.albumId_ = albumId;
91 albumInfo.albumUri_ = PhotoAlbumColumns::ALBUM_URI_PREFIX + to_string(albumId);
92 return albumInfo;
93 }
94
GetUserInsertAlbum(int32_t albumId)95 ValuesBucket GetUserInsertAlbum(int32_t albumId)
96 {
97 return GetPhotoAlbumInsertValue(GetUserInsertInfo(albumId));
98 }
99
GetSourceInsertInfo(int32_t albumId)100 AlbumChangeInfo GetSourceInsertInfo(int32_t albumId)
101 {
102 AlbumChangeInfo albumInfo = SOURCE_ALBUM_INFO;
103 albumInfo.albumId_ = albumId;
104 albumInfo.albumUri_ = PhotoAlbumColumns::ALBUM_URI_PREFIX + to_string(albumId);
105 return albumInfo;
106 }
107
GetSourceInsertAlbum(int32_t albumId)108 ValuesBucket GetSourceInsertAlbum(int32_t albumId)
109 {
110 return GetPhotoAlbumInsertValue(GetSourceInsertInfo(albumId));
111 }
112
GetAlbumCount(PhotoAlbumSubType subType,shared_ptr<MediaLibraryRdbStore> rdbStore)113 int32_t GetAlbumCount(PhotoAlbumSubType subType, shared_ptr<MediaLibraryRdbStore> rdbStore)
114 {
115 RdbPredicates queryPredicates(PhotoAlbumColumns::TABLE);
116 queryPredicates.EqualTo(PhotoAlbumColumns::ALBUM_TYPE, to_string(PhotoAlbumType::SYSTEM));
117 queryPredicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(subType));
118 auto resultSet =
119 rdbStore->QueryByStep(queryPredicates, {PhotoAlbumColumns::ALBUM_ID, PhotoAlbumColumns::ALBUM_COUNT});
120 CHECK_AND_RETURN_RET_LOG(resultSet != nullptr, 0, "resultSet nullptr");
121 int32_t queryCount;
122 while (resultSet->GoToNextRow() == NativeRdb::E_OK) {
123 auto queryAlbumId =
124 get<int32_t>(ResultSetUtils::GetValFromColumn(PhotoAlbumColumns::ALBUM_ID, resultSet, TYPE_INT32));
125 queryCount =
126 get<int32_t>(ResultSetUtils::GetValFromColumn(PhotoAlbumColumns::ALBUM_COUNT, resultSet, TYPE_INT32));
127 MEDIA_INFO_LOG("queryCount: %{public}d, queryAlbumId: %{public}d", queryCount, queryAlbumId);
128 }
129 resultSet->Close();
130 return queryCount;
131 }
132
GetAlbumDirtyType(PhotoAlbumSubType subType,shared_ptr<MediaLibraryRdbStore> rdbStore)133 int32_t GetAlbumDirtyType(PhotoAlbumSubType subType, shared_ptr<MediaLibraryRdbStore> rdbStore)
134 {
135 RdbPredicates queryPredicates(PhotoAlbumColumns::TABLE);
136 queryPredicates.EqualTo(PhotoAlbumColumns::ALBUM_TYPE, to_string(PhotoAlbumType::SYSTEM));
137 queryPredicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(subType));
138 auto resultSet =
139 rdbStore->QueryByStep(queryPredicates, {PhotoAlbumColumns::ALBUM_ID, PhotoAlbumColumns::ALBUM_DIRTY});
140 CHECK_AND_RETURN_RET_LOG(resultSet != nullptr, -1, "resultSet nullptr");
141 int32_t dirtyType;
142 while (resultSet->GoToNextRow() == NativeRdb::E_OK) {
143 auto queryAlbumId =
144 get<int32_t>(ResultSetUtils::GetValFromColumn(PhotoAlbumColumns::ALBUM_ID, resultSet, TYPE_INT32));
145 dirtyType =
146 get<int32_t>(ResultSetUtils::GetValFromColumn(PhotoAlbumColumns::ALBUM_DIRTY, resultSet, TYPE_INT32));
147 MEDIA_INFO_LOG("dirtyType: %{public}d, queryAlbumId: %{public}d", dirtyType, queryAlbumId);
148 }
149 resultSet->Close();
150 return dirtyType;
151 }
152
GetAlbumInfo(PhotoAlbumSubType subType,shared_ptr<MediaLibraryRdbStore> rdbStore)153 AlbumChangeInfo GetAlbumInfo(PhotoAlbumSubType subType, shared_ptr<MediaLibraryRdbStore> rdbStore)
154 {
155 RdbPredicates queryPredicates(PhotoAlbumColumns::TABLE);
156 queryPredicates.EqualTo(PhotoAlbumColumns::ALBUM_TYPE, to_string(PhotoAlbumType::SYSTEM));
157 queryPredicates.EqualTo(PhotoAlbumColumns::ALBUM_SUBTYPE, to_string(subType));
158 auto resultSet = rdbStore->QueryByStep(queryPredicates, AlbumChangeInfo::GetAlbumInfoColumns());
159 CHECK_AND_RETURN_RET_LOG(resultSet != nullptr, AlbumChangeInfo(), "resultSet nullptr");
160 auto albumInfos = AlbumChangeInfo::GetInfoFromResult(resultSet, AlbumChangeInfo::GetAlbumInfoColumns());
161 if (albumInfos.size() == 1) {
162 return albumInfos[0];
163 }
164
165 return AlbumChangeInfo();
166 }
167
GetAlbumInfo(int32_t albumId,std::shared_ptr<MediaLibraryRdbStore> rdbStore)168 AlbumChangeInfo GetAlbumInfo(int32_t albumId, std::shared_ptr<MediaLibraryRdbStore> rdbStore)
169 {
170 RdbPredicates queryPredicates(PhotoAlbumColumns::TABLE);
171 queryPredicates.EqualTo(PhotoAlbumColumns::ALBUM_ID, to_string(albumId));
172 auto resultSet = rdbStore->QueryByStep(queryPredicates, AlbumChangeInfo::GetAlbumInfoColumns());
173 CHECK_AND_RETURN_RET_LOG(resultSet != nullptr, AlbumChangeInfo(), "resultSet nullptr");
174 auto albumInfos = AlbumChangeInfo::GetInfoFromResult(resultSet, AlbumChangeInfo::GetAlbumInfoColumns());
175 if (albumInfos.size() == 1) {
176 return albumInfos[0];
177 }
178
179 return AlbumChangeInfo();
180 }
181
CheckAlbumChangeData(const AlbumChangeData & changeData,RdbOperation operation,const AlbumChangeInfo & infoBefore,const AlbumChangeInfo & infoAfter,bool isDelete)182 bool CheckAlbumChangeData(const AlbumChangeData &changeData, RdbOperation operation, const AlbumChangeInfo &infoBefore,
183 const AlbumChangeInfo &infoAfter, bool isDelete)
184 {
185 ACCURATE_DEBUG("operation_: %{public}d isDelete: %{public}d", changeData.operation_, changeData.isDelete_);
186 ACCURATE_DEBUG("before: %{public}s", changeData.infoBeforeChange_.ToString().c_str());
187 ACCURATE_DEBUG("after: %{public}s", changeData.infoAfterChange_.ToString().c_str());
188 if (operation != RDB_OPERATION_UNDEFINED && changeData.operation_ != operation) {
189 MEDIA_ERR_LOG("operation error (%{public}d/%{public}d)", changeData.operation_, operation);
190 return false;
191 }
192 auto dmInfoBefore = changeData.infoBeforeChange_;
193 ACCURATE_DEBUG("infoBefore: %{public}s", dmInfoBefore.ToString().c_str());
194 if (!IsEqualAlbumInfo(dmInfoBefore, infoBefore)) {
195 MEDIA_ERR_LOG("info before error");
196 return false;
197 }
198
199 auto dmInfoAfter = changeData.infoAfterChange_;
200 ACCURATE_DEBUG("dmInfoAfter: %{public}s", dmInfoAfter.ToString().c_str());
201 if (!IsEqualAlbumInfo(dmInfoAfter, infoAfter)) {
202 MEDIA_ERR_LOG("album info not expected.");
203 return false;
204 }
205
206 if (changeData.isDelete_ != isDelete) {
207 MEDIA_ERR_LOG("isDelete_ wrong.");
208 return false;
209 }
210
211 return true;
212 }
213 } // namespace Media::AccurateRefresh
214 } // namespace OHOS