From a90eb778d86fdd5566b27d97754b61f2c8f4be78 Mon Sep 17 00:00:00 2001 From: arkon Date: Sun, 28 May 2023 16:48:22 -0400 Subject: [PATCH] Limit updates to 250 most recent chapters Still limits to things within the past 3 months though. Closes #9554 (cherry picked from commit 4c65c2311e09bf5dcb77327c415a6fddd12123c5) # Conflicts: # data/src/main/java/tachiyomi/data/updates/UpdatesRepositoryImpl.kt # domain/src/main/java/tachiyomi/domain/updates/interactor/GetUpdates.kt --- .../library/LibrarySettingsDialog.kt | 2 + .../viewer/webtoon/WebtoonPageHolder.kt | 1 - .../tachiyomi/data/AndroidDatabaseHandler.kt | 2 +- .../main/java/tachiyomi/data/UpdatesQuery.kt | 8 ++-- .../data/updates/UpdatesRepositoryImpl.kt | 6 +-- .../sqldelight/tachiyomi/view/updatesView.sq | 5 ++- .../domain/updates/interactor/GetUpdates.kt | 39 ++++++++++++------- .../updates/repository/UpdatesRepository.kt | 2 +- 8 files changed, 41 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt b/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt index 4952671c6..f699e1e3d 100644 --- a/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt +++ b/app/src/main/java/eu/kanade/presentation/library/LibrarySettingsDialog.kt @@ -13,6 +13,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Slider import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment @@ -28,6 +29,7 @@ import eu.kanade.presentation.components.TriStateItem import eu.kanade.presentation.util.collectAsState import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.ui.library.LibrarySettingsScreenModel +import kotlinx.coroutines.flow.map import tachiyomi.domain.category.model.Category import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.model.LibraryGroup diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt index d99a9cb6d..b0d2f9d0a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonPageHolder.kt @@ -248,7 +248,6 @@ class WebtoonPageHolder( } private fun onStripSplit(imageStream: BufferedInputStream): InputStream { - try { // If we have reached this point [page] and its stream shouldn't be null val page = page!! diff --git a/data/src/main/java/tachiyomi/data/AndroidDatabaseHandler.kt b/data/src/main/java/tachiyomi/data/AndroidDatabaseHandler.kt index 0089960fe..9b9d143be 100644 --- a/data/src/main/java/tachiyomi/data/AndroidDatabaseHandler.kt +++ b/data/src/main/java/tachiyomi/data/AndroidDatabaseHandler.kt @@ -90,6 +90,6 @@ class AndroidDatabaseHandler( // SY --> fun getLibraryQuery(condition: String = "M.favorite = 1") = LibraryQuery(driver, condition) - fun getUpdatesQuery(after: Long) = UpdatesQuery(driver, after) + fun getUpdatesQuery(after: Long, limit: Long) = UpdatesQuery(driver, after, limit) // SY <-- } diff --git a/data/src/main/java/tachiyomi/data/UpdatesQuery.kt b/data/src/main/java/tachiyomi/data/UpdatesQuery.kt index 5b2c0407d..9a297f05e 100644 --- a/data/src/main/java/tachiyomi/data/UpdatesQuery.kt +++ b/data/src/main/java/tachiyomi/data/UpdatesQuery.kt @@ -26,7 +26,7 @@ private val mapper = { cursor: SqlCursor -> ) } -class UpdatesQuery(val driver: SqlDriver, val after: Long) : Query(copyOnWriteList(), mapper) { +class UpdatesQuery(val driver: SqlDriver, val after: Long, val limit: Long) : Query(copyOnWriteList(), mapper) { override fun execute(): SqlCursor { return driver.executeQuery( null, @@ -79,11 +79,13 @@ class UpdatesQuery(val driver: SqlDriver, val after: Long) : Query( WHERE favorite = 1 AND source = $MERGED_SOURCE_ID AND date_fetch > date_added AND dateUpload > :after - ORDER BY datefetch DESC; + ORDER BY datefetch DESC + LIMIT :limit; """.trimIndent(), - 1, + 2, binders = { bindLong(1, after) + bindLong(2, limit) }, ) } diff --git a/data/src/main/java/tachiyomi/data/updates/UpdatesRepositoryImpl.kt b/data/src/main/java/tachiyomi/data/updates/UpdatesRepositoryImpl.kt index f71bcd26f..bbf072651 100644 --- a/data/src/main/java/tachiyomi/data/updates/UpdatesRepositoryImpl.kt +++ b/data/src/main/java/tachiyomi/data/updates/UpdatesRepositoryImpl.kt @@ -21,11 +21,11 @@ class UpdatesRepositoryImpl( } } - override fun subscribeAll(after: Long): Flow> { + override fun subscribeAll(after: Long, limit: Long): Flow> { return databaseHandler.subscribeToList { - updatesViewQueries.updates(after, updateWithRelationMapper) + updatesViewQueries.getRecentUpdates(after, limit, updateWithRelationMapper) }.map { - databaseHandler.awaitList { (databaseHandler as AndroidDatabaseHandler).getUpdatesQuery(after) } + databaseHandler.awaitList { (databaseHandler as AndroidDatabaseHandler).getUpdatesQuery(after, limit) } .map(updatesViewMapper) } } diff --git a/data/src/main/sqldelight/tachiyomi/view/updatesView.sq b/data/src/main/sqldelight/tachiyomi/view/updatesView.sq index fc6953818..6e9fd95c2 100644 --- a/data/src/main/sqldelight/tachiyomi/view/updatesView.sq +++ b/data/src/main/sqldelight/tachiyomi/view/updatesView.sq @@ -20,10 +20,11 @@ WHERE favorite = 1 AND date_fetch > date_added ORDER BY date_fetch DESC; -updates: +getRecentUpdates: SELECT * FROM updatesView -WHERE dateUpload > :after; +WHERE dateUpload > :after +LIMIT :limit; getUpdatesByReadStatus: SELECT * diff --git a/domain/src/main/java/tachiyomi/domain/updates/interactor/GetUpdates.kt b/domain/src/main/java/tachiyomi/domain/updates/interactor/GetUpdates.kt index 59799954d..c018b8558 100644 --- a/domain/src/main/java/tachiyomi/domain/updates/interactor/GetUpdates.kt +++ b/domain/src/main/java/tachiyomi/domain/updates/interactor/GetUpdates.kt @@ -2,6 +2,8 @@ package tachiyomi.domain.updates.interactor import kotlinx.coroutines.delay import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.retry import tachiyomi.domain.updates.model.UpdatesWithRelations import tachiyomi.domain.updates.repository.UpdatesRepository @@ -13,26 +15,37 @@ class GetUpdates( ) { suspend fun await(read: Boolean, after: Long): List { - return repository.awaitWithRead(read, after) + // SY --> + return flow { + emit(repository.awaitWithRead(read, after)) + } + .catchNPE() + .first() + // SY <-- } - fun subscribe(calendar: Calendar): Flow> = subscribe(calendar.time.time) - - fun subscribe(after: Long): Flow> { - return repository.subscribeAll(after) + fun subscribe(calendar: Calendar): Flow> { + return repository.subscribeAll(calendar.time.time, limit = 250) // SY --> - .retry { - if (it is NullPointerException) { - delay(5.seconds) - true - } else { - false - } - } + .catchNPE() // SY <-- } fun subscribe(read: Boolean, after: Long): Flow> { return repository.subscribeWithRead(read, after) + // SY --> + .catchNPE() + // SY <-- } + + // SY --> + private fun Flow.catchNPE() = retry { + if (it is NullPointerException) { + delay(5.seconds) + true + } else { + false + } + } + // SY <-- } diff --git a/domain/src/main/java/tachiyomi/domain/updates/repository/UpdatesRepository.kt b/domain/src/main/java/tachiyomi/domain/updates/repository/UpdatesRepository.kt index 8c879d323..0856b4b9f 100644 --- a/domain/src/main/java/tachiyomi/domain/updates/repository/UpdatesRepository.kt +++ b/domain/src/main/java/tachiyomi/domain/updates/repository/UpdatesRepository.kt @@ -7,7 +7,7 @@ interface UpdatesRepository { suspend fun awaitWithRead(read: Boolean, after: Long): List - fun subscribeAll(after: Long): Flow> + fun subscribeAll(after: Long, limit: Long): Flow> fun subscribeWithRead(read: Boolean, after: Long): Flow> }