try to fix watch stuff

This commit is contained in:
Trey t
2024-07-01 21:22:12 -05:00
parent cee84d7776
commit f1781744ca
14 changed files with 187 additions and 157 deletions

View File

@@ -12,81 +12,59 @@ import HealthKit
class WatchMainViewModel: NSObject, ObservableObject {
static let shared = WatchMainViewModel()
var session: WCSession
@Published var isInWorkout = false
@Published var watchPackageModel = WatchMainViewModel.defualtPackageModle
@Published var heartValue: Int?
static var defualtPackageModle: WatchPackageModel {
WatchPackageModel(currentExerciseName: "", currentExerciseID: -1, currentTimeLeft: -1, workoutStartDate: Date())
}
let healthStore = HKHealthStore()
var hkWorkoutSession: HKWorkoutSession?
var hkBuilder: HKLiveWorkoutBuilder?
var heartRates = [Int]()
@Published var isPaused = false
override init() {
session = WCSession.default
super.init()
session.delegate = self
session.activate()
autorizeHealthKit()
}
func autorizeHealthKit() {
let healthKitTypes: Set = [
HKObjectType.quantityType(forIdentifier: .heartRate)!,
HKObjectType.quantityType(forIdentifier: .activeEnergyBurned)!,
HKObjectType.quantityType(forIdentifier: .oxygenSaturation)!,
HKQuantityType.workoutType()
]
healthStore.requestAuthorization(toShare: healthKitTypes, read: healthKitTypes) { (succ, error) in
if !succ {
fatalError("Error requesting authorization from health store: \(String(describing: error)))")
}
}
}
// actions from view
func nextExercise() {
let nextExerciseAction = WatchActions.nextExercise
let data = try! JSONEncoder().encode(nextExerciseAction)
send(data)
DataSender.send(data)
WKInterfaceDevice.current().play(.start)
}
func restartExercise() {
let nextExerciseAction = WatchActions.restartExercise
let data = try! JSONEncoder().encode(nextExerciseAction)
send(data)
DataSender.send(data)
WKInterfaceDevice.current().play(.start)
}
func previousExercise() {
let nextExerciseAction = WatchActions.previousExercise
let data = try! JSONEncoder().encode(nextExerciseAction)
send(data)
DataSender.send(data)
WKInterfaceDevice.current().play(.start)
}
func completeWorkout() {
let nextExerciseAction = WatchActions.stopWorkout
let data = try! JSONEncoder().encode(nextExerciseAction)
send(data)
DataSender.send(data)
WKInterfaceDevice.current().play(.start)
}
func pauseWorkout() {
let nextExerciseAction = WatchActions.pauseWorkout
let data = try! JSONEncoder().encode(nextExerciseAction)
send(data)
isPaused = !isPaused
DataSender.send(data)
WKInterfaceDevice.current().play(.start)
WatchWorkout.shared.togglePaused()
}
func dataToAction(messageData: Data) {
@@ -94,27 +72,19 @@ class WatchMainViewModel: NSObject, ObservableObject {
DispatchQueue.main.async {
switch model {
case .inExercise(let newWatchPackageModel):
if !self.isInWorkout {
self.startWorkout()
}
WatchWorkout.shared.startWorkout()
if self.watchPackageModel.currentExerciseID != newWatchPackageModel.currentExerciseID {
self.isPaused = false
WKInterfaceDevice.current().play(.start)
}
self.watchPackageModel = newWatchPackageModel
case .reset:
self.isInWorkout = false
self.watchPackageModel = WatchMainViewModel.defualtPackageModle
self.stopWorkout(sendDetails: false)
WatchWorkout.shared.stopWorkout(sendDetails: false)
case .endWorkout:
self.isInWorkout = false
self.watchPackageModel = WatchMainViewModel.defualtPackageModle
self.stopWorkout(sendDetails: true)
WatchWorkout.shared.stopWorkout(sendDetails: true)
case .startWorkout:
if self.isInWorkout {
self.stopWorkout(sendDetails: false)
}
self.startWorkout()
WatchWorkout.shared.startWorkout()
}
}
}