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)
}
protected inline suspend fun <T> withLoading(block: () -> T): T = try {
protected inline fun <T> withLoading(block: () -> T): T = try {
loadingCounter.increment()
block()
} finally {

View File

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

View File

@@ -221,7 +221,14 @@ class WebtoonScalingFrame @JvmOverloads constructor(
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
if (newScale > 1) {
translateBounds.set(
@@ -240,13 +247,12 @@ class WebtoonScalingFrame @JvmOverloads constructor(
}
transformMatrix.postScale(factor, factor, focusX, focusY)
invalidateTarget()
return true
}
override fun onScale(detector: ScaleGestureDetector): Boolean {
val newScale = (scale * detector.scaleFactor).coerceIn(MIN_SCALE, MAX_SCALE)
scaleChild(newScale, detector.focusX, detector.focusY)
return true
return scaleChild(newScale, detector.focusX, detector.focusY)
}
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.prefs.AppSettings
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.stats.data.StatsEntity
import javax.inject.Inject
@@ -62,7 +64,11 @@ class StatsCollector @Inject constructor(
private fun commit(entity: StatsEntity) {
viewModelScope.launch(Dispatchers.Default) {
db.getStatsDao().upsert(entity)
runCatchingCancellable {
db.getStatsDao().upsert(entity)
}.onFailure { e ->
e.printStackTraceDebug()
}
}
}