瀏覽代碼

Consolidate exception message formatting

Closes #9408
arkon 1 年之前
父節點
當前提交
c9805b8612

+ 2 - 7
app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt

@@ -21,10 +21,10 @@ import eu.kanade.presentation.browse.components.BrowseSourceComfortableGrid
 import eu.kanade.presentation.browse.components.BrowseSourceCompactGrid
 import eu.kanade.presentation.browse.components.BrowseSourceList
 import eu.kanade.presentation.components.AppBar
+import eu.kanade.presentation.util.formattedMessage
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.source.Source
 import kotlinx.coroutines.flow.StateFlow
-import tachiyomi.data.source.NoResultsException
 import tachiyomi.domain.library.model.LibraryDisplayMode
 import tachiyomi.domain.manga.model.Manga
 import tachiyomi.domain.source.model.StubSource
@@ -54,12 +54,7 @@ fun BrowseSourceContent(
         ?: mangaList.loadState.append.takeIf { it is LoadState.Error }
 
     val getErrorMessage: (LoadState.Error) -> String = { state ->
-        when {
-            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()
-        }
+        with(context) { state.error.formattedMessage }
     }
 
     LaunchedEffect(errorState) {

+ 19 - 0
app/src/main/java/eu/kanade/presentation/util/ExceptionFormatter.kt

@@ -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()
+    }

+ 3 - 10
app/src/main/java/eu/kanade/tachiyomi/ui/manga/MangaScreenModel.kt

@@ -18,6 +18,7 @@ import eu.kanade.domain.manga.model.toSManga
 import eu.kanade.domain.ui.UiPreferences
 import eu.kanade.presentation.manga.DownloadAction
 import eu.kanade.presentation.manga.components.ChapterDownloadAction
+import eu.kanade.presentation.util.formattedMessage
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.download.DownloadCache
 import eu.kanade.tachiyomi.data.download.DownloadManager
@@ -227,7 +228,7 @@ class MangaInfoScreenModel(
 
             logcat(LogPriority.ERROR, e)
             coroutineScope.launch {
-                snackbarHostState.showSnackbar(message = e.snackbarMessage)
+                snackbarHostState.showSnackbar(message = with(context) { e.formattedMessage })
             }
         }
     }
@@ -517,7 +518,7 @@ class MangaInfoScreenModel(
                 context.getString(R.string.no_chapters_error)
             } else {
                 logcat(LogPriority.ERROR, e)
-                e.snackbarMessage
+                with(context) { e.formattedMessage }
             }
 
             coroutineScope.launch {
@@ -1000,14 +1001,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"
-        }
 }
 
 sealed class MangaScreenState {