mirror of
https://github.com/JustinZeus/Wholphin.git
synced 2026-07-09 08:01:20 +02:00
Don't pass BaseItem in destinations
This commit is contained in:
parent
12590d7221
commit
70fd36ccab
12 changed files with 14 additions and 41 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 }
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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(),
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
|
|
@ -129,7 +129,6 @@ fun EpisodeDetails(
|
||||||
Destination.Playback(
|
Destination.Playback(
|
||||||
ep.id,
|
ep.id,
|
||||||
it.inWholeMilliseconds,
|
it.inWholeMilliseconds,
|
||||||
ep,
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -167,7 +167,6 @@ fun MovieDetails(
|
||||||
Destination.Playback(
|
Destination.Playback(
|
||||||
movie.id,
|
movie.id,
|
||||||
it.inWholeMilliseconds,
|
it.inWholeMilliseconds,
|
||||||
movie,
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -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,
|
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue