• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "gallery_media_count_statistic.h"
16 
17 #include "media_log.h"
18 #include "backup_database_utils.h"
19 #include "backup_const.h"
20 #include "media_backup_report_data_type.h"
21 #include "statistic_processor.h"
22 #include "media_file_utils.h"
23 
24 namespace OHOS::Media {
Load()25 std::vector<AlbumMediaStatisticInfo> GalleryMediaCountStatistic::Load()
26 {
27     CHECK_AND_RETURN_RET_LOG(this->galleryRdb_ != nullptr, {}, "galleryRdb_ is nullptr, Maybe init failed.");
28     std::vector<AlbumMediaStatisticInfo> infoList = {
29         // data-transfer statistic info.
30         this->GetAllStatInfo(),
31         this->GetAllImageStatInfo(),
32         this->GetAllVideoStatInfo(),
33         this->GetAllRestoreStatInfo(),
34         this->GetAllRestoreImageStatInfo(),
35         this->GetAllRestoreVideoStatInfo(),
36         // other statistic info.
37         this->GetSdCardStatInfo(),
38         this->GetDuplicateStatInfo(),
39         this->GetAppTwinStatInfo(),
40         this->GetOnlyHDCInfo(),
41         this->GetSizeUnnormalInfo(),
42         this->GetLiveStatInfo(),
43         this->GetTempInfo(),
44         this->GetNotSyncInfo(),
45         this->GetGalleryAlbumCountInfo(),
46         // statistic info.
47         this->GetImageAlbumInfo(),
48         this->GetVideoAlbumInfo(),
49         // folder info.
50         this->GetFavoriteAlbumStatInfo(),
51         this->GetTrashedAlbumStatInfo(),
52     };
53     // key album statistic info.
54     std::vector<AlbumMediaStatisticInfo> importsAlbumList = this->GetAlbumInfoByLPath("/Pictures/cloud/Imports");
55     infoList.insert(infoList.end(), importsAlbumList.begin(), importsAlbumList.end());
56     std::vector<AlbumMediaStatisticInfo> hiddenAlbumList = this->GetAlbumInfoByLPath("/Pictures/hiddenAlbum");
57     infoList.insert(infoList.end(), hiddenAlbumList.begin(), hiddenAlbumList.end());
58     // key album of album_plugin.
59     std::vector<AlbumMediaStatisticInfo> cameraAlbumList = this->GetAlbumInfoByName("相机");
60     infoList.insert(infoList.end(), cameraAlbumList.begin(), cameraAlbumList.end());
61     std::vector<AlbumMediaStatisticInfo> screenShotAlbumList = this->GetAlbumInfoByName("截图");
62     infoList.insert(infoList.end(), screenShotAlbumList.begin(), screenShotAlbumList.end());
63     std::vector<AlbumMediaStatisticInfo> weiXinAlbumList = this->GetAlbumInfoByName("微信");
64     infoList.insert(infoList.end(), weiXinAlbumList.begin(), weiXinAlbumList.end());
65     std::vector<AlbumMediaStatisticInfo> weiboAlbumList = this->GetAlbumInfoByName("微博");
66     infoList.insert(infoList.end(), weiboAlbumList.begin(), weiboAlbumList.end());
67     std::vector<AlbumMediaStatisticInfo> shareAlbumList = this->GetAlbumInfoByName("华为分享");
68     infoList.insert(infoList.end(), shareAlbumList.begin(), shareAlbumList.end());
69     std::vector<AlbumMediaStatisticInfo> otherAlbumList = this->GetAlbumInfoByName("其它");
70     infoList.insert(infoList.end(), otherAlbumList.begin(), otherAlbumList.end());
71     return infoList;
72 }
73 
GetCount(const std::string & query,const std::vector<NativeRdb::ValueObject> & args)74 int32_t GalleryMediaCountStatistic::GetCount(const std::string &query, const std::vector<NativeRdb::ValueObject> &args)
75 {
76     return BackupDatabaseUtils::QueryInt(this->galleryRdb_, query, CUSTOM_COUNT, args);
77 }
78 
QueryGalleryAllCount(SearchCondition searchCondition)79 int32_t GalleryMediaCountStatistic::QueryGalleryAllCount(SearchCondition searchCondition)
80 {
81     CHECK_AND_RETURN_RET_LOG(this->galleryRdb_ != nullptr, 0, "Media_Restore: galleryRdb_ is null.");
82     int32_t mediaType = searchCondition.GetMediaType();
83     int32_t hiddenType = searchCondition.GetHiddenType();
84     int32_t trashedType = searchCondition.GetTrashedType();
85     int32_t cloudType = searchCondition.GetCloudType();
86     int32_t favoriteType = searchCondition.GetFavoriteType();
87     int32_t burstType = searchCondition.GetBurstType();
88     std::vector<NativeRdb::ValueObject> params = {mediaType,
89         mediaType,
90         hiddenType,
91         hiddenType,
92         hiddenType,
93         trashedType,
94         trashedType,
95         trashedType,
96         cloudType,
97         cloudType,
98         cloudType,
99         favoriteType,
100         favoriteType,
101         favoriteType,
102         burstType,
103         burstType,
104         burstType};
105     return this->GetCount(this->SQL_QUERY_ALL_GALLERY_COUNT, params);
106 }
107 
QueryAlbumGalleryCount(SearchCondition searchCondition)108 int32_t GalleryMediaCountStatistic::QueryAlbumGalleryCount(SearchCondition searchCondition)
109 {
110     CHECK_AND_RETURN_RET_LOG(this->galleryRdb_ != nullptr, 0, "Media_Restore: galleryRdb_ is null.");
111     int32_t mediaType = searchCondition.GetMediaType();
112     int32_t hiddenType = searchCondition.GetHiddenType();
113     int32_t trashedType = searchCondition.GetTrashedType();
114     int32_t cloudType = searchCondition.GetCloudType();
115     int32_t favoriteType = searchCondition.GetFavoriteType();
116     int32_t burstType = searchCondition.GetBurstType();
117     std::vector<NativeRdb::ValueObject> params = {mediaType,
118         mediaType,
119         hiddenType,
120         hiddenType,
121         hiddenType,
122         trashedType,
123         trashedType,
124         trashedType,
125         cloudType,
126         cloudType,
127         cloudType,
128         favoriteType,
129         favoriteType,
130         favoriteType,
131         burstType,
132         burstType,
133         burstType};
134     return this->GetCount(this->SQL_QUERY_ALBUM_GALLERY_COUNT, params);
135 }
136 
137 /**
138  * @brief Get the row count of gallery_media.
139  * @param mediaType - 0 all, 1 picture, 3 video
140  */
GetGalleryMediaAllRestoreCount(SearchCondition searchCondition)141 int32_t GalleryMediaCountStatistic::GetGalleryMediaAllRestoreCount(SearchCondition searchCondition)
142 {
143     CHECK_AND_RETURN_RET_LOG(this->galleryRdb_ != nullptr, 0, "Media_Restore: galleryRdb_ is null.");
144     int32_t mediaType = searchCondition.GetMediaType();
145     int32_t hiddenType = searchCondition.GetHiddenType();
146     int32_t trashedType = searchCondition.GetTrashedType();
147     int32_t cloudType = searchCondition.GetCloudType();
148     int32_t favoriteType = searchCondition.GetFavoriteType();
149     int32_t burstType = searchCondition.GetBurstType();
150     bool hasLowQualityImage = this->HasLowQualityImage();
151     int32_t hasLowQualityImageFlag = hasLowQualityImage == true ? 1 : 0;
152     int32_t shouldIncludeSdFlag = this->shouldIncludeSd_ == true ? 1 : 0;
153     std::vector<NativeRdb::ValueObject> params = {hasLowQualityImageFlag,
154         shouldIncludeSdFlag,
155         mediaType,
156         mediaType,
157         hiddenType,
158         hiddenType,
159         hiddenType,
160         trashedType,
161         trashedType,
162         trashedType,
163         cloudType,
164         cloudType,
165         cloudType,
166         favoriteType,
167         favoriteType,
168         favoriteType,
169         burstType,
170         burstType,
171         burstType};
172     return this->GetCount(this->SQL_GALLERY_MEDIA_QUERY_COUNT, params);
173 }
174 
QueryGalleryCloneCount()175 int32_t GalleryMediaCountStatistic::QueryGalleryCloneCount()
176 {
177     static string QUERY_GALLERY_CLONE_COUNT =
178         string("SELECT count(1) AS count FROM gallery_media WHERE local_media_id = -3 AND _size > 0 ") +
179         "AND COALESCE(storage_id, 0) IN (0, 65537) AND relative_bucket_id NOT IN ( " +
180         "SELECT DISTINCT relative_bucket_id FROM garbage_album WHERE type = 1)";
181     return BackupDatabaseUtils::QueryInt(this->galleryRdb_, QUERY_GALLERY_CLONE_COUNT, CUSTOM_COUNT);
182 }
183 
184 /**
185  * @brief Get the row count of gallery_media storage in SD card.
186  * @param mediaType - 0 all, 1 picture, 3 video
187  */
QueryGallerySdCardCount(SearchCondition searchCondition)188 int32_t GalleryMediaCountStatistic::QueryGallerySdCardCount(SearchCondition searchCondition)
189 {
190     CHECK_AND_RETURN_RET_LOG(this->galleryRdb_ != nullptr, 0, "Media_Restore: galleryRdb_ is null.");
191     int32_t mediaType = searchCondition.GetMediaType();
192     int32_t hiddenType = searchCondition.GetHiddenType();
193     int32_t trashedType = searchCondition.GetTrashedType();
194     int32_t cloudType = searchCondition.GetCloudType();
195     int32_t favoriteType = searchCondition.GetFavoriteType();
196     int32_t burstType = searchCondition.GetBurstType();
197     std::vector<NativeRdb::ValueObject> params = {mediaType,
198         mediaType,
199         hiddenType,
200         hiddenType,
201         hiddenType,
202         trashedType,
203         trashedType,
204         trashedType,
205         cloudType,
206         cloudType,
207         cloudType,
208         favoriteType,
209         favoriteType,
210         favoriteType,
211         burstType,
212         burstType,
213         burstType};
214     return this->GetCount(this->SQL_QUERY_GALLERY_SD_CARD_COUNT, params);
215 }
216 
217 /**
218  * @brief Get the row count of gallery_media.
219  * @param searchType - 0 all, 1 cloud
220  * @param mediaType - 0 all, 1 picture, 3 video
221  */
QueryAlbumAllVideoCount(SearchCondition searchCondition)222 int32_t GalleryMediaCountStatistic::QueryAlbumAllVideoCount(SearchCondition searchCondition)
223 {
224     CHECK_AND_RETURN_RET_LOG(this->galleryRdb_ != nullptr, 0, "Media_Restore: galleryRdb_ is null.");
225     int32_t mediaType = searchCondition.GetMediaType();
226     int32_t hiddenType = searchCondition.GetHiddenType();
227     int32_t trashedType = searchCondition.GetTrashedType();
228     int32_t cloudType = searchCondition.GetCloudType();
229     int32_t favoriteType = searchCondition.GetFavoriteType();
230     int32_t burstType = searchCondition.GetBurstType();
231     std::vector<NativeRdb::ValueObject> params = {mediaType,
232         mediaType,
233         hiddenType,
234         hiddenType,
235         hiddenType,
236         trashedType,
237         trashedType,
238         trashedType,
239         cloudType,
240         cloudType,
241         cloudType,
242         favoriteType,
243         favoriteType,
244         favoriteType,
245         burstType,
246         burstType,
247         burstType};
248     return this->GetCount(this->SQL_QUERY_GALLERY_MEDIA_ALL_VIDEO_COUNT, params);
249 }
250 
251 /**
252  * @brief Get the row count of gallery_media.
253  * @param searchType - 0 all, 1 cloud
254  * @param mediaType - 0 all, 1 picture, 3 video
255  */
QueryLiveCount(int32_t searchType,int32_t mediaType)256 int32_t GalleryMediaCountStatistic::QueryLiveCount(int32_t searchType, int32_t mediaType)
257 {
258     CHECK_AND_RETURN_RET_LOG(this->galleryRdb_ != nullptr, 0, "Media_Restore: galleryRdb_ is null.");
259     std::vector<NativeRdb::ValueObject> params = {searchType, mediaType, mediaType};
260     return this->GetCount(this->SQL_QUERY_LIVE_COUNT, params);
261 }
262 
263 /**
264  * @brief Get the row count of gallery_media.
265  * @param searchType - 0 all, 1 cloud
266  * @param mediaType - 0 all, 1 picture, 3 video
267  */
QueryTempCount(int32_t searchType,int32_t mediaType)268 int32_t GalleryMediaCountStatistic::QueryTempCount(int32_t searchType, int32_t mediaType)
269 {
270     CHECK_AND_RETURN_RET_LOG(this->galleryRdb_ != nullptr, 0, "Media_Restore: galleryRdb_ is null.");
271     std::vector<NativeRdb::ValueObject> params = {searchType, mediaType, mediaType};
272     return this->GetCount(this->SQL_QUERY_TEMP_COUNT, params);
273 }
274 
275 /**
276  * @brief Get the row count of gallery_media.
277  * @param searchType - 0 all, 1 cloud
278  * @param mediaType - 0 all, 1 picture, 3 video
279  */
QueryAlbumCountByName(const std::string & albumName,SearchCondition searchCondition)280 std::vector<AlbumStatisticInfo> GalleryMediaCountStatistic::QueryAlbumCountByName(
281     const std::string &albumName, SearchCondition searchCondition)
282 {
283     CHECK_AND_RETURN_RET_LOG(this->galleryRdb_ != nullptr, {}, "Media_Restore: galleryRdb_ is null.");
284     int32_t mediaType = searchCondition.GetMediaType();
285     int32_t hiddenType = searchCondition.GetHiddenType();
286     int32_t trashedType = searchCondition.GetTrashedType();
287     int32_t cloudType = searchCondition.GetCloudType();
288     int32_t favoriteType = searchCondition.GetFavoriteType();
289     int32_t burstType = searchCondition.GetBurstType();
290     std::vector<NativeRdb::ValueObject> params = {albumName,
291         mediaType,
292         mediaType,
293         hiddenType,
294         hiddenType,
295         hiddenType,
296         trashedType,
297         trashedType,
298         trashedType,
299         cloudType,
300         cloudType,
301         cloudType,
302         favoriteType,
303         favoriteType,
304         favoriteType,
305         burstType,
306         burstType,
307         burstType};
308     auto resultSet = this->galleryRdb_->QuerySql(this->SQL_QUERY_ALBUM_COUNT_BY_NAME, params);
309     CHECK_AND_RETURN_RET(resultSet != nullptr, {});
310     std::vector<AlbumStatisticInfo> infoList;
311     while (resultSet->GoToNextRow() == NativeRdb::E_OK) {
312         AlbumStatisticInfo info;
313         info.count = GetInt32Val("count", resultSet);
314         info.lPath = GetStringVal("lPath", resultSet);
315         info.albumName = GetStringVal("albumName", resultSet);
316         infoList.emplace_back(info);
317     }
318     resultSet->Close();
319     return infoList;
320 }
321 
322 /**
323  * @brief Get the row count of gallery_media.
324  * @param searchType - 0 all, 1 cloud
325  * @param mediaType - 0 all, 1 picture, 3 video
326  */
QueryAlbumCountByLPath(const std::string & lPath,SearchCondition searchCondition)327 std::vector<AlbumStatisticInfo> GalleryMediaCountStatistic::QueryAlbumCountByLPath(
328     const std::string &lPath, SearchCondition searchCondition)
329 {
330     CHECK_AND_RETURN_RET_LOG(this->galleryRdb_ != nullptr, {}, "Media_Restore: galleryRdb_ is null.");
331     int32_t mediaType = searchCondition.GetMediaType();
332     int32_t hiddenType = searchCondition.GetHiddenType();
333     int32_t trashedType = searchCondition.GetTrashedType();
334     int32_t cloudType = searchCondition.GetCloudType();
335     int32_t favoriteType = searchCondition.GetFavoriteType();
336     int32_t burstType = searchCondition.GetBurstType();
337     std::vector<NativeRdb::ValueObject> params = {lPath,
338         mediaType,
339         mediaType,
340         hiddenType,
341         hiddenType,
342         hiddenType,
343         trashedType,
344         trashedType,
345         trashedType,
346         cloudType,
347         cloudType,
348         cloudType,
349         favoriteType,
350         favoriteType,
351         favoriteType,
352         burstType,
353         burstType,
354         burstType};
355     auto resultSet = this->galleryRdb_->QuerySql(this->SQL_QUERY_ALBUM_COUNT_BY_LPATH, params);
356     CHECK_AND_RETURN_RET(resultSet != nullptr, {});
357     std::vector<AlbumStatisticInfo> infoList;
358     while (resultSet->GoToNextRow() == NativeRdb::E_OK) {
359         AlbumStatisticInfo info;
360         info.count = GetInt32Val("count", resultSet);
361         info.albumName = GetStringVal("albumName", resultSet);
362         info.lPath = GetStringVal("lPath", resultSet);
363         infoList.emplace_back(info);
364     }
365     resultSet->Close();
366     return infoList;
367 }
368 
HasLowQualityImage()369 bool GalleryMediaCountStatistic::HasLowQualityImage()
370 {
371     std::string sql = "SELECT count(1) AS count FROM gallery_media WHERE (local_media_id != -1) AND \
372         (COALESCE(storage_id, 0) IN (0, 65537)) AND relative_bucket_id NOT IN (SELECT DISTINCT relative_bucket_id FROM \
373         garbage_album WHERE type = 1) AND _size = 0 AND photo_quality = 0";
374     int count = BackupDatabaseUtils::QueryInt(galleryRdb_, sql, CUSTOM_COUNT);
375     MEDIA_INFO_LOG("HasLowQualityImage count:%{public}d", count);
376     return count > 0;
377 }
378 
QueryGalleryAppTwinDataCount()379 int32_t GalleryMediaCountStatistic::QueryGalleryAppTwinDataCount()
380 {
381     std::string sql =
382         "SELECT count(1) AS count FROM gallery_media WHERE _data LIKE '/storage/emulated/%' AND "
383         "CAST (substr(_data, length('/storage/emulated/') + 1, 3) AS INTEGER) BETWEEN 128 AND 147 AND _size > 0";
384     return BackupDatabaseUtils::QueryInt(galleryRdb_, sql, CUSTOM_COUNT);
385 }
386 
QueryGalleryOnlyHDCDataCount()387 int32_t GalleryMediaCountStatistic::QueryGalleryOnlyHDCDataCount()
388 {
389     return BackupDatabaseUtils::QueryInt(galleryRdb_, SQL_ONLY_HDC_META_QUERY_COUNT, CUSTOM_COUNT);
390 }
391 
QueryGallerySizeUnnormalDataCount()392 int32_t GalleryMediaCountStatistic::QueryGallerySizeUnnormalDataCount()
393 {
394     return BackupDatabaseUtils::QueryInt(galleryRdb_, SQL_SIZE_UNNORMAL_META_QUERY_COUNT, CUSTOM_COUNT);
395 }
396 
GetAllStatInfo()397 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetAllStatInfo()
398 {
399     AlbumMediaStatisticInfo info;
400     info.sceneCode = this->sceneCode_;
401     info.taskId = this->taskId_;
402     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
403     // build the statistic info.
404     info.totalCount = this->QueryGalleryAllCount(SearchCondition());
405     info.imageCount = this->QueryGalleryAllCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
406     info.videoCount = this->QueryGalleryAllCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
407     info.hiddenCount = this->QueryGalleryAllCount(SearchCondition().SetHiddenType(DUAL_HIDDEN_TYPE_HIDDEN));
408     info.trashedCount = this->QueryGalleryAllCount(SearchCondition().SetTrashedType(DUAL_TRASHED_TYPE_TRASHED));
409     info.cloudCount = this->QueryGalleryAllCount(SearchCondition().SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
410     info.favoriteCount = this->QueryGalleryAllCount(SearchCondition().SetFavoriteType(DUAL_FAVORITE_TYPE_FAVORITE));
411     info.burstTotalCount = this->QueryGalleryAllCount(SearchCondition().SetBurstType(DUAL_BURST_TYPE_ALL));
412     info.burstCoverCount = this->QueryGalleryAllCount(SearchCondition().SetBurstType(DUAL_BURST_TYPE_COVER));
413     // build the album name.
414     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
415     int64_t costTime = endTime - startTime;
416     std::string albumName = "ALL";
417     std::string lPath = "";
418     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
419     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
420     info.albumName = AlbumNameInfo()
421                          .SetAlbumName(albumName)
422                          .SetLPath(lPath)
423                          .SetCostTime(costTime)
424                          .SetPeriod(period)
425                          .SetDbType(dbType)
426                          .ToString();
427     return info;
428 }
429 
GetAllImageStatInfo()430 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetAllImageStatInfo()
431 {
432     AlbumMediaStatisticInfo info;
433     info.sceneCode = this->sceneCode_;
434     info.taskId = this->taskId_;
435     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
436     // build the statistic info.
437     info.totalCount = this->QueryGalleryAllCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
438     info.imageCount = this->QueryGalleryAllCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
439     info.videoCount = 0;
440     info.hiddenCount = this->QueryGalleryAllCount(
441         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetHiddenType(DUAL_HIDDEN_TYPE_HIDDEN));
442     info.trashedCount = this->QueryGalleryAllCount(
443         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetTrashedType(DUAL_TRASHED_TYPE_TRASHED));
444     info.cloudCount = this->QueryGalleryAllCount(
445         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
446     info.favoriteCount = this->QueryGalleryAllCount(
447         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetFavoriteType(DUAL_FAVORITE_TYPE_FAVORITE));
448     info.burstTotalCount = this->QueryGalleryAllCount(
449         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetBurstType(DUAL_BURST_TYPE_ALL));
450     info.burstCoverCount = this->QueryGalleryAllCount(
451         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetBurstType(DUAL_BURST_TYPE_COVER));
452     // build the album name.
453     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
454     int64_t costTime = endTime - startTime;
455     std::string albumName = "ALL_IMAGE";
456     std::string lPath = "";
457     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
458     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
459     info.albumName = AlbumNameInfo()
460                          .SetAlbumName(albumName)
461                          .SetLPath(lPath)
462                          .SetCostTime(costTime)
463                          .SetPeriod(period)
464                          .SetDbType(dbType)
465                          .ToString();
466     return info;
467 }
468 
GetAllVideoStatInfo()469 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetAllVideoStatInfo()
470 {
471     AlbumMediaStatisticInfo info;
472     info.sceneCode = this->sceneCode_;
473     info.taskId = this->taskId_;
474     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
475     // build the statistic info.
476     info.totalCount = this->QueryGalleryAllCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
477     info.imageCount = 0;
478     info.videoCount = this->QueryGalleryAllCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
479     info.hiddenCount = this->QueryGalleryAllCount(
480         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO).SetHiddenType(DUAL_HIDDEN_TYPE_HIDDEN));
481     info.trashedCount = this->QueryGalleryAllCount(
482         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO).SetTrashedType(DUAL_TRASHED_TYPE_TRASHED));
483     info.cloudCount = this->QueryGalleryAllCount(
484         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO).SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
485     info.favoriteCount = this->QueryGalleryAllCount(
486         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO).SetFavoriteType(DUAL_FAVORITE_TYPE_FAVORITE));
487     info.burstTotalCount = 0;
488     info.burstCoverCount = 0;
489     // build the album name.
490     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
491     int64_t costTime = endTime - startTime;
492     std::string albumName = "ALL_VIDEO";
493     std::string lPath = "";
494     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
495     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
496     info.albumName = AlbumNameInfo()
497                          .SetAlbumName(albumName)
498                          .SetLPath(lPath)
499                          .SetCostTime(costTime)
500                          .SetPeriod(period)
501                          .SetDbType(dbType)
502                          .ToString();
503     return info;
504 }
505 
GetAllRestoreStatInfo()506 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetAllRestoreStatInfo()
507 {
508     AlbumMediaStatisticInfo info;
509     info.sceneCode = this->sceneCode_;
510     info.taskId = this->taskId_;
511     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
512     // build the statistic info.
513     info.totalCount = this->GetGalleryMediaAllRestoreCount(SearchCondition());
514     info.imageCount = this->GetGalleryMediaAllRestoreCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
515     info.videoCount = this->GetGalleryMediaAllRestoreCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
516     info.hiddenCount = this->GetGalleryMediaAllRestoreCount(SearchCondition().SetHiddenType(DUAL_HIDDEN_TYPE_HIDDEN));
517     info.trashedCount =
518         this->GetGalleryMediaAllRestoreCount(SearchCondition().SetTrashedType(DUAL_TRASHED_TYPE_TRASHED));
519     info.cloudCount = this->GetGalleryMediaAllRestoreCount(SearchCondition().SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
520     info.favoriteCount =
521         this->GetGalleryMediaAllRestoreCount(SearchCondition().SetFavoriteType(DUAL_FAVORITE_TYPE_FAVORITE));
522     info.burstTotalCount = this->GetGalleryMediaAllRestoreCount(SearchCondition().SetBurstType(DUAL_BURST_TYPE_ALL));
523     info.burstCoverCount = this->GetGalleryMediaAllRestoreCount(SearchCondition().SetBurstType(DUAL_BURST_TYPE_COVER));
524     // build the album name.
525     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
526     int64_t costTime = endTime - startTime;
527     std::string albumName = "ALL_RESTORE";
528     std::string lPath = "";
529     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
530     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
531     info.albumName = AlbumNameInfo()
532                          .SetAlbumName(albumName)
533                          .SetLPath(lPath)
534                          .SetCostTime(costTime)
535                          .SetPeriod(period)
536                          .SetDbType(dbType)
537                          .ToString();
538     return info;
539 }
540 
GetAllRestoreImageStatInfo()541 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetAllRestoreImageStatInfo()
542 {
543     AlbumMediaStatisticInfo info;
544     info.sceneCode = this->sceneCode_;
545     info.taskId = this->taskId_;
546     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
547     // build the statistic info.
548     info.totalCount = this->GetGalleryMediaAllRestoreCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
549     info.imageCount = this->GetGalleryMediaAllRestoreCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
550     info.videoCount = 0;
551     info.hiddenCount = this->GetGalleryMediaAllRestoreCount(
552         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetHiddenType(DUAL_HIDDEN_TYPE_HIDDEN));
553     info.trashedCount = this->GetGalleryMediaAllRestoreCount(
554         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetTrashedType(DUAL_TRASHED_TYPE_TRASHED));
555     info.cloudCount = this->GetGalleryMediaAllRestoreCount(
556         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
557     info.favoriteCount = this->GetGalleryMediaAllRestoreCount(
558         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetFavoriteType(DUAL_FAVORITE_TYPE_FAVORITE));
559     info.burstTotalCount = this->GetGalleryMediaAllRestoreCount(
560         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetBurstType(DUAL_BURST_TYPE_ALL));
561     info.burstCoverCount = this->GetGalleryMediaAllRestoreCount(
562         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE).SetBurstType(DUAL_BURST_TYPE_COVER));
563     // build the album name.
564     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
565     int64_t costTime = endTime - startTime;
566     std::string albumName = "ALL_RESTORE_IMAGE";
567     std::string lPath = "";
568     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
569     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
570     info.albumName = AlbumNameInfo()
571                          .SetAlbumName(albumName)
572                          .SetLPath(lPath)
573                          .SetCostTime(costTime)
574                          .SetPeriod(period)
575                          .SetDbType(dbType)
576                          .ToString();
577     return info;
578 }
579 
GetAllRestoreVideoStatInfo()580 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetAllRestoreVideoStatInfo()
581 {
582     AlbumMediaStatisticInfo info;
583     info.sceneCode = this->sceneCode_;
584     info.taskId = this->taskId_;
585     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
586     // build the statistic info.
587     info.totalCount = this->GetGalleryMediaAllRestoreCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
588     info.imageCount = 0;
589     info.videoCount = this->GetGalleryMediaAllRestoreCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
590     info.hiddenCount = this->GetGalleryMediaAllRestoreCount(
591         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO).SetHiddenType(DUAL_HIDDEN_TYPE_HIDDEN));
592     info.trashedCount = this->GetGalleryMediaAllRestoreCount(
593         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO).SetTrashedType(DUAL_TRASHED_TYPE_TRASHED));
594     info.cloudCount = this->GetGalleryMediaAllRestoreCount(
595         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO).SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
596     info.favoriteCount = this->GetGalleryMediaAllRestoreCount(
597         SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO).SetFavoriteType(DUAL_FAVORITE_TYPE_FAVORITE));
598     info.burstTotalCount = 0;
599     info.burstCoverCount = 0;
600     // build the album name.
601     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
602     int64_t costTime = endTime - startTime;
603     std::string albumName = "ALL_RESTORE_VIDEO";
604     std::string lPath = "";
605     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
606     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
607     info.albumName = AlbumNameInfo()
608                          .SetAlbumName(albumName)
609                          .SetLPath(lPath)
610                          .SetCostTime(costTime)
611                          .SetPeriod(period)
612                          .SetDbType(dbType)
613                          .ToString();
614     return info;
615 }
616 
GetSdCardStatInfo()617 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetSdCardStatInfo()
618 {
619     AlbumMediaStatisticInfo info;
620     info.sceneCode = this->sceneCode_;
621     info.taskId = this->taskId_;
622     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
623     // build the statistic info.
624     info.totalCount = this->QueryGallerySdCardCount(SearchCondition());
625     info.imageCount = this->QueryGallerySdCardCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
626     info.videoCount = this->QueryGallerySdCardCount(SearchCondition().SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
627     info.hiddenCount = this->QueryGallerySdCardCount(SearchCondition().SetHiddenType(DUAL_HIDDEN_TYPE_HIDDEN));
628     info.trashedCount = this->QueryGallerySdCardCount(SearchCondition().SetTrashedType(DUAL_TRASHED_TYPE_TRASHED));
629     info.cloudCount = this->QueryGallerySdCardCount(SearchCondition().SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
630     info.favoriteCount = this->QueryGallerySdCardCount(SearchCondition().SetFavoriteType(DUAL_FAVORITE_TYPE_FAVORITE));
631     info.burstTotalCount = this->QueryGallerySdCardCount(SearchCondition().SetBurstType(DUAL_BURST_TYPE_ALL));
632     info.burstCoverCount = this->QueryGallerySdCardCount(SearchCondition().SetBurstType(DUAL_BURST_TYPE_COVER));
633     // build the album name.
634     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
635     int64_t costTime = endTime - startTime;
636     std::string albumName = "SD_CARD";
637     std::string lPath = "";
638     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
639     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
640     info.albumName = AlbumNameInfo()
641                          .SetAlbumName(albumName)
642                          .SetLPath(lPath)
643                          .SetCostTime(costTime)
644                          .SetPeriod(period)
645                          .SetDbType(dbType)
646                          .ToString();
647     return info;
648 }
649 
GetDuplicateStatInfo()650 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetDuplicateStatInfo()
651 {
652     int32_t duplicateDataCount;
653     int32_t duplicateDataTotal;
654     BackupDatabaseUtils::QueryGalleryDuplicateDataCount(this->galleryRdb_, duplicateDataCount, duplicateDataTotal);
655     AlbumMediaStatisticInfo info;
656     info.sceneCode = this->sceneCode_;
657     info.taskId = this->taskId_;
658     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
659     // build the statistic info.
660     info.totalCount = duplicateDataTotal;
661     // build the album name.
662     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
663     int64_t costTime = endTime - startTime;
664     std::string albumName = "DUPLICATE";
665     std::string lPath = "";
666     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
667     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
668     info.albumName = AlbumNameInfo()
669                          .SetAlbumName(albumName)
670                          .SetLPath(lPath)
671                          .SetCostTime(costTime)
672                          .SetPeriod(period)
673                          .SetDbType(dbType)
674                          .ToString();
675     return info;
676 }
677 
GetAppTwinStatInfo()678 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetAppTwinStatInfo()
679 {
680     AlbumMediaStatisticInfo info;
681     info.sceneCode = this->sceneCode_;
682     info.taskId = this->taskId_;
683     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
684     // build the statistic info.
685     info.totalCount = this->QueryGalleryAppTwinDataCount();
686     // build the album name.
687     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
688     int64_t costTime = endTime - startTime;
689     std::string albumName = "APP_TWIN";
690     std::string lPath = "";
691     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
692     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
693     info.albumName = AlbumNameInfo()
694                          .SetAlbumName(albumName)
695                          .SetLPath(lPath)
696                          .SetCostTime(costTime)
697                          .SetPeriod(period)
698                          .SetDbType(dbType)
699                          .ToString();
700     return info;
701 }
702 
GetOnlyHDCInfo()703 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetOnlyHDCInfo()
704 {
705     AlbumMediaStatisticInfo info;
706     info.sceneCode = this->sceneCode_;
707     info.taskId = this->taskId_;
708     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
709     // build the statistic info.
710     info.totalCount = this->QueryGalleryOnlyHDCDataCount();
711     // build the album name.
712     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
713     int64_t costTime = endTime - startTime;
714     std::string albumName = "ONLY_HDC";
715     std::string lPath = "";
716     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
717     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
718     info.albumName = AlbumNameInfo()
719                          .SetAlbumName(albumName)
720                          .SetLPath(lPath)
721                          .SetCostTime(costTime)
722                          .SetPeriod(period)
723                          .SetDbType(dbType)
724                          .ToString();
725     return info;
726 }
727 
GetSizeUnnormalInfo()728 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetSizeUnnormalInfo()
729 {
730     AlbumMediaStatisticInfo info;
731     info.sceneCode = this->sceneCode_;
732     info.taskId = this->taskId_;
733     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
734     // build the statistic info.
735     info.totalCount = this->QueryGallerySizeUnnormalDataCount();
736     // build the album name.
737     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
738     int64_t costTime = endTime - startTime;
739     std::string albumName = "SIZE_UNNORMAL";
740     std::string lPath = "";
741     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
742     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
743     info.albumName = AlbumNameInfo()
744                          .SetAlbumName(albumName)
745                          .SetLPath(lPath)
746                          .SetCostTime(costTime)
747                          .SetPeriod(period)
748                          .SetDbType(dbType)
749                          .ToString();
750     return info;
751 }
752 
GetImageAlbumInfo()753 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetImageAlbumInfo()
754 {
755     AlbumMediaStatisticInfo info;
756     info.sceneCode = this->sceneCode_;
757     info.taskId = this->taskId_;
758     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
759     // build the statistic info.
760     SearchCondition defaultCondition =
761         SearchCondition().SetHiddenType(DUAL_HIDDEN_TYPE_NOT_HIDDEN).SetTrashedType(DUAL_TRASHED_TYPE_NOT_TRASHED);
762     info.totalCount = this->QueryAlbumGalleryCount(SearchCondition(defaultCondition));
763     info.imageCount =
764         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
765     info.videoCount =
766         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
767     info.hiddenCount = 0;
768     info.trashedCount = 0;
769     info.cloudCount =
770         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
771     info.favoriteCount =
772         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetFavoriteType(DUAL_FAVORITE_TYPE_FAVORITE));
773     info.burstTotalCount =
774         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetBurstType(DUAL_BURST_TYPE_ALL));
775     info.burstCoverCount =
776         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetBurstType(DUAL_BURST_TYPE_COVER));
777     // build the album name.
778     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
779     int64_t costTime = endTime - startTime;
780     std::string albumName = "所有照片";
781     std::string lPath = "";
782     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
783     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
784     info.albumName = AlbumNameInfo()
785                          .SetAlbumName(albumName)
786                          .SetLPath(lPath)
787                          .SetCostTime(costTime)
788                          .SetPeriod(period)
789                          .SetDbType(dbType)
790                          .ToString();
791     return info;
792 }
793 
GetVideoAlbumInfo()794 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetVideoAlbumInfo()
795 {
796     AlbumMediaStatisticInfo info;
797     info.sceneCode = this->sceneCode_;
798     info.taskId = this->taskId_;
799     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
800     // build the statistic info.
801     SearchCondition defaultCondition = SearchCondition()
802                                            .SetMediaType(DUAL_MEDIA_TYPE_VIDEO)
803                                            .SetHiddenType(DUAL_HIDDEN_TYPE_NOT_HIDDEN)
804                                            .SetTrashedType(DUAL_TRASHED_TYPE_NOT_TRASHED);
805     info.totalCount = this->QueryAlbumAllVideoCount(SearchCondition(defaultCondition));
806     info.imageCount = 0;
807     info.videoCount = this->QueryAlbumAllVideoCount(SearchCondition(defaultCondition));
808     info.hiddenCount = 0;
809     info.trashedCount = 0;
810     info.cloudCount =
811         this->QueryAlbumAllVideoCount(SearchCondition(defaultCondition).SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
812     info.favoriteCount =
813         this->QueryAlbumAllVideoCount(SearchCondition(defaultCondition).SetFavoriteType(DUAL_FAVORITE_TYPE_FAVORITE));
814     info.burstTotalCount = 0;
815     info.burstCoverCount = 0;
816     // build the album name.
817     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
818     int64_t costTime = endTime - startTime;
819     std::string albumName = "视频";
820     std::string lPath = "";
821     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
822     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
823     info.albumName = AlbumNameInfo()
824                          .SetAlbumName(albumName)
825                          .SetLPath(lPath)
826                          .SetCostTime(costTime)
827                          .SetPeriod(period)
828                          .SetDbType(dbType)
829                          .ToString();
830     return info;
831 }
832 
GetFavoriteAlbumStatInfo()833 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetFavoriteAlbumStatInfo()
834 {
835     AlbumMediaStatisticInfo info;
836     info.sceneCode = this->sceneCode_;
837     info.taskId = this->taskId_;
838     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
839     // build the statistic info.
840     SearchCondition defaultCondition = SearchCondition()
841                                            .SetHiddenType(DUAL_HIDDEN_TYPE_NOT_HIDDEN)
842                                            .SetTrashedType(DUAL_TRASHED_TYPE_NOT_TRASHED)
843                                            .SetFavoriteType(DUAL_FAVORITE_TYPE_FAVORITE);
844     info.totalCount = this->QueryAlbumGalleryCount(SearchCondition(defaultCondition));
845     info.imageCount =
846         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
847     info.videoCount =
848         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
849     info.hiddenCount = 0;
850     info.trashedCount = 0;
851     info.cloudCount =
852         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
853     info.favoriteCount = this->QueryAlbumGalleryCount(SearchCondition(defaultCondition));
854     info.burstTotalCount =
855         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetBurstType(DUAL_BURST_TYPE_ALL));
856     info.burstCoverCount =
857         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetBurstType(DUAL_BURST_TYPE_COVER));
858     // build the album name.
859     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
860     int64_t costTime = endTime - startTime;
861     std::string albumName = "收藏";
862     std::string lPath = "";
863     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
864     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
865     info.albumName = AlbumNameInfo()
866                          .SetAlbumName(albumName)
867                          .SetLPath(lPath)
868                          .SetCostTime(costTime)
869                          .SetPeriod(period)
870                          .SetDbType(dbType)
871                          .ToString();
872     return info;
873 }
874 
GetTrashedAlbumStatInfo()875 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetTrashedAlbumStatInfo()
876 {
877     AlbumMediaStatisticInfo info;
878     info.sceneCode = this->sceneCode_;
879     info.taskId = this->taskId_;
880     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
881     // build the statistic info.
882     SearchCondition defaultCondition =
883         SearchCondition().SetHiddenType(DUAL_HIDDEN_TYPE_NOT_HIDDEN).SetTrashedType(DUAL_TRASHED_TYPE_TRASHED);
884     info.totalCount = this->QueryAlbumGalleryCount(SearchCondition(defaultCondition));
885     info.imageCount =
886         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
887     info.videoCount =
888         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
889     info.hiddenCount = 0;
890     info.trashedCount = this->QueryAlbumGalleryCount(SearchCondition(defaultCondition));
891     info.cloudCount =
892         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
893     info.favoriteCount = 0;
894     info.burstTotalCount =
895         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetBurstType(DUAL_BURST_TYPE_ALL));
896     info.burstCoverCount =
897         this->QueryAlbumGalleryCount(SearchCondition(defaultCondition).SetBurstType(DUAL_BURST_TYPE_COVER));
898     // build the album name.
899     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
900     int64_t costTime = endTime - startTime;
901     std::string albumName = "回收站";
902     std::string lPath = "";
903     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
904     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
905     info.albumName = AlbumNameInfo()
906                          .SetAlbumName(albumName)
907                          .SetLPath(lPath)
908                          .SetCostTime(costTime)
909                          .SetPeriod(period)
910                          .SetDbType(dbType)
911                          .ToString();
912     return info;
913 }
914 
GetAlbumInfoByName(const std::string & albumName)915 std::vector<AlbumMediaStatisticInfo> GalleryMediaCountStatistic::GetAlbumInfoByName(const std::string &albumName)
916 {
917     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
918     // build the statistic info.
919     SearchCondition defaultCondition =
920         SearchCondition().SetHiddenType(DUAL_HIDDEN_TYPE_NOT_HIDDEN).SetTrashedType(DUAL_TRASHED_TYPE_NOT_TRASHED);
921     std::vector<AlbumStatisticInfo> totalCountInfoList =
922         this->QueryAlbumCountByName(albumName, SearchCondition(defaultCondition));
923     std::vector<AlbumStatisticInfo> imageCountInfoList =
924         this->QueryAlbumCountByName(albumName, SearchCondition(defaultCondition).SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
925     std::vector<AlbumStatisticInfo> videoCountInfoList =
926         this->QueryAlbumCountByName(albumName, SearchCondition(defaultCondition).SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
927     std::vector<AlbumStatisticInfo> cloudCountInfoList =
928         this->QueryAlbumCountByName(albumName, SearchCondition(defaultCondition).SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
929     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
930     int64_t costTime = endTime - startTime;
931     // Parse the statistic info.
932     std::unordered_map<std::string, AlbumMediaStatisticInfo> albumInfoMap;
933     StatisticProcessor()
934         .ParseTotalCount(albumInfoMap, totalCountInfoList)
935         .ParseImageCount(albumInfoMap, imageCountInfoList)
936         .ParseVideoCount(albumInfoMap, videoCountInfoList)
937         .ParseCloudCount(albumInfoMap, cloudCountInfoList);
938     std::vector<AlbumMediaStatisticInfo> albumInfoList;
939     for (const auto &iter : albumInfoMap) {
940         AlbumMediaStatisticInfo info = iter.second;
941         info.sceneCode = this->sceneCode_;
942         info.taskId = this->taskId_;
943         info.albumName = AlbumNameInfo()
944                              .SetAlbumName(info.albumName)
945                              .SetLPath(info.lPath)
946                              .SetCostTime(costTime)
947                              .SetPeriod(0)  // 0 - BEFORE, 1 - AFTER
948                              .SetDbType(0)  // 0 - GALLERY, 1 - MEDIA
949                              .ToString();
950         albumInfoList.emplace_back(info);
951     }
952     return albumInfoList;
953 }
954 
GetAlbumInfoByLPath(const std::string & lPath)955 std::vector<AlbumMediaStatisticInfo> GalleryMediaCountStatistic::GetAlbumInfoByLPath(const std::string &lPath)
956 {
957     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
958     // build the statistic info.
959     SearchCondition defaultCondition =
960         SearchCondition().SetHiddenType(DUAL_HIDDEN_TYPE_NOT_HIDDEN).SetTrashedType(DUAL_TRASHED_TYPE_NOT_TRASHED);
961     std::vector<AlbumStatisticInfo> totalCountInfoList =
962         this->QueryAlbumCountByLPath(lPath, SearchCondition(defaultCondition));
963     std::vector<AlbumStatisticInfo> imageCountInfoList =
964         this->QueryAlbumCountByLPath(lPath, SearchCondition(defaultCondition).SetMediaType(DUAL_MEDIA_TYPE_IMAGE));
965     std::vector<AlbumStatisticInfo> videoCountInfoList =
966         this->QueryAlbumCountByLPath(lPath, SearchCondition(defaultCondition).SetMediaType(DUAL_MEDIA_TYPE_VIDEO));
967     std::vector<AlbumStatisticInfo> cloudCountInfoList =
968         this->QueryAlbumCountByLPath(lPath, SearchCondition(defaultCondition).SetCloudType(DUAL_CLOUD_TYPE_CLOUD));
969     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
970     int64_t costTime = endTime - startTime;
971     // Parse the statistic info.
972     std::unordered_map<std::string, AlbumMediaStatisticInfo> albumInfoMap;
973     StatisticProcessor()
974         .ParseTotalCount(albumInfoMap, totalCountInfoList)
975         .ParseImageCount(albumInfoMap, imageCountInfoList)
976         .ParseVideoCount(albumInfoMap, videoCountInfoList)
977         .ParseCloudCount(albumInfoMap, cloudCountInfoList);
978     std::vector<AlbumMediaStatisticInfo> albumInfoList;
979     for (const auto &iter : albumInfoMap) {
980         AlbumMediaStatisticInfo info = iter.second;
981         info.sceneCode = this->sceneCode_;
982         info.taskId = this->taskId_;
983         info.albumName = AlbumNameInfo()
984                              .SetAlbumName(info.albumName)
985                              .SetLPath(info.lPath)
986                              .SetCostTime(costTime)
987                              .SetPeriod(0)  // 0 - BEFORE, 1 - AFTER
988                              .SetDbType(0)  // 0 - GALLERY, 1 - MEDIA
989                              .ToString();
990         albumInfoList.emplace_back(info);
991     }
992     return albumInfoList;
993 }
994 
GetGalleryAlbumCountInfo()995 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetGalleryAlbumCountInfo()
996 {
997     AlbumMediaStatisticInfo info;
998     info.sceneCode = this->sceneCode_;
999     info.taskId = this->taskId_;
1000     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
1001     // build the statistic info.
1002     info.totalCount = this->GetCount(this->SQL_QUERY_GALLERY_ALBUM_COUNT);
1003     // build the album name.
1004     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
1005     int64_t costTime = endTime - startTime;
1006     std::string albumName = "相册数量";
1007     std::string lPath = "";
1008     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
1009     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
1010     info.albumName = AlbumNameInfo()
1011                          .SetAlbumName(albumName)
1012                          .SetLPath(lPath)
1013                          .SetCostTime(costTime)
1014                          .SetPeriod(period)
1015                          .SetDbType(dbType)
1016                          .ToString();
1017     return info;
1018 }
1019 
GetLiveStatInfo()1020 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetLiveStatInfo()
1021 {
1022     AlbumMediaStatisticInfo info;
1023     info.sceneCode = this->sceneCode_;
1024     info.taskId = this->taskId_;
1025     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
1026     // build the statistic info.
1027     info.totalCount = this->QueryLiveCount(DUAL_SEARCH_TYPE_ALL, DUAL_MEDIA_TYPE_ALL);
1028     info.cloudCount = this->QueryLiveCount(DUAL_SEARCH_TYPE_CLOUD, DUAL_MEDIA_TYPE_ALL);
1029     // build the album name.
1030     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
1031     int64_t costTime = endTime - startTime;
1032     std::string albumName = "动态照片";
1033     std::string lPath = "";
1034     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
1035     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
1036     info.albumName = AlbumNameInfo()
1037                          .SetAlbumName(albumName)
1038                          .SetLPath(lPath)
1039                          .SetCostTime(costTime)
1040                          .SetPeriod(period)
1041                          .SetDbType(dbType)
1042                          .ToString();
1043     return info;
1044 }
1045 
GetTempInfo()1046 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetTempInfo()
1047 {
1048     AlbumMediaStatisticInfo info;
1049     info.sceneCode = this->sceneCode_;
1050     info.taskId = this->taskId_;
1051     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
1052     // build the statistic info.
1053     info.totalCount = this->QueryTempCount(DUAL_SEARCH_TYPE_ALL, DUAL_MEDIA_TYPE_ALL);
1054     info.imageCount = this->QueryTempCount(DUAL_SEARCH_TYPE_ALL, DUAL_MEDIA_TYPE_IMAGE);
1055     info.videoCount = this->QueryTempCount(DUAL_SEARCH_TYPE_ALL, DUAL_MEDIA_TYPE_VIDEO);
1056     info.cloudCount = this->QueryTempCount(DUAL_SEARCH_TYPE_CLOUD, DUAL_MEDIA_TYPE_ALL);
1057     // build the album name.
1058     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
1059     int64_t costTime = endTime - startTime;
1060     std::string albumName = "应用缓存文件";
1061     std::string lPath = "";
1062     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
1063     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
1064     info.albumName = AlbumNameInfo()
1065                          .SetAlbumName(albumName)
1066                          .SetLPath(lPath)
1067                          .SetCostTime(costTime)
1068                          .SetPeriod(period)
1069                          .SetDbType(dbType)
1070                          .ToString();
1071     return info;
1072 }
1073 
GetNotSyncInfo()1074 AlbumMediaStatisticInfo GalleryMediaCountStatistic::GetNotSyncInfo()
1075 {
1076     AlbumMediaStatisticInfo info;
1077     info.sceneCode = this->sceneCode_;
1078     info.taskId = this->taskId_;
1079     int64_t startTime = MediaFileUtils::UTCTimeMilliSeconds();
1080     // build the statistic info.
1081     info.totalCount = this->GetCount(SQL_QUERY_NOT_SYNC_COUNT);
1082     // build the album name.
1083     int64_t endTime = MediaFileUtils::UTCTimeMilliSeconds();
1084     int64_t costTime = endTime - startTime;
1085     std::string albumName = "媒体库未同步";
1086     std::string lPath = "";
1087     int32_t period = 0;  // 0 - BEFORE, 1 - AFTER
1088     int32_t dbType = 0;  // 0 - GALLERY, 1 - MEDIA
1089     info.albumName = AlbumNameInfo()
1090                          .SetAlbumName(albumName)
1091                          .SetLPath(lPath)
1092                          .SetCostTime(costTime)
1093                          .SetPeriod(period)
1094                          .SetDbType(dbType)
1095                          .ToString();
1096     return info;
1097 }
1098 }  // namespace OHOS::Media