Don't pass BaseItem in destinations

This commit is contained in:
Damontecres 2026-01-06 13:12:48 -05:00
parent 12590d7221
commit 70fd36ccab
No known key found for this signature in database
12 changed files with 14 additions and 41 deletions

View file

@ -88,23 +88,21 @@ data class BaseItem(
Destination.SeriesOverview( Destination.SeriesOverview(
data.seriesId!!, data.seriesId!!,
BaseItemKind.SERIES, BaseItemKind.SERIES,
this,
SeasonEpisodeIds(seasonId, data.parentIndexNumber, id, indexNumber), SeasonEpisodeIds(seasonId, data.parentIndexNumber, id, indexNumber),
) )
} ?: Destination.MediaItem(id, type, this) } ?: Destination.MediaItem(this)
} }
BaseItemKind.SEASON -> { BaseItemKind.SEASON -> {
Destination.SeriesOverview( Destination.SeriesOverview(
data.seriesId!!, data.seriesId!!,
BaseItemKind.SERIES, BaseItemKind.SERIES,
this,
SeasonEpisodeIds(id, indexNumber, null, null), SeasonEpisodeIds(id, indexNumber, null, null),
) )
} }
else -> { else -> {
Destination.MediaItem(id, type, this) Destination.MediaItem(this)
} }
} }
return result return result

View file

@ -21,7 +21,6 @@ import dagger.hilt.android.scopes.ActivityScoped
import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import okhttp3.OkHttpClient import okhttp3.OkHttpClient
@ -46,7 +45,7 @@ class SeerrServerRepository
/** /**
* Whether Seerr integration is currently active of not * Whether Seerr integration is currently active of not
*/ */
suspend fun active(): Boolean = current.firstOrNull() != null && seerrApi.active val active: Flow<Boolean> = current.map { it != null && seerrApi.active }
fun clear() { fun clear() {
_current.update { null } _current.update { null }

View file

@ -88,7 +88,6 @@ class TrailerService
navigateTo.invoke( navigateTo.invoke(
Destination.Playback( Destination.Playback(
itemId = trailer.baseItem.id, itemId = trailer.baseItem.id,
item = trailer.baseItem,
positionMs = 0L, positionMs = 0L,
), ),
) )

View file

@ -9,7 +9,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import com.github.damontecres.wholphin.data.model.BaseItem
import com.github.damontecres.wholphin.data.model.CollectionFolderFilter import com.github.damontecres.wholphin.data.model.CollectionFolderFilter
import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.preferences.UserPreferences
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
@ -25,7 +24,6 @@ import java.util.UUID
fun CollectionFolderBoxSet( fun CollectionFolderBoxSet(
preferences: UserPreferences, preferences: UserPreferences,
itemId: UUID, itemId: UUID,
item: BaseItem?,
recursive: Boolean, recursive: Boolean,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
filter: CollectionFolderFilter = CollectionFolderFilter(), filter: CollectionFolderFilter = CollectionFolderFilter(),

View file

@ -9,7 +9,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import com.github.damontecres.wholphin.data.model.BaseItem
import com.github.damontecres.wholphin.data.model.CollectionFolderFilter import com.github.damontecres.wholphin.data.model.CollectionFolderFilter
import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.preferences.UserPreferences
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
@ -22,7 +21,6 @@ import java.util.UUID
fun CollectionFolderPlaylist( fun CollectionFolderPlaylist(
preferences: UserPreferences, preferences: UserPreferences,
itemId: UUID, itemId: UUID,
item: BaseItem?,
recursive: Boolean, recursive: Boolean,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
filter: CollectionFolderFilter = CollectionFolderFilter(), filter: CollectionFolderFilter = CollectionFolderFilter(),

View file

@ -78,7 +78,6 @@ fun buildMoreDialogItems(
Destination.Playback( Destination.Playback(
item.id, item.id,
item.resumeMs ?: 0L, item.resumeMs ?: 0L,
item,
), ),
) )
}, },
@ -166,6 +165,7 @@ fun buildMoreDialogItems(
Destination.MediaItem( Destination.MediaItem(
seriesId, seriesId,
BaseItemKind.SERIES, BaseItemKind.SERIES,
null,
), ),
) )
}, },
@ -200,7 +200,6 @@ fun buildMoreDialogItems(
Destination.Playback( Destination.Playback(
item.id, item.id,
item.resumeMs ?: 0L, item.resumeMs ?: 0L,
item,
forceTranscoding = true, forceTranscoding = true,
), ),
) )
@ -309,6 +308,7 @@ fun buildMoreDialogItemsForHome(
Destination.MediaItem( Destination.MediaItem(
it, it,
BaseItemKind.SERIES, BaseItemKind.SERIES,
null,
), ),
) )
}, },
@ -328,7 +328,7 @@ fun buildMoreDialogItemsForPerson(
context.getString(R.string.go_to), context.getString(R.string.go_to),
Icons.Default.ArrowForward, Icons.Default.ArrowForward,
) { ) {
actions.navigateTo(Destination.MediaItem(itemId, BaseItemKind.PERSON)) actions.navigateTo(Destination.MediaItem(itemId, BaseItemKind.PERSON, null))
}, },
) )
add( add(

View file

@ -129,7 +129,6 @@ fun EpisodeDetails(
Destination.Playback( Destination.Playback(
ep.id, ep.id,
it.inWholeMilliseconds, it.inWholeMilliseconds,
ep,
), ),
) )
}, },

View file

@ -167,7 +167,6 @@ fun MovieDetails(
Destination.Playback( Destination.Playback(
movie.id, movie.id,
it.inWholeMilliseconds, it.inWholeMilliseconds,
movie,
), ),
) )
}, },

View file

@ -305,7 +305,6 @@ fun SeriesOverview(
Destination.Playback( Destination.Playback(
it.id, it.id,
resumePosition.inWholeMilliseconds, resumePosition.inWholeMilliseconds,
it,
), ),
) )
}, },
@ -320,7 +319,6 @@ fun SeriesOverview(
Destination.Playback( Destination.Playback(
it.id, it.id,
resume.inWholeMilliseconds, resume.inWholeMilliseconds,
it,
), ),
) )
} }

View file

@ -10,13 +10,12 @@ import com.github.damontecres.wholphin.data.model.DiscoverItem
import com.github.damontecres.wholphin.data.model.GetItemsFilter import com.github.damontecres.wholphin.data.model.GetItemsFilter
import com.github.damontecres.wholphin.data.model.ItemPlayback import com.github.damontecres.wholphin.data.model.ItemPlayback
import com.github.damontecres.wholphin.ui.data.SortAndDirection import com.github.damontecres.wholphin.ui.data.SortAndDirection
import com.github.damontecres.wholphin.ui.detail.series.SeasonEpisode
import com.github.damontecres.wholphin.ui.detail.series.SeasonEpisodeIds import com.github.damontecres.wholphin.ui.detail.series.SeasonEpisodeIds
import com.github.damontecres.wholphin.ui.preferences.PreferenceScreenOption import com.github.damontecres.wholphin.ui.preferences.PreferenceScreenOption
import kotlinx.serialization.Serializable import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.UseSerializers import kotlinx.serialization.UseSerializers
import org.jellyfin.sdk.model.api.BaseItemKind import org.jellyfin.sdk.model.api.BaseItemKind
import org.jellyfin.sdk.model.api.CollectionType
import org.jellyfin.sdk.model.serializer.UUIDSerializer import org.jellyfin.sdk.model.serializer.UUIDSerializer
import java.util.UUID import java.util.UUID
@ -46,7 +45,6 @@ sealed class Destination(
data class SeriesOverview( data class SeriesOverview(
val itemId: UUID, val itemId: UUID,
val type: BaseItemKind, val type: BaseItemKind,
@Transient val item: BaseItem? = null,
val seasonEpisode: SeasonEpisodeIds? = null, val seasonEpisode: SeasonEpisodeIds? = null,
) : Destination() { ) : Destination() {
override fun toString(): String = "SeriesOverview(itemId=$itemId, type=$type, seasonEpisode=$seasonEpisode)" override fun toString(): String = "SeriesOverview(itemId=$itemId, type=$type, seasonEpisode=$seasonEpisode)"
@ -56,11 +54,9 @@ sealed class Destination(
data class MediaItem( data class MediaItem(
val itemId: UUID, val itemId: UUID,
val type: BaseItemKind, val type: BaseItemKind,
@Transient val item: BaseItem? = null, val collectionType: CollectionType? = null,
val seasonEpisode: SeasonEpisode? = null,
) : Destination() { ) : Destination() {
override fun toString(): String = constructor(item: BaseItem) : this(item.id, item.type, item.data.collectionType)
"MediaItem(itemId=$itemId, type=$type, seasonEpisode=$seasonEpisode, collectionType=${item?.data?.collectionType})"
} }
@Serializable @Serializable
@ -72,13 +68,10 @@ sealed class Destination(
data class Playback( data class Playback(
val itemId: UUID, val itemId: UUID,
val positionMs: Long, val positionMs: Long,
@Transient val item: BaseItem? = null,
val itemPlayback: ItemPlayback? = null, val itemPlayback: ItemPlayback? = null,
val forceTranscoding: Boolean = false, val forceTranscoding: Boolean = false,
) : Destination(true) { ) : Destination(true) {
override fun toString(): String = "Playback(itemId=$itemId, positionMs=$positionMs)" constructor(item: BaseItem) : this(item.id, item.resumeMs)
constructor(item: BaseItem) : this(item.id, item.resumeMs, item)
} }
@Serializable @Serializable

View file

@ -126,7 +126,6 @@ fun DestinationContent(
CollectionFolderBoxSet( CollectionFolderBoxSet(
preferences = preferences, preferences = preferences,
itemId = destination.itemId, itemId = destination.itemId,
item = destination.item,
recursive = false, recursive = false,
playEnabled = true, playEnabled = true,
modifier = modifier, modifier = modifier,
@ -146,7 +145,7 @@ fun DestinationContent(
CollectionFolder( CollectionFolder(
preferences = preferences, preferences = preferences,
destination = destination, destination = destination,
collectionType = destination.item?.data?.collectionType, collectionType = destination.collectionType,
usePostersOverride = null, usePostersOverride = null,
recursiveOverride = null, recursiveOverride = null,
modifier = modifier, modifier = modifier,
@ -158,7 +157,7 @@ fun DestinationContent(
CollectionFolder( CollectionFolder(
preferences = preferences, preferences = preferences,
destination = destination, destination = destination,
collectionType = destination.item?.data?.collectionType, collectionType = destination.collectionType,
usePostersOverride = true, usePostersOverride = true,
recursiveOverride = null, recursiveOverride = null,
modifier = modifier, modifier = modifier,
@ -170,7 +169,7 @@ fun DestinationContent(
CollectionFolder( CollectionFolder(
preferences = preferences, preferences = preferences,
destination = destination, destination = destination,
collectionType = destination.item?.data?.collectionType, collectionType = destination.collectionType,
usePostersOverride = null, usePostersOverride = null,
recursiveOverride = true, recursiveOverride = true,
modifier = modifier, modifier = modifier,
@ -336,7 +335,6 @@ fun CollectionFolder(
CollectionFolderPlaylist( CollectionFolderPlaylist(
preferences, preferences,
destination.itemId, destination.itemId,
destination.item,
true, true,
modifier, modifier,
) )

View file

@ -233,13 +233,7 @@ class PlaybackViewModel
"Error preparing for playback for $itemId", "Error preparing for playback for $itemId",
), ),
) { ) {
val destItem = (destination as? Destination.Playback)?.item?.data val queriedItem = api.userLibraryApi.getItem(itemId).content
val queriedItem =
if (destItem?.mediaSources != null) {
destItem
} else {
api.userLibraryApi.getItem(itemId).content
}
val base = val base =
if (queriedItem.type.playable) { if (queriedItem.type.playable) {
queriedItem queriedItem