Limit amount of updates loaded for widget

Probably fixes #9868
This commit is contained in:
arkon 2023-08-27 22:05:52 -04:00
parent 98d6ce2eaf
commit 87530f506e
5 changed files with 28 additions and 26 deletions

View File

@ -9,11 +9,12 @@ class UpdatesRepositoryImpl(
private val databaseHandler: DatabaseHandler, private val databaseHandler: DatabaseHandler,
) : UpdatesRepository { ) : UpdatesRepository {
override suspend fun awaitWithRead(read: Boolean, after: Long): List<UpdatesWithRelations> { override suspend fun awaitWithRead(read: Boolean, after: Long, limit: Long): List<UpdatesWithRelations> {
return databaseHandler.awaitList { return databaseHandler.awaitList {
updatesViewQueries.getUpdatesByReadStatus( updatesViewQueries.getUpdatesByReadStatus(
read = read, read = read,
after = after, after = after,
limit = limit,
mapper = updateWithRelationMapper, mapper = updateWithRelationMapper,
) )
} }
@ -25,11 +26,12 @@ class UpdatesRepositoryImpl(
} }
} }
override fun subscribeWithRead(read: Boolean, after: Long): Flow<List<UpdatesWithRelations>> { override fun subscribeWithRead(read: Boolean, after: Long, limit: Long): Flow<List<UpdatesWithRelations>> {
return databaseHandler.subscribeToList { return databaseHandler.subscribeToList {
updatesViewQueries.getUpdatesByReadStatus( updatesViewQueries.getUpdatesByReadStatus(
read = read, read = read,
after = after, after = after,
limit = limit,
mapper = updateWithRelationMapper, mapper = updateWithRelationMapper,
) )
} }

View File

@ -30,4 +30,5 @@ getUpdatesByReadStatus:
SELECT * SELECT *
FROM updatesView FROM updatesView
WHERE read = :read WHERE read = :read
AND dateUpload > :after; AND dateUpload > :after
LIMIT :limit;

View File

@ -10,7 +10,7 @@ class GetUpdates(
) { ) {
suspend fun await(read: Boolean, after: Long): List<UpdatesWithRelations> { suspend fun await(read: Boolean, after: Long): List<UpdatesWithRelations> {
return repository.awaitWithRead(read, after) return repository.awaitWithRead(read, after, limit = 500)
} }
fun subscribe(calendar: Calendar): Flow<List<UpdatesWithRelations>> { fun subscribe(calendar: Calendar): Flow<List<UpdatesWithRelations>> {
@ -18,6 +18,6 @@ class GetUpdates(
} }
fun subscribe(read: Boolean, after: Long): Flow<List<UpdatesWithRelations>> { fun subscribe(read: Boolean, after: Long): Flow<List<UpdatesWithRelations>> {
return repository.subscribeWithRead(read, after) return repository.subscribeWithRead(read, after, limit = 500)
} }
} }

View File

@ -5,9 +5,9 @@ import tachiyomi.domain.updates.model.UpdatesWithRelations
interface UpdatesRepository { interface UpdatesRepository {
suspend fun awaitWithRead(read: Boolean, after: Long): List<UpdatesWithRelations> suspend fun awaitWithRead(read: Boolean, after: Long, limit: Long): List<UpdatesWithRelations>
fun subscribeAll(after: Long, limit: Long): Flow<List<UpdatesWithRelations>> fun subscribeAll(after: Long, limit: Long): Flow<List<UpdatesWithRelations>>
fun subscribeWithRead(read: Boolean, after: Long): Flow<List<UpdatesWithRelations>> fun subscribeWithRead(read: Boolean, after: Long, limit: Long): Flow<List<UpdatesWithRelations>>
} }

View File

@ -36,14 +36,14 @@ import tachiyomi.presentation.widget.util.appWidgetBackgroundRadius
import tachiyomi.presentation.widget.util.calculateRowAndColumnCount import tachiyomi.presentation.widget.util.calculateRowAndColumnCount
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
import java.util.Calendar import java.util.Calendar
import java.util.Date import java.util.Date
class UpdatesGridGlanceWidget : GlanceAppWidget() { class UpdatesGridGlanceWidget(
private val context: Context = Injekt.get<Application>(),
private val app: Application by injectLazy() private val getUpdates: GetUpdates = Injekt.get(),
private val preferences: SecurityPreferences by injectLazy() private val preferences: SecurityPreferences = Injekt.get(),
) : GlanceAppWidget() {
private var data: List<Pair<Long, Bitmap?>>? = null private var data: List<Pair<Long, Bitmap?>>? = null
@ -63,23 +63,22 @@ class UpdatesGridGlanceWidget : GlanceAppWidget() {
} }
} }
private suspend fun loadData(list: List<UpdatesWithRelations>? = null) { private suspend fun loadData() {
withIOContext { val manager = GlanceAppWidgetManager(context)
val manager = GlanceAppWidgetManager(app) val ids = manager.getGlanceIds(this@UpdatesGridGlanceWidget::class.java)
val ids = manager.getGlanceIds(this@UpdatesGridGlanceWidget::class.java) if (ids.isEmpty()) return
if (ids.isEmpty()) return@withIOContext
val processList = list withIOContext {
?: Injekt.get<GetUpdates>().await( val updates = getUpdates.await(
read = false, read = false,
after = DateLimit.timeInMillis, after = DateLimit.timeInMillis,
) )
val (rowCount, columnCount) = ids val (rowCount, columnCount) = ids
.flatMap { manager.getAppWidgetSizes(it) } .flatMap { manager.getAppWidgetSizes(it) }
.maxBy { it.height.value * it.width.value } .maxBy { it.height.value * it.width.value }
.calculateRowAndColumnCount() .calculateRowAndColumnCount()
data = prepareList(processList, rowCount * columnCount) data = prepareList(updates, rowCount * columnCount)
} }
} }
@ -87,12 +86,12 @@ class UpdatesGridGlanceWidget : GlanceAppWidget() {
// Resize to cover size // Resize to cover size
val widthPx = CoverWidth.value.toInt().dpToPx val widthPx = CoverWidth.value.toInt().dpToPx
val heightPx = CoverHeight.value.toInt().dpToPx val heightPx = CoverHeight.value.toInt().dpToPx
val roundPx = app.resources.getDimension(R.dimen.appwidget_inner_radius) val roundPx = context.resources.getDimension(R.dimen.appwidget_inner_radius)
return processList return processList
.distinctBy { it.mangaId } .distinctBy { it.mangaId }
.take(take) .take(take)
.map { updatesView -> .map { updatesView ->
val request = ImageRequest.Builder(app) val request = ImageRequest.Builder(context)
.data( .data(
MangaCover( MangaCover(
mangaId = updatesView.mangaId, mangaId = updatesView.mangaId,
@ -114,7 +113,7 @@ class UpdatesGridGlanceWidget : GlanceAppWidget() {
} }
} }
.build() .build()
Pair(updatesView.mangaId, app.imageLoader.executeBlocking(request).drawable?.toBitmap()) Pair(updatesView.mangaId, context.imageLoader.executeBlocking(request).drawable?.toBitmap())
} }
} }