Fix snackbar blocking refreshing state in MangaScreen (#8759)

This commit is contained in:
stevenyomi 2022-12-18 01:06:49 +08:00 committed by GitHub
parent 376bbeb724
commit c44db54d9f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -213,20 +213,19 @@ class MangaInfoScreenModel(
* Fetch manga information from source. * Fetch manga information from source.
*/ */
private suspend fun fetchMangaFromSource(manualFetch: Boolean = false) { private suspend fun fetchMangaFromSource(manualFetch: Boolean = false) {
withIOContext { val state = successState ?: return
try { try {
successState?.let { withIOContext {
val networkManga = it.source.getMangaDetails(it.manga.toSManga()) val networkManga = state.source.getMangaDetails(state.manga.toSManga())
updateManga.awaitUpdateFromSource(it.manga, networkManga, manualFetch) updateManga.awaitUpdateFromSource(state.manga, networkManga, manualFetch)
} }
} catch (e: Throwable) { } catch (e: Throwable) {
withUIContext { // Ignore early hints "errors" that aren't handled by OkHttp
// Ignore early hints "errors" that aren't handled by OkHttp if (e is HttpException && e.code == 103) return
if (e !is HttpException || e.code != 103) {
snackbarHostState.showSnackbar(message = "${e.message}") logcat(LogPriority.ERROR, e)
logcat(LogPriority.ERROR, e) coroutineScope.launch {
} snackbarHostState.showSnackbar(message = e.toString())
}
} }
} }
} }
@ -524,31 +523,32 @@ class MangaInfoScreenModel(
* Requests an updated list of chapters from the source. * Requests an updated list of chapters from the source.
*/ */
private suspend fun fetchChaptersFromSource(manualFetch: Boolean = false) { private suspend fun fetchChaptersFromSource(manualFetch: Boolean = false) {
withIOContext { val state = successState ?: return
try { try {
successState?.let { successState -> withIOContext {
val chapters = successState.source.getChapterList(successState.manga.toSManga()) val chapters = state.source.getChapterList(state.manga.toSManga())
val newChapters = syncChaptersWithSource.await( val newChapters = syncChaptersWithSource.await(
chapters, chapters,
successState.manga, state.manga,
successState.source, state.source,
) )
if (manualFetch) { if (manualFetch) {
downloadNewChapters(newChapters) downloadNewChapters(newChapters)
}
}
} catch (e: Throwable) {
withUIContext {
if (e is NoChaptersException) {
snackbarHostState.showSnackbar(message = context.getString(R.string.no_chapters_error))
} else {
snackbarHostState.showSnackbar(message = "${e.message}")
logcat(LogPriority.ERROR, e)
}
} }
} }
} catch (e: Throwable) {
val message = if (e is NoChaptersException) {
context.getString(R.string.no_chapters_error)
} else {
logcat(LogPriority.ERROR, e)
e.toString()
}
coroutineScope.launch {
snackbarHostState.showSnackbar(message = message)
}
} }
} }