Эх сурвалжийг харах

Limit amount of updates loaded for widget

Probably fixes #9868
arkon 1 жил өмнө
parent
commit
87530f506e

+ 4 - 2
data/src/main/java/tachiyomi/data/updates/UpdatesRepositoryImpl.kt

@@ -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,
             )
         }
@@ -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,
             )
         }

+ 2 - 1
data/src/main/sqldelight/tachiyomi/view/updatesView.sq

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

+ 2 - 2
domain/src/main/java/tachiyomi/domain/updates/interactor/GetUpdates.kt

@@ -10,7 +10,7 @@ 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>> {
@@ -18,6 +18,6 @@ class GetUpdates(
     }
 
     fun subscribe(read: Boolean, after: Long): Flow<List<UpdatesWithRelations>> {
-        return repository.subscribeWithRead(read, after)
+        return repository.subscribeWithRead(read, after, limit = 500)
     }
 }

+ 2 - 2
domain/src/main/java/tachiyomi/domain/updates/repository/UpdatesRepository.kt

@@ -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>>
 }

+ 18 - 19
presentation-widget/src/main/java/tachiyomi/presentation/widget/UpdatesGridGlanceWidget.kt

@@ -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
 
@@ -63,23 +63,22 @@ 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)
         }
     }
 
@@ -87,12 +86,12 @@ class UpdatesGridGlanceWidget : GlanceAppWidget() {
         // 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,
@@ -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())
             }
     }