Fix crashes
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user