Details panels in controls

This commit is contained in:
Arkadiusz Fal
2022-07-10 19:51:46 +02:00
parent db46289813
commit f0b8e7f655
15 changed files with 203 additions and 123 deletions

View File

@@ -96,23 +96,19 @@ final class NavigationModel: ObservableObject {
player.hide()
navigation.presentingChannel = false
let recent = RecentItem(from: channel)
#if os(macOS)
Windows.main.open()
#else
player.hide()
#endif
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
recents.add(recent)
let recent = RecentItem(from: channel)
recents.add(RecentItem(from: channel))
if navigationStyle == .sidebar {
navigation.sidebarSectionChanged.toggle()
navigation.tabSelection = .recentlyOpened(recent.tag)
} else {
withAnimation {
navigation.presentingChannel = true
}
if navigationStyle == .sidebar {
navigation.sidebarSectionChanged.toggle()
navigation.tabSelection = .recentlyOpened(recent.tag)
} else {
withAnimation {
navigation.presentingChannel = true
}
}
}

View File

@@ -8,6 +8,7 @@ final class PlayerControlsModel: ObservableObject {
@Published var isPlaying = true
@Published var presentingControls = false { didSet { handlePresentationChange() } }
@Published var presentingControlsOverlay = false { didSet { handleOverlayPresentationChange() } }
@Published var presentingDetailsOverlay = false
@Published var timer: Timer?
#if os(tvOS)
@@ -21,6 +22,7 @@ final class PlayerControlsModel: ObservableObject {
isPlaying: Bool = true,
presentingControls: Bool = false,
presentingControlsOverlay: Bool = false,
presentingDetailsOverlay: Bool = false,
timer: Timer? = nil,
player: PlayerModel? = nil
) {
@@ -28,20 +30,22 @@ final class PlayerControlsModel: ObservableObject {
self.isPlaying = isPlaying
self.presentingControls = presentingControls
self.presentingControlsOverlay = presentingControlsOverlay
self.presentingDetailsOverlay = presentingDetailsOverlay
self.timer = timer
self.player = player
}
func handlePresentationChange() {
if presentingControls {
DispatchQueue.main.async { [weak self] in
self?.player?.backend.startControlsUpdates()
self?.resetTimer()
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
if self.presentingControls {
self.player?.backend.startControlsUpdates()
self.resetTimer()
} else {
self.player?.backend.stopControlsUpdates()
self.timer?.invalidate()
self.timer = nil
}
} else {
player?.backend.stopControlsUpdates()
timer?.invalidate()
timer = nil
}
}
@@ -54,6 +58,15 @@ final class PlayerControlsModel: ObservableObject {
}
}
var presentingOverlays: Bool {
presentingDetailsOverlay || presentingControlsOverlay
}
func hideOverlays() {
presentingDetailsOverlay = false
presentingControlsOverlay = false
}
func show() {
guard !(player?.currentItem.isNil ?? true) else {
return

View File

@@ -98,7 +98,13 @@ final class PlayerModel: ObservableObject {
var context: NSManagedObjectContext = PersistenceController.shared.container.viewContext
var backgroundContext = PersistenceController.shared.container.newBackgroundContext()
@Published var playingFullScreen = false
#if os(tvOS)
static let fullScreenIsDefault = true
#else
static let fullScreenIsDefault = false
#endif
@Published var playingFullScreen = PlayerModel.fullScreenIsDefault
@Published var playingInPictureInPicture = false
var pipController: AVPictureInPictureController?
var pipDelegate = PiPDelegate()