Replace environment objects with observed objects

This commit is contained in:
Arkadiusz Fal
2022-11-24 21:36:05 +01:00
parent 23fa0968c6
commit 0d333b5583
102 changed files with 427 additions and 723 deletions

View File

@@ -2,8 +2,8 @@ import Defaults
import SwiftUI
struct ControlsOverlay: View {
@EnvironmentObject<PlayerModel> private var player
@EnvironmentObject<PlayerControlsModel> private var model
@ObservedObject private var player = PlayerModel.shared
private var model = PlayerControlsModel.shared
@State private var contentSize: CGSize = .zero
@@ -399,8 +399,5 @@ struct ControlsOverlay: View {
struct ControlsOverlay_Previews: PreviewProvider {
static var previews: some View {
ControlsOverlay()
.environmentObject(NetworkStateModel())
.environmentObject(PlayerModel())
.environmentObject(PlayerControlsModel())
}
}

View File

@@ -10,7 +10,7 @@ struct Buffering: View {
@Environment(\.verticalSizeClass) private var verticalSizeClass
#endif
@EnvironmentObject<PlayerModel> private var player
@ObservedObject private var player = PlayerModel.shared
@Default(.playerControlsLayout) private var regularPlayerControlsLayout
@Default(.fullScreenPlayerControlsLayout) private var fullScreenPlayerControlsLayout

View File

@@ -15,7 +15,5 @@ struct NetworkState_Previews: PreviewProvider {
networkState.bufferingState = 30
return NetworkState()
.environmentObject(networkState)
.environmentObject(PlayerModel())
}
}

View File

@@ -1,8 +1,8 @@
import SwiftUI
struct OpeningStream: View {
@EnvironmentObject<PlayerModel> private var player
@EnvironmentObject<NetworkStateModel> private var model
@ObservedObject private var player = PlayerModel.shared
@ObservedObject private var model = NetworkStateModel.shared
var body: some View {
Buffering(reason: reason, state: state)

View File

@@ -6,7 +6,7 @@ struct Seek: View {
@Environment(\.verticalSizeClass) private var verticalSizeClass
#endif
@EnvironmentObject<PlayerControlsModel> private var controls
@ObservedObject private var controls = PlayerControlsModel.shared
@StateObject private var model = SeekModel.shared
private var updateThrottle = Throttle(interval: 2)
@@ -137,6 +137,5 @@ struct Seek: View {
struct Seek_Previews: PreviewProvider {
static var previews: some View {
Seek()
.environmentObject(PlayerTimeModel())
}
}

View File

@@ -6,8 +6,8 @@ import SwiftUI
struct PlayerControls: View {
static let animation = Animation.easeInOut(duration: 0.2)
private var player: PlayerModel!
private var thumbnails: ThumbnailsModel!
private var player: PlayerModel { .shared }
private var thumbnails: ThumbnailsModel { .shared }
@ObservedObject private var model = PlayerControlsModel.shared
@@ -39,11 +39,6 @@ struct PlayerControls: View {
player.playingFullScreen ? fullScreenPlayerControlsLayout : regularPlayerControlsLayout
}
init(player: PlayerModel, thumbnails: ThumbnailsModel) {
self.player = player
self.thumbnails = thumbnails
}
var body: some View {
ZStack(alignment: .topLeading) {
Seek()
@@ -206,12 +201,12 @@ struct PlayerControls: View {
}
var detailsWidth: Double {
guard let player, player.playerSize.width.isFinite else { return 200 }
guard player.playerSize.width.isFinite else { return 200 }
return [player.playerSize.width, 600].min()!
}
var detailsHeight: Double {
guard let player, player.playerSize.height.isFinite else { return 200 }
guard player.playerSize.height.isFinite else { return 200 }
var inset = 0.0
#if os(iOS)
inset = SafeArea.insets.bottom
@@ -499,7 +494,7 @@ struct PlayerControls_Previews: PreviewProvider {
ZStack {
Color.gray
PlayerControls(player: PlayerModel(), thumbnails: ThumbnailsModel())
PlayerControls()
.injectFixtureEnvironmentObjects()
}
}

View File

@@ -3,8 +3,8 @@ import SwiftUI
struct TVControls: UIViewRepresentable {
var model: PlayerControlsModel!
var player: PlayerModel!
var thumbnails: ThumbnailsModel!
var player: PlayerModel { .shared }
var thumbnails: ThumbnailsModel { .shared }
@State private var direction = ""
@State private var controlsArea = UIView()
@@ -30,7 +30,7 @@ struct TVControls: UIViewRepresentable {
controlsArea.addGestureRecognizer(downSwipe)
controlsArea.addGestureRecognizer(tap)
let controls = UIHostingController(rootView: PlayerControls(player: player, thumbnails: thumbnails))
let controls = UIHostingController(rootView: PlayerControls())
controls.view.frame = .init(
origin: .init(x: SafeArea.insets.left, y: SafeArea.insets.top),
size: .init(

View File

@@ -45,9 +45,9 @@ struct TimelineView: View {
#endif
@ObservedObject private var playerTime = PlayerTimeModel.shared
@ObservedObject private var player = PlayerModel.shared
@EnvironmentObject<PlayerModel> private var player
@EnvironmentObject<PlayerControlsModel> private var controls
private var controls = PlayerControlsModel.shared
@Default(.playerControlsLayout) private var regularPlayerControlsLayout
@Default(.fullScreenPlayerControlsLayout) private var fullScreenPlayerControlsLayout
@@ -124,6 +124,8 @@ struct TimelineView: View {
.frame(minWidth: 35)
.padding(.leading, playerControlsLayout.timeLeadingEdgePadding)
.padding(.trailing, playerControlsLayout.timeTrailingEdgePadding)
.modifier(ControlBackgroundModifier())
.clipShape(RoundedRectangle(cornerRadius: 4))
ZStack(alignment: .center) {
ZStack(alignment: .leading) {
@@ -172,6 +174,8 @@ struct TimelineView: View {
.padding(.leading, playerControlsLayout.timeTrailingEdgePadding)
.padding(.trailing, playerControlsLayout.timeLeadingEdgePadding)
.frame(minWidth: 30, alignment: .trailing)
.modifier(ControlBackgroundModifier())
.clipShape(RoundedRectangle(cornerRadius: 4))
}
#if !os(tvOS)
.highPriorityGesture(
@@ -207,8 +211,6 @@ struct TimelineView: View {
}
)
#endif
.modifier(ControlBackgroundModifier())
.clipShape(RoundedRectangle(cornerRadius: 4))
.font(.system(size: playerControlsLayout.timeFontSize).monospacedDigit())
.zIndex(2)
}
@@ -369,14 +371,11 @@ struct TimelineView_Previews: PreviewProvider {
let playerModel = PlayerModel()
playerModel.currentItem = .init(Video.fixture)
let playerTimeModel = PlayerTimeModel.shared
playerTimeModel.player = playerModel
playerTimeModel.currentTime = .secondsInDefaultTimescale(33)
playerTimeModel.duration = .secondsInDefaultTimescale(100)
return VStack(spacing: 40) {
TimelineView()
}
.environmentObject(playerModel)
.environmentObject(PlayerControlsModel())
.padding()
}
}

View File

@@ -2,7 +2,7 @@ import Defaults
import SwiftUI
struct VideoDetailsOverlay: View {
@EnvironmentObject<PlayerControlsModel> private var controls
@ObservedObject private var controls = PlayerControlsModel.shared
@State private var detailsPage = VideoDetails.DetailsPage.queue