mirror of
https://github.com/yattee/yattee.git
synced 2026-10-27 06:57:18 +00:00
Phase 1 of the player panels redesign: - New PanelSettings model (pages, regions, layout mode, default visibility) stored as an optional field on PlayerControlsLayout with an effectivePanelSettings accessor; lenient Codable so future page types and settings payloads never corrupt saved presets. - New Views/Player/Panels content engine: PlayerPanelContentView renders a page bar plus the selected page (info, comments, related, chapters, queue, tracks), with runtime hiding of empty pages. - PortraitDetailsPanel and FloatingDetailsPanel now host the shared content instead of their duplicated info bodies; drag machinery, pills, and fades are untouched. - Comments list extracted into CommentsListContent shared by the overlay and the comments page; comments pill routes to the comments page (expanding the portrait panel) when the page is enabled, and falls back to the overlay when it is not. - Tracks page embeds QualitySelectorView via a new isEmbedded mode. - Deleted the unused video info bodies in ExpandedPlayerSheet+VideoInfo and the dead PlayerInfoTab model.
37 lines
1.2 KiB
Swift
37 lines
1.2 KiB
Swift
//
|
|
// CommentsPanelPage.swift
|
|
// Yattee
|
|
//
|
|
// Details panel page with the inline comments list.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
#if os(iOS) || os(macOS)
|
|
|
|
struct CommentsPanelPage: View {
|
|
let context: PanelPageContext
|
|
var scrollConfig: PanelScrollConfig = PanelScrollConfig()
|
|
|
|
private var appEnvironment: AppEnvironment? { context.appEnvironment }
|
|
private var playerState: PlayerState? { appEnvironment?.playerService.state }
|
|
|
|
var body: some View {
|
|
PanelPageScrollView(config: scrollConfig) {
|
|
CommentsListContent(videoID: context.video.id.videoID)
|
|
.padding(.horizontal)
|
|
}
|
|
.task(id: context.video.id) {
|
|
// Opening the page is an explicit request; load even when the
|
|
// buffer-ready preload hasn't fired yet.
|
|
guard let playerState,
|
|
playerState.commentsState == .idle,
|
|
let contentService = appEnvironment?.contentService,
|
|
let instancesManager = appEnvironment?.instancesManager else { return }
|
|
await playerState.loadComments(contentService: contentService, instancesManager: instancesManager)
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif
|