From 93cab684b98f50982ca433eef83d71c785c56344 Mon Sep 17 00:00:00 2001 From: Trey t Date: Mon, 10 Jul 2023 15:35:48 -0500 Subject: [PATCH] WIP --- Werkout_ios.xcodeproj/project.pbxproj | 6 + Werkout_ios/APIModels/CompletedWorkout.swift | 2 +- Werkout_ios/APIModels/Exercise.swift | 40 ++++ Werkout_ios/BaseURLs.swift | 17 ++ Werkout_ios/JSON/CompletedWorkouts.json | 177 ++++++++++++++---- Werkout_ios/Network/Network.swift | 9 - .../AllWorkouts/WorkoutOverviewView.swift | 3 +- .../Views/ExternalWorkoutDetailView.swift | 16 +- .../WorkoutDetail/ExerciseListView.swift | 14 +- .../WorkoutDetail/WorkoutDetailView.swift | 36 +--- 10 files changed, 220 insertions(+), 100 deletions(-) create mode 100644 Werkout_ios/BaseURLs.swift diff --git a/Werkout_ios.xcodeproj/project.pbxproj b/Werkout_ios.xcodeproj/project.pbxproj index c70db7b..eaa41c4 100644 --- a/Werkout_ios.xcodeproj/project.pbxproj +++ b/Werkout_ios.xcodeproj/project.pbxproj @@ -30,6 +30,8 @@ 1CAF4D8C2A51339200B00E50 /* PlannedWorkouts.json in Resources */ = {isa = PBXBuildFile; fileRef = 1CAF4D8B2A51339200B00E50 /* PlannedWorkouts.json */; }; 1CAF4D952A52180600B00E50 /* PlanWorkoutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CAF4D942A52180600B00E50 /* PlanWorkoutView.swift */; }; 1CD0C6632A5AF62900970E52 /* WorkoutOverviewView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD0C6622A5AF62900970E52 /* WorkoutOverviewView.swift */; }; + 1CD0C6672A5CA19600970E52 /* BaseURLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD0C6662A5CA19600970E52 /* BaseURLs.swift */; }; + 1CD0C6682A5CA1A200970E52 /* BaseURLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CD0C6662A5CA19600970E52 /* BaseURLs.swift */; }; 1CF65A262A3972840042FFBD /* Werkout_iosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A252A3972840042FFBD /* Werkout_iosApp.swift */; }; 1CF65A282A3972840042FFBD /* Persistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A272A3972840042FFBD /* Persistence.swift */; }; 1CF65A2B2A3972840042FFBD /* Werkout_ios.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A292A3972840042FFBD /* Werkout_ios.xcdatamodeld */; }; @@ -141,6 +143,7 @@ 1CAF4D8B2A51339200B00E50 /* PlannedWorkouts.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = PlannedWorkouts.json; sourceTree = ""; }; 1CAF4D942A52180600B00E50 /* PlanWorkoutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanWorkoutView.swift; sourceTree = ""; }; 1CD0C6622A5AF62900970E52 /* WorkoutOverviewView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkoutOverviewView.swift; sourceTree = ""; }; + 1CD0C6662A5CA19600970E52 /* BaseURLs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseURLs.swift; sourceTree = ""; }; 1CF65A222A3972840042FFBD /* Werkout_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Werkout_ios.app; sourceTree = BUILT_PRODUCTS_DIR; }; 1CF65A252A3972840042FFBD /* Werkout_iosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Werkout_iosApp.swift; sourceTree = ""; }; 1CF65A272A3972840042FFBD /* Persistence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Persistence.swift; sourceTree = ""; }; @@ -259,6 +262,7 @@ 1CF65AB22A452F360042FFBD /* WatchPackageModel.swift */, 1CF65A822A42347D0042FFBD /* Extensions.swift */, 1CF65A272A3972840042FFBD /* Persistence.swift */, + 1CD0C6662A5CA19600970E52 /* BaseURLs.swift */, 1CF65A4F2A3A1EA90042FFBD /* BridgeModule.swift */, 1CF65A802A412AA30042FFBD /* DataStore.swift */, 1CF65AB92A4894430042FFBD /* UserStore.swift */, @@ -565,6 +569,7 @@ 1CF65A4E2A39FF200042FFBD /* WorkoutDetailViewModel.swift in Sources */, 1CF65A472A39FB6C0042FFBD /* RegisteredUser.swift in Sources */, 1CF65AB32A452F360042FFBD /* WatchPackageModel.swift in Sources */, + 1CD0C6672A5CA19600970E52 /* BaseURLs.swift in Sources */, 1CF65A522A3A90A00042FFBD /* PreviewData.swift in Sources */, 1C5190CE2A589D4100885849 /* AllWorkoutPickerView.swift in Sources */, 1CF65A852A43E8060042FFBD /* CompletedWorkout.swift in Sources */, @@ -610,6 +615,7 @@ 1CF65AB12A452E1A0042FFBD /* BridgeModule.swift in Sources */, 1CF65AAA2A452D9C0042FFBD /* RegisteredUser.swift in Sources */, 1CF65AB62A4532940042FFBD /* WatchMainViewModel.swift in Sources */, + 1CD0C6682A5CA1A200970E52 /* BaseURLs.swift in Sources */, 1CF65AA72A452D9C0042FFBD /* Muscle.swift in Sources */, 1C485C8D2A49D95700A6F896 /* Extensions.swift in Sources */, 1CF65AAB2A452DAC0042FFBD /* PreviewData.swift in Sources */, diff --git a/Werkout_ios/APIModels/CompletedWorkout.swift b/Werkout_ios/APIModels/CompletedWorkout.swift index d4f309d..8db16e1 100644 --- a/Werkout_ios/APIModels/CompletedWorkout.swift +++ b/Werkout_ios/APIModels/CompletedWorkout.swift @@ -14,7 +14,7 @@ struct CompletedWorkout: Codable { let difficulty, totalTime: Int? let workoutStartTime: String let notes: String? - let totalCalories: Int? + let totalCalories: Float? enum CodingKeys: String, CodingKey { case id, workout diff --git a/Werkout_ios/APIModels/Exercise.swift b/Werkout_ios/APIModels/Exercise.swift index 6f1b573..8898bc1 100644 --- a/Werkout_ios/APIModels/Exercise.swift +++ b/Werkout_ios/APIModels/Exercise.swift @@ -25,6 +25,26 @@ struct ExerciseElement: Codable, Equatable { } } +extension ExerciseElement { + func videoURL(nsfw: Bool) -> URL? { + var _url: URL? + + if nsfw { + let viddd = exercise.nsfwVideoURL + if let url = URL(string: BaseURLs.currentBaseURL + viddd) { + _url = url + } + } else { + let viddd = exercise.videoURL + if let url = URL(string: BaseURLs.currentBaseURL + viddd) { + _url = url + } + } + + return _url + } +} + struct ExerciseExercise: Codable, Hashable, Identifiable { static func == (lhs: ExerciseExercise, rhs: ExerciseExercise) -> Bool { lhs.id == rhs.id @@ -62,3 +82,23 @@ struct ExerciseExercise: Codable, Hashable, Identifiable { case nsfwVideoURL = "nsfw_video_url" } } + +extension ExerciseExercise { + func videoURL(nsfw: Bool) -> URL? { + var _url: URL? + + if nsfw { + let viddd = nsfwVideoURL + if let url = URL(string: BaseURLs.currentBaseURL + viddd) { + _url = url + } + } else { + let viddd = videoURL + if let url = URL(string: BaseURLs.currentBaseURL + viddd) { + _url = url + } + } + + return _url + } +} diff --git a/Werkout_ios/BaseURLs.swift b/Werkout_ios/BaseURLs.swift new file mode 100644 index 0000000..c43c8e6 --- /dev/null +++ b/Werkout_ios/BaseURLs.swift @@ -0,0 +1,17 @@ +// +// BaseURLs.swift +// Werkout_ios +// +// Created by Trey Tartt on 7/10/23. +// + +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 + } +} diff --git a/Werkout_ios/JSON/CompletedWorkouts.json b/Werkout_ios/JSON/CompletedWorkouts.json index b295b43..f1755e0 100644 --- a/Werkout_ios/JSON/CompletedWorkouts.json +++ b/Werkout_ios/JSON/CompletedWorkouts.json @@ -1,49 +1,158 @@ [ { - "id": 11, + "id": 4, + "workout": { + "id": 3, + "registered_user": { + "id": 1, + "first_name": "User1", + "last_name": "user1", + "image": "", + "nick_name": "test user1" + }, + "muscles": [ + "quads", + "lats", + "lower back", + "upper back", + "biceps" + ], + "equipment": [ + "Rower" + ], + "exercise_count": 14, + "created_at": "2023-07-03T17:00:01.350058Z", + "updated_at": "2023-07-04T16:51:07.231366Z", + "name": "Rowwwwwwer", + "description": "row until you pass out" + }, + "created_at": "2023-07-03T18:05:58.978336Z", + "updated_at": "2023-07-03T18:05:58.985053Z", + "difficulty": 3, + "total_time": 529, + "workout_start_time": "2023-07-03T17:57:01Z", + "notes": "", + "total_calories": -1.0 + }, + { + "id": 5, + "workout": { + "id": 7, + "registered_user": { + "id": 1, + "first_name": "User1", + "last_name": "user1", + "image": "", + "nick_name": "test user1" + }, + "muscles": [ + "calves", + "hamstrings", + "glutes", + "core", + "quads", + "hip flexor", + "middle back", + "lats", + "lower back", + "upper back", + "biceps" + ], + "equipment": [ + "Rower", + "Yoga Mat" + ], + "exercise_count": 56, + "created_at": "2023-07-05T17:15:16.596202Z", + "updated_at": "2023-07-05T17:15:16.597621Z", + "name": "Cardio mix #2", + "description": "" + }, + "created_at": "2023-07-05T18:00:26.462986Z", + "updated_at": "2023-07-05T18:00:26.465537Z", + "difficulty": 1, + "total_time": 1145, + "workout_start_time": "2023-07-05T17:41:05Z", + "notes": "", + "total_calories": -1.0 + }, + { + "id": 6, "workout": { "id": 21, "registered_user": { - "id": 2, - "first_name": "test2_first", - "last_name": "test2_last", + "id": 1, + "first_name": "User1", + "last_name": "user1", "image": "", - "nick_name": null + "nick_name": "test user1" }, - "created_at": "2023-06-20T21:03:00.124080Z", - "updated_at": "2023-06-20T21:03:00.125595Z", - "name": "Ipad", - "description": "description" + "muscles": [ + "rotator cuff", + "chest", + "core", + "hamstrings", + "glutes", + "triceps", + "quads", + "abs", + "deltoids", + "biceps" + ], + "equipment": [ + "Bench", + "Kettlebell", + "Battle Ropes" + ], + "exercise_count": 50, + "created_at": "2023-07-07T17:18:47.385158Z", + "updated_at": "2023-07-07T17:18:47.387277Z", + "name": "Cardio", + "description": "Ropes, bw squat, kb swings, push up" }, - "created_at": "2023-06-24T04:24:18.564094Z", - "updated_at": "2023-06-24T04:24:18.567762Z", - "difficulty": 1, - "total_time": 112, - "workout_start_time": "2015-10-22T19:50:08Z", - "notes": "🔥 i almost died", - "total_calories": 123.0 - }, { - "id": 12, + "created_at": "2023-07-07T17:53:34.629016Z", + "updated_at": "2023-07-07T17:53:34.631101Z", + "difficulty": 4, + "total_time": 1688, + "workout_start_time": "2023-07-07T17:25:19Z", + "notes": "", + "total_calories": -1.0 + }, + { + "id": 7, "workout": { - "id": 20, + "id": 11, "registered_user": { - "id": 2, - "first_name": "test2_first", - "last_name": "test2_last", + "id": 1, + "first_name": "User1", + "last_name": "user1", "image": "", - "nick_name": null + "nick_name": "test user1" }, - "created_at": "2023-06-20T21:03:00.124080Z", - "updated_at": "2023-06-20T21:03:00.125595Z", - "name": "Ipad", - "description": "description" + "muscles": [ + "chest", + "biceps", + "forearms", + "triceps" + ], + "equipment": [ + "Dumbbell", + "Barbell", + "Plates", + "Bench" + ], + "exercise_count": 24, + "created_at": "2023-07-06T14:56:03.908583Z", + "updated_at": "2023-07-06T14:56:03.910350Z", + "name": "Arms and HiiT", + "description": "" }, - "created_at": "2023-06-24T04:24:18.564094Z", - "updated_at": "2023-06-24T04:24:18.567762Z", - "difficulty": 1, - "total_time": 112, - "workout_start_time": "2015-10-22T19:50:08Z", - "notes": "this workout sucked", - "total_calories": 123.0 + "created_at": "2023-07-10T19:50:36.188887Z", + "updated_at": "2023-07-10T19:50:36.192789Z", + "difficulty": 2, + "total_time": 1937, + "workout_start_time": "2023-07-10T19:18:12Z", + "notes": "", + "total_calories": 176.9303436279297 } ] diff --git a/Werkout_ios/Network/Network.swift b/Werkout_ios/Network/Network.swift index bdb7fea..445bea3 100644 --- a/Werkout_ios/Network/Network.swift +++ b/Werkout_ios/Network/Network.swift @@ -7,15 +7,6 @@ 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 { case apiError(Error) case noData diff --git a/Werkout_ios/Views/AllWorkouts/WorkoutOverviewView.swift b/Werkout_ios/Views/AllWorkouts/WorkoutOverviewView.swift index f838560..4cb5368 100644 --- a/Werkout_ios/Views/AllWorkouts/WorkoutOverviewView.swift +++ b/Werkout_ios/Views/AllWorkouts/WorkoutOverviewView.swift @@ -30,6 +30,7 @@ struct WorkoutOverviewView: View { } } } + if let muscles = workout.muscles, muscles.joined(separator: ", ").count > 0{ Divider() @@ -54,6 +55,6 @@ struct WorkoutOverviewView: View { struct WorkoutOverviewView_Previews: PreviewProvider { static var previews: some View { - WorkoutOverviewView(workout: PreviewData.allWorkouts()[0]) + WorkoutOverviewView(workout: PreviewData.allWorkouts()[2]) } } diff --git a/Werkout_ios/Views/ExternalWorkoutDetailView.swift b/Werkout_ios/Views/ExternalWorkoutDetailView.swift index 7eec487..9e187dd 100644 --- a/Werkout_ios/Views/ExternalWorkoutDetailView.swift +++ b/Werkout_ios/Views/ExternalWorkoutDetailView.swift @@ -65,20 +65,8 @@ struct ExternalWorkoutDetailView: View { } } .onChange(of: bridgeModule.currentExercise, perform: { newValue in - var _url: URL? - if showNSFWVideos { - if let viddd = newValue?.exercise.nsfwVideoURL, - let url = URL(string: BaseURLs.currentBaseURL + viddd) { - _url = url - } - } else { - if let viddd = newValue?.exercise.videoURL, - let url = URL(string: BaseURLs.currentBaseURL + viddd) { - _url = url - } - } - if let __url = _url { - avPlayer = AVPlayer(url: __url) + if let videoURL = newValue?.videoURL(nsfw: showNSFWVideos) { + avPlayer = AVPlayer(url: videoURL) avPlayer.play() } }) diff --git a/Werkout_ios/Views/WorkoutDetail/ExerciseListView.swift b/Werkout_ios/Views/WorkoutDetail/ExerciseListView.swift index f2e81d9..3bf7a3d 100644 --- a/Werkout_ios/Views/WorkoutDetail/ExerciseListView.swift +++ b/Werkout_ios/Views/WorkoutDetail/ExerciseListView.swift @@ -13,18 +13,12 @@ struct ExerciseListView: View { @ObservedObject var bridgeModule = BridgeModule.shared var workout: Workout @State var avPlayer = AVPlayer(url: URL(string: "https://dev.werkout.fitness/media/exercise_videos/2_Dumbbell_Lateral_Lunges.mp4")!) + @State var videoExercise: ExerciseExercise? { didSet { - if showNSFWVideos { - if let viddd = self.videoExercise?.nsfwVideoURL, - let url = URL(string: BaseURLs.currentBaseURL + viddd) { - avPlayer = AVPlayer(url: url) - } - } else { - if let viddd = self.videoExercise?.videoURL, - let url = URL(string: BaseURLs.currentBaseURL + viddd) { - avPlayer = AVPlayer(url: url) - } + if let videoURL = self.videoExercise?.videoURL(nsfw: showNSFWVideos) { + avPlayer = AVPlayer(url: videoURL) + avPlayer.play() } } } diff --git a/Werkout_ios/Views/WorkoutDetail/WorkoutDetailView.swift b/Werkout_ios/Views/WorkoutDetail/WorkoutDetailView.swift index 84d457d..e0d4c7f 100644 --- a/Werkout_ios/Views/WorkoutDetail/WorkoutDetailView.swift +++ b/Werkout_ios/Views/WorkoutDetail/WorkoutDetailView.swift @@ -80,41 +80,15 @@ struct WorkoutDetailView: View { } } .onChange(of: bridgeModule.currentExercise, perform: { newValue in - var _url: URL? - if showNSFWVideos { - if let viddd = newValue?.exercise.nsfwVideoURL, - let url = URL(string: BaseURLs.currentBaseURL + viddd) { - _url = url - } - } else { - if let viddd = newValue?.exercise.videoURL, - let url = URL(string: BaseURLs.currentBaseURL + viddd) { - _url = url - } - } - if let __url = _url { - avPlayer = AVPlayer(url: __url) + if let videoURL = newValue?.videoURL(nsfw: showNSFWVideos) { + avPlayer = AVPlayer(url: videoURL) avPlayer.play() } }) .onAppear{ - var _url: URL? - if let currentExercise = bridgeModule.currentExercise { - if showNSFWVideos { - let viddd = currentExercise.exercise.nsfwVideoURL - if let url = URL(string: BaseURLs.currentBaseURL + viddd) { - _url = url - } - } else { - let viddd = currentExercise.exercise.videoURL - if let url = URL(string: BaseURLs.currentBaseURL + viddd) { - _url = url - } - } - if let __url = _url { - avPlayer = AVPlayer(url: __url) - avPlayer.play() - } + if let videoURL = bridgeModule.currentExercise?.videoURL(nsfw: showNSFWVideos) { + avPlayer = AVPlayer(url: videoURL) + avPlayer.play() } bridgeModule.completedWorkout = { if let workoutData = createWorkoutData() {