diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 52ea7b9b1..44fdc9159 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -216,7 +216,7 @@ dependencies {
val accompanist_version = "0.31.6-rc"
implementation("com.google.accompanist:accompanist-themeadapter-material3:$accompanist_version")
implementation("com.google.accompanist:accompanist-webview:$accompanist_version")
- implementation("com.google.android.material:material:1.11.0-alpha01")
+ implementation("com.google.android.material:material:1.11.0-alpha02")
val splitties = "3.0.0"
implementation("com.louiscad.splitties:splitties-appctx:$splitties")
diff --git a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.kt b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.kt
index d6ca9f5cf..7381df195 100644
--- a/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.kt
+++ b/app/src/main/java/com/hippo/ehviewer/client/parser/GalleryListParser.kt
@@ -1,9 +1,12 @@
package com.hippo.ehviewer.client.parser
import com.hippo.ehviewer.EhDB
+import com.hippo.ehviewer.R
import com.hippo.ehviewer.client.data.BaseGalleryInfo
import com.hippo.ehviewer.client.data.GalleryInfo.Companion.LOCAL_FAVORITED
import com.hippo.ehviewer.client.data.GalleryInfo.Companion.NOT_FAVORITED
+import com.hippo.ehviewer.client.exception.EhException
+import com.hippo.ehviewer.client.exception.ParseException
object GalleryListParser {
suspend fun parse(body: String) = runCatching {
@@ -15,13 +18,21 @@ object GalleryListParser {
it.generateSLang()
}
}
- }.getOrDefault(GalleryListResult())
+ }.getOrElse {
+ if (body.contains("
You do not have any watched tags")) {
+ throw EhException(R.string.gallery_list_empty_hit_subscription)
+ }
+ if (body.contains("No hits found
")) {
+ throw EhException(R.string.gallery_list_empty_hit)
+ }
+ throw ParseException("Can't parse gallery list", body, it)
+ }
}
class GalleryListResult(
- val prev: String? = null,
- val next: String? = null,
- val galleryInfoList: ArrayList = arrayListOf(),
+ val prev: String?,
+ val next: String?,
+ val galleryInfoList: ArrayList,
)
private external fun parseGalleryInfoList(e: String): GalleryListResult
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.kt
index 7ef0c2b4e..357883457 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.kt
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/FavoritesScene.kt
@@ -91,6 +91,7 @@ import eu.kanade.tachiyomi.util.lang.launchUI
import eu.kanade.tachiyomi.util.lang.withIOContext
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
+import kotlinx.coroutines.ensureActive
import kotlinx.coroutines.flow.collectLatest
import moe.tarsin.coroutines.runSuspendCatching
import rikka.core.res.resolveColor
@@ -337,7 +338,8 @@ class FavoritesScene : SearchBarScene() {
val transition = ViewTransition(binding.refreshLayout, binding.progress, binding.tip)
val empty = getString(R.string.gallery_list_empty_hit)
adapter.addLoadStateListener {
- lifecycleScope.launchUI {
+ viewLifecycleOwner.lifecycleScope.launchUI {
+ ensureActive()
when (val state = it.refresh) {
is LoadState.Loading -> {
showSearchBar()
diff --git a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt
index 2cfbfbd44..f5649faaa 100644
--- a/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt
+++ b/app/src/main/java/com/hippo/ehviewer/ui/scene/GalleryListScene.kt
@@ -365,7 +365,6 @@ class GalleryListScene : SearchBarScene() {
binding.refreshLayout.setOnRefreshListener { mAdapter?.refresh() }
val transition = ViewTransition(binding.refreshLayout, binding.progress, binding.tip)
val empty = getString(R.string.gallery_list_empty_hit)
- val noWatch = getString(R.string.gallery_list_empty_hit_subscription)
adapter.addLoadStateListener {
viewLifecycleOwner.lifecycleScope.launchUI {
ensureActive()
@@ -395,11 +394,7 @@ class GalleryListScene : SearchBarScene() {
delay(500)
binding.refreshLayout.isRefreshing = false
if (mAdapter?.itemCount == 0) {
- if (mUrlBuilder.mode == MODE_SUBSCRIPTION) {
- binding.tip.text = noWatch
- } else {
- binding.tip.text = empty
- }
+ binding.tip.text = empty
transition.showView(2)
} else {
transition.showView(0)