Skip to content

Commit

Permalink
fix: Deduplicate items while loading restore list
Browse files Browse the repository at this point in the history
Change-Id: I51d70e6dae53d29f8a7df0698f25b76be8676695
  • Loading branch information
XayahSuSuSu committed Dec 7, 2023
1 parent f6a7ed8 commit 57479eb
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ class MediaRestoreRepository @Inject constructor(
* Update sizeBytes, installed state.
*/
suspend fun update(topBarState: MutableStateFlow<TopBarState>) = withIOContext {
// Deduplicate items.
mediaDao.deduplicate()

val medium = mediaDao.queryAllRestore()
val mediumCount = (medium.size - 1).coerceAtLeast(1)
// Get 1/10 of total count.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,9 @@ class PackageRestoreRepository @Inject constructor(
* Update sizeBytes, installed state.
*/
suspend fun update(topBarState: MutableStateFlow<TopBarState>) {
// Deduplicate items.
packageRestoreDao.deduplicate()

val packages = packageRestoreDao.queryAll()
val packagesCount = (packages.size - 1).coerceAtLeast(1)
// Get 1/10 of total count.
Expand Down Expand Up @@ -330,6 +333,9 @@ class PackageRestoreRepository @Inject constructor(
* Update sizeBytes, installed state.
*/
suspend fun updateRemote(topBarState: MutableStateFlow<TopBarState>, endTitle: StringResourceToken) {
// Deduplicate items.
packageRestoreDao.deduplicate()

val packages = packageRestoreDao.queryAll()
val packagesCount = (packages.size - 1).coerceAtLeast(1)
// Get 1/10 of total count.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,10 +99,10 @@ interface MediaDao {
@Query("SELECT DISTINCT timestamp FROM MediaRestoreEntity WHERE savePath = :savePath")
fun observeTimestamps(savePath: String): Flow<List<Long>>

@Query("SELECT * FROM MediaRestoreEntity WHERE active = 1 AND timestamp = :timestamp")
@Query("SELECT * FROM MediaRestoreEntity WHERE active = 1 AND timestamp = :timestamp GROUP BY path")
fun queryMediumFlow(timestamp: Long): Flow<List<MediaRestoreEntity>>

@Query("SELECT * FROM MediaRestoreEntity WHERE path = :path AND timestamp = :timestamp AND savePath = :savePath")
@Query("SELECT * FROM MediaRestoreEntity WHERE path = :path AND timestamp = :timestamp AND savePath = :savePath LIMIT 1")
fun queryMedia(path: String, timestamp: Long, savePath: String): MediaRestoreEntity?

@Query("UPDATE MediaRestoreEntity SET selected = :selected WHERE path in (:pathList) AND timestamp = :timestamp")
Expand All @@ -119,4 +119,7 @@ interface MediaDao {

@Query("UPDATE MediaRestoreEntity SET active = :active WHERE timestamp = :timestamp AND savePath = :savePath")
suspend fun updateRestoreActive(active: Boolean, timestamp: Long, savePath: String)

@Query("DELETE FROM MediaRestoreEntity WHERE id NOT IN (SELECT MIN(id) FROM MediaRestoreEntity GROUP BY path, timestamp, savePath)")
suspend fun deduplicate()
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ interface PackageRestoreEntireDao {
@Query("SELECT DISTINCT timestamp FROM PackageRestoreEntire WHERE savePath = :savePath")
fun observeTimestamps(savePath: String): Flow<List<Long>>

@Query("SELECT * FROM PackageRestoreEntire WHERE active = 1 AND timestamp = :timestamp")
@Query("SELECT * FROM PackageRestoreEntire WHERE active = 1 AND timestamp = :timestamp GROUP BY packageName")
fun queryPackagesFlow(timestamp: Long): Flow<List<PackageRestoreEntire>>

@Query("SELECT * FROM PackageRestoreEntire WHERE timestamp = :timestamp")
Expand Down Expand Up @@ -55,7 +55,7 @@ interface PackageRestoreEntireDao {
@Query("SELECT * FROM PackageRestoreEntire WHERE active = 1 AND operationCode = 1")
fun queryActiveDataOnlyPackages(): Flow<List<PackageRestoreEntire>>

@Query("SELECT * FROM PackageRestoreEntire WHERE packageName = :packageName AND timestamp = :timestamp AND savePath = :savePath")
@Query("SELECT * FROM PackageRestoreEntire WHERE packageName = :packageName AND timestamp = :timestamp AND savePath = :savePath LIMIT 1")
fun queryPackage(packageName: String, timestamp: Long, savePath: String): PackageRestoreEntire?

@Query("SELECT COUNT(*) FROM PackageRestoreEntire WHERE active = 1 AND (operationCode = 1 OR operationCode = 2 OR operationCode = 3)")
Expand Down Expand Up @@ -87,4 +87,7 @@ interface PackageRestoreEntireDao {

@Query("UPDATE PackageRestoreEntire SET operationCode = (operationCode | (:mask & backupOpCode)) WHERE packageName in (:packageNames) AND sizeBytes != 0")
suspend fun orOpCodeByMask(mask: Int, packageNames: List<String>)

@Query("DELETE FROM PackageRestoreEntire WHERE id NOT IN (SELECT MIN(id) FROM PackageRestoreEntire GROUP BY packageName, timestamp, savePath)")
suspend fun deduplicate()
}

0 comments on commit 57479eb

Please sign in to comment.