Fix Episode Selector Images (#1047)
This commit is contained in:
parent
936245e414
commit
329cf0d45f
|
@ -20,46 +20,60 @@ extension SeriesEpisodeSelector {
|
||||||
|
|
||||||
let episode: BaseItemDto
|
let episode: BaseItemDto
|
||||||
|
|
||||||
var body: some View {
|
@ViewBuilder
|
||||||
PosterButton(
|
private var imageOverlay: some View {
|
||||||
item: episode,
|
ZStack {
|
||||||
type: .landscape
|
if episode.userData?.isPlayed ?? false {
|
||||||
)
|
WatchedIndicator(size: 45)
|
||||||
.content {
|
|
||||||
let content: String = if episode.isUnaired {
|
|
||||||
episode.airDateLabel ?? L10n.noOverviewAvailable
|
|
||||||
} else {
|
} else {
|
||||||
episode.overview ?? L10n.noOverviewAvailable
|
if (episode.userData?.playbackPositionTicks ?? 0) > 0 {
|
||||||
|
LandscapePosterProgressBar(
|
||||||
|
title: episode.progressLabel ?? L10n.continue,
|
||||||
|
progress: (episode.userData?.playedPercentage ?? 0) / 100
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private var episodeContent: String {
|
||||||
|
if episode.isUnaired {
|
||||||
|
episode.airDateLabel ?? L10n.noOverviewAvailable
|
||||||
|
} else {
|
||||||
|
episode.overview ?? L10n.noOverviewAvailable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
VStack(alignment: .leading) {
|
||||||
|
Button {
|
||||||
|
guard let mediaSource = episode.mediaSources?.first else { return }
|
||||||
|
router.route(to: \.videoPlayer, OnlineVideoPlayerManager(item: episode, mediaSource: mediaSource))
|
||||||
|
} label: {
|
||||||
|
ZStack {
|
||||||
|
Color.clear
|
||||||
|
|
||||||
|
ImageView(episode.imageSource(.primary, maxWidth: 500))
|
||||||
|
.failure {
|
||||||
|
SystemImageContentView(systemName: episode.systemImage)
|
||||||
|
}
|
||||||
|
|
||||||
|
imageOverlay
|
||||||
|
}
|
||||||
|
.posterStyle(.landscape)
|
||||||
|
}
|
||||||
|
.buttonStyle(.card)
|
||||||
|
.posterShadow()
|
||||||
|
|
||||||
SeriesEpisodeSelector.EpisodeContent(
|
SeriesEpisodeSelector.EpisodeContent(
|
||||||
subHeader: episode.episodeLocator ?? .emptyDash,
|
subHeader: episode.episodeLocator ?? .emptyDash,
|
||||||
header: episode.displayTitle,
|
header: episode.displayTitle,
|
||||||
content: content
|
content: episodeContent
|
||||||
)
|
)
|
||||||
.onSelect {
|
.onSelect {
|
||||||
router.route(to: \.item, episode)
|
router.route(to: \.item, episode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.imageOverlay {
|
|
||||||
ZStack {
|
|
||||||
if episode.userData?.isPlayed ?? false {
|
|
||||||
WatchedIndicator(size: 45)
|
|
||||||
} else {
|
|
||||||
if (episode.userData?.playbackPositionTicks ?? 0) > 0 {
|
|
||||||
LandscapePosterProgressBar(
|
|
||||||
title: episode.progressLabel ?? L10n.continue,
|
|
||||||
progress: (episode.userData?.playedPercentage ?? 0) / 100
|
|
||||||
)
|
|
||||||
.padding()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.onSelect {
|
|
||||||
guard let mediaSource = episode.mediaSources?.first else { return }
|
|
||||||
router.route(to: \.videoPlayer, OnlineVideoPlayerManager(item: episode, mediaSource: mediaSource))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,34 +41,42 @@ extension SeriesEpisodeSelector {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private var episodeContent: String {
|
||||||
|
if episode.isUnaired {
|
||||||
|
episode.airDateLabel ?? L10n.noOverviewAvailable
|
||||||
|
} else {
|
||||||
|
episode.overview ?? L10n.noOverviewAvailable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
PosterButton(
|
VStack(alignment: .leading) {
|
||||||
item: episode,
|
Button {
|
||||||
type: .landscape
|
guard let mediaSource = episode.mediaSources?.first else { return }
|
||||||
)
|
mainRouter.route(to: \.videoPlayer, OnlineVideoPlayerManager(item: episode, mediaSource: mediaSource))
|
||||||
.content {
|
} label: {
|
||||||
let content: String = if episode.isUnaired {
|
ZStack {
|
||||||
episode.airDateLabel ?? L10n.noOverviewAvailable
|
Color.clear
|
||||||
} else {
|
|
||||||
episode.overview ?? L10n.noOverviewAvailable
|
ImageView(episode.imageSource(.primary, maxWidth: 500))
|
||||||
|
.failure {
|
||||||
|
SystemImageContentView(systemName: episode.systemImage)
|
||||||
|
}
|
||||||
|
|
||||||
|
overlayView
|
||||||
|
}
|
||||||
|
.posterStyle(.landscape)
|
||||||
}
|
}
|
||||||
|
|
||||||
SeriesEpisodeSelector.EpisodeContent(
|
SeriesEpisodeSelector.EpisodeContent(
|
||||||
subHeader: episode.episodeLocator ?? .emptyDash,
|
subHeader: episode.episodeLocator ?? .emptyDash,
|
||||||
header: episode.displayTitle,
|
header: episode.displayTitle,
|
||||||
content: content
|
content: episodeContent
|
||||||
)
|
)
|
||||||
.onSelect {
|
.onSelect {
|
||||||
router.route(to: \.item, episode)
|
router.route(to: \.item, episode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.imageOverlay {
|
|
||||||
overlayView
|
|
||||||
}
|
|
||||||
.onSelect {
|
|
||||||
guard let mediaSource = episode.mediaSources?.first else { return }
|
|
||||||
mainRouter.route(to: \.videoPlayer, OnlineVideoPlayerManager(item: episode, mediaSource: mediaSource))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue