Fix crashes

This commit is contained in:
Koitharu
2024-06-15 14:03:38 +03:00
parent a379604974
commit 8407a414c5
4 changed files with 22 additions and 6 deletions

View File

@@ -68,7 +68,7 @@ abstract class BaseViewModel : ViewModel() {
errorEvent.call(error) errorEvent.call(error)
} }
protected inline suspend fun <T> withLoading(block: () -> T): T = try { protected inline fun <T> withLoading(block: () -> T): T = try {
loadingCounter.increment() loadingCounter.increment()
block() block()
} finally { } finally {

View File

@@ -93,15 +93,19 @@ class DetailsViewModel @Inject constructor(
val details = MutableStateFlow(intent.manga?.let { MangaDetails(it, null, null, false) }) val details = MutableStateFlow(intent.manga?.let { MangaDetails(it, null, null, false) })
val manga = details.map { x -> x?.toManga() } val manga = details.map { x -> x?.toManga() }
.withErrorHandling()
.stateIn(viewModelScope + Dispatchers.Default, SharingStarted.Eagerly, null) .stateIn(viewModelScope + Dispatchers.Default, SharingStarted.Eagerly, null)
val history = historyRepository.observeOne(mangaId) val history = historyRepository.observeOne(mangaId)
.withErrorHandling()
.stateIn(viewModelScope + Dispatchers.Default, SharingStarted.Eagerly, null) .stateIn(viewModelScope + Dispatchers.Default, SharingStarted.Eagerly, null)
val favouriteCategories = interactor.observeFavourite(mangaId) val favouriteCategories = interactor.observeFavourite(mangaId)
.withErrorHandling()
.stateIn(viewModelScope + Dispatchers.Default, SharingStarted.Eagerly, emptySet()) .stateIn(viewModelScope + Dispatchers.Default, SharingStarted.Eagerly, emptySet())
val isStatsAvailable = statsRepository.observeHasStats(mangaId) val isStatsAvailable = statsRepository.observeHasStats(mangaId)
.withErrorHandling()
.stateIn(viewModelScope + Dispatchers.Default, SharingStarted.Eagerly, false) .stateIn(viewModelScope + Dispatchers.Default, SharingStarted.Eagerly, false)
val remoteManga = MutableStateFlow<Manga?>(null) val remoteManga = MutableStateFlow<Manga?>(null)

View File

@@ -221,7 +221,14 @@ class WebtoonScalingFrame @JvmOverloads constructor(
syncMatrixValues() syncMatrixValues()
} }
private fun scaleChild(newScale: Float, focusX: Float, focusY: Float) { private fun scaleChild(
newScale: Float,
focusX: Float,
focusY: Float,
): Boolean {
if (scale.isNaN() || scale == 0f) {
return false
}
val factor = newScale / scale val factor = newScale / scale
if (newScale > 1) { if (newScale > 1) {
translateBounds.set( translateBounds.set(
@@ -240,13 +247,12 @@ class WebtoonScalingFrame @JvmOverloads constructor(
} }
transformMatrix.postScale(factor, factor, focusX, focusY) transformMatrix.postScale(factor, factor, focusX, focusY)
invalidateTarget() invalidateTarget()
return true
} }
override fun onScale(detector: ScaleGestureDetector): Boolean { override fun onScale(detector: ScaleGestureDetector): Boolean {
val newScale = (scale * detector.scaleFactor).coerceIn(MIN_SCALE, MAX_SCALE) val newScale = (scale * detector.scaleFactor).coerceIn(MIN_SCALE, MAX_SCALE)
scaleChild(newScale, detector.focusX, detector.focusY) return scaleChild(newScale, detector.focusX, detector.focusY)
return true
} }
override fun onScaleBegin(detector: ScaleGestureDetector): Boolean { override fun onScaleBegin(detector: ScaleGestureDetector): Boolean {

View File

@@ -9,6 +9,8 @@ import kotlinx.coroutines.launch
import org.koitharu.kotatsu.core.db.MangaDatabase import org.koitharu.kotatsu.core.db.MangaDatabase
import org.koitharu.kotatsu.core.prefs.AppSettings import org.koitharu.kotatsu.core.prefs.AppSettings
import org.koitharu.kotatsu.core.util.RetainedLifecycleCoroutineScope import org.koitharu.kotatsu.core.util.RetainedLifecycleCoroutineScope
import org.koitharu.kotatsu.core.util.ext.printStackTraceDebug
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
import org.koitharu.kotatsu.reader.ui.ReaderState import org.koitharu.kotatsu.reader.ui.ReaderState
import org.koitharu.kotatsu.stats.data.StatsEntity import org.koitharu.kotatsu.stats.data.StatsEntity
import javax.inject.Inject import javax.inject.Inject
@@ -62,7 +64,11 @@ class StatsCollector @Inject constructor(
private fun commit(entity: StatsEntity) { private fun commit(entity: StatsEntity) {
viewModelScope.launch(Dispatchers.Default) { viewModelScope.launch(Dispatchers.Default) {
db.getStatsDao().upsert(entity) runCatchingCancellable {
db.getStatsDao().upsert(entity)
}.onFailure { e ->
e.printStackTraceDebug()
}
} }
} }