From 0bb91f24388dbd868ebee203f2baec424ae498fd Mon Sep 17 00:00:00 2001 From: Damontecres Date: Fri, 6 Mar 2026 16:36:38 -0500 Subject: [PATCH] WIP Playlist updates --- .../wholphin/data/model/BaseItem.kt | 2 + .../wholphin/ui/detail/PlaylistDetails.kt | 45 +++++++++++-------- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt b/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt index 3c34851b..dda53beb 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/data/model/BaseItem.kt @@ -8,6 +8,7 @@ import androidx.compose.ui.text.buildAnnotatedString import com.github.damontecres.wholphin.ui.DateFormatter import com.github.damontecres.wholphin.ui.abbreviateNumber import com.github.damontecres.wholphin.ui.detail.CardGridItem +import com.github.damontecres.wholphin.ui.detail.music.artistsString import com.github.damontecres.wholphin.ui.detail.series.SeasonEpisodeIds import com.github.damontecres.wholphin.ui.dot import com.github.damontecres.wholphin.ui.formatDateTime @@ -57,6 +58,7 @@ data class BaseItem( when (type) { BaseItemKind.EPISODE -> data.seasonEpisode + " - " + name BaseItemKind.SERIES -> data.seriesProductionYears + BaseItemKind.AUDIO -> listOfNotNull(data.album, artistsString).joinToString(" - ") else -> data.productionYear?.toString() } diff --git a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt index 57c8c5d6..5563dead 100644 --- a/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt +++ b/app/src/main/java/com/github/damontecres/wholphin/ui/detail/PlaylistDetails.kt @@ -61,6 +61,8 @@ import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.GetItemsFilter import com.github.damontecres.wholphin.data.model.LibraryDisplayInfo import com.github.damontecres.wholphin.services.BackdropService +import com.github.damontecres.wholphin.services.MusicService +import com.github.damontecres.wholphin.services.MusicServiceState import com.github.damontecres.wholphin.services.NavigationManager import com.github.damontecres.wholphin.ui.DefaultItemFields import com.github.damontecres.wholphin.ui.TimeFormatter @@ -117,6 +119,7 @@ class PlaylistViewModel private val backdropService: BackdropService, private val serverRepository: ServerRepository, private val libraryDisplayInfoDao: LibraryDisplayInfoDao, + private val musicService: MusicService, ) : ItemViewModel(api) { val loading = MutableLiveData(LoadingState.Pending) val items = MutableLiveData>(listOf()) @@ -131,6 +134,7 @@ class PlaylistViewModel ), ), ) + val musicState = musicService.state fun init(playlistId: UUID) { loading.value = LoadingState.Loading @@ -253,6 +257,7 @@ fun PlaylistDetails( val playlist by viewModel.item.observeAsState(null) val items by viewModel.items.observeAsState(listOf()) val filterAndSort by viewModel.filterAndSort.collectAsState() + val musicState by viewModel.musicState.collectAsState() var longClickDialog by remember { mutableStateOf(null) } @@ -263,6 +268,7 @@ fun PlaylistDetails( loadingState = loading, playlist = playlist, items = items, + musicState = musicState, onChangeBackdrop = viewModel::updateBackdrop, onClickIndex = { index, _ -> viewModel.navigationManager.navigateTo( @@ -333,6 +339,7 @@ fun PlaylistDetails( fun PlaylistDetailsContent( playlist: BaseItem?, items: List, + musicState: MusicServiceState, onClickIndex: (Int, BaseItem) -> Unit, onLongClickIndex: (Int, BaseItem) -> Unit, onClickPlay: (shuffle: Boolean) -> Unit, @@ -592,14 +599,12 @@ fun PlaylistItem( headlineContent = { Text( text = item?.title ?: "", - style = MaterialTheme.typography.titleLarge, modifier = Modifier.enableMarquee(focused), ) }, supportingContent = { Text( text = item?.subtitle ?: "", - style = MaterialTheme.typography.titleSmall, modifier = Modifier.enableMarquee(focused), ) }, @@ -615,10 +620,12 @@ fun PlaylistItem( Text( text = duration.toString(), ) - Text( - text = stringResource(R.string.ends_at, endTimeStr), - style = MaterialTheme.typography.bodySmall, - ) + if (item.type != BaseItemKind.AUDIO) { + Text( + text = stringResource(R.string.ends_at, endTimeStr), + style = MaterialTheme.typography.bodySmall, + ) + } } } }, @@ -631,18 +638,20 @@ fun PlaylistItem( text = "${index + 1}.", style = MaterialTheme.typography.labelLarge, ) - ItemCardImage( - item = item, - name = item?.name, - showOverlay = true, - favorite = item?.data?.userData?.isFavorite ?: false, - watched = item?.data?.userData?.played ?: false, - unwatchedCount = item?.data?.userData?.unplayedItemCount ?: -1, - watchedPercent = 0.0, - numberOfVersions = item?.data?.mediaSourceCount ?: 0, - modifier = Modifier.width(160.dp), - useFallbackText = false, - ) + if (item?.type != BaseItemKind.AUDIO) { + ItemCardImage( + item = item, + name = item?.name, + showOverlay = true, + favorite = item?.data?.userData?.isFavorite ?: false, + watched = item?.data?.userData?.played ?: false, + unwatchedCount = item?.data?.userData?.unplayedItemCount ?: -1, + watchedPercent = 0.0, + numberOfVersions = item?.data?.mediaSourceCount ?: 0, + modifier = Modifier.width(160.dp), + useFallbackText = false, + ) + } } }, modifier = modifier,