[feat] Task Statistics

This commit is contained in:
acite
2025-09-28 02:03:20 +08:00
parent 2166229923
commit 88392444a4

View File

@@ -21,6 +21,8 @@ import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.DividerDefaults
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
@@ -38,6 +40,7 @@ import androidx.compose.ui.unit.sp
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.viewModelScope import androidx.lifecycle.viewModelScope
import androidx.navigation.NavHostController import androidx.navigation.NavHostController
import androidx.room.util.TableInfo
import coil3.compose.AsyncImage import coil3.compose.AsyncImage
import coil3.request.ImageRequest import coil3.request.ImageRequest
import com.acitelight.aether.Global.updateRelate import com.acitelight.aether.Global.updateRelate
@@ -59,41 +62,68 @@ fun TransmissionScreen(
transmissionScreenViewModel: TransmissionScreenViewModel = hiltViewModel<TransmissionScreenViewModel>() transmissionScreenViewModel: TransmissionScreenViewModel = hiltViewModel<TransmissionScreenViewModel>()
) { ) {
val downloads = transmissionScreenViewModel.downloads val downloads = transmissionScreenViewModel.downloads
Column()
{
Text(
text = "Video Tasks",
style = MaterialTheme.typography.headlineMedium,
modifier = Modifier.padding(8.dp).align(Alignment.Start)
)
LazyColumn( Text(
modifier = Modifier.fillMaxWidth(), text = "All: ${downloads.count { it.type == "main" }}",
verticalArrangement = Arrangement.spacedBy(8.dp) modifier = Modifier.padding(horizontal = 8.dp).align(Alignment.Start),
) { fontSize = 12.sp,
items(downloads.filter { it.type == "main" }, key = { it.id }) { item -> lineHeight = 13.sp,
VideoDownloadCard( maxLines = 1
navigator = navigator, )
viewModel = transmissionScreenViewModel,
model = item, Text(
onPause = { text = "Completed: ${downloads.count { it.type == "main" && it.status == Status.COMPLETED }}",
for (i in downloadToGroup( modifier = Modifier.padding(horizontal = 8.dp).align(Alignment.Start),
item, fontSize = 12.sp,
downloads lineHeight = 13.sp,
)) transmissionScreenViewModel.pause(i.id) maxLines = 1
}, )
onResume = {
for (i in downloadToGroup( HorizontalDivider(Modifier.padding(8.dp), 2.dp, DividerDefaults.color)
item,
downloads LazyColumn(
)) transmissionScreenViewModel.resume(i.id) modifier = Modifier.fillMaxWidth(),
}, verticalArrangement = Arrangement.spacedBy(8.dp)
onCancel = { )
for (i in downloadToGroup( {
item, items(downloads.filter { it.type == "main" }, key = { it.id }) { item ->
downloads VideoDownloadCard(
)) transmissionScreenViewModel.cancel(i.id) navigator = navigator,
}, viewModel = transmissionScreenViewModel,
onDelete = { model = item,
for (i in downloadToGroup( onPause = {
item, for (i in downloadToGroup(
downloads item,
)) transmissionScreenViewModel.delete(i.id, true) downloads
} )) transmissionScreenViewModel.pause(i.id)
) },
onResume = {
for (i in downloadToGroup(
item,
downloads
)) transmissionScreenViewModel.resume(i.id)
},
onCancel = {
for (i in downloadToGroup(
item,
downloads
)) transmissionScreenViewModel.cancel(i.id)
},
onDelete = {
for (i in downloadToGroup(
item,
downloads
)) transmissionScreenViewModel.delete(i.id, true)
}
)
}
} }
} }
} }