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 #ifndef OHOS_MEDIA_BACKUP_GALLERY_MEDIA_COUNT_STATISTIC_H 16 #define OHOS_MEDIA_BACKUP_GALLERY_MEDIA_COUNT_STATISTIC_H 17 18 #include <string> 19 #include <vector> 20 21 #include "rdb_store.h" 22 #include "result_set_utils.h" 23 #include "media_backup_report_data_type.h" 24 25 namespace OHOS::Media { 26 class GalleryMediaCountStatistic { 27 public: SetGalleryRdb(std::shared_ptr<NativeRdb::RdbStore> galleryRdb)28 GalleryMediaCountStatistic &SetGalleryRdb(std::shared_ptr<NativeRdb::RdbStore> galleryRdb) 29 { 30 this->galleryRdb_ = galleryRdb; 31 return *this; 32 } SetSceneCode(int32_t sceneCode)33 GalleryMediaCountStatistic &SetSceneCode(int32_t sceneCode) 34 { 35 this->sceneCode_ = sceneCode; 36 return *this; 37 } SetShouldIncludeSd(bool shouldIncludeSd)38 GalleryMediaCountStatistic &SetShouldIncludeSd(bool shouldIncludeSd) 39 { 40 this->shouldIncludeSd_ = shouldIncludeSd; 41 return *this; 42 } SetTaskId(const std::string & taskId)43 GalleryMediaCountStatistic &SetTaskId(const std::string &taskId) 44 { 45 this->taskId_ = taskId; 46 return *this; 47 } 48 std::vector<AlbumMediaStatisticInfo> Load(); 49 50 private: 51 int32_t GetCount(const std::string &query); 52 int32_t QueryGalleryAllCount(SearchCondition searchCondition); 53 int32_t QueryAlbumGalleryCount(SearchCondition searchCondition); 54 int32_t GetGalleryMediaAllRestoreCount(SearchCondition searchCondition); 55 int32_t QueryGalleryCloneCount(); 56 int32_t QueryGallerySdCardCount(SearchCondition searchCondition); 57 bool HasLowQualityImage(); 58 int32_t QueryGalleryAppTwinDataCount(); 59 int32_t QueryAlbumAllVideoCount(SearchCondition searchCondition); 60 std::vector<AlbumStatisticInfo> QueryAlbumCountByName( 61 const std::string &albumName, SearchCondition searchCondition); 62 std::vector<AlbumStatisticInfo> QueryAlbumCountByLPath(const std::string &lPath, SearchCondition searchCondition); 63 int32_t QueryLiveCount(int32_t searchType, int32_t mediaType); 64 int32_t QueryTempCount(int32_t searchType, int32_t mediaType); 65 AlbumMediaStatisticInfo GetAllStatInfo(); 66 AlbumMediaStatisticInfo GetAllImageStatInfo(); 67 AlbumMediaStatisticInfo GetAllVideoStatInfo(); 68 AlbumMediaStatisticInfo GetAllRestoreStatInfo(); 69 AlbumMediaStatisticInfo GetAllRestoreImageStatInfo(); 70 AlbumMediaStatisticInfo GetAllRestoreVideoStatInfo(); 71 AlbumMediaStatisticInfo GetSdCardStatInfo(); 72 AlbumMediaStatisticInfo GetDuplicateStatInfo(); 73 AlbumMediaStatisticInfo GetAppTwinStatInfo(); 74 AlbumMediaStatisticInfo GetImageAlbumInfo(); 75 AlbumMediaStatisticInfo GetFavoriteAlbumStatInfo(); 76 AlbumMediaStatisticInfo GetTrashedAlbumStatInfo(); 77 std::vector<AlbumMediaStatisticInfo> GetAlbumInfoByName(const std::string &albumName); 78 std::vector<AlbumMediaStatisticInfo> GetAlbumInfoByLPath(const std::string &lPath); 79 AlbumMediaStatisticInfo GetGalleryAlbumCountInfo(); 80 AlbumMediaStatisticInfo GetVideoAlbumInfo(); 81 AlbumMediaStatisticInfo GetLiveStatInfo(); 82 AlbumMediaStatisticInfo GetTempInfo(); 83 AlbumMediaStatisticInfo GetNotSyncInfo(); 84 85 private: 86 std::shared_ptr<NativeRdb::RdbStore> galleryRdb_; 87 int32_t sceneCode_; 88 bool shouldIncludeSd_{false}; 89 std::string taskId_; 90 91 private: 92 const std::string SQL_QUERY_ALL_GALLERY_COUNT = "\ 93 SELECT COUNT(1) AS count \ 94 FROM gallery_media \ 95 WHERE (0 = ? OR media_type = ?) AND \ 96 (-1 = ? OR 0 = ? AND COALESCE(local_media_id, 0) <> -4 OR 1 = ? AND COALESCE(local_media_id, 0) = -4) AND \ 97 (-1 = ? OR 0 = ? AND COALESCE(recycleFlag, 0) = 0 OR 1 = ? AND COALESCE(recycleFlag, 0) <> 0) AND \ 98 (-1 = ? OR 0 = ? AND local_media_id <> -1 OR 1 = ? AND local_media_id = -1) AND \ 99 (-1 = ? OR 0 = ? AND COALESCE(is_hw_favorite, 0) <> 1 OR 1 = ? AND COALESCE(is_hw_favorite, 0) = 1) AND \ 100 (-1 = ? OR 0 = ? AND is_hw_burst IN (1, 2) OR 1 = ? AND is_hw_burst = 1) \ 101 ;"; 102 const std::string SQL_GALLERY_MEDIA_QUERY_COUNT = "\ 103 SELECT COUNT(1) AS count \ 104 FROM gallery_media \ 105 LEFT JOIN gallery_album \ 106 ON gallery_media.albumId=gallery_album.albumId \ 107 LEFT JOIN gallery_album AS album_v2 \ 108 ON gallery_media.relative_bucket_id = album_v2.relativeBucketId \ 109 WHERE (local_media_id != -1) AND \ 110 (relative_bucket_id IS NULL OR \ 111 relative_bucket_id NOT IN ( \ 112 SELECT DISTINCT relative_bucket_id \ 113 FROM garbage_album \ 114 WHERE type = 1 \ 115 ) \ 116 ) AND \ 117 (_size > 0 OR (1 = ? AND _size = 0 AND photo_quality = 0)) AND \ 118 _data NOT LIKE '/storage/emulated/0/Pictures/cloud/Imports%' AND \ 119 COALESCE(_data, '') <> '' AND \ 120 (1 = ? OR storage_id IN (0, 65537) ) AND \ 121 (0 = ? OR media_type = ?) AND \ 122 (-1 = ? OR 0 = ? AND COALESCE(local_media_id, 0) <> -4 OR 1 = ? AND COALESCE(local_media_id, 0) = -4) AND \ 123 (-1 = ? OR 0 = ? AND COALESCE(recycleFlag, 0) = 0 OR 1 = ? AND COALESCE(recycleFlag, 0) <> 0) AND \ 124 (-1 = ? OR 0 = ? AND local_media_id <> -1 OR 1 = ? AND local_media_id = -1) AND \ 125 (-1 = ? OR 0 = ? AND COALESCE(is_hw_favorite, 0) <> 1 OR 1 = ? AND COALESCE(is_hw_favorite, 0) = 1) AND \ 126 (-1 = ? OR 0 = ? AND is_hw_burst IN (1, 2) OR 1 = ? AND is_hw_burst = 1) \ 127 ;"; 128 const std::string SQL_QUERY_GALLERY_SD_CARD_COUNT = "\ 129 SELECT COUNT(1) AS count \ 130 FROM gallery_media \ 131 WHERE storage_id NOT IN (0, 65537) AND \ 132 _size > 0 AND \ 133 (0 = ? OR media_type = ?) AND \ 134 (-1 = ? OR 0 = ? AND COALESCE(local_media_id, 0) <> -4 OR 1 = ? AND COALESCE(local_media_id, 0) = -4) AND \ 135 (-1 = ? OR 0 = ? AND COALESCE(recycleFlag, 0) = 0 OR 1 = ? AND COALESCE(recycleFlag, 0) <> 0) AND \ 136 (-1 = ? OR 0 = ? AND local_media_id <> -1 OR 1 = ? AND local_media_id = -1) AND \ 137 (-1 = ? OR 0 = ? AND COALESCE(is_hw_favorite, 0) <> 1 OR 1 = ? AND COALESCE(is_hw_favorite, 0) = 1) AND \ 138 (-1 = ? OR 0 = ? AND is_hw_burst IN (1, 2) OR 1 = ? AND is_hw_burst = 1) \ 139 ;"; 140 const std::string SQL_QUERY_GALLERY_MEDIA_ALL_VIDEO_COUNT = "\ 141 SELECT COUNT(1) AS count \ 142 FROM gallery_media \ 143 INNER JOIN gallery_album \ 144 ON gallery_media.albumId = gallery_album.albumId OR \ 145 gallery_media.relative_bucket_id = gallery_album.relativeBucketId \ 146 WHERE LOWER(gallery_album.lPath) <> LOWER('/Pictures/Screenshots') AND \ 147 (COALESCE(is_hw_burst, 1) <> 2) AND \ 148 (0 = ? OR media_type = ?) AND \ 149 (-1 = ? OR 0 = ? AND COALESCE(local_media_id, 0) <> -4 OR 1 = ? AND COALESCE(local_media_id, 0) = -4) AND \ 150 (-1 = ? OR 0 = ? AND COALESCE(recycleFlag, 0) = 0 OR 1 = ? AND COALESCE(recycleFlag, 0) <> 0) AND \ 151 (-1 = ? OR 0 = ? AND local_media_id <> -1 OR 1 = ? AND local_media_id = -1) AND \ 152 (-1 = ? OR 0 = ? AND COALESCE(is_hw_favorite, 0) <> 1 OR 1 = ? AND COALESCE(is_hw_favorite, 0) = 1) AND \ 153 (-1 = ? OR 0 = ? AND is_hw_burst IN (1, 2) OR 1 = ? AND is_hw_burst = 1) \ 154 ;"; 155 const std::string SQL_QUERY_ALBUM_GALLERY_COUNT = "\ 156 SELECT COUNT(1) AS count \ 157 FROM gallery_media \ 158 WHERE (COALESCE(is_hw_burst, 1) <> 2) AND \ 159 (0 = ? OR media_type = ?) AND \ 160 (-1 = ? OR 0 = ? AND COALESCE(local_media_id, 0) <> -4 OR 1 = ? AND COALESCE(local_media_id, 0) = -4) AND \ 161 (-1 = ? OR 0 = ? AND COALESCE(recycleFlag, 0) = 0 OR 1 = ? AND COALESCE(recycleFlag, 0) <> 0) AND \ 162 (-1 = ? OR 0 = ? AND local_media_id <> -1 OR 1 = ? AND local_media_id = -1) AND \ 163 (-1 = ? OR 0 = ? AND COALESCE(is_hw_favorite, 0) <> 1 OR 1 = ? AND COALESCE(is_hw_favorite, 0) = 1) AND \ 164 (-1 = ? OR 0 = ? AND is_hw_burst IN (1, 2) OR 1 = ? AND is_hw_burst = 1) \ 165 ;"; 166 const std::string SQL_QUERY_ALBUM_COUNT_BY_NAME = "\ 167 SELECT album_plugin.lpath AS lPath, \ 168 album_plugin.album_name AS albumName, \ 169 COUNT(1) AS count \ 170 FROM gallery_media \ 171 INNER JOIN gallery_album \ 172 ON gallery_media.albumId = gallery_album.albumId OR \ 173 gallery_media.relative_bucket_id = gallery_album.relativeBucketId \ 174 INNER JOIN album_plugin \ 175 ON LOWER(gallery_album.lPath) = LOWER(album_plugin.lpath) \ 176 WHERE album_plugin.album_name = ? AND \ 177 (COALESCE(is_hw_burst, 1) <> 2) AND \ 178 (0 = ? OR media_type = ?) AND \ 179 (-1 = ? OR 0 = ? AND COALESCE(local_media_id, 0) <> -4 OR 1 = ? AND COALESCE(local_media_id, 0) = -4) AND \ 180 (-1 = ? OR 0 = ? AND COALESCE(recycleFlag, 0) = 0 OR 1 = ? AND COALESCE(recycleFlag, 0) <> 0) AND \ 181 (-1 = ? OR 0 = ? AND local_media_id <> -1 OR 1 = ? AND local_media_id = -1) AND \ 182 (-1 = ? OR 0 = ? AND COALESCE(is_hw_favorite, 0) <> 1 OR 1 = ? AND COALESCE(is_hw_favorite, 0) = 1) AND \ 183 (-1 = ? OR 0 = ? AND is_hw_burst IN (1, 2) OR 1 = ? AND is_hw_burst = 1) \ 184 GROUP BY album_plugin.lpath, album_plugin.album_name ;"; 185 const std::string SQL_QUERY_ALBUM_COUNT_BY_LPATH = "\ 186 SELECT gallery_album.lPath, \ 187 CASE WHEN COALESCE(album_plugin.album_name, '') <> '' THEN album_plugin.album_name \ 188 ELSE gallery_album.albumName \ 189 END AS albumName, \ 190 COUNT(1) AS count \ 191 FROM gallery_media \ 192 INNER JOIN gallery_album \ 193 ON gallery_media.albumId = gallery_album.albumId OR \ 194 gallery_media.relative_bucket_id = gallery_album.relativeBucketId \ 195 LEFT JOIN album_plugin \ 196 ON LOWER(gallery_album.lPath) = LOWER(album_plugin.lpath) \ 197 WHERE LOWER(gallery_album.lPath) = LOWER(?) AND \ 198 (COALESCE(is_hw_burst, 1) <> 2) AND \ 199 (0 = ? OR media_type = ?) AND \ 200 (-1 = ? OR 0 = ? AND COALESCE(local_media_id, 0) <> -4 OR 1 = ? AND COALESCE(local_media_id, 0) = -4) AND \ 201 (-1 = ? OR 0 = ? AND COALESCE(recycleFlag, 0) = 0 OR 1 = ? AND COALESCE(recycleFlag, 0) <> 0) AND \ 202 (-1 = ? OR 0 = ? AND local_media_id <> -1 OR 1 = ? AND local_media_id = -1) AND \ 203 (-1 = ? OR 0 = ? AND COALESCE(is_hw_favorite, 0) <> 1 OR 1 = ? AND COALESCE(is_hw_favorite, 0) = 1) AND \ 204 (-1 = ? OR 0 = ? AND is_hw_burst IN (1, 2) OR 1 = ? AND is_hw_burst = 1) \ 205 GROUP BY gallery_album.lPath, gallery_album.albumName ;"; 206 const std::string SQL_QUERY_GALLERY_ALBUM_COUNT = "\ 207 SELECT COUNT(1) AS count \ 208 FROM gallery_album \ 209 WHERE albumId IN \ 210 ( \ 211 SELECT DISTINCT albumId \ 212 FROM gallery_media \ 213 ) OR \ 214 relativeBucketId IN \ 215 ( \ 216 SELECT DISTINCT relative_bucket_id \ 217 FROM gallery_media \ 218 ) \ 219 ;"; 220 const std::string SQL_QUERY_LIVE_COUNT = "\ 221 SELECT COUNT(1) AS count \ 222 FROM gallery_media \ 223 WHERE special_file_type IN (50, 1050) AND \ 224 local_media_id <> -4 AND \ 225 COALESCE(recycleFlag, 0) = 0 AND \ 226 (0 = ? OR local_media_id = -1) AND \ 227 (0 = ? OR media_type = ?);"; 228 const std::string SQL_QUERY_TEMP_COUNT = "\ 229 SELECT COUNT(1) AS count \ 230 FROM gallery_media \ 231 WHERE relative_bucket_id IN \ 232 ( \ 233 SELECT DISTINCT relative_bucket_id \ 234 FROM garbage_album \ 235 WHERE type = 1 \ 236 ) AND \ 237 (0 = ? OR local_media_id = -1) AND \ 238 (0 = ? OR media_type = ?);"; 239 const std::string SQL_QUERY_NOT_SYNC_COUNT = "\ 240 SELECT COUNT(1) AS count \ 241 FROM gallery_media \ 242 WHERE local_media_id = -3;"; 243 }; 244 } // namespace OHOS::Media 245 #endif // OHOS_MEDIA_BACKUP_GALLERY_MEDIA_COUNT_STATISTIC_H