Compare commits
2 Commits
9bad0dcbc2
...
88392444a4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88392444a4 | ||
|
|
2166229923 |
@@ -120,6 +120,10 @@ class FetchManager @Inject constructor(
|
||||
}
|
||||
|
||||
suspend fun startVideoDownload(video: Video) {
|
||||
if(getAllDownloadsAsync().any{
|
||||
it.extras.getString("class", "") == video.klass && it.extras.getString("id", "") == video.id })
|
||||
return
|
||||
|
||||
makeFolder(video)
|
||||
File(
|
||||
context.getExternalFilesDir(null),
|
||||
|
||||
@@ -21,6 +21,8 @@ import androidx.compose.material.icons.filled.PlayArrow
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.DividerDefaults
|
||||
import androidx.compose.material3.HorizontalDivider
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.LinearProgressIndicator
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
@@ -38,6 +40,7 @@ import androidx.compose.ui.unit.sp
|
||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.room.util.TableInfo
|
||||
import coil3.compose.AsyncImage
|
||||
import coil3.request.ImageRequest
|
||||
import com.acitelight.aether.Global.updateRelate
|
||||
@@ -51,6 +54,7 @@ import kotlinx.coroutines.withContext
|
||||
import kotlinx.serialization.json.Json
|
||||
import java.io.File
|
||||
import kotlin.collections.sortedWith
|
||||
import kotlin.math.abs
|
||||
|
||||
@Composable
|
||||
fun TransmissionScreen(
|
||||
@@ -58,41 +62,68 @@ fun TransmissionScreen(
|
||||
transmissionScreenViewModel: TransmissionScreenViewModel = hiltViewModel<TransmissionScreenViewModel>()
|
||||
) {
|
||||
val downloads = transmissionScreenViewModel.downloads
|
||||
Column()
|
||||
{
|
||||
Text(
|
||||
text = "Video Tasks",
|
||||
style = MaterialTheme.typography.headlineMedium,
|
||||
modifier = Modifier.padding(8.dp).align(Alignment.Start)
|
||||
)
|
||||
|
||||
LazyColumn(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp)
|
||||
) {
|
||||
items(downloads.filter { it.type == "main" }, key = { it.id }) { item ->
|
||||
VideoDownloadCard(
|
||||
navigator = navigator,
|
||||
viewModel = transmissionScreenViewModel,
|
||||
model = item,
|
||||
onPause = {
|
||||
for (i in downloadToGroup(
|
||||
item,
|
||||
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)
|
||||
}
|
||||
)
|
||||
Text(
|
||||
text = "All: ${downloads.count { it.type == "main" }}",
|
||||
modifier = Modifier.padding(horizontal = 8.dp).align(Alignment.Start),
|
||||
fontSize = 12.sp,
|
||||
lineHeight = 13.sp,
|
||||
maxLines = 1
|
||||
)
|
||||
|
||||
Text(
|
||||
text = "Completed: ${downloads.count { it.type == "main" && it.status == Status.COMPLETED }}",
|
||||
modifier = Modifier.padding(horizontal = 8.dp).align(Alignment.Start),
|
||||
fontSize = 12.sp,
|
||||
lineHeight = 13.sp,
|
||||
maxLines = 1
|
||||
)
|
||||
|
||||
HorizontalDivider(Modifier.padding(8.dp), 2.dp, DividerDefaults.color)
|
||||
|
||||
LazyColumn(
|
||||
modifier = Modifier.fillMaxWidth(),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp)
|
||||
)
|
||||
{
|
||||
items(downloads.filter { it.type == "main" }, key = { it.id }) { item ->
|
||||
VideoDownloadCard(
|
||||
navigator = navigator,
|
||||
viewModel = transmissionScreenViewModel,
|
||||
model = item,
|
||||
onPause = {
|
||||
for (i in downloadToGroup(
|
||||
item,
|
||||
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)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -254,7 +285,7 @@ private fun VideoDownloadCard(
|
||||
|
||||
// progress bar
|
||||
LinearProgressIndicator(
|
||||
progress = { model.progress.coerceIn(0, 100) / 100f },
|
||||
progress = { abs(model.progress).coerceIn(0, 100) / 100f },
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(top = 8.dp, bottom = 8.dp),
|
||||
|
||||
@@ -349,12 +349,13 @@ fun VideoCard(
|
||||
{
|
||||
videoScreenViewModel.download(i)
|
||||
}
|
||||
Toast.makeText(
|
||||
videoScreenViewModel.context,
|
||||
"Start downloading ${video.video.group}",
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
Toast.makeText(
|
||||
videoScreenViewModel.context,
|
||||
"Start downloading ${video.video.group}",
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
|
||||
}
|
||||
),
|
||||
shape = RoundedCornerShape(6.dp),
|
||||
|
||||
@@ -36,7 +36,7 @@ import javax.inject.Singleton
|
||||
|
||||
@HiltViewModel
|
||||
class VideoScreenViewModel @Inject constructor(
|
||||
private val fetchManager: FetchManager,
|
||||
val fetchManager: FetchManager,
|
||||
@ApplicationContext val context: Context,
|
||||
val mediaManager: MediaManager,
|
||||
val recentManager: RecentManager,
|
||||
@@ -82,7 +82,9 @@ class VideoScreenViewModel @Inject constructor(
|
||||
videoLibrary.classesMap["Offline"] = mutableStateListOf<Video>()
|
||||
|
||||
val downloaded = fetchManager.getAllDownloadsAsync().filter {
|
||||
it.status == Status.COMPLETED && it.extras.getString("class", "") != "comic"
|
||||
it.status == Status.COMPLETED &&
|
||||
it.extras.getString("class", "") != "comic" &&
|
||||
it.extras.getString("type", "") == "main"
|
||||
}
|
||||
|
||||
val jsonQuery = downloaded.map{ File(
|
||||
|
||||
Reference in New Issue
Block a user