Skip to content

Commit

Permalink
Limit amount of updates loaded for widget
Browse files Browse the repository at this point in the history
Probably fixes #9868
  • Loading branch information
arkon committed Aug 28, 2023
1 parent 98d6ce2 commit 87530f5
Show file tree
Hide file tree
Showing 5 changed files with 28 additions and 26 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@ class UpdatesRepositoryImpl(
private val databaseHandler: DatabaseHandler,
) : 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 {
updatesViewQueries.getUpdatesByReadStatus(
read = read,
after = after,
limit = limit,
mapper = updateWithRelationMapper,
)
}
Expand All @@ -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 {
updatesViewQueries.getUpdatesByReadStatus(
read = read,
after = after,
limit = limit,
mapper = updateWithRelationMapper,
)
}
Expand Down
3 changes: 2 additions & 1 deletion data/src/main/sqldelight/tachiyomi/view/updatesView.sq
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,5 @@ getUpdatesByReadStatus:
SELECT *
FROM updatesView
WHERE read = :read
AND dateUpload > :after;
AND dateUpload > :after
LIMIT :limit;
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,14 @@ class GetUpdates(
) {

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>> {
return repository.subscribeAll(calendar.time.time, limit = 500)
}

fun subscribe(read: Boolean, after: Long): Flow<List<UpdatesWithRelations>> {
return repository.subscribeWithRead(read, after)
return repository.subscribeWithRead(read, after, limit = 500)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import tachiyomi.domain.updates.model.UpdatesWithRelations

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 subscribeWithRead(read: Boolean, after: Long): Flow<List<UpdatesWithRelations>>
fun subscribeWithRead(read: Boolean, after: Long, limit: Long): Flow<List<UpdatesWithRelations>>
}
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ import tachiyomi.presentation.widget.util.appWidgetBackgroundRadius
import tachiyomi.presentation.widget.util.calculateRowAndColumnCount
import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy
import java.util.Calendar
import java.util.Date

class UpdatesGridGlanceWidget : GlanceAppWidget() {

private val app: Application by injectLazy()
private val preferences: SecurityPreferences by injectLazy()
class UpdatesGridGlanceWidget(
private val context: Context = Injekt.get<Application>(),
private val getUpdates: GetUpdates = Injekt.get(),
private val preferences: SecurityPreferences = Injekt.get(),
) : GlanceAppWidget() {

private var data: List<Pair<Long, Bitmap?>>? = null

Expand All @@ -63,36 +63,35 @@ class UpdatesGridGlanceWidget : GlanceAppWidget() {
}
}

private suspend fun loadData(list: List<UpdatesWithRelations>? = null) {
withIOContext {
val manager = GlanceAppWidgetManager(app)
val ids = manager.getGlanceIds(this@UpdatesGridGlanceWidget::class.java)
if (ids.isEmpty()) return@withIOContext
private suspend fun loadData() {
val manager = GlanceAppWidgetManager(context)
val ids = manager.getGlanceIds(this@UpdatesGridGlanceWidget::class.java)
if (ids.isEmpty()) return

val processList = list
?: Injekt.get<GetUpdates>().await(
read = false,
after = DateLimit.timeInMillis,
)
withIOContext {
val updates = getUpdates.await(
read = false,
after = DateLimit.timeInMillis,
)
val (rowCount, columnCount) = ids
.flatMap { manager.getAppWidgetSizes(it) }
.maxBy { it.height.value * it.width.value }
.calculateRowAndColumnCount()

data = prepareList(processList, rowCount * columnCount)
data = prepareList(updates, rowCount * columnCount)
}
}

private fun prepareList(processList: List<UpdatesWithRelations>, take: Int): List<Pair<Long, Bitmap?>> {
// Resize to cover size
val widthPx = CoverWidth.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
.distinctBy { it.mangaId }
.take(take)
.map { updatesView ->
val request = ImageRequest.Builder(app)
val request = ImageRequest.Builder(context)
.data(
MangaCover(
mangaId = updatesView.mangaId,
Expand All @@ -114,7 +113,7 @@ class UpdatesGridGlanceWidget : GlanceAppWidget() {
}
}
.build()
Pair(updatesView.mangaId, app.imageLoader.executeBlocking(request).drawable?.toBitmap())
Pair(updatesView.mangaId, context.imageLoader.executeBlocking(request).drawable?.toBitmap())
}
}

Expand Down

0 comments on commit 87530f5

Please sign in to comment.