Skip to content

Commit cad236d

Browse files
committed
fix: change the download key to avoid the abnormal download status
1 parent eb79b86 commit cad236d

29 files changed

Lines changed: 306 additions & 369 deletions

shared/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ kotlin {
2828
api(compose.material)
2929

3030
api("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
31+
api("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.5")
3132

3233
api("io.ktor:ktor-client-core:2.1.1")
3334
// api("io.ktor:ktor-client-cio:2.1.1")

shared/src/commonMain/kotlin/org/succlz123/app/acfun/base/BaseView.kt

Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@ import androidx.compose.runtime.Composable
1313
import androidx.compose.ui.Alignment
1414
import androidx.compose.ui.Modifier
1515
import androidx.compose.ui.graphics.Color
16+
import androidx.compose.ui.text.font.FontWeight
1617
import androidx.compose.ui.unit.dp
18+
import androidx.compose.ui.unit.sp
1719
import org.succlz123.app.acfun.theme.ColorResource
1820
import org.succlz123.lib.click.noRippleClickable
1921
import org.succlz123.lib.screen.LocalScreenNavigator
@@ -27,6 +29,47 @@ fun LoadingView() {
2729
}
2830
}
2931

32+
@Composable
33+
fun LoadingFailView(modifier: Modifier = Modifier, cancelClick: () -> Unit, okClick: () -> Unit) {
34+
Column(
35+
modifier = modifier.fillMaxSize(),
36+
verticalArrangement = Arrangement.Center,
37+
horizontalAlignment = Alignment.CenterHorizontally
38+
) {
39+
Text(
40+
text = "数据加载失败!", fontSize = 26.sp, fontWeight = FontWeight.Bold
41+
)
42+
Spacer(modifier = Modifier.height(48.dp))
43+
Row {
44+
Button(colors = outlinedButtonColors(
45+
backgroundColor = ColorResource.acRed,
46+
contentColor = Color.White,
47+
disabledContentColor = Color.Transparent
48+
), contentPadding = PaddingValues(
49+
start = 16.dp, top = 6.dp, end = 16.dp, bottom = 6.dp
50+
), onClick = {
51+
cancelClick.invoke()
52+
}) {
53+
Text(text = "退出", fontSize = 16.sp)
54+
}
55+
Spacer(modifier = Modifier.width(32.dp))
56+
Button(colors = outlinedButtonColors(
57+
backgroundColor = Color.Black,
58+
contentColor = Color.White,
59+
disabledContentColor = Color.Transparent
60+
), contentPadding = PaddingValues(
61+
start = 16.dp, top = 6.dp, end = 16.dp, bottom = 6.dp
62+
), onClick = {
63+
okClick.invoke()
64+
}) {
65+
Text(
66+
text = "重试", fontSize = 16.sp
67+
)
68+
}
69+
}
70+
}
71+
}
72+
3073
@Composable
3174
fun AcRefreshButton(modifier: Modifier, onClick: () -> Unit) {
3275
Card(modifier = modifier, backgroundColor = Color.White, elevation = 12.dp) {
@@ -76,7 +119,7 @@ fun AcDivider() {
76119
@Composable
77120
fun AcButton(onClick: () -> Unit, content: @Composable () -> Unit) {
78121
Button(
79-
colors = ButtonDefaults.outlinedButtonColors(
122+
colors = outlinedButtonColors(
80123
backgroundColor = ColorResource.acRed, contentColor = Color.White, disabledContentColor = Color.Transparent
81124
), contentPadding = PaddingValues(
82125
start = 18.dp, top = 4.dp, end = 18.dp, bottom = 4.dp

shared/src/commonMain/kotlin/org/succlz123/app/acfun/ui/area/AreaContentScreen.kt

Lines changed: 17 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,19 @@ import androidx.compose.foundation.background
44
import androidx.compose.foundation.layout.*
55
import androidx.compose.foundation.lazy.LazyRow
66
import androidx.compose.foundation.lazy.itemsIndexed
7-
import androidx.compose.material.Button
8-
import androidx.compose.material.ButtonDefaults
97
import androidx.compose.material.MaterialTheme
108
import androidx.compose.material.Text
119
import androidx.compose.runtime.Composable
1210
import androidx.compose.runtime.LaunchedEffect
13-
import androidx.compose.runtime.snapshotFlow
11+
import androidx.compose.runtime.collectAsState
1412
import androidx.compose.ui.Alignment
1513
import androidx.compose.ui.Modifier
1614
import androidx.compose.ui.graphics.Color
1715
import androidx.compose.ui.text.font.FontWeight
1816
import androidx.compose.ui.unit.dp
1917
import androidx.compose.ui.unit.sp
20-
import kotlinx.coroutines.flow.distinctUntilChanged
2118
import org.succlz123.app.acfun.base.AcBackButton
19+
import org.succlz123.app.acfun.base.LoadingFailView
2220
import org.succlz123.app.acfun.base.LoadingView
2321
import org.succlz123.app.acfun.theme.ColorResource
2422
import org.succlz123.app.acfun.ui.main.tab.item.MainHomeContentItem
@@ -50,56 +48,28 @@ fun AreaContentScreen() {
5048
}
5149

5250
Box(modifier = Modifier.fillMaxSize().background(Color.White)) {
53-
val state = viewModel.areaVideosState.value
51+
val state = viewModel.areaVideosState.collectAsState().value
5452
when (state) {
5553
is ScreenResult.Uninitialized -> {
5654
LoadingView()
5755
}
5856

5957
is ScreenResult.Fail -> {
60-
Column(
61-
modifier = Modifier.fillMaxSize(),
62-
verticalArrangement = Arrangement.Center,
63-
horizontalAlignment = Alignment.CenterHorizontally
64-
) {
65-
Text(
66-
text = "数据加载失败!", fontSize = 32.sp, fontWeight = FontWeight.Bold
67-
)
68-
Spacer(modifier = Modifier.height(48.dp))
69-
Row {
70-
Button(colors = ButtonDefaults.outlinedButtonColors(
71-
backgroundColor = Color.Black,
72-
contentColor = Color.White,
73-
disabledContentColor = Color.Transparent
74-
), contentPadding = PaddingValues(
75-
start = 32.dp, top = 10.dp, end = 32.dp, bottom = 10.dp
76-
), onClick = {
77-
navigationScene.pop()
78-
}) {
79-
Text(
80-
text = "退出", fontSize = 18.sp
81-
)
82-
}
83-
Spacer(modifier = Modifier.width(32.dp))
84-
Button(colors = ButtonDefaults.outlinedButtonColors(
85-
backgroundColor = Color.Black,
86-
contentColor = Color.White,
87-
disabledContentColor = Color.Transparent
88-
), contentPadding = PaddingValues(
89-
start = 32.dp, top = 10.dp, end = 32.dp, bottom = 10.dp
90-
), onClick = {
91-
viewModel.getData(id)
92-
}) {
93-
Text(
94-
text = "重试", fontSize = 18.sp
95-
)
96-
}
97-
}
98-
}
58+
LoadingFailView(cancelClick = { navigationScene.pop() }, okClick = {
59+
viewModel.getData(id)
60+
})
9961
}
10062

10163
is ScreenResult.Success, is ScreenResult.Loading -> {
102-
val acContentList = state.invoke()
64+
LaunchedEffect(Unit) {
65+
viewModel.rankSelectIndex.collect {
66+
viewModel.getData(
67+
id,
68+
ArrayList(AreaContentViewModel.MAP.keys.toList())[viewModel.rankSelectIndex.value],
69+
force = true
70+
)
71+
}
72+
}
10373
Column(
10474
modifier = Modifier.fillMaxSize().padding(0.dp, 48.dp, 0.dp, 0.dp),
10575
horizontalAlignment = Alignment.CenterHorizontally
@@ -133,24 +103,11 @@ fun AreaContentScreen() {
133103
}
134104
}
135105
Spacer(modifier = Modifier.height(16.dp))
136-
137-
LaunchedEffect(Unit) {
138-
viewModel.getData(
139-
id, ArrayList(AreaContentViewModel.MAP.keys.toList())[viewModel.rankSelectIndex.value]
140-
)
141-
snapshotFlow { viewModel.rankSelectIndex.value }.distinctUntilChanged().collect {
142-
viewModel.getData(
143-
id,
144-
ArrayList(AreaContentViewModel.MAP.keys.toList())[viewModel.rankSelectIndex.value],
145-
force = true
146-
)
147-
}
148-
}
106+
val acContentList = state.invoke()
149107
if (acContentList.isNullOrEmpty()) {
150108
LoadingView()
151109
} else {
152-
val content = ArrayList(acContentList)
153-
MainHomeContentItem(result = ScreenResult.Success(content),
110+
MainHomeContentItem(result = ScreenResult.Success(acContentList),
154111
isExpandedScreen = isExpandedScreen,
155112
onRefresh = {
156113
viewModel.getData(

shared/src/commonMain/kotlin/org/succlz123/app/acfun/ui/area/AreaContentViewModel.kt

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.succlz123.app.acfun.ui.area
22

3-
import androidx.compose.runtime.mutableStateOf
3+
import kotlinx.collections.immutable.ImmutableList
4+
import kotlinx.collections.immutable.toImmutableList
45
import kotlinx.coroutines.Dispatchers
6+
import kotlinx.coroutines.flow.MutableStateFlow
57
import kotlinx.coroutines.launch
68
import org.seimicrawler.xpath.JXDocument
79
import org.succlz123.app.acfun.api.bean.AcContent
@@ -32,11 +34,11 @@ class AreaContentViewModel : ScreenPageViewModel() {
3234
)
3335
}
3436

35-
val areaVideosState = mutableStateOf<ScreenResult<ArrayList<HomeRecommendItem>>>(ScreenResult.Uninitialized)
37+
val areaVideosState = MutableStateFlow<ScreenResult<ImmutableList<HomeRecommendItem>>>(ScreenResult.Uninitialized)
3638

3739
var defaultSor = rankScore
3840

39-
val rankSelectIndex = mutableStateOf(0)
41+
val rankSelectIndex: MutableStateFlow<Int> = MutableStateFlow(0)
4042

4143
init {
4244
page = 1
@@ -67,20 +69,17 @@ class AreaContentViewModel : ScreenPageViewModel() {
6769
viewModelScope.launch(Dispatchers.IO) {
6870
try {
6971
val data = getFromNetwork(id, sort)
70-
var cur = areaVideosState.value.invoke()
72+
var cur = ArrayList(areaVideosState.value.invoke().orEmpty())
7173
if (data.isNullOrEmpty()) {
72-
if (cur.isNullOrEmpty()) {
74+
if (cur.isEmpty()) {
7375
areaVideosState.value = screenResultDataNone()
7476
} else {
7577
hasMore = false
7678
}
7779
} else {
78-
if (cur == null) {
79-
cur = ArrayList()
80-
}
8180
cur.addAll(data)
8281
page++
83-
areaVideosState.value = ScreenResult.Success(cur)
82+
areaVideosState.value = ScreenResult.Success(cur.toImmutableList())
8483
}
8584
} catch (e: Exception) {
8685
areaVideosState.value = ScreenResult.Fail(e)

0 commit comments

Comments
 (0)