InitializeSubscriber Objective-C » History » Version 1
Tomek Dziemidowicz, 2019-07-04 09:00 PM
| 1 | 1 | Tomek Dziemidowicz | h1. InitializeSubscriber Objective-C |
|---|---|---|---|
| 2 | |||
| 3 | <pre><code class="objc"> |
||
| 4 | -(void)initializeSubscriber:(nonnull NSString*)subscriberId error:(NSError * _Nullable * _Nullable)error{ |
||
| 5 | NSString *requestUrlString = [NSString stringWithFormat:@"%@/InitializeSubscriber/%@", _serverURL, subscriberId]; |
||
| 6 | NSURL *requestURL = [NSURL URLWithString:requestUrlString]; |
||
| 7 | NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; |
||
| 8 | |||
| 9 | [request setURL:requestURL]; |
||
| 10 | [request setHTTPMethod:@"GET"]; |
||
| 11 | |||
| 12 | NSHTTPURLResponse *response; |
||
| 13 | |||
| 14 | NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:error]; |
||
| 15 | |||
| 16 | if(!*error){ |
||
| 17 | switch (response.statusCode) { |
||
| 18 | case 200: |
||
| 19 | break; |
||
| 20 | default: |
||
| 21 | *error = [NSError errorWithDomain:@"com.sqlite-sync" code:0 userInfo:[NSDictionary dictionaryWithObject:[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] forKey:NSLocalizedDescriptionKey]]; |
||
| 22 | break; |
||
| 23 | } |
||
| 24 | } |
||
| 25 | |||
| 26 | if(*error) return; |
||
| 27 | |||
| 28 | NSDictionary* schema = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:error]; |
||
| 29 | |||
| 30 | if(*error) return; |
||
| 31 | |||
| 32 | NSArray *keys = [[schema allKeys] sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { return [a compare:b]; }]; |
||
| 33 | |||
| 34 | sqlite3 *db; |
||
| 35 | sqlite3_stmt *stmt = NULL; |
||
| 36 | |||
| 37 | if(sqlite3_open([_databasePath UTF8String], &db) == SQLITE_OK){ |
||
| 38 | sqlite3_exec(db, "BEGIN TRANSACTION", 0, 0, 0); |
||
| 39 | |||
| 40 | for (NSString* key in keys) { |
||
| 41 | if(![key containsString:@"00000"]){ |
||
| 42 | if(sqlite3_prepare_v2(db, [[schema objectForKey:key] UTF8String], -1, &stmt, NULL) != SQLITE_OK |
||
| 43 | || sqlite3_step(stmt) != SQLITE_DONE){ |
||
| 44 | *error = [NSError errorWithDomain:@"com.sqlite-sync" code:0 userInfo:[NSDictionary dictionaryWithObject:[NSString stringWithFormat:@"%s", sqlite3_errmsg(db)] forKey:NSLocalizedDescriptionKey]]; |
||
| 45 | break; |
||
| 46 | } |
||
| 47 | sqlite3_reset(stmt); |
||
| 48 | } |
||
| 49 | } |
||
| 50 | |||
| 51 | if(*error){ |
||
| 52 | sqlite3_exec(db, "ROLLBACK TRANSACTION", 0, 0, 0); |
||
| 53 | } |
||
| 54 | else{ |
||
| 55 | sqlite3_exec(db, "COMMIT", 0, 0, 0); |
||
| 56 | } |
||
| 57 | |||
| 58 | if(stmt){ |
||
| 59 | sqlite3_finalize(stmt); |
||
| 60 | } |
||
| 61 | |||
| 62 | sqlite3_close(db); |
||
| 63 | } |
||
| 64 | else{ |
||
| 65 | *error = [NSError errorWithDomain:@"com.sqlite-sync" code:0 userInfo:[NSDictionary dictionaryWithObject:@"Failed to open database" forKey:NSLocalizedDescriptionKey]]; |
||
| 66 | } |
||
| 67 | } |
||
| 68 | </code></pre> |