[优化] 性能优化
This commit is contained in:
4 files changed
+75
-6
No files matched your search
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"permissions": {
|
||||||
|
"allow": [
|
||||||
|
"Bash(./gradlew compileAppDebugKotlin)",
|
||||||
|
"Bash(./gradlew test *)",
|
||||||
|
"Bash(./gradlew :app:compileAppDebugUnitTestKotlin)",
|
||||||
|
"Bash(head -n 508 \"app/src/main/java/io/legado/app/model/CacheBook.kt\")",
|
||||||
|
"Bash(mv /tmp/cachebook_tmp.kt \"app/src/main/java/io/legado/app/model/CacheBook.kt\")",
|
||||||
|
"Bash(./gradlew :app:cleanCompileAppDebugKotlin)",
|
||||||
|
"Bash(./gradlew :app:compileAppDebugKotlin --rerun-tasks)",
|
||||||
|
"Bash(./gradlew :app:compileAppDebugKotlin)",
|
||||||
|
"Bash(./gradlew :app:cleanCompileAppDebugKotlin :app:compileAppDebugKotlin)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -37,7 +37,6 @@ import androidx.compose.material3.WideNavigationRailValue
|
|||||||
import androidx.compose.material3.rememberWideNavigationRailState
|
import androidx.compose.material3.rememberWideNavigationRailState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.collectAsState
|
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
@@ -51,6 +50,7 @@ import androidx.compose.ui.platform.LocalHapticFeedback
|
|||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import com.kyant.backdrop.backdrops.layerBackdrop
|
import com.kyant.backdrop.backdrops.layerBackdrop
|
||||||
import com.kyant.backdrop.backdrops.rememberLayerBackdrop
|
import com.kyant.backdrop.backdrops.rememberLayerBackdrop
|
||||||
import dev.chrisbanes.haze.HazeState
|
import dev.chrisbanes.haze.HazeState
|
||||||
@@ -102,7 +102,7 @@ fun MainScreen(
|
|||||||
val coroutineScope = rememberCoroutineScope()
|
val coroutineScope = rememberCoroutineScope()
|
||||||
|
|
||||||
val bookshelfViewModel: BookshelfViewModel = koinViewModel()
|
val bookshelfViewModel: BookshelfViewModel = koinViewModel()
|
||||||
val bookshelfUiState by bookshelfViewModel.uiState.collectAsState()
|
val bookshelfUiState by bookshelfViewModel.uiState.collectAsStateWithLifecycle()
|
||||||
|
|
||||||
val hazeState = remember { HazeState() }
|
val hazeState = remember { HazeState() }
|
||||||
val floatingBarSurfaceColor = MaterialTheme.colorScheme.surface
|
val floatingBarSurfaceColor = MaterialTheme.colorScheme.surface
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ import androidx.compose.material3.pulltorefresh.pullToRefresh
|
|||||||
import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
|
import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
import androidx.compose.runtime.collectAsState
|
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
@@ -73,6 +72,7 @@ import androidx.compose.ui.platform.LocalHapticFeedback
|
|||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.window.Dialog
|
import androidx.compose.ui.window.Dialog
|
||||||
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import io.legado.app.R
|
import io.legado.app.R
|
||||||
import io.legado.app.base.BaseRuleEvent
|
import io.legado.app.base.BaseRuleEvent
|
||||||
import io.legado.app.data.entities.BookGroup
|
import io.legado.app.data.entities.BookGroup
|
||||||
@@ -127,7 +127,7 @@ fun BookshelfScreen(
|
|||||||
onNavigateToCache: (Long) -> Unit
|
onNavigateToCache: (Long) -> Unit
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val uiState by viewModel.uiState.collectAsState()
|
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
|
|
||||||
var showAddUrlDialog by remember { mutableStateOf(false) }
|
var showAddUrlDialog by remember { mutableStateOf(false) }
|
||||||
@@ -721,7 +721,7 @@ fun BookshelfScreen(
|
|||||||
HorizontalPager(
|
HorizontalPager(
|
||||||
state = pagerState,
|
state = pagerState,
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
beyondViewportPageCount = 3,
|
beyondViewportPageCount = 1,
|
||||||
key = { if (it < uiState.groups.size) uiState.groups[it].groupId else it }
|
key = { if (it < uiState.groups.size) uiState.groups[it].groupId else it }
|
||||||
) { pageIndex ->
|
) { pageIndex ->
|
||||||
val group = uiState.groups.getOrNull(pageIndex)
|
val group = uiState.groups.getOrNull(pageIndex)
|
||||||
@@ -729,7 +729,7 @@ fun BookshelfScreen(
|
|||||||
val booksFlow = remember(group.groupId) {
|
val booksFlow = remember(group.groupId) {
|
||||||
viewModel.getBooksFlow(group.groupId)
|
viewModel.getBooksFlow(group.groupId)
|
||||||
}
|
}
|
||||||
val books by booksFlow.collectAsState(emptyList())
|
val books by booksFlow.collectAsStateWithLifecycle(emptyList())
|
||||||
BookshelfPage(
|
BookshelfPage(
|
||||||
paddingValues = paddingValues,
|
paddingValues = paddingValues,
|
||||||
books = books,
|
books = books,
|
||||||
|
|||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package io.legado.app.domain.usecase
|
||||||
|
|
||||||
|
import io.legado.app.data.entities.BookSource
|
||||||
|
import org.junit.Assert.assertFalse
|
||||||
|
import org.junit.Assert.assertTrue
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
class SearchBooksUseCaseTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `search url without dynamic page does not support next page`() {
|
||||||
|
val source = BookSource(
|
||||||
|
searchUrl = "https://example.com/search?keyword={{key}}&page=1"
|
||||||
|
)
|
||||||
|
|
||||||
|
assertFalse(source.supportsSearchPage())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `search url with page group supports next page`() {
|
||||||
|
val source = BookSource(
|
||||||
|
searchUrl = "https://example.com/search/{{key}}/<1,2,3>"
|
||||||
|
)
|
||||||
|
|
||||||
|
assertTrue(source.supportsSearchPage())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `search url with page inner rule supports next page`() {
|
||||||
|
val source = BookSource(
|
||||||
|
searchUrl = "https://example.com/search?keyword={{key}}&page={{page}}"
|
||||||
|
)
|
||||||
|
|
||||||
|
assertTrue(source.supportsSearchPage())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `search url with page js supports next page`() {
|
||||||
|
val source = BookSource(
|
||||||
|
searchUrl = "<js>baseUrl + '/search?keyword=' + key + '&page=' + page</js>"
|
||||||
|
)
|
||||||
|
|
||||||
|
assertTrue(source.supportsSearchPage())
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `search url with js but without page does not support next page`() {
|
||||||
|
val source = BookSource(
|
||||||
|
searchUrl = "<js>baseUrl + '/search?keyword=' + key</js>"
|
||||||
|
)
|
||||||
|
|
||||||
|
assertFalse(source.supportsSearchPage())
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in new issue
Block a user