为网络导入添加错误状态

This commit is contained in:
HapeLee
2026-05-17 03:03:16 +08:00
parent 81f898d7b8
commit 139dd76f3e
2 changed files with 32 additions and 16 deletions
@@ -17,7 +17,6 @@ import androidx.compose.animation.scaleOut
import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutVertically
import androidx.compose.animation.togetherWith
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Box
@@ -51,9 +50,7 @@ import androidx.compose.material.icons.filled.VerticalAlignBottom
import androidx.compose.material.icons.filled.VerticalAlignTop
import androidx.compose.material.icons.outlined.DownloadForOffline
import androidx.compose.material.icons.rounded.LocationOn
import androidx.compose.material3.Checkbox
import androidx.compose.material3.ExperimentalMaterial3Api
import io.legado.app.ui.widget.components.progressIndicator.AppCircularProgressIndicator
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
import androidx.compose.material3.FloatingActionButtonMenu
import androidx.compose.material3.FloatingActionButtonMenuItem
@@ -108,7 +105,6 @@ import io.legado.app.ui.widget.components.card.NormalCard
import io.legado.app.ui.widget.components.card.TextCard
import io.legado.app.ui.widget.components.divider.PillDivider
import io.legado.app.ui.widget.components.divider.PillHeaderDivider
import io.legado.app.ui.widget.components.icon.AppIcon
import io.legado.app.ui.widget.components.lazylist.FastScrollLazyColumn
import io.legado.app.ui.widget.components.list.TopFloatingStickyItem
import io.legado.app.ui.widget.components.menuItem.RoundDropdownMenu
@@ -350,16 +346,12 @@ fun TocScreen(
0 -> {
RoundDropdownMenuItem(
text = "使用替换规则",
trailingIcon = {
Checkbox(checked = useReplace, onCheckedChange = null)
},
isSelected = useReplace,
onClick = { viewModel.toggleUseReplace() }
)
RoundDropdownMenuItem(
text = "显示字数",
trailingIcon = {
Checkbox(checked = showWordCount, onCheckedChange = null)
},
isSelected = showWordCount,
onClick = { viewModel.toggleShowWordCount() }
)
RoundDropdownMenuItem(
@@ -407,12 +399,7 @@ fun TocScreen(
)
RoundDropdownMenuItem(
text = "拆分超长章节",
trailingIcon = {
Checkbox(
checked = viewModel.isSplitLongChapter,
onCheckedChange = null
)
},
isSelected = viewModel.isSplitLongChapter,
onClick = {
viewModel.toggleSplitLongChapter()
dismiss()
@@ -29,6 +29,7 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.res.stringResource
@@ -47,6 +48,7 @@ import io.legado.app.ui.widget.components.button.SmallIconButton
import io.legado.app.ui.widget.components.card.GlassCard
import io.legado.app.ui.widget.components.card.SelectionItemCard
import io.legado.app.ui.widget.components.modalBottomSheet.AppModalBottomSheet
import io.legado.app.ui.widget.components.progressIndicator.AppCircularProgressIndicator
import io.legado.app.ui.widget.components.settingItem.SwitchSettingItem
import io.legado.app.ui.widget.components.text.AppText
import io.legado.app.utils.GSON
@@ -72,6 +74,7 @@ fun SourceInputDialog(
AppTextField(
value = text,
onValueChange = { text = it },
backgroundColor = LegadoTheme.colorScheme.onSheetContent,
label = hint,
modifier = Modifier.fillMaxWidth(),
maxLines = 5
@@ -118,6 +121,32 @@ fun <T> BatchImportDialog(
itemTitle: (data: T) -> String,
itemSubtitle: (data: T) -> String? = { null }
) {
AppAlertDialog(
data = importState as? BaseImportUiState.Loading,
onDismissRequest = onDismissRequest,
title = stringResource(R.string.loading),
content = {
Box(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 16.dp),
contentAlignment = Alignment.Center
) {
AppCircularProgressIndicator()
}
}
)
AppAlertDialog(
data = importState as? BaseImportUiState.Error,
onDismissRequest = onDismissRequest,
title = stringResource(R.string.error),
onConfirm = { onDismissRequest() },
content = { error ->
AppText(error.msg)
}
)
val show = importState is BaseImportUiState.Success<T>
var cachedState by remember { mutableStateOf<BaseImportUiState.Success<T>?>(null) }