From 9d67b9a3ca50e974ed2d54ab9689a4b6430f7475 Mon Sep 17 00:00:00 2001 From: Damontecres Date: Tue, 14 Oct 2025 19:34:45 -0400 Subject: [PATCH] Remove unused code --- .../dolphin/data/model/DolphinModel.kt | 30 ---- .../damontecres/dolphin/data/model/Library.kt | 31 ---- .../damontecres/dolphin/data/model/Video.kt | 28 --- .../cards/{ItemCard.kt => ItemCardImage.kt} | 117 ------------ .../damontecres/dolphin/ui/cards/ItemRow.kt | 11 +- .../damontecres/dolphin/ui/cards/NullCard.kt | 39 ---- .../ui/components/CollectionFolderGrid.kt | 3 +- .../dolphin/ui/detail/EpisodeDetails.kt | 166 ------------------ .../dolphin/ui/detail/ItemViewModel.kt | 6 +- .../dolphin/ui/detail/PlaylistDetails.kt | 13 +- .../dolphin/ui/detail/SeasonDetails.kt | 113 ------------ .../dolphin/ui/detail/SeriesViewModel.kt | 3 +- .../dolphin/ui/detail/VideoDetails.kt | 3 +- .../dolphin/ui/detail/movie/MovieDetails.kt | 3 +- .../dolphin/ui/nav/DestinationContent.kt | 16 -- 15 files changed, 12 insertions(+), 570 deletions(-) delete mode 100644 app/src/main/java/com/github/damontecres/dolphin/data/model/DolphinModel.kt delete mode 100644 app/src/main/java/com/github/damontecres/dolphin/data/model/Library.kt delete mode 100644 app/src/main/java/com/github/damontecres/dolphin/data/model/Video.kt rename app/src/main/java/com/github/damontecres/dolphin/ui/cards/{ItemCard.kt => ItemCardImage.kt} (60%) delete mode 100644 app/src/main/java/com/github/damontecres/dolphin/ui/cards/NullCard.kt delete mode 100644 app/src/main/java/com/github/damontecres/dolphin/ui/detail/EpisodeDetails.kt delete mode 100644 app/src/main/java/com/github/damontecres/dolphin/ui/detail/SeasonDetails.kt diff --git a/app/src/main/java/com/github/damontecres/dolphin/data/model/DolphinModel.kt b/app/src/main/java/com/github/damontecres/dolphin/data/model/DolphinModel.kt deleted file mode 100644 index c26598de..00000000 --- a/app/src/main/java/com/github/damontecres/dolphin/data/model/DolphinModel.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.github.damontecres.dolphin.data.model - -import org.jellyfin.sdk.api.client.ApiClient -import org.jellyfin.sdk.model.api.BaseItemDto -import org.jellyfin.sdk.model.api.BaseItemKind -import java.util.UUID - -sealed interface DolphinModel { - val id: UUID - val name: String? - val type: BaseItemKind - val imageUrl: String? -} - -fun convertModel( - dto: BaseItemDto, - api: ApiClient, -): DolphinModel = - when (dto.type) { - BaseItemKind.COLLECTION_FOLDER -> Library.fromDto(dto, api) - BaseItemKind.USER_VIEW -> Library.fromDto(dto, api) - - // TODO - BaseItemKind.VIDEO -> Video.fromDto(dto, api) - BaseItemKind.SERIES -> Video.fromDto(dto, api) - BaseItemKind.MOVIE -> Video.fromDto(dto, api) - BaseItemKind.SEASON -> Video.fromDto(dto, api) - BaseItemKind.EPISODE -> Video.fromDto(dto, api) - else -> throw IllegalArgumentException("Unsupported item type: ${dto.type}") - } diff --git a/app/src/main/java/com/github/damontecres/dolphin/data/model/Library.kt b/app/src/main/java/com/github/damontecres/dolphin/data/model/Library.kt deleted file mode 100644 index 06d59d39..00000000 --- a/app/src/main/java/com/github/damontecres/dolphin/data/model/Library.kt +++ /dev/null @@ -1,31 +0,0 @@ -package com.github.damontecres.dolphin.data.model - -import org.jellyfin.sdk.api.client.ApiClient -import org.jellyfin.sdk.api.client.extensions.imageApi -import org.jellyfin.sdk.model.api.BaseItemDto -import org.jellyfin.sdk.model.api.BaseItemKind -import org.jellyfin.sdk.model.api.CollectionType -import org.jellyfin.sdk.model.api.ImageType -import java.util.UUID - -data class Library( - override val id: UUID, - override val name: String?, - override val type: BaseItemKind, - override val imageUrl: String?, - val collectionType: CollectionType, -) : DolphinModel { - companion object { - fun fromDto( - dto: BaseItemDto, - api: ApiClient, - ): Library = - Library( - id = dto.id, - name = dto.name, - type = dto.type, - imageUrl = api.imageApi.getItemImageUrl(dto.id, ImageType.PRIMARY), - collectionType = dto.collectionType ?: CollectionType.UNKNOWN, - ) - } -} diff --git a/app/src/main/java/com/github/damontecres/dolphin/data/model/Video.kt b/app/src/main/java/com/github/damontecres/dolphin/data/model/Video.kt deleted file mode 100644 index 99ba6d43..00000000 --- a/app/src/main/java/com/github/damontecres/dolphin/data/model/Video.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.github.damontecres.dolphin.data.model - -import org.jellyfin.sdk.api.client.ApiClient -import org.jellyfin.sdk.api.client.extensions.imageApi -import org.jellyfin.sdk.model.api.BaseItemDto -import org.jellyfin.sdk.model.api.BaseItemKind -import org.jellyfin.sdk.model.api.ImageType -import java.util.UUID - -data class Video( - override val id: UUID, - override val name: String?, - override val type: BaseItemKind, - override val imageUrl: String?, -) : DolphinModel { - companion object { - fun fromDto( - dto: BaseItemDto, - api: ApiClient, - ): Video = - Video( - id = dto.id, - name = dto.name, - type = dto.type, - imageUrl = api.imageApi.getItemImageUrl(dto.id, ImageType.PRIMARY), - ) - } -} diff --git a/app/src/main/java/com/github/damontecres/dolphin/ui/cards/ItemCard.kt b/app/src/main/java/com/github/damontecres/dolphin/ui/cards/ItemCardImage.kt similarity index 60% rename from app/src/main/java/com/github/damontecres/dolphin/ui/cards/ItemCard.kt rename to app/src/main/java/com/github/damontecres/dolphin/ui/cards/ItemCardImage.kt index a7cbe5ce..6b68004c 100644 --- a/app/src/main/java/com/github/damontecres/dolphin/ui/cards/ItemCard.kt +++ b/app/src/main/java/com/github/damontecres/dolphin/ui/cards/ItemCardImage.kt @@ -5,22 +5,16 @@ import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.foundation.Image import androidx.compose.foundation.background -import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.interaction.collectIsFocusedAsState -import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.CheckCircle import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember @@ -29,134 +23,23 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.BlendMode -import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.RectangleShape import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.colorResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.tv.material3.Card -import androidx.tv.material3.CardDefaults import androidx.tv.material3.Icon import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text import coil3.compose.AsyncImage import com.github.damontecres.dolphin.R -import com.github.damontecres.dolphin.data.model.BaseItem import com.github.damontecres.dolphin.ui.Cards import com.github.damontecres.dolphin.ui.FontAwesome -import com.github.damontecres.dolphin.ui.enableMarquee -import com.github.damontecres.dolphin.ui.ifElse import com.github.damontecres.dolphin.ui.isNotNullOrBlank import com.github.damontecres.dolphin.ui.logCoilError -import com.github.damontecres.dolphin.util.seasonEpisode -import kotlinx.coroutines.delay -import org.jellyfin.sdk.model.api.BaseItemKind - -@Composable -@Deprecated("Old style, prefer SeasonCard or other Card") -fun ItemCard( - item: BaseItem?, - onClick: () -> Unit, - onLongClick: () -> Unit, - modifier: Modifier = Modifier, - cardWidth: Dp? = null, - cardHeight: Dp? = 200.dp * .85f, - interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, -) { - val hideOverlayDelay = 750L - - val focused = interactionSource.collectIsFocusedAsState().value - var focusedAfterDelay by remember { mutableStateOf(false) } - - if (focused) { - LaunchedEffect(Unit) { - delay(hideOverlayDelay) - if (focused) { - focusedAfterDelay = true - } else { - focusedAfterDelay = false - } - } - } else { - focusedAfterDelay = false - } - - if (item == null) { - NullCard(modifier, cardWidth, cardHeight, interactionSource) - } else { - val dto = item.data - // TODO better aspect ratio handling -// val height = -// if (dto.primaryImageAspectRatio != null && dto.primaryImageAspectRatio!! > 1) cardWidth else cardHeight - Card( - modifier = modifier, - onClick = onClick, - onLongClick = onLongClick, - interactionSource = interactionSource, - colors = - CardDefaults.colors( - containerColor = Color.Transparent, - ), - ) { - Column( - verticalArrangement = Arrangement.spacedBy(4.dp), - modifier = Modifier.ifElse(cardWidth != null, { Modifier.width(cardWidth!!) }), - ) { - ItemCardImage( - imageUrl = item.imageUrl, - name = item.name, - showOverlay = !focusedAfterDelay, - favorite = dto.userData?.isFavorite ?: false, - watched = dto.userData?.played ?: false, - unwatchedCount = dto.userData?.unplayedItemCount ?: -1, - watchedPercent = dto.userData?.playedPercentage, - modifier = - Modifier - .fillMaxWidth() - .ifElse(cardHeight != null, { Modifier.height(cardHeight!!) }), - ) - Column( - verticalArrangement = Arrangement.spacedBy(0.dp), - modifier = Modifier.padding(bottom = 4.dp), - ) { - Text( - text = item.name ?: "", - maxLines = 1, - textAlign = TextAlign.Center, - modifier = - Modifier - .fillMaxWidth() - .padding(horizontal = 4.dp) - .enableMarquee(focusedAfterDelay), - ) - Text( - text = item.data.productionYear?.toString() ?: "", - maxLines = 1, - textAlign = TextAlign.Center, - modifier = - Modifier - .fillMaxWidth() - .padding(horizontal = 4.dp) - .enableMarquee(focusedAfterDelay), - ) - } - if (dto.type == BaseItemKind.EPISODE) { - dto.seasonEpisode?.let { - Text( - text = it, - ) - } - } - } - } - } -} @Composable fun ItemCardImage( diff --git a/app/src/main/java/com/github/damontecres/dolphin/ui/cards/ItemRow.kt b/app/src/main/java/com/github/damontecres/dolphin/ui/cards/ItemRow.kt index 92a67704..2eb1fd58 100644 --- a/app/src/main/java/com/github/damontecres/dolphin/ui/cards/ItemRow.kt +++ b/app/src/main/java/com/github/damontecres/dolphin/ui/cards/ItemRow.kt @@ -29,21 +29,14 @@ fun ItemRow( items: List, onClickItem: (BaseItem) -> Unit, onLongClickItem: (BaseItem) -> Unit, - modifier: Modifier = Modifier, cardContent: @Composable ( index: Int, item: BaseItem?, modifier: Modifier, onClick: () -> Unit, onLongClick: () -> Unit, - ) -> Unit = { index, item, mod, onClick, onLongClick -> - ItemCard( - item = item, - onClick = onClick, - onLongClick = onLongClick, - modifier = mod, - ) - }, + ) -> Unit, + modifier: Modifier = Modifier, focusPair: FocusPair? = null, cardOnFocus: ((isFocused: Boolean, index: Int) -> Unit)? = null, ) { diff --git a/app/src/main/java/com/github/damontecres/dolphin/ui/cards/NullCard.kt b/app/src/main/java/com/github/damontecres/dolphin/ui/cards/NullCard.kt deleted file mode 100644 index 00f72096..00000000 --- a/app/src/main/java/com/github/damontecres/dolphin/ui/cards/NullCard.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.github.damontecres.dolphin.ui.cards - -import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.width -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.Dp -import androidx.compose.ui.unit.dp -import androidx.tv.material3.Card -import androidx.tv.material3.Text -import com.github.damontecres.dolphin.ui.ifElse - -@Composable -@Deprecated("Cards should handle nulls natively") -fun NullCard( - modifier: Modifier = Modifier, - cardWidth: Dp? = null, - cardHeight: Dp? = 200.dp * .75f, - interactionSource: MutableInteractionSource? = null, -) { - Card( - modifier = modifier, - onClick = {}, - interactionSource = interactionSource, - ) { - Column( - modifier = - Modifier - .ifElse(cardHeight != null, { Modifier.height(cardHeight!!) }) - .ifElse(cardWidth != null, { Modifier.width(cardWidth!!) }), - ) { - Text( - text = "Loading...", - ) - } - } -} diff --git a/app/src/main/java/com/github/damontecres/dolphin/ui/components/CollectionFolderGrid.kt b/app/src/main/java/com/github/damontecres/dolphin/ui/components/CollectionFolderGrid.kt index a5c90ff6..8b571a95 100644 --- a/app/src/main/java/com/github/damontecres/dolphin/ui/components/CollectionFolderGrid.kt +++ b/app/src/main/java/com/github/damontecres/dolphin/ui/components/CollectionFolderGrid.kt @@ -27,7 +27,6 @@ import androidx.lifecycle.viewModelScope import androidx.tv.material3.MaterialTheme import androidx.tv.material3.Text import com.github.damontecres.dolphin.data.model.BaseItem -import com.github.damontecres.dolphin.data.model.Library import com.github.damontecres.dolphin.preferences.UserPreferences import com.github.damontecres.dolphin.ui.DefaultItemFields import com.github.damontecres.dolphin.ui.OneTimeLaunchedEffect @@ -63,7 +62,7 @@ class CollectionFolderViewModel @Inject constructor( api: ApiClient, - ) : ItemViewModel(api) { + ) : ItemViewModel(api) { val loading = MutableLiveData(LoadingState.Loading) val pager = MutableLiveData>(listOf()) val sortAndDirection = MutableLiveData() diff --git a/app/src/main/java/com/github/damontecres/dolphin/ui/detail/EpisodeDetails.kt b/app/src/main/java/com/github/damontecres/dolphin/ui/detail/EpisodeDetails.kt deleted file mode 100644 index d0d7d8cb..00000000 --- a/app/src/main/java/com/github/damontecres/dolphin/ui/detail/EpisodeDetails.kt +++ /dev/null @@ -1,166 +0,0 @@ -package com.github.damontecres.dolphin.ui.detail - -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.relocation.BringIntoViewRequester -import androidx.compose.foundation.relocation.bringIntoViewRequester -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.livedata.observeAsState -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.drawWithContent -import androidx.compose.ui.graphics.Brush -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.unit.dp -import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel -import androidx.tv.material3.MaterialTheme -import coil3.compose.AsyncImage -import com.github.damontecres.dolphin.data.model.BaseItem -import com.github.damontecres.dolphin.data.model.Video -import com.github.damontecres.dolphin.preferences.UserPreferences -import com.github.damontecres.dolphin.ui.components.ErrorMessage -import com.github.damontecres.dolphin.ui.components.LoadingPage -import com.github.damontecres.dolphin.ui.components.details.VideoDetailsHeader -import com.github.damontecres.dolphin.ui.isNotNullOrBlank -import com.github.damontecres.dolphin.ui.nav.Destination -import com.github.damontecres.dolphin.util.LoadingState -import com.github.damontecres.dolphin.util.seasonEpisode -import dagger.hilt.android.lifecycle.HiltViewModel -import org.jellyfin.sdk.api.client.ApiClient -import org.jellyfin.sdk.model.api.ImageType -import org.jellyfin.sdk.model.extensions.ticks -import timber.log.Timber -import javax.inject.Inject -import kotlin.time.Duration.Companion.seconds - -@HiltViewModel -class EpisodeViewModel - @Inject - constructor( - api: ApiClient, - ) : LoadingItemViewModel