From e04a87731098ff6ba81e724496edff9ba54a4b8b Mon Sep 17 00:00:00 2001 From: Koitharu Date: Sat, 31 May 2025 15:57:49 +0300 Subject: [PATCH] Fix favorite categories observing --- .../favourites/domain/FavouritesRepository.kt | 31 ++++++++++++------- 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt b/app/src/main/kotlin/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt index be4c9efb5..c837da77b 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/favourites/domain/FavouritesRepository.kt @@ -7,7 +7,10 @@ import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapLatest import org.koitharu.kotatsu.core.db.MangaDatabase +import org.koitharu.kotatsu.core.db.TABLE_FAVOURITES +import org.koitharu.kotatsu.core.db.TABLE_FAVOURITE_CATEGORIES import org.koitharu.kotatsu.core.db.entity.toEntities import org.koitharu.kotatsu.core.db.entity.toEntity import org.koitharu.kotatsu.core.db.entity.toMangaList @@ -106,20 +109,24 @@ class FavouritesRepository @Inject constructor( } fun observeCategoriesWithCovers(): Flow>> { - return db.getFavouriteCategoriesDao().observeAll() - .map { - db.withTransaction { - val res = LinkedHashMap>() - for (entity in it) { - val cat = entity.toFavouriteCategory() - res[cat] = db.getFavouritesDao().findCovers( - categoryId = cat.id, - order = cat.order, - ) - } - res + return db.invalidationTracker.createFlow( + TABLE_FAVOURITES, + TABLE_FAVOURITE_CATEGORIES, + emitInitialState = true, + ).mapLatest { + db.withTransaction { + val categories = db.getFavouriteCategoriesDao().findAll() + val res = LinkedHashMap>(categories.size) + for (entity in categories) { + val cat = entity.toFavouriteCategory() + res[cat] = db.getFavouritesDao().findCovers( + categoryId = cat.id, + order = cat.order, + ) } + res } + }.distinctUntilChanged() } suspend fun getAllFavoritesCovers(order: ListSortOrder, limit: Int): List {