Fix details reload

This commit is contained in:
Arkadiusz Fal 2023-04-22 16:49:45 +02:00
parent 8f9fb7ba82
commit 9936d9dd9e
3 changed files with 53 additions and 58 deletions

View File

@ -7,6 +7,7 @@ struct VideoDetailsOverlay: View {
var body: some View {
VideoDetails(video: controls.player.videoForDisplay, fullScreen: fullScreenBinding, sidebarQueue: .constant(false))
.clipShape(RoundedRectangle(cornerRadius: 4))
.id(controls.player.currentVideo?.cacheKey)
}
var fullScreenBinding: Binding<Bool> {

View File

@ -264,72 +264,65 @@ struct VideoDetails: View {
}
var pageView: some View {
ScrollViewReader { proxy in
ScrollView(.vertical, showsIndicators: false) {
LazyVStack {
pageMenu
.id("top")
.padding(5)
ScrollView(.vertical, showsIndicators: false) {
LazyVStack {
pageMenu
.padding(5)
switch page {
case .info:
Group {
if let video {
VStack(alignment: .leading, spacing: 10) {
if !player.videoBeingOpened.isNil && (video.description.isNil || video.description!.isEmpty) {
VStack {
ProgressView()
.progressViewStyle(.circular)
}
.frame(maxWidth: .infinity)
} else if let description = video.description, !description.isEmpty {
VideoDescription(video: video, detailsSize: detailsSize)
} else if !video.isLocal {
Text("No description")
.font(.caption)
.foregroundColor(.secondary)
}
if video.isLocal || showInspector == .always {
InspectorView(video: player.videoForDisplay)
}
if !sidebarQueue,
!(player.videoForDisplay?.related.isEmpty ?? true)
{
RelatedView()
.padding(.top, 20)
switch page {
case .info:
Group {
if let video {
VStack(alignment: .leading, spacing: 10) {
if !player.videoBeingOpened.isNil && (video.description.isNil || video.description!.isEmpty) {
VStack {
ProgressView()
.progressViewStyle(.circular)
}
.frame(maxWidth: .infinity)
} else if let description = video.description, !description.isEmpty {
VideoDescription(video: video, detailsSize: detailsSize)
} else if !video.isLocal {
Text("No description")
.font(.caption)
.foregroundColor(.secondary)
}
if video.isLocal || showInspector == .always {
InspectorView(video: player.videoForDisplay)
}
if !sidebarQueue,
!(player.videoForDisplay?.related.isEmpty ?? true)
{
RelatedView()
.padding(.top, 20)
}
.padding(.bottom, 60)
}
.padding(.bottom, 60)
}
.onChange(of: player.currentVideo?.cacheKey) { _ in
proxy.scrollTo("top")
}
.onAppear {
if video != nil, !pageAvailable(page) {
page = .info
}
.onAppear {
if video != nil, !pageAvailable(page) {
page = .info
}
}
.transition(.opacity)
.animation(nil, value: player.currentItem)
.padding(.horizontal)
#if os(iOS)
.frame(maxWidth: YatteeApp.isForPreviews ? .infinity : maxWidth)
#endif
case .queue:
PlayerQueueView(sidebarQueue: false)
.padding(.horizontal)
case .comments:
CommentsView(embedInScrollView: false)
.onAppear {
comments.loadIfNeeded()
}
}
.transition(.opacity)
.animation(nil, value: player.currentItem)
.padding(.horizontal)
#if os(iOS)
.frame(maxWidth: YatteeApp.isForPreviews ? .infinity : maxWidth)
#endif
case .queue:
PlayerQueueView(sidebarQueue: false)
.padding(.horizontal)
case .comments:
CommentsView(embedInScrollView: false)
.onAppear {
comments.loadIfNeeded()
}
}
}
}

View File

@ -343,6 +343,7 @@ struct VideoPlayerView: View {
player.setNeedsDrawing(true)
}
}
.id(player.currentVideo?.cacheKey)
.transition(.opacity)
}
}