feat: update media selection logic to handle offline state in view models and DTOs

This commit is contained in:
2026-05-14 12:56:48 +02:00
parent 83730188eb
commit f60aba5a72
19 changed files with 111 additions and 72 deletions

View File

@@ -43,11 +43,7 @@ fun EpisodeScreen(
val previousRoute = remember(backStack) { backStack.getOrNull(backStack.lastIndex - 1) }
LaunchedEffect(episode) {
viewModel.selectEpisode(
seriesId = episode.seriesId,
seasonId = episode.seasonId,
episodeId = episode.id
)
viewModel.selectEpisode(episode)
}
val episode = viewModel.episode.collectAsState()

View File

@@ -35,8 +35,8 @@ fun MovieScreen(
viewModel: MovieScreenViewModel = hiltViewModel(),
modifier: Modifier = Modifier
) {
LaunchedEffect(movie.id) {
viewModel.selectMovie(movie.id)
LaunchedEffect(movie) {
viewModel.selectMovie(movie)
}
val movieItem = viewModel.movie.collectAsState()

View File

@@ -45,13 +45,13 @@ fun SeriesScreen(
modifier: Modifier = Modifier,
viewModel: SeriesViewModel = hiltViewModel()
) {
LaunchedEffect(series.id) {
viewModel.selectSeries(series.id)
LaunchedEffect(series) {
viewModel.selectSeries(series)
}
val series = viewModel.series.collectAsState()
val seriesState = viewModel.series.collectAsState()
val seriesData = series.value
val seriesData = seriesState.value
if (seriesData != null && seriesData.seasons.isNotEmpty()) {
LaunchedEffect(seriesData) {
viewModel.observeSeriesDownloadState(seriesData)
@@ -75,6 +75,7 @@ fun SeriesScreen(
onLoadSeasonEpisodes = viewModel::loadSeasonEpisodes,
onObserveSeasonDownloadState = viewModel::observeSeasonDownloadState,
onBack = viewModel::onGoHome,
offline = series.offline,
modifier = modifier
)
} else {
@@ -91,6 +92,7 @@ private fun SeriesScreenInternal(
onLoadSeasonEpisodes: (UUID, UUID) -> Unit,
onObserveSeasonDownloadState: (List<Episode>) -> Unit,
onBack: () -> Unit,
offline: Boolean,
modifier: Modifier = Modifier,
) {
val scheme = MaterialTheme.colorScheme
@@ -128,6 +130,7 @@ private fun SeriesScreenInternal(
seriesDownloadState = seriesDownloadState,
selectedSeason = selectedSeason,
seasonDownloadState = seasonDownloadState,
offline = offline,
onDownloadOptionSelected = { option ->
onDownloadOptionSelected(option, selectedSeason)
}
@@ -188,7 +191,8 @@ private fun SeriesScreenPreview() {
onDownloadOptionSelected = { _, _ -> },
onLoadSeasonEpisodes = { _, _ -> },
onObserveSeasonDownloadState = {},
onBack = {}
onBack = {},
offline = false,
)
}
}

View File

@@ -112,6 +112,7 @@ internal fun SeriesActionButtons(
seriesDownloadState: DownloadState,
selectedSeason: Season,
seasonDownloadState: DownloadState,
offline: Boolean,
onDownloadOptionSelected: (SeriesDownloadOption) -> Unit,
modifier: Modifier = Modifier,
) {
@@ -119,8 +120,7 @@ internal fun SeriesActionButtons(
val navigationManager = LocalNavigationManager.current
val scheme = MaterialTheme.colorScheme
var showDownloadDialog by remember { mutableStateOf(false) }
val episodeId = nextUpEpisode?.id
val playAction = remember(nextUpEpisode) {
val playAction = remember(nextUpEpisode, offline) {
nextUpEpisode?.let { episode ->
{
navigationManager.navigate(
@@ -128,7 +128,8 @@ internal fun SeriesActionButtons(
EpisodeDto(
id = episode.id,
seasonId = episode.seasonId,
seriesId = episode.seriesId
seriesId = episode.seriesId,
offline = offline,
)
)
)