From adc6d187f2a79b3436c9335287977b89d912444e Mon Sep 17 00:00:00 2001 From: oliverhnat Date: Sat, 6 Jan 2024 17:55:24 +0100 Subject: [PATCH] Made multiple functions to get sleep data --- SleepDebt.xcodeproj/project.pbxproj | 10 +++++++++ SleepDebt/ContentView.swift | 33 +++++++++++++++-------------- SleepDebt/HealthKitManager.swift | 30 ++++++++++++++------------ 3 files changed, 44 insertions(+), 29 deletions(-) diff --git a/SleepDebt.xcodeproj/project.pbxproj b/SleepDebt.xcodeproj/project.pbxproj index d952570..7699e1e 100644 --- a/SleepDebt.xcodeproj/project.pbxproj +++ b/SleepDebt.xcodeproj/project.pbxproj @@ -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 = ""; }; 6C560B922B495E3A00FDB70C /* HealthKitManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HealthKitManager.swift; sourceTree = ""; }; 6C560B942B49605000FDB70C /* SleepDebt.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = SleepDebt.entitlements; sourceTree = ""; }; + 6CD7B4BA2B49AA5100D1D8B8 /* SleepDebtTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SleepDebtTabView.swift; sourceTree = ""; }; + 6CD7B4BC2B49AB3F00D1D8B8 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; /* 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; diff --git a/SleepDebt/ContentView.swift b/SleepDebt/ContentView.swift index 102f0fc..6f70b56 100644 --- a/SleepDebt/ContentView.swift +++ b/SleepDebt/ContentView.swift @@ -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) +// } } } diff --git a/SleepDebt/HealthKitManager.swift b/SleepDebt/HealthKitManager.swift index b015268..12ec4c8 100644 --- a/SleepDebt/HealthKitManager.swift +++ b/SleepDebt/HealthKitManager.swift @@ -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 = [:] 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) } - }