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(
data.seriesId!!,
BaseItemKind.SERIES,
this,
SeasonEpisodeIds(seasonId, data.parentIndexNumber, id, indexNumber),
)
} ?: Destination.MediaItem(id, type, this)
} ?: Destination.MediaItem(this)
}
BaseItemKind.SEASON -> {
Destination.SeriesOverview(
data.seriesId!!,
BaseItemKind.SERIES,
this,
SeasonEpisodeIds(id, indexNumber, null, null),
)
}
else -> {
Destination.MediaItem(id, type, this)
Destination.MediaItem(this)
}
}
return result

View file

@ -21,7 +21,6 @@ import dagger.hilt.android.scopes.ActivityScoped
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.update
import okhttp3.OkHttpClient
@ -46,7 +45,7 @@ class SeerrServerRepository
/**
* 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() {
_current.update { null }

View file

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

View file

@ -9,7 +9,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
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.preferences.UserPreferences
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
@ -25,7 +24,6 @@ import java.util.UUID
fun CollectionFolderBoxSet(
preferences: UserPreferences,
itemId: UUID,
item: BaseItem?,
recursive: Boolean,
modifier: Modifier = Modifier,
filter: CollectionFolderFilter = CollectionFolderFilter(),

View file

@ -9,7 +9,6 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
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.preferences.UserPreferences
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
@ -22,7 +21,6 @@ import java.util.UUID
fun CollectionFolderPlaylist(
preferences: UserPreferences,
itemId: UUID,
item: BaseItem?,
recursive: Boolean,
modifier: Modifier = Modifier,
filter: CollectionFolderFilter = CollectionFolderFilter(),

View file

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

View file

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

View file

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

View file

@ -305,7 +305,6 @@ fun SeriesOverview(
Destination.Playback(
it.id,
resumePosition.inWholeMilliseconds,
it,
),
)
},
@ -320,7 +319,6 @@ fun SeriesOverview(
Destination.Playback(
it.id,
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.ItemPlayback
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.preferences.PreferenceScreenOption
import kotlinx.serialization.Serializable
import kotlinx.serialization.Transient
import kotlinx.serialization.UseSerializers
import org.jellyfin.sdk.model.api.BaseItemKind
import org.jellyfin.sdk.model.api.CollectionType
import org.jellyfin.sdk.model.serializer.UUIDSerializer
import java.util.UUID
@ -46,7 +45,6 @@ sealed class Destination(
data class SeriesOverview(
val itemId: UUID,
val type: BaseItemKind,
@Transient val item: BaseItem? = null,
val seasonEpisode: SeasonEpisodeIds? = null,
) : Destination() {
override fun toString(): String = "SeriesOverview(itemId=$itemId, type=$type, seasonEpisode=$seasonEpisode)"
@ -56,11 +54,9 @@ sealed class Destination(
data class MediaItem(
val itemId: UUID,
val type: BaseItemKind,
@Transient val item: BaseItem? = null,
val seasonEpisode: SeasonEpisode? = null,
val collectionType: CollectionType? = null,
) : Destination() {
override fun toString(): String =
"MediaItem(itemId=$itemId, type=$type, seasonEpisode=$seasonEpisode, collectionType=${item?.data?.collectionType})"
constructor(item: BaseItem) : this(item.id, item.type, item.data.collectionType)
}
@Serializable
@ -72,13 +68,10 @@ sealed class Destination(
data class Playback(
val itemId: UUID,
val positionMs: Long,
@Transient val item: BaseItem? = null,
val itemPlayback: ItemPlayback? = null,
val forceTranscoding: Boolean = false,
) : Destination(true) {
override fun toString(): String = "Playback(itemId=$itemId, positionMs=$positionMs)"
constructor(item: BaseItem) : this(item.id, item.resumeMs, item)
constructor(item: BaseItem) : this(item.id, item.resumeMs)
}
@Serializable

View file

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

View file

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