WIP
This commit is contained in:
@@ -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?()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user