From 2344bcbd6ad869f1a56c12d4f025442661840692 Mon Sep 17 00:00:00 2001 From: Trey t Date: Sun, 2 Jul 2023 18:55:26 -0500 Subject: [PATCH] WIP --- Werkout_ios/Network/Network.swift | 6 +- Werkout_ios/UserStore.swift | 3 +- .../Views/AddExercise/AddExerciseView.swift | 15 +++- .../Views/ExternalWorkoutDetailView.swift | 14 ++-- Werkout_ios/Views/VideoPlayerView.swift | 84 +++++-------------- 5 files changed, 46 insertions(+), 76 deletions(-) diff --git a/Werkout_ios/Network/Network.swift b/Werkout_ios/Network/Network.swift index b31cb23..bdb7fea 100644 --- a/Werkout_ios/Network/Network.swift +++ b/Werkout_ios/Network/Network.swift @@ -10,6 +10,10 @@ import Foundation enum BaseURLs: String { case local = "http://127.0.0.1:8000" case dev = "https://dev.werkout.fitness" + + static var currentBaseURL: String { + return BaseURLs.dev.rawValue + } } enum FetchableError: Error { @@ -37,7 +41,7 @@ protocol Postable: Fetchable { extension Fetchable { var baseURL: String { - BaseURLs.local.rawValue + BaseURLs.currentBaseURL } var attachToken: Bool { diff --git a/Werkout_ios/UserStore.swift b/Werkout_ios/UserStore.swift index d468e0e..e2b718d 100644 --- a/Werkout_ios/UserStore.swift +++ b/Werkout_ios/UserStore.swift @@ -62,7 +62,8 @@ class UserStore: ObservableObject { case .success(let models): self.plannedWorkouts = models case .failure(let failure): - fatalError("shit broke") + UserStore.shared.logout() +// fatalError("shit broke") } }) } diff --git a/Werkout_ios/Views/AddExercise/AddExerciseView.swift b/Werkout_ios/Views/AddExercise/AddExerciseView.swift index ff43cfd..b03be9d 100644 --- a/Werkout_ios/Views/AddExercise/AddExerciseView.swift +++ b/Werkout_ios/Views/AddExercise/AddExerciseView.swift @@ -8,6 +8,7 @@ import Foundation import SwiftUI import Combine +import AVKit struct AddExerciseView: View { enum CreateWorkoutItemPickerViewType { @@ -25,7 +26,15 @@ struct AddExerciseView: View { @State var createWorkoutItemPickerViewModel: CreateWorkoutItemPickerViewModel? @State var createWorkoutItemPickerViewType: CreateWorkoutItemPickerViewType? @State var searchString: String = "" - @State var videoExercise: ExerciseExercise? + @State var videoExercise: ExerciseExercise? { + didSet { + if let viddd = self.videoExercise?.videoURL, + let url = URL(string: BaseURLs.currentBaseURL + viddd) { + self.avPlayer = AVPlayer(url: url) + } + } + } + @State var avPlayer = AVPlayer(url: URL(string: "https://dev.werkout.fitness/media/exercise_videos/2_Dumbbell_Lateral_Lunges.mp4")!) var body: some View { VStack { @@ -63,9 +72,7 @@ struct AddExerciseView: View { filteredExercises = exercises } .sheet(item: $videoExercise) { exercise in - if let url = URL(string: BaseURLs.dev.rawValue + exercise.videoURL) { - VideoPlayerView(url: url) - } + VideoPlayerView(avPlayer: $avPlayer) } .sheet(item: $createWorkoutItemPickerViewModel) { item in CreateWorkoutItemPickerView(viewModel: item, completed: { selectedids in diff --git a/Werkout_ios/Views/ExternalWorkoutDetailView.swift b/Werkout_ios/Views/ExternalWorkoutDetailView.swift index c7d8d26..6629e61 100644 --- a/Werkout_ios/Views/ExternalWorkoutDetailView.swift +++ b/Werkout_ios/Views/ExternalWorkoutDetailView.swift @@ -10,20 +10,16 @@ import AVKit struct ExternalWorkoutDetailView: View { @StateObject var bridgeModule = BridgeModule.shared - @State var videoURL = URL(string: "https://dev.werkout.fitness/media/exercise_videos/recovery.mp4")! - + @State var avPlayer = AVPlayer(url: URL(string: "https://dev.werkout.fitness/media/exercise_videos/2_Dumbbell_Lateral_Lunges.mp4")!) + var body: some View { ZStack { if let workout = bridgeModule.currentWorkout { GeometryReader { metrics in VStack { HStack { - VideoViewControllerView(url: $videoURL) + VideoPlayerView(avPlayer: $avPlayer, showDoneButton: false) .frame(width: metrics.size.width * 0.6, height: metrics.size.height * 0.8) - // if let videoPlayer = videoPlayer { - // videoPlayer - // .frame(width: metrics.size.width * 0.6, height: metrics.size.height * 0.8) - // } ExtExerciseList(workout: workout, currentExerciseIdx: bridgeModule.currentExerciseIdx) @@ -43,8 +39,8 @@ struct ExternalWorkoutDetailView: View { } .onChange(of: bridgeModule.currentExercise, perform: { newValue in if let viddd = newValue?.exercise.videoURL, - let url = URL(string: BaseURLs.dev.rawValue + viddd) { - videoURL = url + let url = URL(string: BaseURLs.currentBaseURL + viddd) { + avPlayer = AVPlayer(url: url) } }) .frame(maxWidth: .infinity, maxHeight: .infinity) diff --git a/Werkout_ios/Views/VideoPlayerView.swift b/Werkout_ios/Views/VideoPlayerView.swift index 37ecfe6..cec25bf 100644 --- a/Werkout_ios/Views/VideoPlayerView.swift +++ b/Werkout_ios/Views/VideoPlayerView.swift @@ -7,80 +7,42 @@ import SwiftUI import AVKit -import SafariServices +import Combine struct VideoPlayerView: View { - @State var url: URL @Environment(\.dismiss) var dismiss + @Binding var avPlayer: AVPlayer + var showDoneButton = true + var pub = NotificationCenter.default.publisher(for: .AVPlayerItemDidPlayToEndTime) + var body: some View { VStack { - Button(action: { - dismiss() - }, label: { - Text("Done") - }) - .padding() - .frame(maxWidth: .infinity) - .background(Color(uiColor: UIColor(red: 0.11, green: 0.11, blue: 0.12, alpha: 1))) + if self.showDoneButton { + Button(action: { + dismiss() + }, label: { + Text("Done") + }) + .padding() + .frame(maxWidth: .infinity) + .background(Color(uiColor: UIColor(red: 0.11, green: 0.11, blue: 0.12, alpha: 1))) + } - VideoViewControllerView(url: $url) + VideoPlayer(player: avPlayer) + .onAppear{ + avPlayer.play() + } } .background(.black) - } -} - -struct VideoViewControllerView: UIViewControllerRepresentable { - @Binding var url: URL - - func makeUIViewController(context: Context) -> VideoViewController { - return VideoViewController(videoURL: url) - } - - func updateUIViewController(_ uiViewController: VideoViewController, context: Context) { - if url != uiViewController.videoURL { - uiViewController.videoURL = url - uiViewController.layoutView() + .onReceive(pub) { (output) in + avPlayer.pause() + avPlayer.seek(to: .zero) + avPlayer.play() } } } -class VideoViewController: UIViewController { - var videoURL: URL - - init(videoURL: URL) { - self.videoURL = videoURL - super.init(nibName: nil, bundle: nil) - layoutView() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewDidLoad() { - super.viewDidLoad() - } - - func layoutView() { - self.view.subviews.forEach({ - $0.removeFromSuperview() - }) - - let sfVC = SFSafariViewController(url: self.videoURL) - sfVC.view.translatesAutoresizingMaskIntoConstraints = false - view.backgroundColor = .green - self.addChild(sfVC) - sfVC.didMove(toParent: self) - sfVC.view.backgroundColor = .magenta - sfVC.view.frame = self.view.bounds; - self.view.addSubview(sfVC.view) - sfVC.view.topAnchor.constraint(equalTo: view.topAnchor).isActive = true - sfVC.view.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true - sfVC.view.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true - sfVC.view.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true - } -} //struct VideoPlayerView_Previews: PreviewProvider { // static let exercise = PreviewData.parseExercises().first!