Consolidate exception message formatting

Closes #9408

(cherry picked from commit c9805b8612cbcba9c2b017ff67333c6c08ea32ba)

# Conflicts:
#	app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt
This commit is contained in:
arkon 2023-04-27 22:45:30 -04:00 committed by Jobobby04
parent ccdaeada29
commit 35abcf89e5
3 changed files with 24 additions and 17 deletions

View File

@ -22,12 +22,12 @@ import eu.kanade.presentation.browse.components.BrowseSourceCompactGrid
import eu.kanade.presentation.browse.components.BrowseSourceEHentaiList import eu.kanade.presentation.browse.components.BrowseSourceEHentaiList
import eu.kanade.presentation.browse.components.BrowseSourceList import eu.kanade.presentation.browse.components.BrowseSourceList
import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.util.formattedMessage
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import exh.metadata.metadata.base.RaisedSearchMetadata import exh.metadata.metadata.base.RaisedSearchMetadata
import exh.source.isEhBasedSource import exh.source.isEhBasedSource
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import tachiyomi.data.source.NoResultsException
import tachiyomi.domain.library.model.LibraryDisplayMode import tachiyomi.domain.library.model.LibraryDisplayMode
import tachiyomi.domain.manga.model.Manga import tachiyomi.domain.manga.model.Manga
import tachiyomi.domain.source.model.StubSource import tachiyomi.domain.source.model.StubSource
@ -62,12 +62,7 @@ fun BrowseSourceContent(
?: mangaList.loadState.append.takeIf { it is LoadState.Error } ?: mangaList.loadState.append.takeIf { it is LoadState.Error }
val getErrorMessage: (LoadState.Error) -> String = { state -> val getErrorMessage: (LoadState.Error) -> String = { state ->
when { with(context) { state.error.formattedMessage }
state.error is NoResultsException -> context.getString(R.string.no_results_found)
state.error.message.isNullOrEmpty() -> ""
state.error.message.orEmpty().startsWith("HTTP error") -> "${state.error.message}: ${context.getString(R.string.http_error_hint)}"
else -> state.error.message.orEmpty()
}
} }
LaunchedEffect(errorState) { LaunchedEffect(errorState) {

View File

@ -0,0 +1,19 @@
package eu.kanade.presentation.util
import android.content.Context
import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.network.HttpException
import tachiyomi.data.source.NoResultsException
import tachiyomi.domain.source.model.SourceNotInstalledException
import java.io.IOException
context(Context)
val Throwable.formattedMessage: String
get() = when {
this is NoResultsException -> getString(R.string.no_results_found)
this is SourceNotInstalledException -> getString(R.string.loader_not_implemented_error)
this is HttpException -> "$message: ${getString(R.string.http_error_hint)}"
this is IOException || this is Exception -> message ?: this::class.simpleName.orEmpty()
this::class.simpleName != null -> "${this::class.simpleName}: $message"
else -> message.orEmpty()
}

View File

@ -23,6 +23,7 @@ import eu.kanade.domain.track.model.toDomainTrack
import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.UiPreferences
import eu.kanade.presentation.manga.DownloadAction import eu.kanade.presentation.manga.DownloadAction
import eu.kanade.presentation.manga.components.ChapterDownloadAction import eu.kanade.presentation.manga.components.ChapterDownloadAction
import eu.kanade.presentation.util.formattedMessage
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.download.DownloadCache import eu.kanade.tachiyomi.data.download.DownloadCache
import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadManager
@ -404,7 +405,7 @@ class MangaInfoScreenModel(
logcat(LogPriority.ERROR, e) logcat(LogPriority.ERROR, e)
coroutineScope.launch { coroutineScope.launch {
snackbarHostState.showSnackbar(message = e.snackbarMessage) snackbarHostState.showSnackbar(message = with(context) { e.formattedMessage })
} }
} }
} }
@ -992,7 +993,7 @@ class MangaInfoScreenModel(
context.getString(R.string.no_chapters_error) context.getString(R.string.no_chapters_error)
} else { } else {
logcat(LogPriority.ERROR, e) logcat(LogPriority.ERROR, e)
e.snackbarMessage with(context) { e.formattedMessage }
} }
coroutineScope.launch { coroutineScope.launch {
@ -1536,14 +1537,6 @@ class MangaInfoScreenModel(
} }
} }
private val Throwable.snackbarMessage: String
get() = when (val className = this::class.simpleName) {
null -> message ?: ""
"SourceNotInstalledException" -> context.getString(R.string.loader_not_implemented_error)
"Exception", "HttpException", "IOException" -> message ?: className
else -> "$className: $message"
}
// SY --> // SY -->
fun showEditMangaInfoDialog() { fun showEditMangaInfoDialog() {
mutableState.update { state -> mutableState.update { state ->