//reportToCloud...
-(void)reportToCloud{
[BT_debugger showIt:self message:[NSString stringWithFormat:@"reportToCloud%@", @""]];
//if we do not have any reportToCloud results yet, make a fake one...
if(![BT_fileManager doesLocalFileExist:[self modifiedFileName]]){
[BT_fileManager saveTextFileToCacheWithEncoding:@"blankLastModified" fileName:self.modifiedFileName encodingFlag:-1];
}
//ignore if we are refreshing...
if(![self isRefreshing]){
NSString *useURL = @"";
//app's configuration data must have a "dataURL" and a "reportToCloudURL"...
if([[self.rootApp dataURL] length] > 1 && [[self.rootApp reportToCloudURL] length] > 1){
useURL = [self.rootApp reportToCloudURL];
}else{
[BT_debugger showIt:self theMessage:[NSString stringWithFormat:@"not reporting to cloud, no dataURL or reportToCloudURL%@", @""]];
}
if ([useURL length] > 3) {
//if we have a currentMode in the BT_config.txt IN THE PROJECT, append it to the end of the URL...
if([[self currentMode] length] > 0){
useURL = [useURL stringByAppendingString:[NSString stringWithFormat:@"¤tMode=%@", [self currentMode]]];
}
//the dataURL may contain merge fields...
[BT_debugger showIt:self theMessage:[NSString stringWithFormat:@"reporting to cloud at : %@", useURL]];
NSString *tmpURL = [BT_strings mergeBTVariablesInString:useURL];
NSURL *escapedURL = [NSURL URLWithString:[tmpURL stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]];
////////////////////////////
// start of replacement code
NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];
// NSURL * url = [NSURL URLWithString:mySQLServerURL];
// NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
[request setURL:escapedURL];
[request setHTTPMethod:@"GET"];
NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest: request completionHandler: ^(NSData *data, NSURLResponse *response, NSError *error) {
/////////////
[BT_debugger showIt:self theMessage:[NSString stringWithFormat:@"Response: %@ -|- %@\n", response, error]];
/////////////
if(error == nil) {
[self doSomethingOK:data];
NSString * returnText = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
[BT_debugger showIt:self theMessage:[NSString stringWithFormat:@"Returned Data: %@", returnText]];
}
/////////////
}];
[dataTask resume];
}
}//isRefreshing...
}
////////////
-(void) doSomethingOK:(NSData *)returnData {
//save data as "lastModified" file
NSString *dStringData = [[NSString alloc] initWithData:returnData encoding:NSASCIIStringEncoding];
if([dStringData length] > 3){
//returned data format: {"lastModifiedUTC":"2011-02-22 02:13:25"}
NSString *lastModified = @"";
NSString *previousModified = @"";
//parse returned JSON data
SBJsonParser *parser = [SBJsonParser new];
id jsonData = [parser objectWithString:dStringData];
if(jsonData){
if([jsonData objectForKey:@"lastModifiedUTC"]){
lastModified = [jsonData objectForKey:@"lastModifiedUTC"];
[BT_debugger showIt:self theMessage:[NSString stringWithFormat:@"lastModified (value on server): %@", lastModified]];
}
}
//parse previous saved data
if([BT_fileManager doesLocalFileExist:self.modifiedFileName]){
NSString *previousData = [BT_fileManager readTextFileFromCacheWithEncoding:self.modifiedFileName encodingFlag:-1];
SBJsonParser *parser = [SBJsonParser new];
id jsonData = [parser objectWithString:previousData];
if(jsonData){
if([jsonData objectForKey:@"lastModifiedUTC"]){
previousModified = [jsonData objectForKey:@"lastModifiedUTC"];
[BT_debugger showIt:self theMessage:[NSString stringWithFormat:@"previousModified (value on device): %@", previousModified]];
}
}
}
//save a copy of the lastModified text for next time..
BOOL saved = [BT_fileManager saveTextFileToCacheWithEncoding:dStringData fileName:self.modifiedFileName encodingFlag:-1];
if(saved){};
//if value are not emtpy, and different....ask user to confirm refresh...
if([lastModified length] > 3 && [previousModified length] > 3){
if(![lastModified isEqualToString:previousModified]){
//show alert with confirmation...
UIAlertController * alertView = [UIAlertController
alertControllerWithTitle:@"Refresh Data"
message:NSLocalizedString(@"updatesAvailable", "This app's content has changed, would you like to refresh?")
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* yesButton = [UIAlertAction actionWithTitle:@"Yes" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { [self clickedOnButton:12]; }];
UIAlertAction* noButton = [UIAlertAction actionWithTitle:@"No" style:UIAlertActionStyleDefault handler:^(UIAlertAction * action) { [self clickedOnButton:0]; }];
[alertView addAction:yesButton];
[alertView addAction:noButton];
[self.rootApp.rootNavController presentViewController:alertView animated:YES completion:nil];
}
}else{
[BT_debugger showIt:self theMessage:[NSString stringWithFormat:@"%@ does not exist in the cache. Not checking for updates.", self.modifiedFileName]];
}
}
}
-(void)clickedOnButton:(int)alertTag {
if(alertTag == 0){
//do nothing...
}
if(alertTag == 12){
[self refreshAppData];
}
}
Comments
0 B
|👍
/👎
0 B
|👍
/👎