Commit 03974dae authored by Greg Wilson's avatar Greg Wilson

created Utils category and refactored

parent 2e1a9fa6
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
3774C8931D2092F20000B3F3 /* RCTAppleHealthKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 3774C8921D2092F20000B3F3 /* RCTAppleHealthKit.m */; }; 3774C8931D2092F20000B3F3 /* RCTAppleHealthKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 3774C8921D2092F20000B3F3 /* RCTAppleHealthKit.m */; };
3774C89B1D2095450000B3F3 /* RCTAppleHealthKit+Queries.m in Sources */ = {isa = PBXBuildFile; fileRef = 3774C89A1D2095450000B3F3 /* RCTAppleHealthKit+Queries.m */; }; 3774C89B1D2095450000B3F3 /* RCTAppleHealthKit+Queries.m in Sources */ = {isa = PBXBuildFile; fileRef = 3774C89A1D2095450000B3F3 /* RCTAppleHealthKit+Queries.m */; };
3774C89E1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3774C89D1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.m */; }; 3774C89E1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3774C89D1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.m */; };
3774C8A11D20A6B90000B3F3 /* RCTAppleHealthKit+Utils.m in Sources */ = {isa = PBXBuildFile; fileRef = 3774C8A01D20A6B90000B3F3 /* RCTAppleHealthKit+Utils.m */; };
/* End PBXBuildFile section */ /* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */ /* Begin PBXCopyFilesBuildPhase section */
...@@ -34,6 +35,8 @@ ...@@ -34,6 +35,8 @@
3774C89A1D2095450000B3F3 /* RCTAppleHealthKit+Queries.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTAppleHealthKit+Queries.m"; sourceTree = "<group>"; }; 3774C89A1D2095450000B3F3 /* RCTAppleHealthKit+Queries.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTAppleHealthKit+Queries.m"; sourceTree = "<group>"; };
3774C89C1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTAppleHealthKit+TypesAndPermissions.h"; sourceTree = "<group>"; }; 3774C89C1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTAppleHealthKit+TypesAndPermissions.h"; sourceTree = "<group>"; };
3774C89D1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTAppleHealthKit+TypesAndPermissions.m"; sourceTree = "<group>"; }; 3774C89D1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTAppleHealthKit+TypesAndPermissions.m"; sourceTree = "<group>"; };
3774C89F1D20A6B90000B3F3 /* RCTAppleHealthKit+Utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTAppleHealthKit+Utils.h"; sourceTree = "<group>"; };
3774C8A01D20A6B90000B3F3 /* RCTAppleHealthKit+Utils.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "RCTAppleHealthKit+Utils.m"; sourceTree = "<group>"; };
/* End PBXFileReference section */ /* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */ /* Begin PBXFrameworksBuildPhase section */
...@@ -72,6 +75,8 @@ ...@@ -72,6 +75,8 @@
3774C89A1D2095450000B3F3 /* RCTAppleHealthKit+Queries.m */, 3774C89A1D2095450000B3F3 /* RCTAppleHealthKit+Queries.m */,
3774C89C1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.h */, 3774C89C1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.h */,
3774C89D1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.m */, 3774C89D1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.m */,
3774C89F1D20A6B90000B3F3 /* RCTAppleHealthKit+Utils.h */,
3774C8A01D20A6B90000B3F3 /* RCTAppleHealthKit+Utils.m */,
); );
path = RCTAppleHealthKit; path = RCTAppleHealthKit;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -133,6 +138,7 @@ ...@@ -133,6 +138,7 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
3774C89B1D2095450000B3F3 /* RCTAppleHealthKit+Queries.m in Sources */, 3774C89B1D2095450000B3F3 /* RCTAppleHealthKit+Queries.m in Sources */,
3774C8A11D20A6B90000B3F3 /* RCTAppleHealthKit+Utils.m in Sources */,
3774C8931D2092F20000B3F3 /* RCTAppleHealthKit.m in Sources */, 3774C8931D2092F20000B3F3 /* RCTAppleHealthKit.m in Sources */,
3774C89E1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.m in Sources */, 3774C89E1D2095850000B3F3 /* RCTAppleHealthKit+TypesAndPermissions.m in Sources */,
); );
......
...@@ -12,6 +12,5 @@ ...@@ -12,6 +12,5 @@
- (void)fetchMostRecentQuantitySampleOfType:(HKQuantityType *)quantityType predicate:(NSPredicate *)predicate completion:(void (^)(HKQuantity *mostRecentQuantity, NSError *error))completion; - (void)fetchMostRecentQuantitySampleOfType:(HKQuantityType *)quantityType predicate:(NSPredicate *)predicate completion:(void (^)(HKQuantity *mostRecentQuantity, NSError *error))completion;
- (void)fetchSumOfSamplesTodayForType:(HKQuantityType *)quantityType unit:(HKUnit *)unit completion:(void (^)(double, NSError *))completionHandler; - (void)fetchSumOfSamplesTodayForType:(HKQuantityType *)quantityType unit:(HKUnit *)unit completion:(void (^)(double, NSError *))completionHandler;
- (NSPredicate *)predicateForSamplesToday;
@end @end
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
// //
#import "RCTAppleHealthKit+Queries.h" #import "RCTAppleHealthKit+Queries.h"
#import "RCTAppleHealthKit+Utils.h"
@implementation RCTAppleHealthKit (Queries) @implementation RCTAppleHealthKit (Queries)
...@@ -35,14 +36,14 @@ ...@@ -35,14 +36,14 @@
completion(quantity, error); completion(quantity, error);
} }
}]; }];
[self.healthStore executeQuery:query]; [self.healthStore executeQuery:query];
} }
- (void)fetchSumOfSamplesTodayForType:(HKQuantityType *)quantityType unit:(HKUnit *)unit completion:(void (^)(double, NSError *))completionHandler { - (void)fetchSumOfSamplesTodayForType:(HKQuantityType *)quantityType unit:(HKUnit *)unit completion:(void (^)(double, NSError *))completionHandler {
NSPredicate *predicate = [self predicateForSamplesToday]; NSPredicate *predicate = [RCTAppleHealthKit predicateForSamplesToday];
HKStatisticsQuery *query = [[HKStatisticsQuery alloc] initWithQuantityType:quantityType quantitySamplePredicate:predicate options:HKStatisticsOptionCumulativeSum completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) { HKStatisticsQuery *query = [[HKStatisticsQuery alloc] initWithQuantityType:quantityType quantitySamplePredicate:predicate options:HKStatisticsOptionCumulativeSum completionHandler:^(HKStatisticsQuery *query, HKStatistics *result, NSError *error) {
HKQuantity *sum = [result sumQuantity]; HKQuantity *sum = [result sumQuantity];
...@@ -57,22 +58,4 @@ ...@@ -57,22 +58,4 @@
[self.healthStore executeQuery:query]; [self.healthStore executeQuery:query];
} }
#pragma mark - Convenience
- (NSPredicate *)predicateForSamplesToday {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
NSDate *startDate = [calendar startOfDayForDate:now];
NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];
return [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];
}
@end @end
//
// RCTAppleHealthKit+Utils.h
// RCTAppleHealthKit
//
// Created by Greg Wilson on 2016-06-26.
// Copyright © 2016 Greg Wilson. All rights reserved.
//
#import "RCTAppleHealthKit.h"
@interface RCTAppleHealthKit (Utils)
+ (NSDate *)parseISO8601DateFromString:(NSString *)date;
+ (NSString *)buildISO8601StringFromDate:(NSDate *)date;
+ (NSPredicate *)predicateForSamplesToday;
+ (NSPredicate *)predicateForSamplesOnDay:(NSDate *)date;
+ (NSPredicate *)predicateForSamplesOnDayFromTimestamp:(NSString *)timestamp;
@end
//
// RCTAppleHealthKit+Utils.m
// RCTAppleHealthKit
//
// Created by Greg Wilson on 2016-06-26.
// Copyright © 2016 Greg Wilson. All rights reserved.
//
#import "RCTAppleHealthKit+Utils.h"
@implementation RCTAppleHealthKit (Utils)
#pragma mark - Utilities
+ (NSDate *)parseISO8601DateFromString:(NSString *)date
{
NSDateFormatter *dateFormatter = [NSDateFormatter new];
NSLocale *posix = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
dateFormatter.locale = posix;
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZZZZZ";
return [dateFormatter dateFromString:date];
}
+ (NSString *)buildISO8601StringFromDate:(NSDate *)date
{
NSDateFormatter *dateFormatter = [NSDateFormatter new];
NSLocale *posix = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
dateFormatter.locale = posix;
dateFormatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ssZZZZZ";
return [dateFormatter stringFromDate:date];
}
+ (NSPredicate *)predicateForSamplesToday {
NSDate *now = [NSDate date];
return [RCTAppleHealthKit predicateForSamplesOnDay:now];
}
+ (NSPredicate *)predicateForSamplesOnDayFromTimestamp:(NSString *)timestamp {
NSDate *day = [RCTAppleHealthKit parseISO8601DateFromString:timestamp];
return [RCTAppleHealthKit predicateForSamplesOnDay:day];
}
+ (NSPredicate *)predicateForSamplesOnDay:(NSDate *)date {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *startDate = [calendar startOfDayForDate:date];
NSDate *endDate = [calendar dateByAddingUnit:NSCalendarUnitDay value:1 toDate:startDate options:0];
return [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate];
}
@end
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#import "RCTAppleHealthKit.h" #import "RCTAppleHealthKit.h"
#import "RCTAppleHealthKit+Queries.h" #import "RCTAppleHealthKit+Queries.h"
#import "RCTAppleHealthKit+TypesAndPermissions.h" #import "RCTAppleHealthKit+TypesAndPermissions.h"
#import "RCTAppleHealthKit+Utils.h"
@implementation RCTAppleHealthKit @implementation RCTAppleHealthKit
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment