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
This commit is contained in:
parent
98697566e3
commit
a90eb778d8
@ -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
|
||||
|
@ -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!!
|
||||
|
@ -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 <--
|
||||
}
|
||||
|
@ -26,7 +26,7 @@ private val mapper = { cursor: SqlCursor ->
|
||||
)
|
||||
}
|
||||
|
||||
class UpdatesQuery(val driver: SqlDriver, val after: Long) : Query<UpdatesView>(copyOnWriteList(), mapper) {
|
||||
class UpdatesQuery(val driver: SqlDriver, val after: Long, val limit: Long) : Query<UpdatesView>(copyOnWriteList(), mapper) {
|
||||
override fun execute(): SqlCursor {
|
||||
return driver.executeQuery(
|
||||
null,
|
||||
@ -79,11 +79,13 @@ class UpdatesQuery(val driver: SqlDriver, val after: Long) : Query<UpdatesView>(
|
||||
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)
|
||||
},
|
||||
)
|
||||
}
|
||||
|
@ -21,11 +21,11 @@ class UpdatesRepositoryImpl(
|
||||
}
|
||||
}
|
||||
|
||||
override fun subscribeAll(after: Long): Flow<List<UpdatesWithRelations>> {
|
||||
override fun subscribeAll(after: Long, limit: Long): Flow<List<UpdatesWithRelations>> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
|
@ -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 *
|
||||
|
@ -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<UpdatesWithRelations> {
|
||||
return repository.awaitWithRead(read, after)
|
||||
// SY -->
|
||||
return flow {
|
||||
emit(repository.awaitWithRead(read, after))
|
||||
}
|
||||
.catchNPE()
|
||||
.first()
|
||||
// SY <--
|
||||
}
|
||||
|
||||
fun subscribe(calendar: Calendar): Flow<List<UpdatesWithRelations>> = subscribe(calendar.time.time)
|
||||
|
||||
fun subscribe(after: Long): Flow<List<UpdatesWithRelations>> {
|
||||
return repository.subscribeAll(after)
|
||||
fun subscribe(calendar: Calendar): Flow<List<UpdatesWithRelations>> {
|
||||
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<List<UpdatesWithRelations>> {
|
||||
return repository.subscribeWithRead(read, after)
|
||||
// SY -->
|
||||
.catchNPE()
|
||||
// SY <--
|
||||
}
|
||||
|
||||
// SY -->
|
||||
private fun <T> Flow<T>.catchNPE() = retry {
|
||||
if (it is NullPointerException) {
|
||||
delay(5.seconds)
|
||||
true
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
// SY <--
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ interface UpdatesRepository {
|
||||
|
||||
suspend fun awaitWithRead(read: Boolean, after: Long): List<UpdatesWithRelations>
|
||||
|
||||
fun subscribeAll(after: Long): Flow<List<UpdatesWithRelations>>
|
||||
fun subscribeAll(after: Long, limit: Long): Flow<List<UpdatesWithRelations>>
|
||||
|
||||
fun subscribeWithRead(read: Boolean, after: Long): Flow<List<UpdatesWithRelations>>
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user