From 4b9f4f9af20b08812dc63dae040f91f6f9dc7c73 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 9 Aug 2023 13:17:13 +0300 Subject: [PATCH] GC manga updates --- .../kotatsu/tracker/domain/TrackingRepository.kt | 14 ++++++++++++++ .../kotatsu/tracker/ui/feed/FeedMenuProvider.kt | 6 ++++++ app/src/main/res/menu/opt_feed.xml | 6 ++++++ 3 files changed, 26 insertions(+) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/TrackingRepository.kt b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/TrackingRepository.kt index 94f2b955d..b410546d3 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/TrackingRepository.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/domain/TrackingRepository.kt @@ -8,6 +8,7 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart import org.koitharu.kotatsu.core.db.MangaDatabase import org.koitharu.kotatsu.core.db.entity.MangaEntity import org.koitharu.kotatsu.core.db.entity.toManga @@ -33,6 +34,8 @@ class TrackingRepository @Inject constructor( private val db: MangaDatabase, ) { + private var isGcCalled = false + suspend fun getNewChaptersCount(mangaId: Long): Int { return db.tracksDao.findNewChapters(mangaId) ?: 0 } @@ -43,12 +46,14 @@ class TrackingRepository @Inject constructor( fun observeUpdatedMangaCount(): Flow { return db.tracksDao.observeNewChapters().map { list -> list.count { it > 0 } } + .onStart { gcIfNotCalled() } } fun observeUpdatedManga(): Flow> { return db.tracksDao.observeUpdatedManga() .mapItems { it.toManga() } .distinctUntilChanged() + .onStart { gcIfNotCalled() } } suspend fun getTracks(mangaList: Collection): List { @@ -94,6 +99,8 @@ class TrackingRepository @Inject constructor( val countersMap = counters.toMutableMap() entities.map { x -> x.toTrackingLogItem(countersMap) } } + }.onStart { + gcIfNotCalled() } } @@ -216,5 +223,12 @@ class TrackingRepository @Inject constructor( ) } + private suspend fun gcIfNotCalled() { + if (!isGcCalled) { + gc() + isGcCalled = true + } + } + private fun Collection.toMangaList() = map { it.toManga(emptySet()) } } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/FeedMenuProvider.kt b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/FeedMenuProvider.kt index b0d80db73..9ec9c545b 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/FeedMenuProvider.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/ui/feed/FeedMenuProvider.kt @@ -8,6 +8,7 @@ import android.view.View import androidx.core.view.MenuProvider import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.ui.dialog.CheckBoxAlertDialog +import org.koitharu.kotatsu.tracker.ui.updates.UpdatesActivity class FeedMenuProvider( private val snackbarHost: View, @@ -40,6 +41,11 @@ class FeedMenuProvider( true } + R.id.action_updated -> { + context.startActivity(UpdatesActivity.newIntent(context)) + true + } + else -> false } } diff --git a/app/src/main/res/menu/opt_feed.xml b/app/src/main/res/menu/opt_feed.xml index b39463d25..aff41be01 100644 --- a/app/src/main/res/menu/opt_feed.xml +++ b/app/src/main/res/menu/opt_feed.xml @@ -3,6 +3,12 @@ xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> + +