diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m index 23c8ea36ca5493b5e9c6991395efd632bc19468a..08226a5a55e69e8644d0383dba1f5975e0f0cc29 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Methods_Fitness.m @@ -53,27 +53,11 @@ HKUnit *unit = [RCTAppleHealthKit hkUnitFromOptions:input key:@"unit" withDefault:[HKUnit countUnit]]; NSUInteger limit = [RCTAppleHealthKit uintFromOptions:input key:@"limit" withDefault:HKObjectQueryNoLimit]; BOOL ascending = [RCTAppleHealthKit boolFromOptions:input key:@"ascending" withDefault:false]; - BOOL isTracked = [RCTAppleHealthKit boolFromOptions:input key:@"isTracked" withDefault:true]; NSString *type = [RCTAppleHealthKit stringFromOptions:input key:@"type" withDefault:@"Walking"]; - NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:nil]; + NSDate *startDate = [RCTAppleHealthKit dateFromOptions:input key:@"startDate" withDefault:[NSDate date]]; NSDate *endDate = [RCTAppleHealthKit dateFromOptions:input key:@"endDate" withDefault:[NSDate date]]; - if(startDate == nil){ - callback(@[RCTMakeError(@"startDate is required in options", nil, nil)]); - return; - } - NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; - [formatter setDateFormat:@"YYYY-MM-dd-hh-mm-ss"]; - // no isTracked - NSArray *subPredicates = [[NSArray alloc] init]; - NSMutableArray *subPredicatesAux = [[NSMutableArray alloc] init]; - NSPredicate *predicateDate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate]; - NSPredicate *predicateType = isTracked ? [NSPredicate predicateWithFormat:@"metadata.%K != YES", HKMetadataKeyWasUserEntered] : [NSPredicate predicateWithFormat:@"metadata.%K == YES", HKMetadataKeyWasUserEntered]; - [subPredicatesAux addObject:predicateDate]; - [subPredicatesAux addObject:predicateType]; - subPredicates = [subPredicatesAux copy]; - - NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:predicateType, predicateDate, nil]]; + NSPredicate *predicate = [HKQuery predicateForSamplesWithStartDate:startDate endDate:endDate options:HKQueryOptionStrictStartDate]; HKSampleType *samplesType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierStepCount]; if ([type isEqual:@"Walking"]) { @@ -90,15 +74,11 @@ samplesType = [HKObjectType workoutType]; } - NSString * paramName = @"isTracked"; - - [self fetchQuantitySamplesOfType:samplesType + [self fetchSamplesOfType:samplesType unit:unit predicate:predicate ascending:ascending limit:limit - additionalParamName:paramName - additionalParam:isTracked completion:^(NSArray *results, NSError *error) { if(results){ callback(@[[NSNull null], results]); diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h index d04e94363a6bfe34fb13d504bfac2b5720545ae9..39dc12cbd56adccca00a8c43b98b9e4751690764 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.h @@ -18,7 +18,7 @@ startDate:(NSDate *)startDate endDate:(NSDate *)endDate completion:(void (^)(NSArray *, NSError *))completionHandler; -- (void)fetchQuantitySamplesOfType:(HKQuantityType *)quantityType +- (void)fetchSamplesOfType:(HKSampleType *)quantityType unit:(HKUnit *)unit predicate:(NSPredicate *)predicate ascending:(BOOL)asc @@ -29,8 +29,6 @@ predicate:(NSPredicate *)predicate ascending:(BOOL)asc limit:(NSUInteger)lim - additionalParamName:(NSString *)paramName - additionalParam:(BOOL)param completion:(void (^)(NSArray *, NSError *))completion; - (void)fetchCorrelationSamplesOfType:(HKQuantityType *)quantityType unit:(HKUnit *)unit diff --git a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m index 4200a06af0eb5e4bd129dc09f9646e8c8c149381..d8aa95aff44b8017135200fee916a52186c94b29 100644 --- a/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m +++ b/RCTAppleHealthKit/RCTAppleHealthKit+Queries.m @@ -48,17 +48,16 @@ [self.healthStore executeQuery:query]; } - - (void)fetchQuantitySamplesOfType:(HKQuantityType *)quantityType unit:(HKUnit *)unit predicate:(NSPredicate *)predicate ascending:(BOOL)asc limit:(NSUInteger)lim completion:(void (^)(NSArray *, NSError *))completion { - + NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierEndDate ascending:asc]; - + // declare the block void (^handlerBlock)(HKSampleQuery *query, NSArray *results, NSError *error); // create and assign the block @@ -69,49 +68,49 @@ } return; } - + if (completion) { NSMutableArray *data = [NSMutableArray arrayWithCapacity:1]; - + dispatch_async(dispatch_get_main_queue(), ^{ - + for (HKQuantitySample *sample in results) { HKQuantity *quantity = sample.quantity; double value = [quantity doubleValueForUnit:unit]; - + NSString *startDateString = [RCTAppleHealthKit buildISO8601StringFromDate:sample.startDate]; NSString *endDateString = [RCTAppleHealthKit buildISO8601StringFromDate:sample.endDate]; - + NSDictionary *elem = @{ - @"value" : @(value), - @"startDate" : startDateString, - @"endDate" : endDateString, - }; - + @"value" : @(value), + @"startDate" : startDateString, + @"endDate" : endDateString, + }; + [data addObject:elem]; } - + completion(data, error); }); } }; - + HKSampleQuery *query = [[HKSampleQuery alloc] initWithSampleType:quantityType predicate:predicate limit:lim sortDescriptors:@[timeSortDescriptor] resultsHandler:handlerBlock]; - + [self.healthStore executeQuery:query]; } -- (void)fetchQuantitySamplesOfType:(HKSampleType *)type + + +- (void)fetchSamplesOfType:(HKSampleType *)type unit:(HKUnit *)unit predicate:(NSPredicate *)predicate ascending:(BOOL)asc limit:(NSUInteger)lim - additionalParamName:(NSString *)paramName - additionalParam:(BOOL)param completion:(void (^)(NSArray *, NSError *))completion { NSSortDescriptor *timeSortDescriptor = [[NSSortDescriptor alloc] initWithKey:HKSampleSortIdentifierEndDate ascending:asc]; @@ -139,14 +138,19 @@ NSString *startDateString = [RCTAppleHealthKit buildISO8601StringFromDate:sample.startDate]; NSString *endDateString = [RCTAppleHealthKit buildISO8601StringFromDate:sample.endDate]; + bool isTracked = true; + for(id key in [sample metadata]) + if (key == HKMetadataKeyWasUserEntered ) { + isTracked = false; + } NSDictionary *elem = @{ @"type" : type, @"energy" : @(energy), + @"isTracked" : @(isTracked), @"distance" : @(distance), @"startDate" : startDateString, - @"endDate" : endDateString, - paramName : @(param), + @"endDate" : endDateString }; [data addObject:elem]; @@ -159,11 +163,17 @@ NSString *startDateString = [RCTAppleHealthKit buildISO8601StringFromDate:sample.startDate]; NSString *endDateString = [RCTAppleHealthKit buildISO8601StringFromDate:sample.endDate]; + bool isTracked = true; + for(id key in [sample metadata]) + if (key == HKMetadataKeyWasUserEntered ) { + isTracked = false; + } + NSDictionary *elem = @{ @"value" : @(value), + @"isTracked" : @(isTracked), @"startDate" : startDateString, - @"endDate" : endDateString, - paramName : @(param), + @"endDate" : endDateString }; [data addObject:elem];