Hello, mpv! 🎉

This commit is contained in:
Arkadiusz Fal
2022-02-16 21:23:11 +01:00
parent 9868a2ef01
commit 31a28a7cbd
74 changed files with 6191 additions and 891 deletions

View File

@@ -1,11 +1,12 @@
import Foundation
import SwiftUI
struct PlayerControlsView<Content: View, Toolbar: View>: View {
struct BrowserPlayerControls<Content: View, Toolbar: View>: View {
let content: Content
let toolbar: Toolbar?
@Environment(\.navigationStyle) private var navigationStyle
@EnvironmentObject<PlayerControlsModel> private var playerControls
@EnvironmentObject<PlayerModel> private var model
init(@ViewBuilder toolbar: @escaping () -> Toolbar? = { nil }, @ViewBuilder content: @escaping () -> Content) {
@@ -84,7 +85,7 @@ struct PlayerControlsView<Content: View, Toolbar: View>: View {
ZStack(alignment: .bottom) {
HStack {
Group {
if model.isPlaying {
if playerControls.isPlaying {
Button(action: {
model.pause()
}) {
@@ -96,9 +97,9 @@ struct PlayerControlsView<Content: View, Toolbar: View>: View {
}) {
Label("Play", systemImage: "play.fill")
}
.disabled(model.player.currentItem.isNil)
}
}
.disabled(playerControls.isLoadingVideo)
.font(.system(size: 30))
.frame(minWidth: 30)
@@ -145,7 +146,7 @@ struct PlayerControlsView<Content: View, Toolbar: View>: View {
struct PlayerControlsView_Previews: PreviewProvider {
static var previews: some View {
PlayerControlsView {
BrowserPlayerControls {
VStack {
Spacer()
Text("Hello")

View File

@@ -28,12 +28,12 @@ struct ChannelPlaylistView: View {
if inNavigationView {
content
} else {
PlayerControlsView {
BrowserPlayerControls {
content
}
}
#else
PlayerControlsView {
BrowserPlayerControls {
content
}
#endif

View File

@@ -33,12 +33,12 @@ struct ChannelVideosView: View {
if inNavigationView {
content
} else {
PlayerControlsView {
BrowserPlayerControls {
content
}
}
#else
PlayerControlsView {
BrowserPlayerControls {
content
}
#endif

View File

@@ -0,0 +1,33 @@
import SwiftUI
#if !os(macOS)
struct MPVPlayerView: UIViewControllerRepresentable {
@EnvironmentObject<PlayerModel> private var player
@State private var controller = MPVViewController()
func makeUIViewController(context _: Context) -> some UIViewController {
player.mpvBackend.controller = controller
player.mpvBackend.client = controller.client
return controller
}
func updateUIViewController(_: UIViewControllerType, context _: Context) {}
}
#else
struct MPVPlayerView: NSViewRepresentable {
let layer: VideoLayer
func makeNSView(context _: Context) -> some NSView {
let vview = VideoView()
vview.layer = layer
vview.wantsLayer = true
return vview
}
func updateNSView(_: NSViewType, context _: Context) {}
}
#endif

View File

@@ -46,7 +46,7 @@ struct PlaylistVideosView: View {
}
var body: some View {
PlayerControlsView {
BrowserPlayerControls {
VerticalCells(items: contentItems)
.onAppear {
if !player.accounts.app.userPlaylistsEndpointIncludesVideos {

View File

@@ -15,7 +15,7 @@ struct PopularView: View {
}
var body: some View {
PlayerControlsView {
BrowserPlayerControls {
VerticalCells(items: videos)
.onAppear {
resource?.addObserver(store)

View File

@@ -45,7 +45,7 @@ struct ShareButton: View {
shareAction(
accounts.api.shareURL(
contentItem,
time: player.player.currentTime()
time: player.backend.currentTime
)!
)
}
@@ -67,7 +67,7 @@ struct ShareButton: View {
accounts.api.shareURL(
contentItem,
frontendHost: "www.youtube.com",
time: player.player.currentTime()
time: player.backend.currentTime
)!
)
}

View File

@@ -60,7 +60,7 @@ struct SignInRequiredView<Content: View>: View {
struct SignInRequiredView_Previews: PreviewProvider {
static var previews: some View {
PlayerControlsView {
BrowserPlayerControls {
SignInRequiredView(title: "Subscriptions") {
Text("Only when signed in")
}

View File

@@ -15,7 +15,7 @@ struct SubscriptionsView: View {
}
var body: some View {
PlayerControlsView {
BrowserPlayerControls {
SignInRequiredView(title: "Subscriptions") {
VerticalCells(items: videos)
.onAppear {