Forráskód Böngészése

Merge pull request #1957 from a328929/01

Fix search issue in specified book source management
Kudomaga 3 hónapja
szülő
commit
62fec49020

+ 3 - 0
app/src/main/java/io/legado/app/domain/model/BookSearchScope.kt

@@ -53,6 +53,9 @@ data class BookSearchScope(val raw: String) {
 
     companion object {
 
+        fun encodeSource(name: String, url: String): String =
+            encodeSources(listOf(ScopeSourceItem(name, url)))
+
         fun encodeGroups(groups: List<String>): String {
             val selected = groups.filter { it.isNotBlank() }
             return if (selected.isEmpty()) {

+ 1 - 3
app/src/main/java/io/legado/app/ui/book/search/SearchScope.kt

@@ -160,9 +160,7 @@ data class SearchScope(private var scope: String) {
         }
 
         private fun encodeSourceScope(name: String, url: String): String {
-            return BookSearchScope.encodeSources(
-                listOf(ScopeSourceItem(sanitizeSourceName(name), url))
-            )
+            return BookSearchScope.encodeSource(sanitizeSourceName(name), url)
         }
 
         private fun encodeSourceScope(sources: List<BookSourcePart>): String {

+ 3 - 3
app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceScreen.kt

@@ -82,7 +82,7 @@ fun BookSourceRouteScreen(
     onAddSource: () -> Unit,
     onEditSource: (String) -> Unit,
     onLoginSource: (String) -> Unit,
-    onSearchSource: (String) -> Unit,
+    onSearchSource: (String, String) -> Unit,
     onDebugSource: (String) -> Unit,
 ) {
     val state by viewModel.uiState.collectAsStateWithLifecycle()
@@ -108,7 +108,7 @@ fun BookSourceScreen(
     onAddSource: () -> Unit,
     onEditSource: (String) -> Unit,
     onLoginSource: (String) -> Unit,
-    onSearchSource: (String) -> Unit,
+    onSearchSource: (String, String) -> Unit,
     onDebugSource: (String) -> Unit,
     effects: Flow<BookSourceEffect>,
 ) {
@@ -587,7 +587,7 @@ fun BookSourceScreen(
                                         onIntent(BookSourceIntent.MoveToEdge(setOf(item.id), toTop))
                                     },
                                     onLogin = { onLoginSource(item.id) },
-                                    onSearch = { onSearchSource(item.id) },
+                                    onSearch = { onSearchSource(item.name, item.id) },
                                     onDebug = { onDebugSource(item.id) },
                                     onDelete = { deleteIds = setOf(item.id) },
                                     onSetExploreEnabled = { enabled ->

+ 4 - 3
app/src/main/java/io/legado/app/ui/main/MainNavGraph.kt

@@ -29,6 +29,7 @@ import androidx.navigation3.runtime.entryProvider
 import androidx.navigation3.ui.LocalNavAnimatedContentScope
 import androidx.navigation3.ui.NavDisplay
 import io.legado.app.R
+import io.legado.app.domain.model.BookSearchScope
 import io.legado.app.domain.model.settings.AppUiConfiguration
 import io.legado.app.model.Download
 import io.legado.app.ui.about.AboutEffect
@@ -77,7 +78,6 @@ import io.legado.app.ui.book.readaloud.cloudtts.CloudTtsScreen
 import io.legado.app.ui.book.readaloud.cloudtts.CloudTtsViewModel
 import io.legado.app.ui.book.search.SearchIntent
 import io.legado.app.ui.book.search.SearchRouteScreen
-import io.legado.app.ui.book.search.SearchScope
 import io.legado.app.ui.book.search.SearchViewModel
 import io.legado.app.ui.book.searchContent.SearchContentRouteScreen
 import io.legado.app.ui.book.searchContent.SearchContentViewModel
@@ -162,8 +162,9 @@ fun MainActivity.mainEntryProvider(
             onLoginSource = {
                 onNavigateToRoute(MainRouteSourceLogin(SourceLoginType.BookSource, it))
             },
-            onSearchSource = { sourceUrl ->
-                onNavigateToRoute(MainRouteSearch(null, SearchScope(sourceUrl).toString()))
+            onSearchSource = { sourceName, sourceUrl ->
+                val scopeRaw = BookSearchScope.encodeSource(sourceName, sourceUrl)
+                onNavigateToRoute(MainRouteSearch(null, scopeRaw))
             },
             onDebugSource = { sourceUrl ->
                 onNavigateToRoute(MainRouteBookSourceDebug(sourceUrl))

+ 25 - 0
app/src/test/java/io/legado/app/BookSearchScopeTest.kt

@@ -0,0 +1,25 @@
+package io.legado.app
+
+import io.legado.app.domain.model.BookSearchScope
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertFalse
+import org.junit.Assert.assertTrue
+import org.junit.Test
+
+class BookSearchScopeTest {
+
+    @Test
+    fun encodedSingleSourceScopeKeepsOnlyTheSelectedSource() {
+        val sourceName = "Example: source, one"
+        val sourceUrl = "https://example.com/search"
+        val raw = BookSearchScope.encodeSource(sourceName, sourceUrl)
+
+        val scope = BookSearchScope(raw)
+
+        assertTrue(scope.isSource)
+        assertFalse(scope.isAll)
+        assertEquals(listOf(sourceName), scope.sourceNames)
+        assertEquals(listOf(sourceUrl), scope.sourceUrls)
+        assertTrue(scope.groupNames.isEmpty())
+    }
+}