From 761f24daf9bfa1c0a938b7ca84da6d2f9cb4af94 Mon Sep 17 00:00:00 2001 From: Koitharu Date: Wed, 20 Sep 2023 09:40:20 +0300 Subject: [PATCH] Fix crashes --- .../kotatsu/bookmarks/ui/sheet/BookmarksSheetViewModel.kt | 1 + .../kotatsu/details/domain/DoubleMangaLoadUseCase.kt | 2 +- .../org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt | 5 ++--- .../org/koitharu/kotatsu/tracker/data/EntityMapping.kt | 4 ++-- .../koitharu/kotatsu/tracker/domain/TrackingRepository.kt | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/bookmarks/ui/sheet/BookmarksSheetViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/bookmarks/ui/sheet/BookmarksSheetViewModel.kt index 937a50917..5959bd7cf 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/bookmarks/ui/sheet/BookmarksSheetViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/bookmarks/ui/sheet/BookmarksSheetViewModel.kt @@ -35,6 +35,7 @@ class BookmarksSheetViewModel @Inject constructor( val content: StateFlow> = bookmarksRepository.observeBookmarks(manga) .map { mapList(it) } + .withErrorHandling() .stateIn(viewModelScope + Dispatchers.Default, SharingStarted.Lazily, listOf(LoadingFooter())) private suspend fun mapList(bookmarks: List): List { diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/details/domain/DoubleMangaLoadUseCase.kt b/app/src/main/kotlin/org/koitharu/kotatsu/details/domain/DoubleMangaLoadUseCase.kt index 89f8ee2a7..7726cca92 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/details/domain/DoubleMangaLoadUseCase.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/details/domain/DoubleMangaLoadUseCase.kt @@ -26,7 +26,7 @@ class DoubleMangaLoadUseCase @Inject constructor( private val recoverUseCase: RecoverMangaUseCase, ) { - operator fun invoke(manga: Manga): Flow = flow { + operator fun invoke(manga: Manga): Flow = flow { var lastValue: DoubleManga? = null var emitted = false invokeImpl(manga).collect { diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt index 2158914a1..6c68947e5 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/reader/ui/ReaderViewModel.kt @@ -87,8 +87,7 @@ class ReaderViewModel @Inject constructor( private var pageSaveJob: Job? = null private var bookmarkJob: Job? = null private var stateChangeJob: Job? = null - private val currentState = - MutableStateFlow(savedStateHandle[ReaderActivity.EXTRA_STATE]) + private val currentState = MutableStateFlow(savedStateHandle[ReaderActivity.EXTRA_STATE]) private val mangaData = MutableStateFlow(intent.manga?.let { DoubleManga(it) }) private val mangaFlow: Flow get() = mangaData.map { it?.any } @@ -326,7 +325,7 @@ class ReaderViewModel @Inject constructor( mangaData.value = manga val mangaFlow = doubleMangaLoadUseCase(intent) manga = mangaFlow.first { x -> x.any != null } - chaptersLoader.init(viewModelScope, mangaFlow) + chaptersLoader.init(viewModelScope, mangaFlow.withErrorHandling()) // determine mode val singleManga = manga.requireAny() // obtain state diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/data/EntityMapping.kt b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/data/EntityMapping.kt index 9f8099612..3db173650 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/data/EntityMapping.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/data/EntityMapping.kt @@ -1,9 +1,9 @@ package org.koitharu.kotatsu.tracker.data -import java.util.* import org.koitharu.kotatsu.core.db.entity.toManga import org.koitharu.kotatsu.core.db.entity.toMangaTags import org.koitharu.kotatsu.tracker.domain.model.TrackingLogItem +import java.util.Date fun TrackLogWithManga.toTrackingLogItem(counters: MutableMap): TrackingLogItem { val chaptersList = trackLog.chapters.split('\n').filterNot { x -> x.isEmpty() } @@ -16,7 +16,7 @@ fun TrackLogWithManga.toTrackingLogItem(counters: MutableMap): Tracki ) } -private fun MutableMap.decrement(key: Long, count: Int): Boolean { +private fun MutableMap.decrement(key: Long, count: Int): Boolean = synchronized(this) { val counter = get(key) if (counter == null || counter <= 0) { return false 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 8114c5159..0b42ac1b5 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 @@ -25,6 +25,7 @@ import org.koitharu.kotatsu.tracker.domain.model.MangaTracking import org.koitharu.kotatsu.tracker.domain.model.MangaUpdates import org.koitharu.kotatsu.tracker.domain.model.TrackingLogItem import java.util.Date +import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject private const val NO_ID = 0L @@ -34,7 +35,7 @@ class TrackingRepository @Inject constructor( private val db: MangaDatabase, ) { - private var isGcCalled = false + private var isGcCalled = AtomicBoolean(false) suspend fun getNewChaptersCount(mangaId: Long): Int { return db.tracksDao.findNewChapters(mangaId) ?: 0 @@ -227,9 +228,8 @@ class TrackingRepository @Inject constructor( } private suspend fun gcIfNotCalled() { - if (!isGcCalled) { + if (isGcCalled.compareAndSet(false, true)) { gc() - isGcCalled = true } }