-
Notifications
You must be signed in to change notification settings - Fork 0
/
HomeViewController.m
138 lines (113 loc) · 6.45 KB
/
HomeViewController.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
//
// HomeViewController.m
// FindMyFun
//
// Created by Elan Halpern on 6/9/19.
// Copyright © 2019 Stanford University. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "HomeViewController.h"
#import <INTULocationManager/INTULocationManager.h>
@import Firebase;
@interface HomeViewController ()
@property (strong, nonatomic) FIRDatabaseReference *ref;
@property UIAlertController * alert;
@end
@implementation HomeViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.ref = [[FIRDatabase database] reference];
// Do any additional setup after loading the view.
INTULocationManager *locMgr = [INTULocationManager sharedInstance];
// The block will execute indefinitely (even across errors, until canceled), once for every new updated location regardless of its accuracy.
[locMgr subscribeToLocationUpdatesWithDesiredAccuracy:INTULocationAccuracyHouse
block:^(CLLocation *currentLocation, INTULocationAccuracy achievedAccuracy, INTULocationStatus status) {
if (status == INTULocationStatusSuccess) {
// A new updated location is available in currentLocation, and achievedAccuracy indicates how accurate this particular location is.
NSLog(@"%@", currentLocation);
NSNumber *longitude = [NSNumber numberWithDouble:currentLocation.coordinate.longitude];
NSNumber *latitude = [NSNumber numberWithDouble:currentLocation.coordinate.latitude];
NSLog(@" longitude %@", longitude);
NSLog(@" latitude %@", latitude);
if ([FIRAuth auth].currentUser) {
// User is signed in.
[[[self.ref child:@"users"] child:[FIRAuth auth].currentUser.uid]
setValue:@{@"longitude": longitude}];
[[[self.ref child:@"users"] child:[FIRAuth auth].currentUser.uid]
setValue:@{@"latitude": latitude}];
[self checkIfUserLocationMatchesEvent:longitude :latitude];
} else {
// No user is signed in.
// ...
}
}
else {
// An error occurred, more info is available by looking at the specific status returned. The subscription has been kept alive.
NSLog(@"Error");
}
}];
}
- (void)addUserToEventList: (NSString*) eventName {
NSArray *userList = @[[FIRAuth auth].currentUser.email];
[[_ref child:@"events"]
observeEventType:FIRDataEventTypeValue
withBlock:^(FIRDataSnapshot *snapshot) {
// Loop over children
NSEnumerator *children = [snapshot children];
FIRDataSnapshot *child;
while (child = [children nextObject]) {
if ([child.value[@"name"] isEqualToString:eventName]) {
[[[self.ref child:@"events"] child:child.key]
setValue:@{@"userList": userList}];
}
}
}];
}
- (void)alertUserCheckIn:(NSString*) eventName {
// set up alert controller
_alert = [UIAlertController
alertControllerWithTitle:@"Event Arrival"
message:[NSString stringWithFormat:@"Would you like to check in to %@", eventName]
preferredStyle:UIAlertControllerStyleAlert];
//Add Buttons
UIAlertAction* yesButton = [UIAlertAction
actionWithTitle:@"Yes"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[self addUserToEventList:eventName];
}];
UIAlertAction* noButton = [UIAlertAction
actionWithTitle:@"No"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
//Don't add user
}];
//Add your buttons to alert controller
[_alert addAction:yesButton];
[_alert addAction:noButton];
if (self.presentedViewController != _alert) {
[self presentViewController:_alert animated:NO completion:nil];
} else {
NSLog(@"Already presented TZImagePickerController");
}
}
- (void)checkIfUserLocationMatchesEvent:(NSNumber*) userLongitude : (NSNumber*) userLatitude {
[[_ref child:@"events"]
observeEventType:FIRDataEventTypeValue
withBlock:^(FIRDataSnapshot *snapshot) {
// Loop over children
NSEnumerator *children = [snapshot children];
FIRDataSnapshot *child;
while (child = [children nextObject]) {
NSNumber *eventLongitude = child.value[@"longitude"];
NSNumber *eventLatitude = child.value[@"latitude"];
if ([eventLatitude isEqual:userLatitude] && [eventLongitude isEqual:userLongitude]) {
NSLog(@"We have a match!");
[self alertUserCheckIn:child.value[@"name"]];
}
NSLog(@" Event longitude %@", eventLongitude);
NSLog(@" Event latitude %@", eventLatitude);
}
}];
}
@end