• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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