Made multiple functions to get sleep data

This commit is contained in:
2024-01-06 17:55:24 +01:00
parent 9edb675eb1
commit adc6d187f2
3 changed files with 44 additions and 29 deletions

View File

@@ -12,6 +12,8 @@
6C560B892B495DEE00FDB70C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6C560B882B495DEE00FDB70C /* Assets.xcassets */; };
6C560B8C2B495DEE00FDB70C /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6C560B8B2B495DEE00FDB70C /* Preview Assets.xcassets */; };
6C560B932B495E3A00FDB70C /* HealthKitManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C560B922B495E3A00FDB70C /* HealthKitManager.swift */; };
6CD7B4BB2B49AA5100D1D8B8 /* SleepDebtTabView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD7B4BA2B49AA5100D1D8B8 /* SleepDebtTabView.swift */; };
6CD7B4BD2B49AB3F00D1D8B8 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6CD7B4BC2B49AB3F00D1D8B8 /* SettingsView.swift */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
@@ -22,6 +24,8 @@
6C560B8B2B495DEE00FDB70C /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = "<group>"; };
6C560B922B495E3A00FDB70C /* HealthKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HealthKitManager.swift; sourceTree = "<group>"; };
6C560B942B49605000FDB70C /* SleepDebt.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SleepDebt.entitlements; sourceTree = "<group>"; };
6CD7B4BA2B49AA5100D1D8B8 /* SleepDebtTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SleepDebtTabView.swift; sourceTree = "<group>"; };
6CD7B4BC2B49AB3F00D1D8B8 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -57,6 +61,8 @@
6C560B942B49605000FDB70C /* SleepDebt.entitlements */,
6C560B842B495DED00FDB70C /* SleepDebtApp.swift */,
6C560B862B495DED00FDB70C /* ContentView.swift */,
6CD7B4BA2B49AA5100D1D8B8 /* SleepDebtTabView.swift */,
6CD7B4BC2B49AB3F00D1D8B8 /* SettingsView.swift */,
6C560B922B495E3A00FDB70C /* HealthKitManager.swift */,
6C560B882B495DEE00FDB70C /* Assets.xcassets */,
6C560B8A2B495DEE00FDB70C /* Preview Content */,
@@ -143,6 +149,8 @@
buildActionMask = 2147483647;
files = (
6C560B872B495DED00FDB70C /* ContentView.swift in Sources */,
6CD7B4BB2B49AA5100D1D8B8 /* SleepDebtTabView.swift in Sources */,
6CD7B4BD2B49AB3F00D1D8B8 /* SettingsView.swift in Sources */,
6C560B852B495DED00FDB70C /* SleepDebtApp.swift in Sources */,
6C560B932B495E3A00FDB70C /* HealthKitManager.swift in Sources */,
);
@@ -282,6 +290,7 @@
DEVELOPMENT_TEAM = SSJBLTMP95;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_LSApplicationCategoryType = "";
INFOPLIST_KEY_NSHealthShareUsageDescription = "Please allow access to your sleep data to enjoy the features of SleepDebt";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
@@ -313,6 +322,7 @@
DEVELOPMENT_TEAM = SSJBLTMP95;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_KEY_LSApplicationCategoryType = "";
INFOPLIST_KEY_NSHealthShareUsageDescription = "Please allow access to your sleep data to enjoy the features of SleepDebt";
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;

View File

@@ -9,29 +9,30 @@ import SwiftUI
struct ContentView: View {
@EnvironmentObject var manager: HealthKitManager
var desiredAmountOfSleep = 8
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Button(action: {
manager.getSleepForLast7Days()
print(manager.sleepForLast7Days)
var seconds = manager.sleepForLast7Days
print("hours: ", seconds / 3600, " minutes: ", (seconds % 3600) / 60, " seconds: ", (seconds % 3600) % 60)
}) {
Text("Hello, world!")
}
// Button(action: {
// print(manager.sleepForLastXDays)
// var seconds = Int(manager.getSleepForLast7Days())
// print("hours: ", seconds / 3600, " minutes: ", (seconds % 3600) / 60, " seconds: ", (seconds % 3600) % 60)
// seconds = Int(manager.getSleepForLast30Days())
// print("hours: ", seconds / 3600, " minutes: ", (seconds % 3600) / 60, " seconds: ", (seconds % 3600) % 60)
// }) {
// Text("Hello, world!")
// }
}
.padding()
.onAppear {
manager.getSleepForLast7Days()
print(manager.sleepForLast7Days)
var seconds = manager.sleepForLast7Days
print("hours: ", seconds / 3600, " minutes: ", (seconds % 3600) / 60, " seconds: ", (seconds % 3600) % 60)
}
// .onAppear {
// print(manager.sleepForLastXDays)
// var seconds = Int(manager.getSleepForLast7Days())
// print("hours: ", seconds / 3600, " minutes: ", (seconds % 3600) / 60, " seconds: ", (seconds % 3600) % 60)
// seconds = Int(manager.getSleepForLast30Days())
// print("hours: ", seconds / 3600, " minutes: ", (seconds % 3600) / 60, " seconds: ", (seconds % 3600) % 60)
// }
}
}

View File

@@ -8,17 +8,11 @@
import Foundation
import HealthKit
extension Date {
static var last7Days: Date {
Date().addingTimeInterval(TimeInterval(-60 * 60 * 24 * 7)) // last 7 days
}
}
class HealthKitManager: ObservableObject {
let healthStore = HKHealthStore()
var sleepForLast7Days: Int = 0
var sleepForLastXDays: Dictionary<Int, Int> = [:]
init() {
let sleep = HKCategoryType(.sleepAnalysis)
@@ -32,14 +26,25 @@ class HealthKitManager: ObservableObject {
print(error)
}
}
self.getSleepForLast7Days()
}
func getSleepForLast7Days() {
func getSleepForLast7Days() -> Int {
self.getSleepForLastXDays(days: 7)
return self.sleepForLastXDays[7] ?? 0
}
func getSleepForLast30Days() -> Int{
self.getSleepForLastXDays(days: 30)
return self.sleepForLastXDays[30] ?? 0
}
private func getSleepForLastXDays(days: Int) {
var totalSleep = 0
let sleep = HKCategoryType(.sleepAnalysis)
let sleepPredicate = HKCategoryValueSleepAnalysis.predicateForSamples(equalTo: HKCategoryValueSleepAnalysis.allAsleepValues)
let datePredicate = HKQuery.predicateForSamples(withStart: .last7Days, end: .now)
let lastXDays = Date().addingTimeInterval(TimeInterval(-60 * 60 * 24 * days))
let datePredicate = HKQuery.predicateForSamples(withStart: lastXDays, end: .now)
let predicates = NSCompoundPredicate(andPredicateWithSubpredicates: [sleepPredicate, datePredicate])
let sortByDate = NSSortDescriptor(key: HKSampleSortIdentifierEndDate, ascending: false)
let query = HKSampleQuery(
@@ -47,7 +52,7 @@ class HealthKitManager: ObservableObject {
predicate: predicates,
limit: 100000,
sortDescriptors: [sortByDate])
{_, results, error in
{ _, results, error in
for(_, sample) in results!.enumerated() {
guard let currData:HKCategorySample = sample as? HKCategorySample else { print("There was an error"); return }
@@ -56,9 +61,8 @@ class HealthKitManager: ObservableObject {
let seconds = Int(endDate.timeIntervalSince(startDate))
totalSleep += seconds
}
self.sleepForLast7Days = totalSleep
self.sleepForLastXDays[days] = totalSleep
}
healthStore.execute(query)
}
}