Merge pull request #749 from stonerl/fix-chapter-regression

fix regression and improve curentChapter handling
This commit is contained in:
Arkadiusz Fal 2024-08-26 08:16:45 +02:00 committed by GitHub
commit 21f21cc944
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 17 additions and 10 deletions

View File

@ -464,6 +464,8 @@ final class MPVBackend: PlayerBackend {
timeObserverThrottle.execute { timeObserverThrottle.execute {
self.model.updateWatch(time: self.currentTime) self.model.updateWatch(time: self.currentTime)
} }
self.model.updateTime(self.currentTime!)
} }
private func stopClientUpdates() { private func stopClientUpdates() {

View File

@ -29,18 +29,14 @@ struct ChaptersView: View {
ScrollView(.horizontal) { ScrollView(.horizontal) {
ScrollViewReader { scrollViewProxy in ScrollViewReader { scrollViewProxy in
LazyHStack(spacing: 20) { LazyHStack(spacing: 20) {
chapterViews(for: chapters[...], scrollViewProxy: scrollViewProxy) chapterViews(for: chapters[...])
} }
.padding(.horizontal, 15) .padding(.horizontal, 15)
.onAppear { .onAppear {
if let currentChapterIndex = player.currentChapterIndex { scrollToCurrentChapter(scrollViewProxy)
scrollViewProxy.scrollTo(currentChapterIndex, anchor: .center)
}
} }
.onChange(of: player.currentChapterIndex) { currentChapterIndex in .onChange(of: player.currentChapterIndex) { _ in
if let index = currentChapterIndex { scrollToCurrentChapter(scrollViewProxy)
scrollViewProxy.scrollTo(index, anchor: .center)
}
} }
} }
} }
@ -53,7 +49,8 @@ struct ChaptersView: View {
} }
} }
#else #else
Section { chapterViews(for: chapters[...]) }.padding(.horizontal) Section { chapterViews(for: chapters[...]) }
.padding(.horizontal)
#endif #endif
} else { } else {
#if os(iOS) #if os(iOS)
@ -80,7 +77,7 @@ struct ChaptersView: View {
} }
#if !os(tvOS) #if !os(tvOS)
private func chapterViews(for chaptersToShow: ArraySlice<Chapter>, opacity: Double = 1.0, clickable: Bool = true, scrollViewProxy _: ScrollViewProxy? = nil) -> some View { private func chapterViews(for chaptersToShow: ArraySlice<Chapter>, opacity: Double = 1.0, clickable: Bool = true) -> some View {
ForEach(Array(chaptersToShow.indices), id: \.self) { index in ForEach(Array(chaptersToShow.indices), id: \.self) { index in
let chapter = chaptersToShow[index] let chapter = chaptersToShow[index]
ChapterView(chapter: chapter, chapterIndex: index, showThumbnail: showThumbnails) ChapterView(chapter: chapter, chapterIndex: index, showThumbnail: showThumbnails)
@ -89,6 +86,14 @@ struct ChaptersView: View {
.allowsHitTesting(clickable) .allowsHitTesting(clickable)
} }
} }
private func scrollToCurrentChapter(_ scrollViewProxy: ScrollViewProxy) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { // Slight delay to ensure the view is fully rendered
if let currentChapterIndex = player.currentChapterIndex {
scrollViewProxy.scrollTo(currentChapterIndex, anchor: .center)
}
}
}
#endif #endif
} }