This commit is contained in:
Trey t
2023-06-24 00:01:32 -05:00
parent 36400d1f79
commit 01915752b6
6 changed files with 120 additions and 46 deletions

View File

@@ -8,8 +8,9 @@
import Foundation
import WatchConnectivity
enum WatchActions: String, Codable {
enum WatchActions: Codable {
case nextExercise
case workoutComplete(Data)
}
class BridgeModule: NSObject, ObservableObject {
@@ -26,11 +27,17 @@ class BridgeModule: NSObject, ObservableObject {
var currentExerciseIdx: Int = -1
var workoutStartDate: Date?
// workoutEndDate ties into WatchPackageModel.workoutEndDate which
// tells the watch app to stop the workout
var workoutEndDate: Date?
@Published var currentWorkoutRunTimeInSeconds: Int = -1
private var currentWorkoutRunTimer: Timer?
@Published var isInWorkout = false
var completedWorkoutFromWatch: (() -> Void)?
var totalCaloire: Float?
var heartRates: [Int]?
func start(workout: Workout, atExerciseIndex: Int = 0) {
self.currentWorkout = workout
@@ -64,15 +71,14 @@ class BridgeModule: NSObject, ObservableObject {
currentExercise = nil
currentWorkout = nil
if isInWorkout {
let watchModel = WatchPackageModel(currentExerciseName: currentExercise?.exercise.name ?? "-", currentTimeLeft: timeLeft, workoutStartDate: workoutStartDate ?? Date(), workoutEndDate: Date())
let data = try! JSONEncoder().encode(watchModel)
send(data)
}
isInWorkout = false
workoutStartDate = nil
workoutEndDate = nil
let watchModel = WatchPackageModel(currentExerciseName: "", currentTimeLeft: -100, workoutStartDate: Date())
let data = try! JSONEncoder().encode(watchModel)
send(data)
}
private func startWorkoutTimer() {
@@ -140,11 +146,22 @@ class BridgeModule: NSObject, ObservableObject {
}
extension BridgeModule: WCSessionDelegate {
func sendWorkoutCompleteToWatch() {
let watchModel = WatchPackageModel(currentExerciseName: currentExercise?.exercise.name ?? "-", currentTimeLeft: timeLeft, workoutStartDate: workoutStartDate ?? Date(), workoutEndDate: Date())
let data = try! JSONEncoder().encode(watchModel)
send(data)
}
func session(_ session: WCSession, didReceiveMessageData messageData: Data) {
if let model = try? JSONDecoder().decode(WatchActions.self, from: messageData) {
switch model {
case .nextExercise:
nextExercise()
case .workoutComplete(let data):
let model = try! JSONDecoder().decode(WatchFinishWorkoutModel.self, from: data)
totalCaloire = Float(model.totalBurnedEnergery)
heartRates = model.allHeartRates
completedWorkoutFromWatch?()
}
}
}