Commit f4db6e55e0cc97b7ea81ea03569dbc714d1893fa

Authored by nvtu
1 parent 94f43017e2
Exists in master

Task-3287 : change value of label 目標 from step to target. Add step to check array or not

Showing 3 changed files with 5 additions and 4 deletions Inline Diff

LifeLog/LifeLog/HistoryObject.m
1 // 1 //
2 // HistoryObject.m 2 // HistoryObject.m
3 // LifeLog 3 // LifeLog
4 // 4 //
5 // Created by nvtu on 8/5/17. 5 // Created by nvtu on 8/5/17.
6 // Copyright © 2017 PhongNV. All rights reserved. 6 // Copyright © 2017 PhongNV. All rights reserved.
7 // 7 //
8 8
9 #import "HistoryObject.h" 9 #import "HistoryObject.h"
10 #import "Utilities.h" 10 #import "Utilities.h"
11 11
12 @implementation HistoryObject 12 @implementation HistoryObject
13 13
14 -(id) initWithData : (NSDictionary *) dict { 14 -(id) initWithData : (NSDictionary *) dict {
15 if([dict objectForKey:@"steps"] != nil) { 15 if([dict objectForKey:@"steps"] != nil) {
16 self.step = [dict[@"steps"] intValue]; 16 self.step = [dict[@"steps"] intValue];
17 } 17 }
18 if([dict objectForKey:@"step_diff"] != nil) { 18 if([dict objectForKey:@"step_diff"] != nil) {
19 self.step_diff = [dict[@"step_diff"] intValue]; 19 self.step_diff = [dict[@"step_diff"] intValue];
20 } 20 }
21 if([dict objectForKey:@"target"] != nil) { 21 if([dict objectForKey:@"target"] != nil) {
22 self.target = [dict[@"target"] intValue]; 22 self.target = [dict[@"target"] intValue];
23 } 23 }
24 if([dict objectForKey:@"step_remain"] != nil) { 24 if([dict objectForKey:@"step_remain"] != nil) {
25 self.missing = [dict[@"step_remain"] intValue]; 25 self.missing = [dict[@"step_remain"] intValue];
26 } 26 }
27 if([dict objectForKey:@"complete_percent"] != nil) { 27 if([dict objectForKey:@"complete_percent"] != nil) {
28 self.percent = [dict[@"complete_percent"] floatValue]; 28 self.percent = [dict[@"complete_percent"] floatValue];
29 } 29 }
30 if([dict objectForKey:@"distance"] != nil) { 30 if([dict objectForKey:@"distance"] != nil) {
31 if([dict[@"distance"] isKindOfClass:[NSString class]]) { 31 if([dict[@"distance"] isKindOfClass:[NSString class]]) {
32 NSString *distance = dict[@"distance"]; 32 NSString *distance = dict[@"distance"];
33 self.distance = [distance floatValue]; 33 self.distance = [distance floatValue];
34 } 34 }
35 else { 35 else {
36 self.distance = [dict[@"distance"] floatValue]; 36 self.distance = [dict[@"distance"] floatValue];
37 } 37 }
38 } 38 }
39 if([dict objectForKey:@"kcal"] != nil) { 39 if([dict objectForKey:@"kcal"] != nil) {
40 self.calories = [dict[@"kcal"] floatValue]; 40 self.calories = [dict[@"kcal"] floatValue];
41 } 41 }
42 if([dict objectForKey:@"time"] != nil) { 42 if([dict objectForKey:@"time"] != nil) {
43 self.time = [dict[@"time"] intValue]; 43 self.time = [dict[@"time"] intValue];
44 } 44 }
45 if([dict objectForKey:@"date"] != nil) { 45 if([dict objectForKey:@"date"] != nil) {
46 NSString *dateString = dict[@"date"]; 46 NSString *dateString = dict[@"date"];
47 self.date = [Utilities dateFromString:dateString withFormat:@"yyyy-MM-dd"]; 47 self.date = [Utilities dateFromString:dateString withFormat:@"yyyy-MM-dd"];
48 } 48 }
49 else { 49 else {
50 self.date = [NSDate date]; 50 self.date = [NSDate date];
51 } 51 }
52 if([dict objectForKey:@"data_chart"] != nil) { 52 if([dict objectForKey:@"data_chart"] != nil) {
53 self.dataGraph = [[NSMutableArray alloc] init]; 53 self.dataGraph = [[NSMutableArray alloc] init];
54 NSDictionary * graph = [dict objectForKey:@"data_chart"]; 54 NSDictionary * graph = [dict objectForKey:@"data_chart"];
55 if([graph count] == 24) { 55 if([graph count] == 24) {
56 for(int i = 0; i < 24; i++) { 56 for(int i = 0; i < 24; i++) {
57 [self.dataGraph addObject:[graph objectForKey:[NSString stringWithFormat:@"%d", i]]]; 57 if(![graph isKindOfClass:[NSArray class]])
58 [self.dataGraph addObject:[graph objectForKey:[NSString stringWithFormat:@"%d", i]]];
58 } 59 }
59 } 60 }
60 } 61 }
61 return self; 62 return self;
62 } 63 }
63 @end 64 @end
64 65
LifeLog/LifeLog/HistoryViewController.m
1 // 1 //
2 // HistoryViewController.m 2 // HistoryViewController.m
3 // LifeLog 3 // LifeLog
4 // 4 //
5 // Created by Nguyen Van Phong on 7/25/17. 5 // Created by Nguyen Van Phong on 7/25/17.
6 // Copyright © 2017 PhongNV. All rights reserved. 6 // Copyright © 2017 PhongNV. All rights reserved.
7 // 7 //
8 8
9 #import "HistoryViewController.h" 9 #import "HistoryViewController.h"
10 #import "Utilities.h" 10 #import "Utilities.h"
11 #import "ServerAPI.h" 11 #import "ServerAPI.h"
12 12
13 #import "HistoryListTableViewCell.h" 13 #import "HistoryListTableViewCell.h"
14 14
15 @interface HistoryViewController () 15 @interface HistoryViewController ()
16 16
17 @end 17 @end
18 18
19 @implementation HistoryViewController 19 @implementation HistoryViewController
20 20
21 - (void)viewDidLoad { 21 - (void)viewDidLoad {
22 [super viewDidLoad]; 22 [super viewDidLoad];
23 // Do any additional setup after loading the view from its nib. 23 // Do any additional setup after loading the view from its nib.
24 self.title = NSLocalizedString(@"lifelog.history.title", nil); 24 self.title = NSLocalizedString(@"lifelog.history.title", nil);
25 25
26 _isDisableLoadMore = true; 26 _isDisableLoadMore = true;
27 27
28 [self setupView]; 28 [self setupView];
29 [self setupChartView]; 29 [self setupChartView];
30 30
31 _startDate = [NSDate date]; 31 _startDate = [NSDate date];
32 _endDate = _startDate; 32 _endDate = _startDate;
33 33
34 self.lblDatetime.text = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日 EEEE" locale:@"ja_JP"]; 34 self.lblDatetime.text = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日 EEEE" locale:@"ja_JP"];
35 35
36 [self checkRequestData]; 36 [self checkRequestData];
37 37
38 //register nib for table view 38 //register nib for table view
39 [self.tableBase registerNib:[UINib nibWithNibName:@"HistoryListTableViewCell" bundle:nil] forCellReuseIdentifier:@"HistoryListCell"]; 39 [self.tableBase registerNib:[UINib nibWithNibName:@"HistoryListTableViewCell" bundle:nil] forCellReuseIdentifier:@"HistoryListCell"];
40 } 40 }
41 41
42 - (void)viewDidAppear:(BOOL) animated 42 - (void)viewDidAppear:(BOOL) animated
43 { 43 {
44 [super viewDidAppear:animated]; 44 [super viewDidAppear:animated];
45 self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, 400); 45 self.scrollView.contentSize = CGSizeMake(self.view.frame.size.width, 400);
46 [self.scrollView setNeedsLayout]; 46 [self.scrollView setNeedsLayout];
47 [self.scrollView setNeedsUpdateConstraints]; 47 [self.scrollView setNeedsUpdateConstraints];
48 48
49 } 49 }
50 50
51 - (void)didReceiveMemoryWarning { 51 - (void)didReceiveMemoryWarning {
52 [super didReceiveMemoryWarning]; 52 [super didReceiveMemoryWarning];
53 // Dispose of any resources that can be recreated. 53 // Dispose of any resources that can be recreated.
54 } 54 }
55 55
56 - (void)setupView { 56 - (void)setupView {
57 NSArray *typeTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.history.type.1", nil), NSLocalizedString(@"lifelog.history.type.2", nil), NSLocalizedString(@"lifelog.history.type.3", nil), NSLocalizedString(@"lifelog.history.type.4", nil), NSLocalizedString(@"lifelog.history.type.5", nil), nil]; 57 NSArray *typeTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.history.type.1", nil), NSLocalizedString(@"lifelog.history.type.2", nil), NSLocalizedString(@"lifelog.history.type.3", nil), NSLocalizedString(@"lifelog.history.type.4", nil), NSLocalizedString(@"lifelog.history.type.5", nil), nil];
58 [self.viewCollectionType setButtonNumber:typeTitle.count]; 58 [self.viewCollectionType setButtonNumber:typeTitle.count];
59 [self.viewCollectionType setSpacing:2]; 59 [self.viewCollectionType setSpacing:2];
60 [self.viewCollectionType setArrayTitle:typeTitle]; 60 [self.viewCollectionType setArrayTitle:typeTitle];
61 self.viewCollectionType.changeCurrentIndex = ^(int index){ 61 self.viewCollectionType.changeCurrentIndex = ^(int index){
62 [self changeDate]; 62 [self changeDate];
63 }; 63 };
64 64
65 NSArray *modeTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.history.mode.1", nil), NSLocalizedString(@"lifelog.history.mode.2", nil), NSLocalizedString(@"lifelog.history.mode.3", nil), nil]; 65 NSArray *modeTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.history.mode.1", nil), NSLocalizedString(@"lifelog.history.mode.2", nil), NSLocalizedString(@"lifelog.history.mode.3", nil), nil];
66 [self.viewCollectionMode setButtonNumber:modeTitle.count]; 66 [self.viewCollectionMode setButtonNumber:modeTitle.count];
67 [self.viewCollectionMode setSpacing:0]; 67 [self.viewCollectionMode setSpacing:0];
68 [self.viewCollectionMode setCornerRadius:0]; 68 [self.viewCollectionMode setCornerRadius:0];
69 [self.viewCollectionMode setNormalColor:[Utilities convertHecToColor:0x191919] highlightColor:[Utilities convertHecToColor:0x474747] textColor:[UIColor whiteColor]]; 69 [self.viewCollectionMode setNormalColor:[Utilities convertHecToColor:0x191919] highlightColor:[Utilities convertHecToColor:0x474747] textColor:[UIColor whiteColor]];
70 [self.viewCollectionMode setArrayTitle:modeTitle]; 70 [self.viewCollectionMode setArrayTitle:modeTitle];
71 self.viewCollectionMode.changeCurrentIndex = ^(int index){ 71 self.viewCollectionMode.changeCurrentIndex = ^(int index){
72 if(self.tableBase.alpha == 0.0) { 72 if(self.tableBase.alpha == 0.0) {
73 [self updateView]; 73 [self updateView];
74 } 74 }
75 else { 75 else {
76 NSArray * list = [_curListArray objectAtIndex:index]; 76 NSArray * list = [_curListArray objectAtIndex:index];
77 [self updateTableData:list error:nil]; 77 [self updateTableData:list error:nil];
78 } 78 }
79 }; 79 };
80 80
81 NSArray *shareTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.history.share.1", nil), NSLocalizedString(@"lifelog.history.share.2", nil), NSLocalizedString(@"lifelog.history.share.3", nil), NSLocalizedString(@"lifelog.history.share.4", nil), NSLocalizedString(@"lifelog.history.share.5", nil), nil]; 81 NSArray *shareTitle = [NSArray arrayWithObjects:NSLocalizedString(@"lifelog.history.share.1", nil), NSLocalizedString(@"lifelog.history.share.2", nil), NSLocalizedString(@"lifelog.history.share.3", nil), NSLocalizedString(@"lifelog.history.share.4", nil), NSLocalizedString(@"lifelog.history.share.5", nil), nil];
82 [self.viewCollectionShare setButtonNumber:typeTitle.count]; 82 [self.viewCollectionShare setButtonNumber:typeTitle.count];
83 [self.viewCollectionShare setSpacing:3]; 83 [self.viewCollectionShare setSpacing:3];
84 [self.viewCollectionShare setArrayTitle:shareTitle]; 84 [self.viewCollectionShare setArrayTitle:shareTitle];
85 [self.viewCollectionShare disableSelection]; 85 [self.viewCollectionShare disableSelection];
86 86
87 //add tap gesture for enable tap on gesture on CollectionView in ScrollView 87 //add tap gesture for enable tap on gesture on CollectionView in ScrollView
88 UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gestureAction:)]; 88 UITapGestureRecognizer *recognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(gestureAction:)];
89 [recognizer setNumberOfTapsRequired:1]; 89 [recognizer setNumberOfTapsRequired:1];
90 self.scrollView.userInteractionEnabled = YES; 90 self.scrollView.userInteractionEnabled = YES;
91 [self.scrollView addGestureRecognizer:recognizer]; 91 [self.scrollView addGestureRecognizer:recognizer];
92 } 92 }
93 93
94 - (void)setupChartView { 94 - (void)setupChartView {
95 self.viewBarChart.chartDescription.enabled = NO; 95 self.viewBarChart.chartDescription.enabled = NO;
96 self.viewBarChart.leftAxis.drawGridLinesEnabled = NO; 96 self.viewBarChart.leftAxis.drawGridLinesEnabled = NO;
97 self.viewBarChart.rightAxis.drawGridLinesEnabled = NO; 97 self.viewBarChart.rightAxis.drawGridLinesEnabled = NO;
98 self.viewBarChart.legend.enabled = NO; 98 self.viewBarChart.legend.enabled = NO;
99 99
100 ChartXAxis *xAxis = self.viewBarChart.xAxis; 100 ChartXAxis *xAxis = self.viewBarChart.xAxis;
101 xAxis.labelPosition = XAxisLabelPositionBottom; 101 xAxis.labelPosition = XAxisLabelPositionBottom;
102 xAxis.drawGridLinesEnabled = NO; 102 xAxis.drawGridLinesEnabled = NO;
103 xAxis.drawAxisLineEnabled = NO; 103 xAxis.drawAxisLineEnabled = NO;
104 xAxis.drawLabelsEnabled = YES; 104 xAxis.drawLabelsEnabled = YES;
105 xAxis.labelPosition = XAxisLabelPositionBottom; 105 xAxis.labelPosition = XAxisLabelPositionBottom;
106 xAxis.labelFont = [UIFont systemFontOfSize:10.f]; 106 xAxis.labelFont = [UIFont systemFontOfSize:10.f];
107 xAxis.labelTextColor = [UIColor whiteColor]; 107 xAxis.labelTextColor = [UIColor whiteColor];
108 xAxis.granularity = 1.0; // only intervals of 1 day 108 xAxis.granularity = 1.0; // only intervals of 1 day
109 xAxis.labelCount = 8; 109 xAxis.labelCount = 8;
110 110
111 self.viewBarChart.leftAxis.drawAxisLineEnabled = NO; 111 self.viewBarChart.leftAxis.drawAxisLineEnabled = NO;
112 self.viewBarChart.rightAxis.drawAxisLineEnabled = NO; 112 self.viewBarChart.rightAxis.drawAxisLineEnabled = NO;
113 } 113 }
114 114
115 -(void) updateView { 115 -(void) updateView {
116 HistoryObject * obj = [_curHisArray objectAtIndex:self.viewCollectionMode.getCurrentIndex]; 116 HistoryObject * obj = [_curHisArray objectAtIndex:self.viewCollectionMode.getCurrentIndex];
117 self.lblStep.text = [NSString stringWithFormat:@"%d step", obj.step]; 117 self.lblStep.text = [NSString stringWithFormat:@"%d step", obj.target];
118 self.lblCircleStep.text = self.lblStep.text; 118 self.lblCircleStep.text = self.lblStep.text;
119 self.lblRemaining.text = [NSString stringWithFormat:@"%d step", obj.missing]; 119 self.lblRemaining.text = [NSString stringWithFormat:@"%d step", obj.missing];
120 self.lblCircleRemain.text = [NSString stringWithFormat:@"目標まであと\n%d stepです", obj.missing]; 120 self.lblCircleRemain.text = [NSString stringWithFormat:@"目標まであと\n%d stepです", obj.missing];
121 self.lblPercent.text = [NSString stringWithFormat:@"%0.2f%%", obj.percent]; 121 self.lblPercent.text = [NSString stringWithFormat:@"%0.2f%%", obj.percent];
122 self.lblCalories.text = [NSString stringWithFormat:@"%0.2f kcal", obj.calories]; 122 self.lblCalories.text = [NSString stringWithFormat:@"%0.2f kcal", obj.calories];
123 self.lblDistance.text = [NSString stringWithFormat:@"%0.1f KM", obj.distance]; 123 self.lblDistance.text = [NSString stringWithFormat:@"%0.1f KM", obj.distance];
124 self.lblTime.text = [Utilities convertSecondToShortTime:obj.time]; 124 self.lblTime.text = [Utilities convertSecondToShortTime:obj.time];
125 [self updateGraphView]; 125 [self updateGraphView];
126 } 126 }
127 127
128 -(void) updateGraphView { 128 -(void) updateGraphView {
129 HistoryObject * obj = [_curHisArray objectAtIndex:self.viewCollectionMode.getCurrentIndex]; 129 HistoryObject * obj = [_curHisArray objectAtIndex:self.viewCollectionMode.getCurrentIndex];
130 130
131 NSMutableArray *yVals = [[NSMutableArray alloc] init]; 131 NSMutableArray *yVals = [[NSMutableArray alloc] init];
132 for (int i = 0; i < obj.dataGraph.count; i++) 132 for (int i = 0; i < obj.dataGraph.count; i++)
133 { 133 {
134 [yVals addObject:[[BarChartDataEntry alloc] initWithX:i y:[[obj.dataGraph objectAtIndex:i] doubleValue]]]; 134 [yVals addObject:[[BarChartDataEntry alloc] initWithX:i y:[[obj.dataGraph objectAtIndex:i] doubleValue]]];
135 } 135 }
136 136
137 BarChartDataSet *set1 = nil; 137 BarChartDataSet *set1 = nil;
138 if (self.viewBarChart.data.dataSetCount > 0) 138 if (self.viewBarChart.data.dataSetCount > 0)
139 { 139 {
140 set1 = (BarChartDataSet *)self.viewBarChart.data.dataSets[0]; 140 set1 = (BarChartDataSet *)self.viewBarChart.data.dataSets[0];
141 set1.values = yVals; 141 set1.values = yVals;
142 142
143 NSMutableArray *color = [[NSMutableArray alloc] init]; 143 NSMutableArray *color = [[NSMutableArray alloc] init];
144 for(int i = 0; i < yVals.count; i++) { 144 for(int i = 0; i < yVals.count; i++) {
145 BarChartDataEntry *en = yVals[i]; 145 BarChartDataEntry *en = yVals[i];
146 if(obj.step != 0) { 146 if(obj.step != 0) {
147 double percent = en.y / obj.step * 100; 147 double percent = en.y / obj.step * 100;
148 if(percent > 80) { 148 if(percent > 80) {
149 [color addObject:[UIColor redColor]]; 149 [color addObject:[UIColor redColor]];
150 } 150 }
151 else if(percent > 60) { 151 else if(percent > 60) {
152 [color addObject:[UIColor yellowColor]]; 152 [color addObject:[UIColor yellowColor]];
153 } 153 }
154 else { 154 else {
155 [color addObject:[UIColor whiteColor]]; 155 [color addObject:[UIColor whiteColor]];
156 } 156 }
157 } 157 }
158 else { 158 else {
159 [color addObject:[UIColor whiteColor]]; 159 [color addObject:[UIColor whiteColor]];
160 } 160 }
161 } 161 }
162 [set1 setColors:color]; 162 [set1 setColors:color];
163 163
164 [self.viewBarChart.data notifyDataChanged]; 164 [self.viewBarChart.data notifyDataChanged];
165 [self.viewBarChart notifyDataSetChanged]; 165 [self.viewBarChart notifyDataSetChanged];
166 } 166 }
167 else 167 else
168 { 168 {
169 set1 = [[BarChartDataSet alloc] initWithValues:yVals label:@""]; 169 set1 = [[BarChartDataSet alloc] initWithValues:yVals label:@""];
170 170
171 NSMutableArray *color = [[NSMutableArray alloc] init]; 171 NSMutableArray *color = [[NSMutableArray alloc] init];
172 for(int i = 0; i < yVals.count; i++) { 172 for(int i = 0; i < yVals.count; i++) {
173 BarChartDataEntry *en = yVals[i]; 173 BarChartDataEntry *en = yVals[i];
174 if(obj.step != 0) { 174 if(obj.step != 0) {
175 double percent = en.y / obj.step * 100; 175 double percent = en.y / obj.step * 100;
176 if(percent > 80) { 176 if(percent > 80) {
177 [color addObject:[UIColor redColor]]; 177 [color addObject:[UIColor redColor]];
178 } 178 }
179 else if(percent > 60) { 179 else if(percent > 60) {
180 [color addObject:[UIColor yellowColor]]; 180 [color addObject:[UIColor yellowColor]];
181 } 181 }
182 else { 182 else {
183 [color addObject:[UIColor whiteColor]]; 183 [color addObject:[UIColor whiteColor]];
184 } 184 }
185 } 185 }
186 else { 186 else {
187 [color addObject:[UIColor whiteColor]]; 187 [color addObject:[UIColor whiteColor]];
188 } 188 }
189 } 189 }
190 [set1 setColors:color]; 190 [set1 setColors:color];
191 NSMutableArray *dataSets = [[NSMutableArray alloc] init]; 191 NSMutableArray *dataSets = [[NSMutableArray alloc] init];
192 [dataSets addObject:set1]; 192 [dataSets addObject:set1];
193 193
194 BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets]; 194 BarChartData *data = [[BarChartData alloc] initWithDataSets:dataSets];
195 data.barWidth = 0.5f; 195 data.barWidth = 0.5f;
196 196
197 self.viewBarChart.data = data; 197 self.viewBarChart.data = data;
198 } 198 }
199 } 199 }
200 200
201 -(void) checkRequestData { 201 -(void) checkRequestData {
202 if(self.tableBase.alpha == 0.0) { 202 if(self.tableBase.alpha == 0.0) {
203 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken]; 203 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken];
204 MBProgressHUD *hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true]; 204 MBProgressHUD *hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true];
205 [[ServerAPI server] requestHistory:token startDate:_startDate endDate:_endDate CompletionHandler:^(NSArray *array, NSError *error) { 205 [[ServerAPI server] requestHistory:token startDate:_startDate endDate:_endDate CompletionHandler:^(NSArray *array, NSError *error) {
206 HistoryViewController __weak *weakSelf = self; 206 HistoryViewController __weak *weakSelf = self;
207 dispatch_async(dispatch_get_main_queue(), ^{ 207 dispatch_async(dispatch_get_main_queue(), ^{
208 if(hudView != nil) { 208 if(hudView != nil) {
209 [hudView hideAnimated:true]; 209 [hudView hideAnimated:true];
210 } 210 }
211 }); 211 });
212 if(error == nil) { 212 if(error == nil) {
213 _curHisArray = array; 213 _curHisArray = array;
214 dispatch_async(dispatch_get_main_queue(), ^{ 214 dispatch_async(dispatch_get_main_queue(), ^{
215 [weakSelf updateView]; 215 [weakSelf updateView];
216 }); 216 });
217 } 217 }
218 else { 218 else {
219 dispatch_async(dispatch_get_main_queue(), ^{ 219 dispatch_async(dispatch_get_main_queue(), ^{
220 NSString *message = [error.userInfo objectForKey:@"message"]; 220 NSString *message = [error.userInfo objectForKey:@"message"];
221 [Utilities showErrorMessage:message withViewController:weakSelf]; 221 [Utilities showErrorMessage:message withViewController:weakSelf];
222 }); 222 });
223 } 223 }
224 }]; 224 }];
225 } 225 }
226 else { 226 else {
227 [self resetData]; 227 [self resetData];
228 } 228 }
229 } 229 }
230 230
231 -(void) callRequestToUpdateData { 231 -(void) callRequestToUpdateData {
232 [super callRequestToUpdateData]; 232 [super callRequestToUpdateData];
233 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken]; 233 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken];
234 234
235 MBProgressHUD *hudView = nil; 235 MBProgressHUD *hudView = nil;
236 if(_curPage == 1 && !self.refreshControl.isRefreshing) { 236 if(_curPage == 1 && !self.refreshControl.isRefreshing) {
237 hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true]; 237 hudView = [MBProgressHUD showHUDAddedTo:self.view animated:true];
238 } 238 }
239 [[ServerAPI server] requestHistoryList:token startDate:_startDate endDate:_endDate CompletionHandler:^(NSArray *array, NSError *error) { 239 [[ServerAPI server] requestHistoryList:token startDate:_startDate endDate:_endDate CompletionHandler:^(NSArray *array, NSError *error) {
240 dispatch_async(dispatch_get_main_queue(), ^{ 240 dispatch_async(dispatch_get_main_queue(), ^{
241 if(hudView != nil) { 241 if(hudView != nil) {
242 [hudView hideAnimated:true]; 242 [hudView hideAnimated:true];
243 } 243 }
244 }); 244 });
245 HistoryViewController __weak *weakSelf = self; 245 HistoryViewController __weak *weakSelf = self;
246 if(error == nil) { 246 if(error == nil) {
247 _curListArray = array; 247 _curListArray = array;
248 NSArray * list = [array objectAtIndex:weakSelf.viewCollectionMode.getCurrentIndex]; 248 NSArray * list = [array objectAtIndex:weakSelf.viewCollectionMode.getCurrentIndex];
249 [weakSelf updateTableData:list error:error]; 249 [weakSelf updateTableData:list error:error];
250 } 250 }
251 else { 251 else {
252 [weakSelf updateTableData:array error:error]; 252 [weakSelf updateTableData:array error:error];
253 } 253 }
254 }]; 254 }];
255 } 255 }
256 256
257 - (void) changeDate { 257 - (void) changeDate {
258 switch (self.viewCollectionType.getCurrentIndex) { 258 switch (self.viewCollectionType.getCurrentIndex) {
259 case 1: 259 case 1:
260 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 7]; 260 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 7];
261 break; 261 break;
262 case 2: 262 case 2:
263 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 30]; 263 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 30];
264 break; 264 break;
265 case 3: 265 case 3:
266 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 30 * 3]; 266 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 30 * 3];
267 break; 267 break;
268 case 4: 268 case 4:
269 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 30 * 6]; 269 _startDate = [_endDate dateByAddingTimeInterval:-86400 * 30 * 6];
270 break; 270 break;
271 default: 271 default:
272 _startDate = _endDate; 272 _startDate = _endDate;
273 break; 273 break;
274 } 274 }
275 if(_startDate == _endDate) { 275 if(_startDate == _endDate) {
276 self.lblDatetime.text = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日 EEEE" locale:@"ja_JP"]; 276 self.lblDatetime.text = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日 EEEE" locale:@"ja_JP"];
277 } 277 }
278 else { 278 else {
279 NSString * startDateString = [Utilities stringFromDate:_startDate withFormat:@"YYYY年MM月dd日" locale:@"ja_JP"]; 279 NSString * startDateString = [Utilities stringFromDate:_startDate withFormat:@"YYYY年MM月dd日" locale:@"ja_JP"];
280 NSString * endDateString = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日" locale:@"ja_JP"]; 280 NSString * endDateString = [Utilities stringFromDate:_endDate withFormat:@"YYYY年MM月dd日" locale:@"ja_JP"];
281 self.lblDatetime.text = [NSString stringWithFormat:@"%@-%@", startDateString, endDateString]; 281 self.lblDatetime.text = [NSString stringWithFormat:@"%@-%@", startDateString, endDateString];
282 } 282 }
283 [self checkRequestData]; 283 [self checkRequestData];
284 } 284 }
285 285
286 #pragma mark IBAction 286 #pragma mark IBAction
287 -(void) swipeAction:(UISwipeGestureRecognizer *)sender { 287 -(void) swipeAction:(UISwipeGestureRecognizer *)sender {
288 bool alphaValue = self.scrollView.alpha == 1.0 ? 1.0 : 0.0; 288 bool alphaValue = self.scrollView.alpha == 1.0 ? 1.0 : 0.0;
289 [UIView animateWithDuration:0.5 animations:^{ 289 [UIView animateWithDuration:0.5 animations:^{
290 self.tableBase.alpha = alphaValue; 290 self.tableBase.alpha = alphaValue;
291 self.scrollView.alpha = 1.0 - alphaValue; 291 self.scrollView.alpha = 1.0 - alphaValue;
292 } completion:^(BOOL completed) { 292 } completion:^(BOOL completed) {
293 [self checkRequestData]; 293 [self checkRequestData];
294 }]; 294 }];
295 } 295 }
296 296
297 - (IBAction)clickBackward:(UIButton *)sender { 297 - (IBAction)clickBackward:(UIButton *)sender {
298 _endDate = [_endDate dateByAddingTimeInterval:-86400]; 298 _endDate = [_endDate dateByAddingTimeInterval:-86400];
299 [self changeDate]; 299 [self changeDate];
300 } 300 }
301 301
302 - (IBAction)clickForward:(UIButton *)sender { 302 - (IBAction)clickForward:(UIButton *)sender {
303 _endDate = [_endDate dateByAddingTimeInterval:86400]; 303 _endDate = [_endDate dateByAddingTimeInterval:86400];
304 [self changeDate]; 304 [self changeDate];
305 } 305 }
306 306
307 -(void)gestureAction:(UITapGestureRecognizer *) sender 307 -(void)gestureAction:(UITapGestureRecognizer *) sender
308 { 308 {
309 CGPoint touchLocation = [sender locationOfTouch:0 inView:self.viewCollectionShare]; 309 CGPoint touchLocation = [sender locationOfTouch:0 inView:self.viewCollectionShare];
310 NSIndexPath *indexPath = [self.viewCollectionShare.collectionView indexPathForItemAtPoint:touchLocation]; 310 NSIndexPath *indexPath = [self.viewCollectionShare.collectionView indexPathForItemAtPoint:touchLocation];
311 NSString * content = @"Finish 500 steps"; 311 NSString * content = @"Finish 500 steps";
312 HistoryViewController __weak *weakSelf = self; 312 HistoryViewController __weak *weakSelf = self;
313 if(indexPath != NULL) { 313 if(indexPath != NULL) {
314 switch (indexPath.row) { 314 switch (indexPath.row) {
315 case 0: //share facebook 315 case 0: //share facebook
316 [Utilities shareFacebook:content withViewController:weakSelf]; 316 [Utilities shareFacebook:content withViewController:weakSelf];
317 break; 317 break;
318 case 1: //share twitter 318 case 1: //share twitter
319 [Utilities shareTwitter:content withViewController:weakSelf]; 319 [Utilities shareTwitter:content withViewController:weakSelf];
320 break; 320 break;
321 case 2 : //share line 321 case 2 : //share line
322 [Utilities shareLine:content withViewController:weakSelf]; 322 [Utilities shareLine:content withViewController:weakSelf];
323 break; 323 break;
324 case 3: // share email 324 case 3: // share email
325 [Utilities shareEmail:content withViewController:weakSelf]; 325 [Utilities shareEmail:content withViewController:weakSelf];
326 break; 326 break;
327 default: //share other 327 default: //share other
328 [Utilities shareOther:content withViewController:weakSelf]; 328 [Utilities shareOther:content withViewController:weakSelf];
329 break; 329 break;
330 } 330 }
331 } 331 }
332 } 332 }
333 333
334 #pragma mark UITableView Delegate 334 #pragma mark UITableView Delegate
335 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 335 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
336 HistoryListTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"HistoryListCell"]; 336 HistoryListTableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:@"HistoryListCell"];
337 HistoryObject * obj = [_curDataList objectAtIndex:indexPath.row]; 337 HistoryObject * obj = [_curDataList objectAtIndex:indexPath.row];
338 cell.lblTitle.text = [Utilities stringFromDate:obj.date withFormat:@"dd日 (EEEE)" locale:@"ja_JP"]; 338 cell.lblTitle.text = [Utilities stringFromDate:obj.date withFormat:@"dd日 (EEEE)" locale:@"ja_JP"];
339 cell.lblStep.text = [NSString stringWithFormat:@"%d", obj.step]; 339 cell.lblStep.text = [NSString stringWithFormat:@"%d", obj.step];
340 cell.lblDiff.text = [NSString stringWithFormat:@"%d", obj.step_diff]; 340 cell.lblDiff.text = [NSString stringWithFormat:@"%d", obj.step_diff];
341 cell.imgArrow.image = (obj.step_diff > 0) ? [UIImage imageNamed:@"arrow_incre"] : [UIImage imageNamed:@"arrow_decre"]; 341 cell.imgArrow.image = (obj.step_diff > 0) ? [UIImage imageNamed:@"arrow_incre"] : [UIImage imageNamed:@"arrow_decre"];
342 cell.lblPower.text = [NSString stringWithFormat:@"%0.2f", obj.calories]; 342 cell.lblPower.text = [NSString stringWithFormat:@"%0.2f", obj.calories];
343 cell.lblDistance.text = [NSString stringWithFormat:@"%0.1f", obj.distance]; 343 cell.lblDistance.text = [NSString stringWithFormat:@"%0.1f", obj.distance];
344 cell.lblDuration.text = [Utilities convertSecondToShortTime:obj.time]; 344 cell.lblDuration.text = [Utilities convertSecondToShortTime:obj.time];
345 return cell; 345 return cell;
346 } 346 }
347 347
348 @end 348 @end
349 349
LifeLog/LifeLog/ServerAPI.m
1 // 1 //
2 // ServerAPI.m 2 // ServerAPI.m
3 // LifeLog 3 // LifeLog
4 // 4 //
5 // Created by Nguyen Van Phong on 7/30/17. 5 // Created by Nguyen Van Phong on 7/30/17.
6 // Copyright © 2017 PhongNV. All rights reserved. 6 // Copyright © 2017 PhongNV. All rights reserved.
7 // 7 //
8 8
9 #import "ServerAPI.h" 9 #import "ServerAPI.h"
10 #import "Utilities.h" 10 #import "Utilities.h"
11 11
12 NSString *const kServerAddress = @"http://clover.timesfun.jp:9001/"; 12 NSString *const kServerAddress = @"http://clover.timesfun.jp:9001/";
13 NSString *const kUser = @"KEY_USER"; 13 NSString *const kUser = @"KEY_USER";
14 NSString *const kToken = @"KEY_TOKEN"; 14 NSString *const kToken = @"KEY_TOKEN";
15 NSString *const kNotificationToken = @"TOKEN_INVALID"; 15 NSString *const kNotificationToken = @"TOKEN_INVALID";
16 16
17 @implementation NSString (NSString_Extended) 17 @implementation NSString (NSString_Extended)
18 - (NSString *)urlencode { 18 - (NSString *)urlencode {
19 NSMutableString *output = [NSMutableString string]; 19 NSMutableString *output = [NSMutableString string];
20 const unsigned char *source = (const unsigned char *)[self UTF8String]; 20 const unsigned char *source = (const unsigned char *)[self UTF8String];
21 int sourceLen = (int)strlen((const char *)source); 21 int sourceLen = (int)strlen((const char *)source);
22 for (int i = 0; i < sourceLen; ++i) { 22 for (int i = 0; i < sourceLen; ++i) {
23 const unsigned char thisChar = source[i]; 23 const unsigned char thisChar = source[i];
24 if (thisChar == ' '){ 24 if (thisChar == ' '){
25 [output appendString:@"+"]; 25 [output appendString:@"+"];
26 } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' || 26 } else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' ||
27 (thisChar >= 'a' && thisChar <= 'z') || 27 (thisChar >= 'a' && thisChar <= 'z') ||
28 (thisChar >= 'A' && thisChar <= 'Z') || 28 (thisChar >= 'A' && thisChar <= 'Z') ||
29 (thisChar >= '0' && thisChar <= '9')) { 29 (thisChar >= '0' && thisChar <= '9')) {
30 [output appendFormat:@"%c", thisChar]; 30 [output appendFormat:@"%c", thisChar];
31 } else { 31 } else {
32 [output appendFormat:@"%%%02X", thisChar]; 32 [output appendFormat:@"%%%02X", thisChar];
33 } 33 }
34 } 34 }
35 return output; 35 return output;
36 } 36 }
37 @end 37 @end
38 38
39 @implementation ServerAPI 39 @implementation ServerAPI
40 static ServerAPI *_server = nil; 40 static ServerAPI *_server = nil;
41 41
42 NSURLSessionDataTask * searchTask; 42 NSURLSessionDataTask * searchTask;
43 43
44 @synthesize timeOutInterval = _timeOutInterval; 44 @synthesize timeOutInterval = _timeOutInterval;
45 45
46 + (instancetype)server 46 + (instancetype)server
47 { 47 {
48 @synchronized(self) { 48 @synchronized(self) {
49 if (_server == nil) { 49 if (_server == nil) {
50 _server = [[ServerAPI alloc] init]; 50 _server = [[ServerAPI alloc] init];
51 } 51 }
52 } 52 }
53 return _server; 53 return _server;
54 } 54 }
55 55
56 - (instancetype)init 56 - (instancetype)init
57 { 57 {
58 self = [super init]; 58 self = [super init];
59 if (self != nil) { 59 if (self != nil) {
60 self.timeOutInterval = 60; 60 self.timeOutInterval = 60;
61 } 61 }
62 return self; 62 return self;
63 } 63 }
64 64
65 #pragma mark - Login and Register 65 #pragma mark - Login and Register
66 // Login 66 // Login
67 - (void)loginWithEmail:(NSString *)email Password:(NSString *)password CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion 67 - (void)loginWithEmail:(NSString *)email Password:(NSString *)password CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion
68 { 68 {
69 [self _request:[kServerAddress stringByAppendingFormat: @"login"] method:@"POST" token:@"" paras:@{@"email":email, @"password": password} completion:^(NSData *data, NSError *error) { 69 [self _request:[kServerAddress stringByAppendingFormat: @"login"] method:@"POST" token:@"" paras:@{@"email":email, @"password": password} completion:^(NSData *data, NSError *error) {
70 70
71 if (completion == NULL) { 71 if (completion == NULL) {
72 return ; 72 return ;
73 } 73 }
74 74
75 if (error == nil) 75 if (error == nil)
76 { 76 {
77 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 77 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
78 78
79 int status = [dataResult[@"status"] intValue]; 79 int status = [dataResult[@"status"] intValue];
80 if (status == 1) { // status = 1 success 80 if (status == 1) { // status = 1 success
81 NSString *token = dataResult[@"result"][@"token"]; 81 NSString *token = dataResult[@"result"][@"token"];
82 NSDictionary *dictUser = dataResult[@"result"][@"user"]; 82 NSDictionary *dictUser = dataResult[@"result"][@"user"];
83 User *user = [[User alloc] init]; 83 User *user = [[User alloc] init];
84 user.user_id = [NSString stringWithFormat:@"%@",dictUser[@"id"]]; 84 user.user_id = [NSString stringWithFormat:@"%@",dictUser[@"id"]];
85 user.username = [NSString stringWithFormat:@"%@",dictUser[@"username"]]; 85 user.username = [NSString stringWithFormat:@"%@",dictUser[@"username"]];
86 user.full_name = [NSString stringWithFormat:@"%@",dictUser[@"full_name"]]; 86 user.full_name = [NSString stringWithFormat:@"%@",dictUser[@"full_name"]];
87 user.nickname = [NSString stringWithFormat:@"%@",dictUser[@"nickname"]]; 87 user.nickname = [NSString stringWithFormat:@"%@",dictUser[@"nickname"]];
88 user.email = [NSString stringWithFormat:@"%@",dictUser[@"email"]]; 88 user.email = [NSString stringWithFormat:@"%@",dictUser[@"email"]];
89 user.password = [NSString stringWithFormat:@"%@",dictUser[@"password"]]; 89 user.password = [NSString stringWithFormat:@"%@",dictUser[@"password"]];
90 user.birthday = [NSString stringWithFormat:@"%@",dictUser[@"birthday"]]; 90 user.birthday = [NSString stringWithFormat:@"%@",dictUser[@"birthday"]];
91 user.address = [NSString stringWithFormat:@"%@",dictUser[@"address"]]; 91 user.address = [NSString stringWithFormat:@"%@",dictUser[@"address"]];
92 user.gender = [[NSString stringWithFormat:@"%@",dictUser[@"gender"]] intValue]; 92 user.gender = [[NSString stringWithFormat:@"%@",dictUser[@"gender"]] intValue];
93 user.height = [[NSString stringWithFormat:@"%@",dictUser[@"height"]] floatValue]; 93 user.height = [[NSString stringWithFormat:@"%@",dictUser[@"height"]] floatValue];
94 user.weight = [[NSString stringWithFormat:@"%@",dictUser[@"weight"]] floatValue]; 94 user.weight = [[NSString stringWithFormat:@"%@",dictUser[@"weight"]] floatValue];
95 user.user_description = [NSString stringWithFormat:@"%@",dictUser[@"description"]]; 95 user.user_description = [NSString stringWithFormat:@"%@",dictUser[@"description"]];
96 user.created_at = [NSString stringWithFormat:@"%@",dictUser[@"created_at"]]; 96 user.created_at = [NSString stringWithFormat:@"%@",dictUser[@"created_at"]];
97 user.physical_activity = [NSString stringWithFormat:@"%@",dictUser[@"physical_activity"]]; 97 user.physical_activity = [NSString stringWithFormat:@"%@",dictUser[@"physical_activity"]];
98 user.profile_image = [NSString stringWithFormat:@"%@",dictUser[@"profile_image"]]; 98 user.profile_image = [NSString stringWithFormat:@"%@",dictUser[@"profile_image"]];
99 user.updated_at = [NSString stringWithFormat:@"%@",dictUser[@"updated_at"]]; 99 user.updated_at = [NSString stringWithFormat:@"%@",dictUser[@"updated_at"]];
100 user.delete_flag = [[NSString stringWithFormat:@"%@",dictUser[@"delete_flag"]] intValue]; 100 user.delete_flag = [[NSString stringWithFormat:@"%@",dictUser[@"delete_flag"]] intValue];
101 user.fat_rate = [[NSString stringWithFormat:@"%@",dictUser[@"fat_rate"]] intValue]; 101 user.fat_rate = [[NSString stringWithFormat:@"%@",dictUser[@"fat_rate"]] intValue];
102 user.profiles_share = [[NSString stringWithFormat:@"%@",dictUser[@"profiles_share"]] intValue]; 102 user.profiles_share = [[NSString stringWithFormat:@"%@",dictUser[@"profiles_share"]] intValue];
103 user.remember_me = [[NSString stringWithFormat:@"%@",dictUser[@"remember_me"]] intValue]; 103 user.remember_me = [[NSString stringWithFormat:@"%@",dictUser[@"remember_me"]] intValue];
104 user.sound_notifications_share = [[NSString stringWithFormat:@"%@",dictUser[@"sound_notifications_share"]] intValue]; 104 user.sound_notifications_share = [[NSString stringWithFormat:@"%@",dictUser[@"sound_notifications_share"]] intValue];
105 user.spend_calo_in_day = [[NSString stringWithFormat:@"%@",dictUser[@"spend_calo_in_day"]] intValue]; 105 user.spend_calo_in_day = [[NSString stringWithFormat:@"%@",dictUser[@"spend_calo_in_day"]] intValue];
106 user.target = [[NSString stringWithFormat:@"%@",dictUser[@"target"]] intValue]; 106 user.target = [[NSString stringWithFormat:@"%@",dictUser[@"target"]] intValue];
107 completion(user, token, nil); 107 completion(user, token, nil);
108 } 108 }
109 else { // status = 0 error 109 else { // status = 0 error
110 NSString *message = dataResult[@"message"]; 110 NSString *message = dataResult[@"message"];
111 if (message == nil) { 111 if (message == nil) {
112 message = @"Unknown error"; 112 message = @"Unknown error";
113 } 113 }
114 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 114 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
115 completion(nil, nil, loginFaild); 115 completion(nil, nil, loginFaild);
116 } 116 }
117 } 117 }
118 else 118 else
119 { 119 {
120 completion(nil, nil, error); 120 completion(nil, nil, error);
121 } 121 }
122 }]; 122 }];
123 } 123 }
124 124
125 // Register 125 // Register
126 - (void)registerUserWithParams:(NSDictionary *)params CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion { 126 - (void)registerUserWithParams:(NSDictionary *)params CompletionHandler: (void (^)(User *, NSString *, NSError *)) completion {
127 [self _request:[kServerAddress stringByAppendingFormat: @"register"] method:@"POST" token:@"" paras:params completion:^(NSData *data, NSError *error) { 127 [self _request:[kServerAddress stringByAppendingFormat: @"register"] method:@"POST" token:@"" paras:params completion:^(NSData *data, NSError *error) {
128 128
129 if (completion == NULL) { 129 if (completion == NULL) {
130 return ; 130 return ;
131 } 131 }
132 132
133 if (error == nil) 133 if (error == nil)
134 { 134 {
135 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 135 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
136 136
137 int status = [dataResult[@"status"] intValue]; 137 int status = [dataResult[@"status"] intValue];
138 if (status == 1) { // status = 1 success 138 if (status == 1) { // status = 1 success
139 NSString *token = dataResult[@"result"][@"token"]; 139 NSString *token = dataResult[@"result"][@"token"];
140 NSDictionary *dictUser = dataResult[@"result"][@"user"]; 140 NSDictionary *dictUser = dataResult[@"result"][@"user"];
141 User *user = [[User alloc] init]; 141 User *user = [[User alloc] init];
142 user.user_id = [NSString stringWithFormat:@"%@",dictUser[@"id"]]; 142 user.user_id = [NSString stringWithFormat:@"%@",dictUser[@"id"]];
143 user.username = [NSString stringWithFormat:@"%@",dictUser[@"username"]]; 143 user.username = [NSString stringWithFormat:@"%@",dictUser[@"username"]];
144 user.full_name = [NSString stringWithFormat:@"%@",dictUser[@"full_name"]]; 144 user.full_name = [NSString stringWithFormat:@"%@",dictUser[@"full_name"]];
145 user.nickname = [NSString stringWithFormat:@"%@",dictUser[@"nickname"]]; 145 user.nickname = [NSString stringWithFormat:@"%@",dictUser[@"nickname"]];
146 user.email = [NSString stringWithFormat:@"%@",dictUser[@"email"]]; 146 user.email = [NSString stringWithFormat:@"%@",dictUser[@"email"]];
147 user.password = [NSString stringWithFormat:@"%@",dictUser[@"password"]]; 147 user.password = [NSString stringWithFormat:@"%@",dictUser[@"password"]];
148 user.birthday = [NSString stringWithFormat:@"%@",dictUser[@"birthday"]]; 148 user.birthday = [NSString stringWithFormat:@"%@",dictUser[@"birthday"]];
149 user.address = [NSString stringWithFormat:@"%@",dictUser[@"address"]]; 149 user.address = [NSString stringWithFormat:@"%@",dictUser[@"address"]];
150 user.gender = [[NSString stringWithFormat:@"%@",dictUser[@"gender"]] intValue]; 150 user.gender = [[NSString stringWithFormat:@"%@",dictUser[@"gender"]] intValue];
151 user.height = [[NSString stringWithFormat:@"%@",dictUser[@"height"]] floatValue]; 151 user.height = [[NSString stringWithFormat:@"%@",dictUser[@"height"]] floatValue];
152 user.weight = [[NSString stringWithFormat:@"%@",dictUser[@"weight"]] floatValue]; 152 user.weight = [[NSString stringWithFormat:@"%@",dictUser[@"weight"]] floatValue];
153 user.user_description = [NSString stringWithFormat:@"%@",dictUser[@"description"]]; 153 user.user_description = [NSString stringWithFormat:@"%@",dictUser[@"description"]];
154 user.created_at = [NSString stringWithFormat:@"%@",dictUser[@"created_at"]]; 154 user.created_at = [NSString stringWithFormat:@"%@",dictUser[@"created_at"]];
155 user.physical_activity = [NSString stringWithFormat:@"%@",dictUser[@"physical_activity"]]; 155 user.physical_activity = [NSString stringWithFormat:@"%@",dictUser[@"physical_activity"]];
156 user.profile_image = [NSString stringWithFormat:@"%@",dictUser[@"profile_image"]]; 156 user.profile_image = [NSString stringWithFormat:@"%@",dictUser[@"profile_image"]];
157 user.updated_at = [NSString stringWithFormat:@"%@",dictUser[@"updated_at"]]; 157 user.updated_at = [NSString stringWithFormat:@"%@",dictUser[@"updated_at"]];
158 user.delete_flag = [[NSString stringWithFormat:@"%@",dictUser[@"delete_flag"]] intValue]; 158 user.delete_flag = [[NSString stringWithFormat:@"%@",dictUser[@"delete_flag"]] intValue];
159 user.fat_rate = [[NSString stringWithFormat:@"%@",dictUser[@"fat_rate"]] intValue]; 159 user.fat_rate = [[NSString stringWithFormat:@"%@",dictUser[@"fat_rate"]] intValue];
160 user.profiles_share = [[NSString stringWithFormat:@"%@",dictUser[@"profiles_share"]] intValue]; 160 user.profiles_share = [[NSString stringWithFormat:@"%@",dictUser[@"profiles_share"]] intValue];
161 user.remember_me = [[NSString stringWithFormat:@"%@",dictUser[@"remember_me"]] intValue]; 161 user.remember_me = [[NSString stringWithFormat:@"%@",dictUser[@"remember_me"]] intValue];
162 user.sound_notifications_share = [[NSString stringWithFormat:@"%@",dictUser[@"sound_notifications_share"]] intValue]; 162 user.sound_notifications_share = [[NSString stringWithFormat:@"%@",dictUser[@"sound_notifications_share"]] intValue];
163 user.spend_calo_in_day = [[NSString stringWithFormat:@"%@",dictUser[@"spend_calo_in_day"]] intValue]; 163 user.spend_calo_in_day = [[NSString stringWithFormat:@"%@",dictUser[@"spend_calo_in_day"]] intValue];
164 user.target = [[NSString stringWithFormat:@"%@",dictUser[@"target"]] intValue]; 164 user.target = [[NSString stringWithFormat:@"%@",dictUser[@"target"]] intValue];
165 completion(user, token, nil); 165 completion(user, token, nil);
166 } 166 }
167 else { // status = 0 error 167 else { // status = 0 error
168 NSString *message = dataResult[@"message"]; 168 NSString *message = dataResult[@"message"];
169 if (message == nil) { 169 if (message == nil) {
170 message = @"Unknown error"; 170 message = @"Unknown error";
171 } 171 }
172 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 172 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
173 completion(nil, nil, loginFaild); 173 completion(nil, nil, loginFaild);
174 } 174 }
175 } 175 }
176 else 176 else
177 { 177 {
178 completion(nil, nil, error); 178 completion(nil, nil, error);
179 } 179 }
180 }]; 180 }];
181 } 181 }
182 182
183 - (void)forgetPass:(NSString *)email CompletionHandler:(void (^)(NSError *)) completion { 183 - (void)forgetPass:(NSString *)email CompletionHandler:(void (^)(NSError *)) completion {
184 [self _request:[kServerAddress stringByAppendingFormat: @"forgetPass"] method:@"POST" token:@"" paras:@{@"email":email} completion:^(NSData *data, NSError *error) { 184 [self _request:[kServerAddress stringByAppendingFormat: @"forgetPass"] method:@"POST" token:@"" paras:@{@"email":email} completion:^(NSData *data, NSError *error) {
185 185
186 if (completion == NULL) { 186 if (completion == NULL) {
187 return ; 187 return ;
188 } 188 }
189 189
190 if (error == nil) 190 if (error == nil)
191 { 191 {
192 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 192 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
193 193
194 int status = [dataResult[@"status"] intValue]; 194 int status = [dataResult[@"status"] intValue];
195 if (status == 1) { // status = 1 success 195 if (status == 1) { // status = 1 success
196 completion(nil); 196 completion(nil);
197 } 197 }
198 else { // status = 0 error 198 else { // status = 0 error
199 NSString *message = dataResult[@"message"]; 199 NSString *message = dataResult[@"message"];
200 if (message == nil) { 200 if (message == nil) {
201 message = @"Unknown error"; 201 message = @"Unknown error";
202 } 202 }
203 NSError *forgetPass = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 203 NSError *forgetPass = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
204 completion(forgetPass); 204 completion(forgetPass);
205 } 205 }
206 } 206 }
207 else 207 else
208 { 208 {
209 completion(error); 209 completion(error);
210 } 210 }
211 }]; 211 }];
212 } 212 }
213 - (void)confirmForgetPass:(NSString *)email withConfirm:(NSString *)confirm CompletionHandler:(void (^)(NSError *)) completion { 213 - (void)confirmForgetPass:(NSString *)email withConfirm:(NSString *)confirm CompletionHandler:(void (^)(NSError *)) completion {
214 [self _request:[kServerAddress stringByAppendingFormat: @"forgetPass/confirm"] method:@"POST" token:@"" paras:@{@"email":email, @"code_confirm": confirm} completion:^(NSData *data, NSError *error) { 214 [self _request:[kServerAddress stringByAppendingFormat: @"forgetPass/confirm"] method:@"POST" token:@"" paras:@{@"email":email, @"code_confirm": confirm} completion:^(NSData *data, NSError *error) {
215 215
216 if (completion == NULL) { 216 if (completion == NULL) {
217 return ; 217 return ;
218 } 218 }
219 219
220 if (error == nil) 220 if (error == nil)
221 { 221 {
222 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 222 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
223 223
224 int status = [dataResult[@"status"] intValue]; 224 int status = [dataResult[@"status"] intValue];
225 if (status == 1) { // status = 1 success 225 if (status == 1) { // status = 1 success
226 completion(nil); 226 completion(nil);
227 } 227 }
228 else { // status = 0 error 228 else { // status = 0 error
229 NSString *message = dataResult[@"message"]; 229 NSString *message = dataResult[@"message"];
230 NSError *confirmForgetPass = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 230 NSError *confirmForgetPass = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
231 completion(confirmForgetPass); 231 completion(confirmForgetPass);
232 } 232 }
233 } 233 }
234 else 234 else
235 { 235 {
236 completion(error); 236 completion(error);
237 } 237 }
238 }]; 238 }];
239 } 239 }
240 240
241 - (void)uploadImage:(NSString *)token andImageData:(NSData *)data CompletionHandler:(void (^)(NSString *, NSError *)) completion { 241 - (void)uploadImage:(NSString *)token andImageData:(NSData *)data CompletionHandler:(void (^)(NSString *, NSError *)) completion {
242 NSDictionary *dict = nil; 242 NSDictionary *dict = nil;
243 NSString *base64Encoded = [data base64EncodedStringWithOptions:0]; 243 NSString *base64Encoded = [data base64EncodedStringWithOptions:0];
244 if (token != nil) { 244 if (token != nil) {
245 dict = @{@"token":token, @"img": base64Encoded}; 245 dict = @{@"token":token, @"img": base64Encoded};
246 } 246 }
247 else { 247 else {
248 dict = @{@"img": base64Encoded}; 248 dict = @{@"img": base64Encoded};
249 } 249 }
250 [self _request:[kServerAddress stringByAppendingFormat: @"upload-image"] method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) { 250 [self _request:[kServerAddress stringByAppendingFormat: @"upload-image"] method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) {
251 251
252 if (completion == NULL) { 252 if (completion == NULL) {
253 return ; 253 return ;
254 } 254 }
255 255
256 if (error == nil) 256 if (error == nil)
257 { 257 {
258 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 258 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
259 NSString *image_profile = [NSString stringWithFormat:@"%@", dataResult[@"message"]]; 259 NSString *image_profile = [NSString stringWithFormat:@"%@", dataResult[@"message"]];
260 completion(image_profile, nil); 260 completion(image_profile, nil);
261 } 261 }
262 else 262 else
263 { 263 {
264 completion(nil, error); 264 completion(nil, error);
265 } 265 }
266 }]; 266 }];
267 } 267 }
268 268
269 -(NSString *) convertIntToString : (int) type { 269 -(NSString *) convertIntToString : (int) type {
270 switch (type) { 270 switch (type) {
271 case 1: 271 case 1:
272 return @"week"; 272 return @"week";
273 break; 273 break;
274 case 2: 274 case 2:
275 return @"oneMonth"; 275 return @"oneMonth";
276 break; 276 break;
277 case 3: 277 case 3:
278 return @"threeMonth"; 278 return @"threeMonth";
279 break; 279 break;
280 case 4: 280 case 4:
281 return @"sixMonth"; 281 return @"sixMonth";
282 break; 282 break;
283 default: 283 default:
284 return @"today"; 284 return @"today";
285 break; 285 break;
286 } 286 }
287 } 287 }
288 288
289 #pragma mark - Home Screen Function 289 #pragma mark - Home Screen Function
290 - (void)requestTopWithMode:(int)mode andDate:(NSString *)date CompletionHandler:(void (^)(TopObject *, NSError *)) completion 290 - (void)requestTopWithMode:(int)mode andDate:(NSString *)date CompletionHandler:(void (^)(TopObject *, NSError *)) completion
291 { 291 {
292 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken]; 292 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken];
293 NSString *url = [kServerAddress stringByAppendingFormat:@"api/top/%d/%@", mode, date]; 293 NSString *url = [kServerAddress stringByAppendingFormat:@"api/top/%d/%@", mode, date];
294 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 294 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
295 295
296 if (completion == NULL) { 296 if (completion == NULL) {
297 return ; 297 return ;
298 } 298 }
299 299
300 if (error == nil) 300 if (error == nil)
301 { 301 {
302 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 302 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
303 int status = [dataResult[@"status"] intValue]; 303 int status = [dataResult[@"status"] intValue];
304 if (status == 1) { // status = 1 success 304 if (status == 1) { // status = 1 success
305 if(dataResult[@"result"] != nil) { 305 if(dataResult[@"result"] != nil) {
306 NSDictionary * dictResult = dataResult[@"result"]; 306 NSDictionary * dictResult = dataResult[@"result"];
307 TopObject *topObject = [[TopObject alloc] init]; 307 TopObject *topObject = [[TopObject alloc] init];
308 TargetInfor *targetInfor = [[TargetInfor alloc] initWithData:dictResult[@"targetInf"]]; 308 TargetInfor *targetInfor = [[TargetInfor alloc] initWithData:dictResult[@"targetInf"]];
309 topObject.targetInfor = targetInfor; 309 topObject.targetInfor = targetInfor;
310 topObject.kcal = [[NSString stringWithFormat:@"%@", dictResult[@"kcal"]] intValue]; 310 topObject.kcal = [[NSString stringWithFormat:@"%@", dictResult[@"kcal"]] intValue];
311 topObject.distance = [[NSString stringWithFormat:@"%@", dictResult[@"distance"]] floatValue]; 311 topObject.distance = [[NSString stringWithFormat:@"%@", dictResult[@"distance"]] floatValue];
312 topObject.time = [NSString stringWithFormat:@"%@", dictResult[@"time"]]; 312 topObject.time = [NSString stringWithFormat:@"%@", dictResult[@"time"]];
313 NSMutableArray *arrayStep = [[NSMutableArray alloc] init]; 313 NSMutableArray *arrayStep = [[NSMutableArray alloc] init];
314 NSArray *array = dictResult[@"dataChart"]; 314 NSArray *array = dictResult[@"dataChart"];
315 for(NSDictionary *dict in array) { 315 for(NSDictionary *dict in array) {
316 StepObject *object = [[StepObject alloc] init]; 316 StepObject *object = [[StepObject alloc] init];
317 if([dict objectForKey:@"numStep"] != nil) { 317 if([dict objectForKey:@"numStep"] != nil) {
318 object.step = [dict[@"numStep"] intValue]; 318 object.step = [dict[@"numStep"] intValue];
319 } 319 }
320 if([dict objectForKey:@"hour"] != nil) { 320 if([dict objectForKey:@"hour"] != nil) {
321 object.hour = [dict[@"hour"] intValue]; 321 object.hour = [dict[@"hour"] intValue];
322 } 322 }
323 switch (mode) { 323 switch (mode) {
324 case 1: 324 case 1:
325 object.typeStep = @"walking"; 325 object.typeStep = @"walking";
326 break; 326 break;
327 case 2: 327 case 2:
328 object.typeStep = @"running"; 328 object.typeStep = @"running";
329 break; 329 break;
330 case 3: 330 case 3:
331 object.typeStep = @"bike"; 331 object.typeStep = @"bike";
332 break; 332 break;
333 default: 333 default:
334 break; 334 break;
335 } 335 }
336 [arrayStep addObject:object]; 336 [arrayStep addObject:object];
337 } 337 }
338 topObject.dataChart = [[NSMutableArray alloc] initWithArray:arrayStep]; 338 topObject.dataChart = [[NSMutableArray alloc] initWithArray:arrayStep];
339 completion(topObject, nil); 339 completion(topObject, nil);
340 } 340 }
341 else { 341 else {
342 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 342 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
343 completion(nil, errorObject); 343 completion(nil, errorObject);
344 } 344 }
345 } 345 }
346 else { 346 else {
347 NSString *message = dataResult[@"message"]; 347 NSString *message = dataResult[@"message"];
348 if (message == nil) { 348 if (message == nil) {
349 message = @"Unknown error"; 349 message = @"Unknown error";
350 } 350 }
351 351
352 if ([message isEqualToString:@"Token is invalid"]) { 352 if ([message isEqualToString:@"Token is invalid"]) {
353 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 353 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
354 [self requestTopWithMode:mode andDate:date CompletionHandler:completion]; 354 [self requestTopWithMode:mode andDate:date CompletionHandler:completion];
355 } 355 }
356 else { 356 else {
357 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 357 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
358 completion(nil, errorObject); 358 completion(nil, errorObject);
359 } 359 }
360 } 360 }
361 } 361 }
362 else 362 else
363 { 363 {
364 completion(nil, error); 364 completion(nil, error);
365 } 365 }
366 }]; 366 }];
367 } 367 }
368 368
369 - (void)requestCreateLog:(int)mode withStep:(int)numStep startDate:(NSString *)startDate endDate:(NSString *)endDate CompletionHandler:(void (^)(NSError *))completion { 369 - (void)requestCreateLog:(int)mode withStep:(int)numStep startDate:(NSString *)startDate endDate:(NSString *)endDate CompletionHandler:(void (^)(NSError *))completion {
370 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken]; 370 NSString * token = [[NSUserDefaults standardUserDefaults] stringForKey:kToken];
371 NSString *url = [kServerAddress stringByAppendingFormat:@"api/createLog"]; 371 NSString *url = [kServerAddress stringByAppendingFormat:@"api/createLog"];
372 NSDictionary *dict = @{@"mode": [NSNumber numberWithInt:mode], @"numStep": [NSNumber numberWithInt:numStep], @"startTime": startDate, @"endTime": endDate}; 372 NSDictionary *dict = @{@"mode": [NSNumber numberWithInt:mode], @"numStep": [NSNumber numberWithInt:numStep], @"startTime": startDate, @"endTime": endDate};
373 [self _request:url method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) { 373 [self _request:url method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) {
374 374
375 if (completion == NULL) { 375 if (completion == NULL) {
376 return ; 376 return ;
377 } 377 }
378 378
379 if (error == nil) 379 if (error == nil)
380 { 380 {
381 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 381 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
382 int status = [dataResult[@"status"] intValue]; 382 int status = [dataResult[@"status"] intValue];
383 if (status == 1) { // status = 1 success 383 if (status == 1) { // status = 1 success
384 completion(nil); 384 completion(nil);
385 } 385 }
386 else { 386 else {
387 NSString *message = dataResult[@"message"]; 387 NSString *message = dataResult[@"message"];
388 if (message == nil) { 388 if (message == nil) {
389 message = @"Unknown error"; 389 message = @"Unknown error";
390 } 390 }
391 391
392 if ([message isEqualToString:@"Token is invalid"]) { 392 if ([message isEqualToString:@"Token is invalid"]) {
393 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 393 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
394 [self requestCreateLog:mode withStep:numStep startDate:startDate endDate:endDate CompletionHandler:completion]; 394 [self requestCreateLog:mode withStep:numStep startDate:startDate endDate:endDate CompletionHandler:completion];
395 } 395 }
396 else { 396 else {
397 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 397 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
398 completion(errorObject); 398 completion(errorObject);
399 } 399 }
400 } 400 }
401 } 401 }
402 else 402 else
403 { 403 {
404 completion(error); 404 completion(error);
405 } 405 }
406 }]; 406 }];
407 } 407 }
408 408
409 #pragma mark - History Screen Function 409 #pragma mark - History Screen Function
410 - (void) requestHistory:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 410 - (void) requestHistory:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
411 NSString *url = [kServerAddress stringByAppendingFormat:@"/api/history/%@/%@", [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""]]; 411 NSString *url = [kServerAddress stringByAppendingFormat:@"api/history/%@/%@", [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""]];
412 NSLog(@"requestHistory link %@", url); 412 NSLog(@"requestHistory link %@", url);
413 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 413 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
414 414
415 if (completion == NULL) { 415 if (completion == NULL) {
416 return ; 416 return ;
417 } 417 }
418 418
419 if (error == nil) 419 if (error == nil)
420 { 420 {
421 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 421 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
422 NSLog(@"%@", dataResult); 422 NSLog(@"%@", dataResult);
423 int status = [dataResult[@"status"] intValue]; 423 int status = [dataResult[@"status"] intValue];
424 if (status == 1) { // status = 1 success 424 if (status == 1) { // status = 1 success
425 NSMutableArray * arrayHistory = [[NSMutableArray alloc] init]; 425 NSMutableArray * arrayHistory = [[NSMutableArray alloc] init];
426 NSDictionary * arrResult = dataResult[@"result"]; 426 NSDictionary * arrResult = dataResult[@"result"];
427 if(arrResult != nil) { 427 if(arrResult != nil) {
428 /* mode_1: Data for mode walking 428 /* mode_1: Data for mode walking
429 mode_2: Data for mode running 429 mode_2: Data for mode running
430 mode_3: Data for mode bike */ 430 mode_3: Data for mode bike */
431 NSArray *arrayKey = [NSArray arrayWithObjects:@"mode_3", @"mode_1", @"mode_2", nil]; 431 NSArray *arrayKey = [NSArray arrayWithObjects:@"mode_3", @"mode_1", @"mode_2", nil];
432 for(NSString * key in arrayKey) { 432 for(NSString * key in arrayKey) {
433 NSDictionary *mode = [arrResult objectForKey:key]; 433 NSDictionary *mode = [arrResult objectForKey:key];
434 if(![[arrResult objectForKey:key] isKindOfClass:[NSNull class]]) { 434 if(![[arrResult objectForKey:key] isKindOfClass:[NSNull class]]) {
435 HistoryObject * objectMode = [[HistoryObject alloc] initWithData:mode]; 435 HistoryObject * objectMode = [[HistoryObject alloc] initWithData:mode];
436 [arrayHistory addObject:objectMode]; 436 [arrayHistory addObject:objectMode];
437 } 437 }
438 else { 438 else {
439 [arrayHistory addObject:[[HistoryObject alloc] init]]; 439 [arrayHistory addObject:[[HistoryObject alloc] init]];
440 } 440 }
441 } 441 }
442 } 442 }
443 completion(arrayHistory, nil); 443 completion(arrayHistory, nil);
444 } 444 }
445 else { 445 else {
446 NSString *message = dataResult[@"message"]; 446 NSString *message = dataResult[@"message"];
447 if (message == nil) { 447 if (message == nil) {
448 message = @"Unknown error"; 448 message = @"Unknown error";
449 } 449 }
450 450
451 if ([message isEqualToString:@"Token is invalid"]) { 451 if ([message isEqualToString:@"Token is invalid"]) {
452 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 452 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
453 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 453 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
454 [self requestHistory:tokenNew startDate:startDate endDate:endDate CompletionHandler:completion]; 454 [self requestHistory:tokenNew startDate:startDate endDate:endDate CompletionHandler:completion];
455 } 455 }
456 else { 456 else {
457 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 457 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
458 completion(nil, errorObject); 458 completion(nil, errorObject);
459 } 459 }
460 } 460 }
461 } 461 }
462 else 462 else
463 { 463 {
464 completion(nil, error); 464 completion(nil, error);
465 } 465 }
466 }]; 466 }];
467 } 467 }
468 468
469 - (void) requestHistoryList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 469 - (void) requestHistoryList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
470 NSString *url = [kServerAddress stringByAppendingFormat:@"/api/history/detail/%@/%@", [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""]]; 470 NSString *url = [kServerAddress stringByAppendingFormat:@"api/history/detail/%@/%@", [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""]];
471 NSLog(@"requestHistoryList link %@", url); 471 NSLog(@"requestHistoryList link %@", url);
472 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 472 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
473 473
474 if (completion == NULL) { 474 if (completion == NULL) {
475 return ; 475 return ;
476 } 476 }
477 477
478 if (error == nil) 478 if (error == nil)
479 { 479 {
480 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 480 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
481 NSLog(@"%@", dataResult); 481 NSLog(@"%@", dataResult);
482 int status = [dataResult[@"status"] intValue]; 482 int status = [dataResult[@"status"] intValue];
483 if (status == 1) { // status = 1 success 483 if (status == 1) { // status = 1 success
484 if(dataResult[@"result"] != nil) { 484 if(dataResult[@"result"] != nil) {
485 NSMutableArray * arrayHistory = [[NSMutableArray alloc] init]; 485 NSMutableArray * arrayHistory = [[NSMutableArray alloc] init];
486 NSDictionary * arrResult = dataResult[@"result"]; 486 NSDictionary * arrResult = dataResult[@"result"];
487 if(arrResult != nil) { 487 if(arrResult != nil) {
488 /* mode_1: Data for mode walking 488 /* mode_1: Data for mode walking
489 mode_2: Data for mode running 489 mode_2: Data for mode running
490 mode_3: Data for mode bike */ 490 mode_3: Data for mode bike */
491 NSArray *arrayKey = [NSArray arrayWithObjects:@"mode_3", @"mode_1", @"mode_2", nil]; 491 NSArray *arrayKey = [NSArray arrayWithObjects:@"mode_3", @"mode_1", @"mode_2", nil];
492 for(NSString * key in arrayKey) { 492 for(NSString * key in arrayKey) {
493 NSDictionary *mode = [arrResult objectForKey:key]; 493 NSDictionary *mode = [arrResult objectForKey:key];
494 if(![[arrResult objectForKey:key] isKindOfClass:[NSNull class]]) { 494 if(![[arrResult objectForKey:key] isKindOfClass:[NSNull class]]) {
495 NSMutableArray *array = [[NSMutableArray alloc] init]; 495 NSMutableArray *array = [[NSMutableArray alloc] init];
496 for(NSString *key in mode.allKeys) { 496 for(NSString *key in mode.allKeys) {
497 HistoryObject * objectMode = [[HistoryObject alloc] initWithData:mode[key]]; 497 HistoryObject * objectMode = [[HistoryObject alloc] initWithData:mode[key]];
498 objectMode.date = [Utilities dateFromString:key withFormat:@"yyyy-MM-dd"]; 498 objectMode.date = [Utilities dateFromString:key withFormat:@"yyyy-MM-dd"];
499 [array addObject:objectMode]; 499 [array addObject:objectMode];
500 } 500 }
501 [arrayHistory addObject:array]; 501 [arrayHistory addObject:array];
502 } 502 }
503 else { 503 else {
504 [arrayHistory addObject:[[NSArray alloc] init]]; 504 [arrayHistory addObject:[[NSArray alloc] init]];
505 } 505 }
506 } 506 }
507 } 507 }
508 completion(arrayHistory, nil); 508 completion(arrayHistory, nil);
509 } 509 }
510 else { 510 else {
511 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 511 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
512 completion(nil, errorObject); 512 completion(nil, errorObject);
513 } 513 }
514 } 514 }
515 else { 515 else {
516 NSString *message = dataResult[@"message"]; 516 NSString *message = dataResult[@"message"];
517 if (message == nil) { 517 if (message == nil) {
518 message = @"Unknown error"; 518 message = @"Unknown error";
519 } 519 }
520 520
521 if ([message isEqualToString:@"Token is invalid"]) { 521 if ([message isEqualToString:@"Token is invalid"]) {
522 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 522 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
523 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 523 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
524 [self requestHistoryList:tokenNew startDate:startDate endDate:endDate CompletionHandler:completion]; 524 [self requestHistoryList:tokenNew startDate:startDate endDate:endDate CompletionHandler:completion];
525 } 525 }
526 else { 526 else {
527 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 527 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
528 completion(nil, errorObject); 528 completion(nil, errorObject);
529 } 529 }
530 } 530 }
531 } 531 }
532 else 532 else
533 { 533 {
534 completion(nil, error); 534 completion(nil, error);
535 } 535 }
536 }]; 536 }];
537 } 537 }
538 538
539 #pragma mark - SNS Screen Function 539 #pragma mark - SNS Screen Function
540 - (void) requestTweetsList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 540 - (void) requestTweetsList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
541 NSString *url = [kServerAddress stringByAppendingFormat:@"api/tweet/list?page=%d&record=10", page]; 541 NSString *url = [kServerAddress stringByAppendingFormat:@"api/tweet/list?page=%d&record=10", page];
542 if(groupID > -1) { 542 if(groupID > -1) {
543 url = [kServerAddress stringByAppendingFormat:@"api/tweet/list?group_id=%d&page=%d&record=10", groupID, page]; 543 url = [kServerAddress stringByAppendingFormat:@"api/tweet/list?group_id=%d&page=%d&record=10", groupID, page];
544 } 544 }
545 NSLog(@"requestTweetsList link %@", url); 545 NSLog(@"requestTweetsList link %@", url);
546 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 546 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
547 547
548 if (completion == NULL) { 548 if (completion == NULL) {
549 return ; 549 return ;
550 } 550 }
551 551
552 if (error == nil) 552 if (error == nil)
553 { 553 {
554 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 554 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
555 NSLog(@"%@", dataResult); 555 NSLog(@"%@", dataResult);
556 int status = [dataResult[@"status"] intValue]; 556 int status = [dataResult[@"status"] intValue];
557 if (status == 1) { // status = 1 success 557 if (status == 1) { // status = 1 success
558 if(dataResult[@"result"] != nil) { 558 if(dataResult[@"result"] != nil) {
559 NSArray * array = dataResult[@"result"]; 559 NSArray * array = dataResult[@"result"];
560 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init]; 560 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init];
561 for(NSDictionary * dict in array) { 561 for(NSDictionary * dict in array) {
562 TweetObject * object = [[TweetObject alloc] initWithData:dict]; 562 TweetObject * object = [[TweetObject alloc] initWithData:dict];
563 [arrayTweets addObject:object]; 563 [arrayTweets addObject:object];
564 } 564 }
565 completion(arrayTweets, nil); 565 completion(arrayTweets, nil);
566 } 566 }
567 else { 567 else {
568 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 568 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
569 completion(nil, errorObject); 569 completion(nil, errorObject);
570 } 570 }
571 } 571 }
572 else { 572 else {
573 NSString *message = dataResult[@"message"]; 573 NSString *message = dataResult[@"message"];
574 if (message == nil) { 574 if (message == nil) {
575 message = @"Unknown error"; 575 message = @"Unknown error";
576 } 576 }
577 577
578 if ([message isEqualToString:@"Token is invalid"]) { 578 if ([message isEqualToString:@"Token is invalid"]) {
579 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 579 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
580 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 580 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
581 [self requestTweetsList:tokenNew groupID:groupID withPage:page CompletionHandler:completion]; 581 [self requestTweetsList:tokenNew groupID:groupID withPage:page CompletionHandler:completion];
582 } 582 }
583 else { 583 else {
584 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 584 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
585 completion(nil, errorObject); 585 completion(nil, errorObject);
586 } 586 }
587 } 587 }
588 } 588 }
589 else 589 else
590 { 590 {
591 completion(nil, error); 591 completion(nil, error);
592 } 592 }
593 }]; 593 }];
594 } 594 }
595 595
596 - (void) searchGroup:(NSString *)token withKey:(NSString *)key andPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 596 - (void) searchGroup:(NSString *)token withKey:(NSString *)key andPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
597 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/search"]; 597 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/search"];
598 NSLog(@"searchGroup link %@ page %d", url, page); 598 NSLog(@"searchGroup link %@ page %d", url, page);
599 if(searchTask != nil) { 599 if(searchTask != nil) {
600 [searchTask cancel]; 600 [searchTask cancel];
601 } 601 }
602 602
603 searchTask = [self _request:url method:@"POST" token:token paras:@{@"keyword":key, @"page": [NSNumber numberWithInt:page]} completion:^(NSData *data, NSError *error) { 603 searchTask = [self _request:url method:@"POST" token:token paras:@{@"keyword":key, @"page": [NSNumber numberWithInt:page]} completion:^(NSData *data, NSError *error) {
604 searchTask = nil; 604 searchTask = nil;
605 if (completion == NULL) { 605 if (completion == NULL) {
606 return ; 606 return ;
607 } 607 }
608 608
609 if (error == nil) 609 if (error == nil)
610 { 610 {
611 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 611 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
612 NSLog(@"%@", dataResult); 612 NSLog(@"%@", dataResult);
613 int status = [dataResult[@"status"] intValue]; 613 int status = [dataResult[@"status"] intValue];
614 if (status == 1) { // status = 1 success 614 if (status == 1) { // status = 1 success
615 if(dataResult[@"result"] != nil) { 615 if(dataResult[@"result"] != nil) {
616 NSArray * array = dataResult[@"result"]; 616 NSArray * array = dataResult[@"result"];
617 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init]; 617 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init];
618 for(NSDictionary * dict in array) { 618 for(NSDictionary * dict in array) {
619 GroupObject * object = [[GroupObject alloc] initWithData:dict]; 619 GroupObject * object = [[GroupObject alloc] initWithData:dict];
620 [arrayTweets addObject:object]; 620 [arrayTweets addObject:object];
621 } 621 }
622 completion(arrayTweets, nil); 622 completion(arrayTweets, nil);
623 } 623 }
624 else { 624 else {
625 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 625 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
626 completion(nil, errorObject); 626 completion(nil, errorObject);
627 } 627 }
628 } 628 }
629 else { 629 else {
630 NSString *message = dataResult[@"message"]; 630 NSString *message = dataResult[@"message"];
631 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 631 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
632 completion(nil, errorObject); 632 completion(nil, errorObject);
633 } 633 }
634 } 634 }
635 else 635 else
636 { 636 {
637 completion(nil, error); 637 completion(nil, error);
638 } 638 }
639 }]; 639 }];
640 } 640 }
641 641
642 #pragma mark - Group Function 642 #pragma mark - Group Function
643 -(void) requestCreateGroup:(NSString *)token withGroup:(GroupObject *)group CompletionHandler:(void (^)(GroupObject *, NSError *)) completion { 643 -(void) requestCreateGroup:(NSString *)token withGroup:(GroupObject *)group CompletionHandler:(void (^)(GroupObject *, NSError *)) completion {
644 NSString *url = [kServerAddress stringByAppendingFormat:@"api/groups/newGroup"]; 644 NSString *url = [kServerAddress stringByAppendingFormat:@"api/groups/newGroup"];
645 NSLog(@"requestCreateGroup link %@", url); 645 NSLog(@"requestCreateGroup link %@", url);
646 NSDictionary * dict = @{@"group_name":group.name, 646 NSDictionary * dict = @{@"group_name":group.name,
647 @"goal":group.goal, 647 @"goal":group.goal,
648 @"walk_mode_active":[NSNumber numberWithBool:group.walkMode], 648 @"walk_mode_active":[NSNumber numberWithBool:group.walkMode],
649 @"run_mode_active":[NSNumber numberWithBool:group.runMode], 649 @"run_mode_active":[NSNumber numberWithBool:group.runMode],
650 @"bike_mode_active":[NSNumber numberWithBool:group.bikeMode], 650 @"bike_mode_active":[NSNumber numberWithBool:group.bikeMode],
651 @"step_mode_active":[NSNumber numberWithBool:group.stepMode], 651 @"step_mode_active":[NSNumber numberWithBool:group.stepMode],
652 @"gym_mode_active":[NSNumber numberWithBool:group.gymMode], 652 @"gym_mode_active":[NSNumber numberWithBool:group.gymMode],
653 @"beginer_mode_active":[NSNumber numberWithBool:group.beginMode], 653 @"beginer_mode_active":[NSNumber numberWithBool:group.beginMode],
654 @"walk_mode_goal":[NSNumber numberWithBool:group.walkGoal], 654 @"walk_mode_goal":[NSNumber numberWithBool:group.walkGoal],
655 @"run_mode_goal":[NSNumber numberWithBool:group.runGoal], 655 @"run_mode_goal":[NSNumber numberWithBool:group.runGoal],
656 @"bike_mode_goal":[NSNumber numberWithBool:group.bikeGoal]}; 656 @"bike_mode_goal":[NSNumber numberWithBool:group.bikeGoal]};
657 657
658 [self _request:url method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) { 658 [self _request:url method:@"POST" token:token paras:dict completion:^(NSData *data, NSError *error) {
659 659
660 if (completion == NULL) { 660 if (completion == NULL) {
661 return ; 661 return ;
662 } 662 }
663 663
664 if (error == nil) 664 if (error == nil)
665 { 665 {
666 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 666 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
667 NSLog(@"%@", dataResult); 667 NSLog(@"%@", dataResult);
668 int status = [dataResult[@"status"] intValue]; 668 int status = [dataResult[@"status"] intValue];
669 if (status == 1) { // status = 1 success 669 if (status == 1) { // status = 1 success
670 if(dataResult[@"result"] != nil) { 670 if(dataResult[@"result"] != nil) {
671 NSDictionary * dict = dataResult[@"result"]; 671 NSDictionary * dict = dataResult[@"result"];
672 group.groupID = [dict[@"group_id"] intValue]; 672 group.groupID = [dict[@"group_id"] intValue];
673 completion(group, nil); 673 completion(group, nil);
674 } 674 }
675 else { 675 else {
676 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 676 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
677 completion(nil, errorObject); 677 completion(nil, errorObject);
678 } 678 }
679 } 679 }
680 else { 680 else {
681 NSString *message = dataResult[@"message"]; 681 NSString *message = dataResult[@"message"];
682 if (message == nil) { 682 if (message == nil) {
683 message = @"Unknown error"; 683 message = @"Unknown error";
684 } 684 }
685 685
686 if ([message isEqualToString:@"Token is invalid"]) { 686 if ([message isEqualToString:@"Token is invalid"]) {
687 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 687 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
688 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 688 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
689 [self requestCreateGroup:tokenNew withGroup:group CompletionHandler:completion]; 689 [self requestCreateGroup:tokenNew withGroup:group CompletionHandler:completion];
690 } 690 }
691 else { 691 else {
692 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 692 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
693 completion(nil, errorObject); 693 completion(nil, errorObject);
694 } 694 }
695 } 695 }
696 } 696 }
697 else 697 else
698 { 698 {
699 completion(nil, error); 699 completion(nil, error);
700 } 700 }
701 }]; 701 }];
702 } 702 }
703 703
704 - (void) getGroupDetail:(NSString *)token withGroupID:(int)groupID CompletionHandler:(void (^)(GroupObject *, NSError *)) completion { 704 - (void) getGroupDetail:(NSString *)token withGroupID:(int)groupID CompletionHandler:(void (^)(GroupObject *, NSError *)) completion {
705 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/detail/%d", groupID]; 705 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/detail/%d", groupID];
706 NSLog(@"getGroupDetail link %@", url); 706 NSLog(@"getGroupDetail link %@", url);
707 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 707 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
708 708
709 if (completion == NULL) { 709 if (completion == NULL) {
710 return ; 710 return ;
711 } 711 }
712 712
713 if (error == nil) 713 if (error == nil)
714 { 714 {
715 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 715 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
716 NSLog(@"%@", dataResult); 716 NSLog(@"%@", dataResult);
717 int status = [dataResult[@"status"] intValue]; 717 int status = [dataResult[@"status"] intValue];
718 if (status == 1) { // status = 1 success 718 if (status == 1) { // status = 1 success
719 if(dataResult[@"result"] != nil) { 719 if(dataResult[@"result"] != nil) {
720 NSArray * array = dataResult[@"result"]; 720 NSArray * array = dataResult[@"result"];
721 GroupObject * object = [[GroupObject alloc] initWithData:array[0] andGroupID:groupID]; 721 GroupObject * object = [[GroupObject alloc] initWithData:array[0] andGroupID:groupID];
722 completion(object, nil); 722 completion(object, nil);
723 } 723 }
724 else { 724 else {
725 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 725 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
726 completion(nil, errorObject); 726 completion(nil, errorObject);
727 } 727 }
728 } 728 }
729 else { 729 else {
730 NSString *message = dataResult[@"message"]; 730 NSString *message = dataResult[@"message"];
731 if (message == nil) { 731 if (message == nil) {
732 message = @"Unknown error"; 732 message = @"Unknown error";
733 } 733 }
734 734
735 if ([message isEqualToString:@"Token is invalid"]) { 735 if ([message isEqualToString:@"Token is invalid"]) {
736 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 736 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
737 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 737 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
738 [self getGroupDetail:tokenNew withGroupID:groupID CompletionHandler:completion]; 738 [self getGroupDetail:tokenNew withGroupID:groupID CompletionHandler:completion];
739 } 739 }
740 else { 740 else {
741 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 741 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
742 completion(nil, errorObject); 742 completion(nil, errorObject);
743 } 743 }
744 } 744 }
745 } 745 }
746 else 746 else
747 { 747 {
748 completion(nil, error); 748 completion(nil, error);
749 } 749 }
750 }]; 750 }];
751 } 751 }
752 752
753 - (void) requestMemberList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 753 - (void) requestMemberList:(NSString *)token groupID: (int) groupID withPage:(int)page CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
754 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/member/%d/%d", groupID, page]; 754 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/member/%d/%d", groupID, page];
755 NSLog(@"requestMemberList link %@ page %d", url, page); 755 NSLog(@"requestMemberList link %@ page %d", url, page);
756 756
757 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 757 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
758 if (completion == NULL) { 758 if (completion == NULL) {
759 return ; 759 return ;
760 } 760 }
761 761
762 if (error == nil) 762 if (error == nil)
763 { 763 {
764 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 764 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
765 NSLog(@"%@", dataResult); 765 NSLog(@"%@", dataResult);
766 int status = [dataResult[@"status"] intValue]; 766 int status = [dataResult[@"status"] intValue];
767 if (status == 1) { // status = 1 success 767 if (status == 1) { // status = 1 success
768 if(dataResult[@"result"] != nil) { 768 if(dataResult[@"result"] != nil) {
769 NSArray * array = dataResult[@"result"]; 769 NSArray * array = dataResult[@"result"];
770 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init]; 770 NSMutableArray * arrayTweets = [[NSMutableArray alloc] init];
771 for(NSDictionary * dict in array) { 771 for(NSDictionary * dict in array) {
772 MemberObject * object = [[MemberObject alloc] initWithData:dict]; 772 MemberObject * object = [[MemberObject alloc] initWithData:dict];
773 [arrayTweets addObject:object]; 773 [arrayTweets addObject:object];
774 } 774 }
775 completion(arrayTweets, nil); 775 completion(arrayTweets, nil);
776 } 776 }
777 else { 777 else {
778 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 778 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
779 completion(nil, errorObject); 779 completion(nil, errorObject);
780 } 780 }
781 } 781 }
782 else { 782 else {
783 NSString *message = dataResult[@"message"]; 783 NSString *message = dataResult[@"message"];
784 if (message == nil) { 784 if (message == nil) {
785 message = @"Unknown error"; 785 message = @"Unknown error";
786 } 786 }
787 787
788 if ([message isEqualToString:@"Token is invalid"]) { 788 if ([message isEqualToString:@"Token is invalid"]) {
789 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 789 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
790 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 790 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
791 [self requestMemberList:tokenNew groupID:groupID withPage:page CompletionHandler:completion]; 791 [self requestMemberList:tokenNew groupID:groupID withPage:page CompletionHandler:completion];
792 } 792 }
793 else { 793 else {
794 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 794 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
795 completion(nil, errorObject); 795 completion(nil, errorObject);
796 } 796 }
797 } 797 }
798 } 798 }
799 else 799 else
800 { 800 {
801 completion(nil, error); 801 completion(nil, error);
802 } 802 }
803 }]; 803 }];
804 } 804 }
805 805
806 - (void) requestJoinGroup:(NSString *)token groupID: (int) groupID CompletionHandler:(void (^)(NSError *)) completion { 806 - (void) requestJoinGroup:(NSString *)token groupID: (int) groupID CompletionHandler:(void (^)(NSError *)) completion {
807 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/join"]; 807 NSString *url = [kServerAddress stringByAppendingFormat:@"api/sns/group/join"];
808 NSLog(@"requestJoinGroup link %@", url); 808 NSLog(@"requestJoinGroup link %@", url);
809 809
810 [self _request:url method:@"POST" token:token paras:@{@"group_id": [NSNumber numberWithInt:groupID]} completion:^(NSData *data, NSError *error) { 810 [self _request:url method:@"POST" token:token paras:@{@"group_id": [NSNumber numberWithInt:groupID]} completion:^(NSData *data, NSError *error) {
811 if (completion == NULL) { 811 if (completion == NULL) {
812 return ; 812 return ;
813 } 813 }
814 814
815 if (error == nil) 815 if (error == nil)
816 { 816 {
817 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 817 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
818 NSLog(@"%@", dataResult); 818 NSLog(@"%@", dataResult);
819 int status = [dataResult[@"status"] intValue]; 819 int status = [dataResult[@"status"] intValue];
820 if (status == 1) { // status = 1 success 820 if (status == 1) { // status = 1 success
821 if(dataResult[@"result"] != nil) { 821 if(dataResult[@"result"] != nil) {
822 completion(nil); 822 completion(nil);
823 } 823 }
824 else { 824 else {
825 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 825 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
826 completion(errorObject); 826 completion(errorObject);
827 } 827 }
828 } 828 }
829 else { 829 else {
830 NSString *message = dataResult[@"message"]; 830 NSString *message = dataResult[@"message"];
831 if ([message isEqualToString:@"Token is invalid"]) { 831 if ([message isEqualToString:@"Token is invalid"]) {
832 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 832 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
833 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 833 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
834 [self requestJoinGroup:tokenNew groupID:groupID CompletionHandler:completion]; 834 [self requestJoinGroup:tokenNew groupID:groupID CompletionHandler:completion];
835 } 835 }
836 else { 836 else {
837 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 837 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
838 completion(errorObject); 838 completion(errorObject);
839 } 839 }
840 } 840 }
841 } 841 }
842 else 842 else
843 { 843 {
844 completion(error); 844 completion(error);
845 } 845 }
846 }]; 846 }];
847 } 847 }
848 848
849 - (void) requestGroupList:(NSString *)token CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 849 - (void) requestGroupList:(NSString *)token CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
850 NSString *url = [kServerAddress stringByAppendingFormat:@"api/groups/list"]; 850 NSString *url = [kServerAddress stringByAppendingFormat:@"api/groups/list"];
851 NSLog(@"requestGroupList link %@", url); 851 NSLog(@"requestGroupList link %@", url);
852 852
853 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 853 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
854 if (completion == NULL) { 854 if (completion == NULL) {
855 return ; 855 return ;
856 } 856 }
857 857
858 if (error == nil) 858 if (error == nil)
859 { 859 {
860 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 860 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
861 NSLog(@"%@", dataResult); 861 NSLog(@"%@", dataResult);
862 int status = [dataResult[@"status"] intValue]; 862 int status = [dataResult[@"status"] intValue];
863 if (status == 1) { // status = 1 success 863 if (status == 1) { // status = 1 success
864 if(dataResult[@"result"] != nil) { 864 if(dataResult[@"result"] != nil) {
865 NSArray * array = dataResult[@"result"]; 865 NSArray * array = dataResult[@"result"];
866 NSMutableArray * arrayGroup = [[NSMutableArray alloc] init]; 866 NSMutableArray * arrayGroup = [[NSMutableArray alloc] init];
867 for(NSDictionary * dict in array) { 867 for(NSDictionary * dict in array) {
868 GroupObject * object = [[GroupObject alloc] initWithShortData:dict]; 868 GroupObject * object = [[GroupObject alloc] initWithShortData:dict];
869 [arrayGroup addObject:object]; 869 [arrayGroup addObject:object];
870 } 870 }
871 completion(arrayGroup, nil); 871 completion(arrayGroup, nil);
872 } 872 }
873 else { 873 else {
874 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 874 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
875 completion(nil, errorObject); 875 completion(nil, errorObject);
876 } 876 }
877 } 877 }
878 else { 878 else {
879 NSString *message = dataResult[@"message"]; 879 NSString *message = dataResult[@"message"];
880 if (message == nil) { 880 if (message == nil) {
881 message = @"Unknown error"; 881 message = @"Unknown error";
882 } 882 }
883 883
884 if ([message isEqualToString:@"Token is invalid"]) { 884 if ([message isEqualToString:@"Token is invalid"]) {
885 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 885 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
886 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 886 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
887 [self requestGroupList:tokenNew CompletionHandler:completion]; 887 [self requestGroupList:tokenNew CompletionHandler:completion];
888 } 888 }
889 else { 889 else {
890 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 890 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
891 completion(nil, errorObject); 891 completion(nil, errorObject);
892 } 892 }
893 } 893 }
894 } 894 }
895 else 895 else
896 { 896 {
897 completion(nil, error); 897 completion(nil, error);
898 } 898 }
899 }]; 899 }];
900 } 900 }
901 901
902 #pragma mark - Ranking API 902 #pragma mark - Ranking API
903 - (void) requestRankingList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate mode:(int) mode page:(int) page CompletionHandler:(void (^)(NSArray *, NSError *)) completion { 903 - (void) requestRankingList:(NSString *)token startDate:(NSDate *)startDate endDate:(NSDate *)endDate mode:(int) mode page:(int) page CompletionHandler:(void (^)(NSArray *, NSError *)) completion {
904 NSString *url = [kServerAddress stringByAppendingFormat:@"api/ranking/%d/%@/%@/%d", mode, [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""], page]; 904 NSString *url = [kServerAddress stringByAppendingFormat:@"api/ranking/%d/%@/%@/%d", mode, [Utilities stringFromDate:startDate withFormat:@"YYYYMMdd" locale:@""], [Utilities stringFromDate:endDate withFormat:@"YYYYMMdd" locale:@""], page];
905 NSLog(@"requestRaningList link %@", url); 905 NSLog(@"requestRaningList link %@", url);
906 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) { 906 [self _request:url method:@"GET" token:token paras:nil completion:^(NSData *data, NSError *error) {
907 907
908 if (completion == NULL) { 908 if (completion == NULL) {
909 return ; 909 return ;
910 } 910 }
911 911
912 if (error == nil) 912 if (error == nil)
913 { 913 {
914 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 914 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
915 NSLog(@"%@", dataResult); 915 NSLog(@"%@", dataResult);
916 int status = [dataResult[@"status"] intValue]; 916 int status = [dataResult[@"status"] intValue];
917 if (status == 1) { // status = 1 success 917 if (status == 1) { // status = 1 success
918 NSArray * array = dataResult[@"result"]; 918 NSArray * array = dataResult[@"result"];
919 NSMutableArray * arrayRanking = [[NSMutableArray alloc] init]; 919 NSMutableArray * arrayRanking = [[NSMutableArray alloc] init];
920 for(NSDictionary * dict in array) { 920 for(NSDictionary * dict in array) {
921 RankingObject * object = [[RankingObject alloc] initWithData:dict]; 921 RankingObject * object = [[RankingObject alloc] initWithData:dict];
922 [arrayRanking addObject:object]; 922 [arrayRanking addObject:object];
923 } 923 }
924 completion(arrayRanking, nil); 924 completion(arrayRanking, nil);
925 } 925 }
926 else { 926 else {
927 NSString *message = dataResult[@"message"]; 927 NSString *message = dataResult[@"message"];
928 if (message == nil) { 928 if (message == nil) {
929 message = @"Unknown error"; 929 message = @"Unknown error";
930 } 930 }
931 931
932 if ([message isEqualToString:@"Token is invalid"]) { 932 if ([message isEqualToString:@"Token is invalid"]) {
933 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES]; 933 [self performSelectorOnMainThread:@selector(checkToken) withObject:nil waitUntilDone:YES];
934 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken]; 934 NSString *tokenNew = [[NSUserDefaults standardUserDefaults] objectForKey:kToken];
935 [self requestRankingList:tokenNew startDate:startDate endDate:endDate mode:mode page:page CompletionHandler:completion]; 935 [self requestRankingList:tokenNew startDate:startDate endDate:endDate mode:mode page:page CompletionHandler:completion];
936 } 936 }
937 else { 937 else {
938 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 938 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
939 completion(nil, errorObject); 939 completion(nil, errorObject);
940 } 940 }
941 } 941 }
942 } 942 }
943 else 943 else
944 { 944 {
945 completion(nil, error); 945 completion(nil, error);
946 } 946 }
947 }]; 947 }];
948 } 948 }
949 949
950 #pragma mark - Common API 950 #pragma mark - Common API
951 - (void)refreshToken: (NSString *)userID CompletionHandler:(void (^)(NSString *, NSError *))completion { 951 - (void)refreshToken: (NSString *)userID CompletionHandler:(void (^)(NSString *, NSError *))completion {
952 [self _request:[kServerAddress stringByAppendingFormat: @"refreshToken"] method:@"POST" token:@"" paras:@{@"userId":userID} completion:^(NSData *data, NSError *error) { 952 [self _request:[kServerAddress stringByAppendingFormat: @"refreshToken"] method:@"POST" token:@"" paras:@{@"userId":userID} completion:^(NSData *data, NSError *error) {
953 953
954 if (completion == NULL) { 954 if (completion == NULL) {
955 return ; 955 return ;
956 } 956 }
957 957
958 if (error == nil) 958 if (error == nil)
959 { 959 {
960 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error]; 960 NSDictionary *dataResult = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingAllowFragments error: &error];
961 961
962 int status = [dataResult[@"status"] intValue]; 962 int status = [dataResult[@"status"] intValue];
963 if (status == 1) { // status = 1 success 963 if (status == 1) { // status = 1 success
964 NSArray *arrayResult = dataResult[@"result"]; 964 NSArray *arrayResult = dataResult[@"result"];
965 if (arrayResult.count > 0) { 965 if (arrayResult.count > 0) {
966 NSString *token = arrayResult[0]; 966 NSString *token = arrayResult[0];
967 completion(token, nil); 967 completion(token, nil);
968 } 968 }
969 else { 969 else {
970 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}]; 970 NSError *errorObject = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":@"Unknown Error"}];
971 completion(nil, errorObject); 971 completion(nil, errorObject);
972 } 972 }
973 973
974 } 974 }
975 else { // status = 0 error 975 else { // status = 0 error
976 NSString *message = dataResult[@"message"]; 976 NSString *message = dataResult[@"message"];
977 if (message == nil) { 977 if (message == nil) {
978 message = @"Unknown error"; 978 message = @"Unknown error";
979 } 979 }
980 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}]; 980 NSError *loginFaild = [NSError errorWithDomain:@"LifeLog_Domain" code:-1 userInfo:@{@"message":message}];
981 completion(nil, loginFaild); 981 completion(nil, loginFaild);
982 } 982 }
983 } 983 }
984 else 984 else
985 { 985 {
986 completion(nil, error); 986 completion(nil, error);
987 } 987 }
988 }]; 988 }];
989 } 989 }
990 990
991 #pragma mark - Private Function 991 #pragma mark - Private Function
992 - (void) checkToken { 992 - (void) checkToken {
993 // [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationToken object:nil]; 993 // [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationToken object:nil];
994 NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:kUser]; 994 NSData *data = [[NSUserDefaults standardUserDefaults] objectForKey:kUser];
995 User *user = (User *)[NSKeyedUnarchiver unarchiveObjectWithData:data]; 995 User *user = (User *)[NSKeyedUnarchiver unarchiveObjectWithData:data];
996 if (user != nil) { 996 if (user != nil) {
997 [self refreshToken:user.user_id CompletionHandler:^(NSString *token, NSError *error) { 997 [self refreshToken:user.user_id CompletionHandler:^(NSString *token, NSError *error) {
998 if (error == nil) { 998 if (error == nil) {
999 [[NSUserDefaults standardUserDefaults] setObject:token forKey:kToken]; 999 [[NSUserDefaults standardUserDefaults] setObject:token forKey:kToken];
1000 [[NSUserDefaults standardUserDefaults] synchronize]; 1000 [[NSUserDefaults standardUserDefaults] synchronize];
1001 } 1001 }
1002 }]; 1002 }];
1003 } 1003 }
1004 } 1004 }
1005 - (NSData *) _encodeDictionary: (NSDictionary *) dictionary 1005 - (NSData *) _encodeDictionary: (NSDictionary *) dictionary
1006 { 1006 {
1007 NSMutableArray *parts = [[NSMutableArray alloc] init]; 1007 NSMutableArray *parts = [[NSMutableArray alloc] init];
1008 for (id key in dictionary) 1008 for (id key in dictionary)
1009 { 1009 {
1010 NSString *encodedValue = [[dictionary[key] description] urlencode]; 1010 NSString *encodedValue = [[dictionary[key] description] urlencode];
1011 NSString *encodedKey = [[key description] urlencode];//[[key description] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 1011 NSString *encodedKey = [[key description] urlencode];//[[key description] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
1012 NSString *part = [NSString stringWithFormat: @"%@=%@", encodedKey, encodedValue]; 1012 NSString *part = [NSString stringWithFormat: @"%@=%@", encodedKey, encodedValue];
1013 [parts addObject:part]; 1013 [parts addObject:part];
1014 } 1014 }
1015 NSString *encodedDictionary = [parts componentsJoinedByString:@"&"]; 1015 NSString *encodedDictionary = [parts componentsJoinedByString:@"&"];
1016 return [encodedDictionary dataUsingEncoding: NSUTF8StringEncoding]; 1016 return [encodedDictionary dataUsingEncoding: NSUTF8StringEncoding];
1017 } 1017 }
1018 1018
1019 - (NSURLSessionDataTask *) _request:(NSString *)address method:(NSString *)method token:(NSString *) token paras:(NSDictionary *)paras completion:(void (^)(NSData *data, NSError *error))completion 1019 - (NSURLSessionDataTask *) _request:(NSString *)address method:(NSString *)method token:(NSString *) token paras:(NSDictionary *)paras completion:(void (^)(NSData *data, NSError *error))completion
1020 { 1020 {
1021 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:address]]; 1021 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: [NSURL URLWithString:address]];
1022 request.HTTPMethod = method; 1022 request.HTTPMethod = method;
1023 [request setValue: @"application/json" forHTTPHeaderField: @"Accept"]; 1023 [request setValue: @"application/json" forHTTPHeaderField: @"Accept"];
1024 [request setValue: @"application/json" forHTTPHeaderField: @"Content-Type"]; 1024 [request setValue: @"application/json" forHTTPHeaderField: @"Content-Type"];
1025 if(token != nil && ![token isEqual: @""]) { 1025 if(token != nil && ![token isEqual: @""]) {
1026 [request setValue: token forHTTPHeaderField: @"token"]; 1026 [request setValue: token forHTTPHeaderField: @"token"];
1027 } 1027 }
1028 [request setTimeoutInterval:self.timeOutInterval]; 1028 [request setTimeoutInterval:self.timeOutInterval];
1029 1029
1030 if (paras != nil) 1030 if (paras != nil)
1031 { 1031 {
1032 NSData *encodedData = [self _encodeDictionary: paras]; 1032 NSData *encodedData = [self _encodeDictionary: paras];
1033 [request setValue: [NSString stringWithFormat: @"%lu", (unsigned long) encodedData.length] forHTTPHeaderField: @"Content-Length"]; 1033 [request setValue: [NSString stringWithFormat: @"%lu", (unsigned long) encodedData.length] forHTTPHeaderField: @"Content-Length"];
1034 [request setValue: @"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField: @"Content-Type"]; 1034 [request setValue: @"application/x-www-form-urlencoded charset=utf-8" forHTTPHeaderField: @"Content-Type"];
1035 [request setHTTPBody: encodedData]; 1035 [request setHTTPBody: encodedData];
1036 } 1036 }
1037 1037
1038 //NSURLSession *session = [NSURLSession sharedSession]; 1038 //NSURLSession *session = [NSURLSession sharedSession];
1039 NSURLSessionConfiguration *defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 1039 NSURLSessionConfiguration *defaultConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
1040 [defaultConfiguration setHTTPMaximumConnectionsPerHost:20]; 1040 [defaultConfiguration setHTTPMaximumConnectionsPerHost:20];
1041 NSOperationQueue *operationQueue = [NSOperationQueue mainQueue]; 1041 NSOperationQueue *operationQueue = [NSOperationQueue mainQueue];
1042 operationQueue.maxConcurrentOperationCount = 20; 1042 operationQueue.maxConcurrentOperationCount = 20;
1043 NSURLSession *session = [NSURLSession sessionWithConfiguration:defaultConfiguration delegate:nil delegateQueue:operationQueue]; 1043 NSURLSession *session = [NSURLSession sessionWithConfiguration:defaultConfiguration delegate:nil delegateQueue:operationQueue];
1044 NSURLSessionDataTask *task = [session dataTaskWithRequest:request 1044 NSURLSessionDataTask *task = [session dataTaskWithRequest:request
1045 completionHandler: 1045 completionHandler:
1046 ^(NSData *data, NSURLResponse *response, NSError *error) { 1046 ^(NSData *data, NSURLResponse *response, NSError *error) {
1047 if (completion == NULL) { 1047 if (completion == NULL) {
1048 return ; 1048 return ;
1049 } 1049 }
1050 if (error == nil) 1050 if (error == nil)
1051 { 1051 {
1052 completion(data, nil); 1052 completion(data, nil);
1053 } 1053 }
1054 else 1054 else
1055 { 1055 {
1056 completion(nil, error); 1056 completion(nil, error);
1057 } 1057 }
1058 }]; 1058 }];
1059 [task resume]; 1059 [task resume];
1060 return task; 1060 return task;
1061 } 1061 }
1062 1062
1063 -(void)waitUntilDone:(void(^)(void))waitBlock { 1063 -(void)waitUntilDone:(void(^)(void))waitBlock {
1064 //use your statement or call method here 1064 //use your statement or call method here
1065 if(waitBlock){ 1065 if(waitBlock){
1066 waitBlock(); 1066 waitBlock();
1067 } 1067 }
1068 } 1068 }
1069 1069
1070 @end 1070 @end
1071 1071