Showing
1 changed file
with
113 additions
and
0 deletions
| ... | @@ -81,6 +81,7 @@ typedef void (^FailureResponse)(NSURLSessionDataTask * _Nullable task, NSError * | ... | @@ -81,6 +81,7 @@ typedef void (^FailureResponse)(NSURLSessionDataTask * _Nullable task, NSError * |
| 81 | @property (nonatomic, strong) AFHTTPSessionManager *httpClient; | 81 | @property (nonatomic, strong) AFHTTPSessionManager *httpClient; |
| 82 | @property (nonatomic) AFNetworkReachabilityStatus networkStatus; | 82 | @property (nonatomic) AFNetworkReachabilityStatus networkStatus; |
| 83 | @property (nonatomic) BOOL hasChangedReachabilityStatus; | 83 | @property (nonatomic) BOOL hasChangedReachabilityStatus; |
| 84 | +@property (nonatomic, retain) NSString *DatabaseLock; | ||
| 84 | 85 | ||
| 85 | - (id)initWithApplicationUUID:(NSString *)appUUID; | 86 | - (id)initWithApplicationUUID:(NSString *)appUUID; |
| 86 | - (BOOL)isRegistrationValid; | 87 | - (BOOL)isRegistrationValid; |
| ... | @@ -284,6 +285,8 @@ typedef void (^FailureResponse)(NSURLSessionDataTask * _Nullable task, NSError * | ... | @@ -284,6 +285,8 @@ typedef void (^FailureResponse)(NSURLSessionDataTask * _Nullable task, NSError * |
| 284 | [defaults synchronize]; | 285 | [defaults synchronize]; |
| 285 | _pendingOperationsQueue = [[NSOperationQueue alloc] init]; | 286 | _pendingOperationsQueue = [[NSOperationQueue alloc] init]; |
| 286 | _pendingOperationsQueue.maxConcurrentOperationCount = 1; | 287 | _pendingOperationsQueue.maxConcurrentOperationCount = 1; |
| 288 | + | ||
| 289 | + _DatabaseLock = @"Database-Lock"; | ||
| 287 | } | 290 | } |
| 288 | return self; | 291 | return self; |
| 289 | } | 292 | } |
| ... | @@ -560,8 +563,10 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -560,8 +563,10 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 560 | [self.locationManager applicationDidEnterBackground]; | 563 | [self.locationManager applicationDidEnterBackground]; |
| 561 | [WLAnalyticsManager logAppDidEnterBackgroundEvent]; | 564 | [WLAnalyticsManager logAppDidEnterBackgroundEvent]; |
| 562 | [self calculateNetworkReachabilityStatisticsForStatus:self.networkStatus]; | 565 | [self calculateNetworkReachabilityStatisticsForStatus:self.networkStatus]; |
| 566 | + @synchronized (_DatabaseLock) { | ||
| 563 | [_db executeUpdate:@"PRAGMA shrink_memory"]; | 567 | [_db executeUpdate:@"PRAGMA shrink_memory"]; |
| 564 | WL_FMDBLogError | 568 | WL_FMDBLogError |
| 569 | + } | ||
| 565 | } | 570 | } |
| 566 | 571 | ||
| 567 | #pragma mark - Inbox | 572 | #pragma mark - Inbox |
| ... | @@ -702,11 +707,13 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -702,11 +707,13 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 702 | NSString *accessToken = @""; | 707 | NSString *accessToken = @""; |
| 703 | if ([_db tableExists:@"requestVariables"] == YES) { | 708 | if ([_db tableExists:@"requestVariables"] == YES) { |
| 704 | @try { | 709 | @try { |
| 710 | + @synchronized (_DatabaseLock) { | ||
| 705 | FMResultSet *accessTokenSet = [_db executeQuery:@"SELECT access_token FROM requestVariables WHERE id = 1;"]; | 711 | FMResultSet *accessTokenSet = [_db executeQuery:@"SELECT access_token FROM requestVariables WHERE id = 1;"]; |
| 706 | while ([accessTokenSet next]) { | 712 | while ([accessTokenSet next]) { |
| 707 | accessToken = [[accessTokenSet resultDictionary][@"access_token"] stringValue]; | 713 | accessToken = [[accessTokenSet resultDictionary][@"access_token"] stringValue]; |
| 708 | } | 714 | } |
| 709 | } | 715 | } |
| 716 | + } | ||
| 710 | @catch (NSException *exception) { | 717 | @catch (NSException *exception) { |
| 711 | NSLog(@"SELECT accessToken error: %@", exception.reason); | 718 | NSLog(@"SELECT accessToken error: %@", exception.reason); |
| 712 | accessToken = @""; | 719 | accessToken = @""; |
| ... | @@ -729,11 +736,13 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -729,11 +736,13 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 729 | NSString *refreshToken = @""; | 736 | NSString *refreshToken = @""; |
| 730 | if ([_db tableExists:@"requestVariables"] == YES) { | 737 | if ([_db tableExists:@"requestVariables"] == YES) { |
| 731 | @try { | 738 | @try { |
| 739 | + @synchronized (_DatabaseLock) { | ||
| 732 | FMResultSet *refreshTokenSet = [_db executeQuery:@"SELECT refresh_token FROM requestVariables WHERE id = 1;"]; | 740 | FMResultSet *refreshTokenSet = [_db executeQuery:@"SELECT refresh_token FROM requestVariables WHERE id = 1;"]; |
| 733 | while ([refreshTokenSet next]) { | 741 | while ([refreshTokenSet next]) { |
| 734 | refreshToken = [[refreshTokenSet resultDictionary][@"refresh_token"] stringValue]; | 742 | refreshToken = [[refreshTokenSet resultDictionary][@"refresh_token"] stringValue]; |
| 735 | } | 743 | } |
| 736 | } | 744 | } |
| 745 | + } | ||
| 737 | @catch (NSException *exception) { | 746 | @catch (NSException *exception) { |
| 738 | NSLog(@"SELECT refreshToken error: %@", exception.reason); | 747 | NSLog(@"SELECT refreshToken error: %@", exception.reason); |
| 739 | refreshToken = @""; | 748 | refreshToken = @""; |
| ... | @@ -756,11 +765,13 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -756,11 +765,13 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 756 | NSString *clientId = @""; | 765 | NSString *clientId = @""; |
| 757 | if ([_db tableExists:@"requestVariables"] == YES) { | 766 | if ([_db tableExists:@"requestVariables"] == YES) { |
| 758 | @try { | 767 | @try { |
| 768 | + @synchronized (_DatabaseLock) { | ||
| 759 | FMResultSet *clientIdSet = [_db executeQuery:@"SELECT client_id FROM requestVariables WHERE id = 1;"]; | 769 | FMResultSet *clientIdSet = [_db executeQuery:@"SELECT client_id FROM requestVariables WHERE id = 1;"]; |
| 760 | while ([clientIdSet next]) { | 770 | while ([clientIdSet next]) { |
| 761 | clientId = [[clientIdSet resultDictionary][@"client_id"] stringValue]; | 771 | clientId = [[clientIdSet resultDictionary][@"client_id"] stringValue]; |
| 762 | } | 772 | } |
| 763 | } | 773 | } |
| 774 | + } | ||
| 764 | @catch (NSException *exception) { | 775 | @catch (NSException *exception) { |
| 765 | NSLog(@"SELECT clientId error: %@", exception.reason); | 776 | NSLog(@"SELECT clientId error: %@", exception.reason); |
| 766 | clientId = @""; | 777 | clientId = @""; |
| ... | @@ -783,11 +794,13 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -783,11 +794,13 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 783 | NSString *clientSecret = @""; | 794 | NSString *clientSecret = @""; |
| 784 | if ([_db tableExists:@"requestVariables"] == YES) { | 795 | if ([_db tableExists:@"requestVariables"] == YES) { |
| 785 | @try { | 796 | @try { |
| 797 | + @synchronized (_DatabaseLock) { | ||
| 786 | FMResultSet *clientSecretSet = [_db executeQuery:@"SELECT client_secret FROM requestVariables WHERE id = 1;"]; | 798 | FMResultSet *clientSecretSet = [_db executeQuery:@"SELECT client_secret FROM requestVariables WHERE id = 1;"]; |
| 787 | while ([clientSecretSet next]) { | 799 | while ([clientSecretSet next]) { |
| 788 | clientSecret = [[clientSecretSet resultDictionary][@"client_secret"] stringValue]; | 800 | clientSecret = [[clientSecretSet resultDictionary][@"client_secret"] stringValue]; |
| 789 | } | 801 | } |
| 790 | } | 802 | } |
| 803 | + } | ||
| 791 | @catch (NSException *exception) { | 804 | @catch (NSException *exception) { |
| 792 | NSLog(@"SELECT clientSecret error: %@", exception.reason); | 805 | NSLog(@"SELECT clientSecret error: %@", exception.reason); |
| 793 | clientSecret = @""; | 806 | clientSecret = @""; |
| ... | @@ -945,15 +958,26 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -945,15 +958,26 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 945 | refreshToken = [contextResponse objectForKey:@"refresh_token"]; | 958 | refreshToken = [contextResponse objectForKey:@"refresh_token"]; |
| 946 | NSString* accessToken = [NSString alloc]; | 959 | NSString* accessToken = [NSString alloc]; |
| 947 | accessToken = [contextResponse objectForKey:@"access_oken"]; | 960 | accessToken = [contextResponse objectForKey:@"access_oken"]; |
| 961 | +// @synchronized (_DatabaseLock) { | ||
| 962 | +// | ||
| 963 | +// } | ||
| 964 | + @synchronized (_DatabaseLock) { | ||
| 948 | [_db executeUpdate:@"DROP TABLE requestVariables"]; | 965 | [_db executeUpdate:@"DROP TABLE requestVariables"]; |
| 966 | + } | ||
| 949 | if ([_db tableExists:@"requestVariables"] == NO) { | 967 | if ([_db tableExists:@"requestVariables"] == NO) { |
| 968 | + @synchronized (_DatabaseLock) { | ||
| 950 | [_db executeUpdate:@"CREATE TABLE requestVariables (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, client_id INTEGER, client_secret VARCHAR(255), access_token VARCHAR(255), refresh_token VARCHAR(255))"]; | 969 | [_db executeUpdate:@"CREATE TABLE requestVariables (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, client_id INTEGER, client_secret VARCHAR(255), access_token VARCHAR(255), refresh_token VARCHAR(255))"]; |
| 951 | WL_FMDBLogError | 970 | WL_FMDBLogError |
| 971 | + } | ||
| 952 | 972 | ||
| 973 | + @synchronized (_DatabaseLock) { | ||
| 953 | [_db executeUpdate:@"INSERT INTO requestVariables (id, client_id, client_secret, refresh_token, access_token) VALUES (1, ?, ?, ?, ?)", clientId, clientSecret, refreshToken, accessToken]; | 974 | [_db executeUpdate:@"INSERT INTO requestVariables (id, client_id, client_secret, refresh_token, access_token) VALUES (1, ?, ?, ?, ?)", clientId, clientSecret, refreshToken, accessToken]; |
| 975 | + } | ||
| 954 | } else { | 976 | } else { |
| 977 | + @synchronized (_DatabaseLock) { | ||
| 955 | [_db executeUpdate:@"UPDATE requestVariables SET client_id = ? , client_secret = ?, refresh_token = ?, access_token = ? WHERE id = 1", clientId, clientSecret, refreshToken, accessToken]; | 978 | [_db executeUpdate:@"UPDATE requestVariables SET client_id = ? , client_secret = ?, refresh_token = ?, access_token = ? WHERE id = 1", clientId, clientSecret, refreshToken, accessToken]; |
| 956 | } | 979 | } |
| 980 | + } | ||
| 957 | success(contextResponse); | 981 | success(contextResponse); |
| 958 | } | 982 | } |
| 959 | } failureBlock:^(NSError *error) { | 983 | } failureBlock:^(NSError *error) { |
| ... | @@ -1013,7 +1037,9 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1013,7 +1037,9 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1013 | - (NSDictionary*)logout | 1037 | - (NSDictionary*)logout |
| 1014 | { | 1038 | { |
| 1015 | 1039 | ||
| 1040 | + @synchronized (_DatabaseLock) { | ||
| 1016 | [_db executeUpdate:@"DROP TABLE requestVariables"]; | 1041 | [_db executeUpdate:@"DROP TABLE requestVariables"]; |
| 1042 | + } | ||
| 1017 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; | 1043 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; |
| 1018 | NSLog(@"**************** WARPLY Logout *****************" ); | 1044 | NSLog(@"**************** WARPLY Logout *****************" ); |
| 1019 | return successResponse; | 1045 | return successResponse; |
| ... | @@ -1026,15 +1052,23 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1026,15 +1052,23 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1026 | clientId = [contextResponse objectForKey:@"client_id"]; | 1052 | clientId = [contextResponse objectForKey:@"client_id"]; |
| 1027 | NSString* clientSecret = [NSString alloc]; | 1053 | NSString* clientSecret = [NSString alloc]; |
| 1028 | clientSecret = [contextResponse objectForKey:@"client_secret"]; | 1054 | clientSecret = [contextResponse objectForKey:@"client_secret"]; |
| 1055 | + @synchronized (_DatabaseLock) { | ||
| 1029 | [_db executeUpdate:@"DROP TABLE requestVariables"]; | 1056 | [_db executeUpdate:@"DROP TABLE requestVariables"]; |
| 1057 | + } | ||
| 1030 | if ([_db tableExists:@"requestVariables"] == NO) { | 1058 | if ([_db tableExists:@"requestVariables"] == NO) { |
| 1059 | + @synchronized (_DatabaseLock) { | ||
| 1031 | [_db executeUpdate:@"CREATE TABLE requestVariables (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, client_id INTEGER, client_secret VARCHAR(255), access_token VARCHAR(255), refresh_token VARCHAR(255))"]; | 1060 | [_db executeUpdate:@"CREATE TABLE requestVariables (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, client_id INTEGER, client_secret VARCHAR(255), access_token VARCHAR(255), refresh_token VARCHAR(255))"]; |
| 1032 | WL_FMDBLogError | 1061 | WL_FMDBLogError |
| 1062 | + } | ||
| 1033 | 1063 | ||
| 1064 | + @synchronized (_DatabaseLock) { | ||
| 1034 | [_db executeUpdate:@"INSERT INTO requestVariables (id, client_id, client_secret) VALUES (1, ?, ?)", clientId, clientSecret]; | 1065 | [_db executeUpdate:@"INSERT INTO requestVariables (id, client_id, client_secret) VALUES (1, ?, ?)", clientId, clientSecret]; |
| 1066 | + } | ||
| 1035 | } else { | 1067 | } else { |
| 1068 | + @synchronized (_DatabaseLock) { | ||
| 1036 | [_db executeUpdate:@"UPDATE requestVariables SET client_id = ? , client_secret = ? WHERE id = 1", clientId, clientSecret]; | 1069 | [_db executeUpdate:@"UPDATE requestVariables SET client_id = ? , client_secret = ? WHERE id = 1", clientId, clientSecret]; |
| 1037 | } | 1070 | } |
| 1071 | + } | ||
| 1038 | NSDictionary *postDictionary2 = [NSDictionary alloc]; | 1072 | NSDictionary *postDictionary2 = [NSDictionary alloc]; |
| 1039 | if ([loginType isEqual:@"email"]) { | 1073 | if ([loginType isEqual:@"email"]) { |
| 1040 | postDictionary2 = @{@"app_id": [contextResponse objectForKey:@"app_id"], @"client_id": clientId, @"confirm": @"yes", @"email":id, @"response_type":@"code", @"scope": [loginType stringByAppendingString:@" app_id"] }; | 1074 | postDictionary2 = @{@"app_id": [contextResponse objectForKey:@"app_id"], @"client_id": clientId, @"confirm": @"yes", @"email":id, @"response_type":@"code", @"scope": [loginType stringByAppendingString:@" app_id"] }; |
| ... | @@ -1064,7 +1098,9 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1064,7 +1098,9 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1064 | NSData *jsonData3 = [NSJSONSerialization dataWithJSONObject:postDictionary3 options:0 error:NULL]; | 1098 | NSData *jsonData3 = [NSJSONSerialization dataWithJSONObject:postDictionary3 options:0 error:NULL]; |
| 1065 | [self sendContext5:jsonData3 successBlock:^(NSDictionary *contextResponse) { | 1099 | [self sendContext5:jsonData3 successBlock:^(NSDictionary *contextResponse) { |
| 1066 | if (success) { | 1100 | if (success) { |
| 1101 | + @synchronized (_DatabaseLock) { | ||
| 1067 | [_db executeUpdate:@"UPDATE requestVariables SET access_token = ?, refresh_token = ? WHERE id = 1", [contextResponse objectForKey:@"access_token"], [contextResponse objectForKey:@"refresh_token"]]; | 1102 | [_db executeUpdate:@"UPDATE requestVariables SET access_token = ?, refresh_token = ? WHERE id = 1", [contextResponse objectForKey:@"access_token"], [contextResponse objectForKey:@"refresh_token"]]; |
| 1103 | + } | ||
| 1068 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; | 1104 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; |
| 1069 | success(successResponse); | 1105 | success(successResponse); |
| 1070 | } | 1106 | } |
| ... | @@ -1123,8 +1159,10 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1123,8 +1159,10 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1123 | - (void)updateRefreshTokenW:(NSString*)access_token :(NSString*)refresh_token | 1159 | - (void)updateRefreshTokenW:(NSString*)access_token :(NSString*)refresh_token |
| 1124 | { | 1160 | { |
| 1125 | if ([_db tableExists:@"requestVariables"] == YES) { | 1161 | if ([_db tableExists:@"requestVariables"] == YES) { |
| 1162 | + @synchronized (_DatabaseLock) { | ||
| 1126 | [_db executeUpdate:@"UPDATE requestVariables SET access_token = ?, refresh_token = ? WHERE id = 1", access_token, refresh_token]; | 1163 | [_db executeUpdate:@"UPDATE requestVariables SET access_token = ?, refresh_token = ? WHERE id = 1", access_token, refresh_token]; |
| 1127 | } | 1164 | } |
| 1165 | + } | ||
| 1128 | } | 1166 | } |
| 1129 | 1167 | ||
| 1130 | - (void)refreshToken:(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure | 1168 | - (void)refreshToken:(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure |
| ... | @@ -1135,17 +1173,22 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1135,17 +1173,22 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1135 | NSString *clientSecret = @""; | 1173 | NSString *clientSecret = @""; |
| 1136 | 1174 | ||
| 1137 | @try { | 1175 | @try { |
| 1176 | + @synchronized (_DatabaseLock) { | ||
| 1138 | FMResultSet *refreshTokenSet = [_db executeQuery:@"SELECT refresh_token FROM requestVariables WHERE id = 1;"]; | 1177 | FMResultSet *refreshTokenSet = [_db executeQuery:@"SELECT refresh_token FROM requestVariables WHERE id = 1;"]; |
| 1139 | // NSString *refreshToken = @""; | 1178 | // NSString *refreshToken = @""; |
| 1140 | while ([refreshTokenSet next]) { | 1179 | while ([refreshTokenSet next]) { |
| 1141 | refreshToken = [[refreshTokenSet resultDictionary][@"refresh_token"] stringValue]; | 1180 | refreshToken = [[refreshTokenSet resultDictionary][@"refresh_token"] stringValue]; |
| 1142 | } | 1181 | } |
| 1182 | + } | ||
| 1183 | + @synchronized (_DatabaseLock) { | ||
| 1143 | FMResultSet *clientIdSet = [_db executeQuery:@"SELECT client_id FROM requestVariables WHERE id = 1;"]; | 1184 | FMResultSet *clientIdSet = [_db executeQuery:@"SELECT client_id FROM requestVariables WHERE id = 1;"]; |
| 1144 | // NSString *clientId = [NSString alloc]; | 1185 | // NSString *clientId = [NSString alloc]; |
| 1145 | // NSString *clientId = @""; | 1186 | // NSString *clientId = @""; |
| 1146 | while ([clientIdSet next]) { | 1187 | while ([clientIdSet next]) { |
| 1147 | clientId = [[clientIdSet resultDictionary][@"client_id"] stringValue]; | 1188 | clientId = [[clientIdSet resultDictionary][@"client_id"] stringValue]; |
| 1148 | } | 1189 | } |
| 1190 | + } | ||
| 1191 | + @synchronized (_DatabaseLock) { | ||
| 1149 | FMResultSet *clientSecretSet = [_db executeQuery:@"SELECT client_secret FROM requestVariables WHERE id = 1;"]; | 1192 | FMResultSet *clientSecretSet = [_db executeQuery:@"SELECT client_secret FROM requestVariables WHERE id = 1;"]; |
| 1150 | // NSString *clientSecret = [NSString alloc]; | 1193 | // NSString *clientSecret = [NSString alloc]; |
| 1151 | // NSString *clientSecret = @""; | 1194 | // NSString *clientSecret = @""; |
| ... | @@ -1153,6 +1196,7 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1153,6 +1196,7 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1153 | clientSecret = [[clientSecretSet resultDictionary][@"client_secret"] stringValue]; | 1196 | clientSecret = [[clientSecretSet resultDictionary][@"client_secret"] stringValue]; |
| 1154 | } | 1197 | } |
| 1155 | } | 1198 | } |
| 1199 | + } | ||
| 1156 | @catch (NSException *exception) { | 1200 | @catch (NSException *exception) { |
| 1157 | NSLog(@"SELECT Token error: %@", exception.reason); | 1201 | NSLog(@"SELECT Token error: %@", exception.reason); |
| 1158 | if (failure) { | 1202 | if (failure) { |
| ... | @@ -1174,7 +1218,9 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1174,7 +1218,9 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1174 | // success(successResponse); | 1218 | // success(successResponse); |
| 1175 | 1219 | ||
| 1176 | @try { | 1220 | @try { |
| 1221 | + @synchronized (_DatabaseLock) { | ||
| 1177 | [_db executeUpdate:@"UPDATE requestVariables SET access_token = ?, refresh_token = ? WHERE id = 1", [contextResponse objectForKey:@"access_token"], [contextResponse objectForKey:@"refresh_token"]]; | 1222 | [_db executeUpdate:@"UPDATE requestVariables SET access_token = ?, refresh_token = ? WHERE id = 1", [contextResponse objectForKey:@"access_token"], [contextResponse objectForKey:@"refresh_token"]]; |
| 1223 | + } | ||
| 1178 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; | 1224 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; |
| 1179 | success(successResponse); | 1225 | success(successResponse); |
| 1180 | } | 1226 | } |
| ... | @@ -1223,17 +1269,22 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1223,17 +1269,22 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1223 | NSString *clientSecret = @""; | 1269 | NSString *clientSecret = @""; |
| 1224 | 1270 | ||
| 1225 | @try { | 1271 | @try { |
| 1272 | + @synchronized (_DatabaseLock) { | ||
| 1226 | FMResultSet *refreshTokenSet = [_db executeQuery:@"SELECT refresh_token FROM requestVariables WHERE id = 1;"]; | 1273 | FMResultSet *refreshTokenSet = [_db executeQuery:@"SELECT refresh_token FROM requestVariables WHERE id = 1;"]; |
| 1227 | // NSString *refreshToken = @""; | 1274 | // NSString *refreshToken = @""; |
| 1228 | while ([refreshTokenSet next]) { | 1275 | while ([refreshTokenSet next]) { |
| 1229 | refreshToken = [[refreshTokenSet resultDictionary][@"refresh_token"] stringValue]; | 1276 | refreshToken = [[refreshTokenSet resultDictionary][@"refresh_token"] stringValue]; |
| 1230 | } | 1277 | } |
| 1278 | + } | ||
| 1279 | + @synchronized (_DatabaseLock) { | ||
| 1231 | FMResultSet *clientIdSet = [_db executeQuery:@"SELECT client_id FROM requestVariables WHERE id = 1;"]; | 1280 | FMResultSet *clientIdSet = [_db executeQuery:@"SELECT client_id FROM requestVariables WHERE id = 1;"]; |
| 1232 | // NSString *clientId = [NSString alloc]; | 1281 | // NSString *clientId = [NSString alloc]; |
| 1233 | // NSString *clientId = @""; | 1282 | // NSString *clientId = @""; |
| 1234 | while ([clientIdSet next]) { | 1283 | while ([clientIdSet next]) { |
| 1235 | clientId = [[clientIdSet resultDictionary][@"client_id"] stringValue]; | 1284 | clientId = [[clientIdSet resultDictionary][@"client_id"] stringValue]; |
| 1236 | } | 1285 | } |
| 1286 | + } | ||
| 1287 | + @synchronized (_DatabaseLock) { | ||
| 1237 | FMResultSet *clientSecretSet = [_db executeQuery:@"SELECT client_secret FROM requestVariables WHERE id = 1;"]; | 1288 | FMResultSet *clientSecretSet = [_db executeQuery:@"SELECT client_secret FROM requestVariables WHERE id = 1;"]; |
| 1238 | // NSString *clientSecret = [NSString alloc]; | 1289 | // NSString *clientSecret = [NSString alloc]; |
| 1239 | // NSString *clientSecret = @""; | 1290 | // NSString *clientSecret = @""; |
| ... | @@ -1241,6 +1292,7 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1241,6 +1292,7 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1241 | clientSecret = [[clientSecretSet resultDictionary][@"client_secret"] stringValue]; | 1292 | clientSecret = [[clientSecretSet resultDictionary][@"client_secret"] stringValue]; |
| 1242 | } | 1293 | } |
| 1243 | } | 1294 | } |
| 1295 | + } | ||
| 1244 | @catch (NSException *exception) { | 1296 | @catch (NSException *exception) { |
| 1245 | NSLog(@"SELECT Token error: %@", exception.reason); | 1297 | NSLog(@"SELECT Token error: %@", exception.reason); |
| 1246 | if (failure) { | 1298 | if (failure) { |
| ... | @@ -1261,7 +1313,9 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1261,7 +1313,9 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1261 | // success(successResponse); | 1313 | // success(successResponse); |
| 1262 | 1314 | ||
| 1263 | @try { | 1315 | @try { |
| 1316 | + @synchronized (_DatabaseLock) { | ||
| 1264 | [_db executeUpdate:@"UPDATE requestVariables SET access_token = ?, refresh_token = ? WHERE id = 1", [contextResponse objectForKey:@"access_token"], [contextResponse objectForKey:@"refresh_token"]]; | 1317 | [_db executeUpdate:@"UPDATE requestVariables SET access_token = ?, refresh_token = ? WHERE id = 1", [contextResponse objectForKey:@"access_token"], [contextResponse objectForKey:@"refresh_token"]]; |
| 1318 | + } | ||
| 1265 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; | 1319 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; |
| 1266 | success(successResponse); | 1320 | success(successResponse); |
| 1267 | } | 1321 | } |
| ... | @@ -1310,17 +1364,22 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1310,17 +1364,22 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1310 | NSString *clientSecret = @""; | 1364 | NSString *clientSecret = @""; |
| 1311 | 1365 | ||
| 1312 | @try { | 1366 | @try { |
| 1367 | + @synchronized (_DatabaseLock) { | ||
| 1313 | FMResultSet *refreshTokenSet = [_db executeQuery:@"SELECT refresh_token FROM requestVariables WHERE id = 1;"]; | 1368 | FMResultSet *refreshTokenSet = [_db executeQuery:@"SELECT refresh_token FROM requestVariables WHERE id = 1;"]; |
| 1314 | // NSString *refreshToken = @""; | 1369 | // NSString *refreshToken = @""; |
| 1315 | while ([refreshTokenSet next]) { | 1370 | while ([refreshTokenSet next]) { |
| 1316 | refreshToken = [[refreshTokenSet resultDictionary][@"refresh_token"] stringValue]; | 1371 | refreshToken = [[refreshTokenSet resultDictionary][@"refresh_token"] stringValue]; |
| 1317 | } | 1372 | } |
| 1373 | + } | ||
| 1374 | + @synchronized (_DatabaseLock) { | ||
| 1318 | FMResultSet *clientIdSet = [_db executeQuery:@"SELECT client_id FROM requestVariables WHERE id = 1;"]; | 1375 | FMResultSet *clientIdSet = [_db executeQuery:@"SELECT client_id FROM requestVariables WHERE id = 1;"]; |
| 1319 | // NSString *clientId = [NSString alloc]; | 1376 | // NSString *clientId = [NSString alloc]; |
| 1320 | // NSString *clientId = @""; | 1377 | // NSString *clientId = @""; |
| 1321 | while ([clientIdSet next]) { | 1378 | while ([clientIdSet next]) { |
| 1322 | clientId = [[clientIdSet resultDictionary][@"client_id"] stringValue]; | 1379 | clientId = [[clientIdSet resultDictionary][@"client_id"] stringValue]; |
| 1323 | } | 1380 | } |
| 1381 | + } | ||
| 1382 | + @synchronized (_DatabaseLock) { | ||
| 1324 | FMResultSet *clientSecretSet = [_db executeQuery:@"SELECT client_secret FROM requestVariables WHERE id = 1;"]; | 1383 | FMResultSet *clientSecretSet = [_db executeQuery:@"SELECT client_secret FROM requestVariables WHERE id = 1;"]; |
| 1325 | // NSString *clientSecret = [NSString alloc]; | 1384 | // NSString *clientSecret = [NSString alloc]; |
| 1326 | // NSString *clientSecret = @""; | 1385 | // NSString *clientSecret = @""; |
| ... | @@ -1328,6 +1387,7 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1328,6 +1387,7 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1328 | clientSecret = [[clientSecretSet resultDictionary][@"client_secret"] stringValue]; | 1387 | clientSecret = [[clientSecretSet resultDictionary][@"client_secret"] stringValue]; |
| 1329 | } | 1388 | } |
| 1330 | } | 1389 | } |
| 1390 | + } | ||
| 1331 | @catch (NSException *exception) { | 1391 | @catch (NSException *exception) { |
| 1332 | NSLog(@"SELECT Token error: %@", exception.reason); | 1392 | NSLog(@"SELECT Token error: %@", exception.reason); |
| 1333 | if (failure) { | 1393 | if (failure) { |
| ... | @@ -1348,7 +1408,9 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1348,7 +1408,9 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1348 | // success(successResponse); | 1408 | // success(successResponse); |
| 1349 | 1409 | ||
| 1350 | @try { | 1410 | @try { |
| 1411 | + @synchronized (_DatabaseLock) { | ||
| 1351 | [_db executeUpdate:@"UPDATE requestVariables SET access_token = ?, refresh_token = ? WHERE id = 1", [contextResponse objectForKey:@"access_token"], [contextResponse objectForKey:@"refresh_token"]]; | 1412 | [_db executeUpdate:@"UPDATE requestVariables SET access_token = ?, refresh_token = ? WHERE id = 1", [contextResponse objectForKey:@"access_token"], [contextResponse objectForKey:@"refresh_token"]]; |
| 1413 | + } | ||
| 1352 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; | 1414 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; |
| 1353 | success(successResponse); | 1415 | success(successResponse); |
| 1354 | } | 1416 | } |
| ... | @@ -1376,8 +1438,10 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1376,8 +1438,10 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1376 | // } failureBlock:^(NSError *error) { | 1438 | // } failureBlock:^(NSError *error) { |
| 1377 | if (failure) { | 1439 | if (failure) { |
| 1378 | if ([_db tableExists:@"requestVariables"] == YES) { | 1440 | if ([_db tableExists:@"requestVariables"] == YES) { |
| 1441 | + @synchronized (_DatabaseLock) { | ||
| 1379 | [_db executeUpdate:@"DROP TABLE requestVariables"]; | 1442 | [_db executeUpdate:@"DROP TABLE requestVariables"]; |
| 1380 | } | 1443 | } |
| 1444 | + } | ||
| 1381 | failure(error); | 1445 | failure(error); |
| 1382 | } | 1446 | } |
| 1383 | NSLog(@"Error at token %@", error ); | 1447 | NSLog(@"Error at token %@", error ); |
| ... | @@ -1997,11 +2061,17 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -1997,11 +2061,17 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 1997 | accessToken = [tokens objectForKey:@"access_token"]; | 2061 | accessToken = [tokens objectForKey:@"access_token"]; |
| 1998 | NSString* clientSecret = [NSString alloc]; | 2062 | NSString* clientSecret = [NSString alloc]; |
| 1999 | clientSecret = [tokens objectForKey:@"client_secret"]; | 2063 | clientSecret = [tokens objectForKey:@"client_secret"]; |
| 2064 | + @synchronized (_DatabaseLock) { | ||
| 2000 | [_db executeUpdate:@"DROP TABLE requestVariables"]; | 2065 | [_db executeUpdate:@"DROP TABLE requestVariables"]; |
| 2066 | + } | ||
| 2067 | + @synchronized (_DatabaseLock) { | ||
| 2001 | [_db executeUpdate:@"CREATE TABLE requestVariables (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, client_id INTEGER, client_secret VARCHAR(255), access_token VARCHAR(255), refresh_token VARCHAR(255))"]; | 2068 | [_db executeUpdate:@"CREATE TABLE requestVariables (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, client_id INTEGER, client_secret VARCHAR(255), access_token VARCHAR(255), refresh_token VARCHAR(255))"]; |
| 2002 | WL_FMDBLogError | 2069 | WL_FMDBLogError |
| 2070 | + } | ||
| 2003 | 2071 | ||
| 2072 | + @synchronized (_DatabaseLock) { | ||
| 2004 | [_db executeUpdate:@"INSERT INTO requestVariables (id, client_id, client_secret, access_token, refresh_token) VALUES (1, ?, ?, ?, ?)", clientId, clientSecret, accessToken, refreshToken]; | 2073 | [_db executeUpdate:@"INSERT INTO requestVariables (id, client_id, client_secret, access_token, refresh_token) VALUES (1, ?, ?, ?, ?)", clientId, clientSecret, accessToken, refreshToken]; |
| 2074 | + } | ||
| 2005 | 2075 | ||
| 2006 | NSNumber* status = [NSNumber alloc]; | 2076 | NSNumber* status = [NSNumber alloc]; |
| 2007 | status = [contextResponse objectForKey:@"result"]; | 2077 | status = [contextResponse objectForKey:@"result"]; |
| ... | @@ -2038,11 +2108,17 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -2038,11 +2108,17 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
| 2038 | accessToken = [tokens objectForKey:@"access_token"]; | 2108 | accessToken = [tokens objectForKey:@"access_token"]; |
| 2039 | NSString* clientSecret = [NSString alloc]; | 2109 | NSString* clientSecret = [NSString alloc]; |
| 2040 | clientSecret = [tokens objectForKey:@"client_secret"]; | 2110 | clientSecret = [tokens objectForKey:@"client_secret"]; |
| 2111 | + @synchronized (_DatabaseLock) { | ||
| 2041 | [_db executeUpdate:@"DROP TABLE requestVariables"]; | 2112 | [_db executeUpdate:@"DROP TABLE requestVariables"]; |
| 2113 | + } | ||
| 2114 | + @synchronized (_DatabaseLock) { | ||
| 2042 | [_db executeUpdate:@"CREATE TABLE requestVariables (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, client_id INTEGER, client_secret VARCHAR(255), access_token VARCHAR(255), refresh_token VARCHAR(255))"]; | 2115 | [_db executeUpdate:@"CREATE TABLE requestVariables (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, client_id INTEGER, client_secret VARCHAR(255), access_token VARCHAR(255), refresh_token VARCHAR(255))"]; |
| 2043 | WL_FMDBLogError | 2116 | WL_FMDBLogError |
| 2117 | + } | ||
| 2044 | 2118 | ||
| 2119 | + @synchronized (_DatabaseLock) { | ||
| 2045 | [_db executeUpdate:@"INSERT INTO requestVariables (id, client_id, client_secret, access_token, refresh_token) VALUES (1, ?, ?, ?, ?)", clientId, clientSecret, accessToken, refreshToken]; | 2120 | [_db executeUpdate:@"INSERT INTO requestVariables (id, client_id, client_secret, access_token, refresh_token) VALUES (1, ?, ?, ?, ?)", clientId, clientSecret, accessToken, refreshToken]; |
| 2121 | + } | ||
| 2046 | 2122 | ||
| 2047 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; | 2123 | NSDictionary *successResponse = @{@"result": @"success", @"status":@1}; |
| 2048 | if (success) { | 2124 | if (success) { |
| ... | @@ -3654,7 +3730,9 @@ return appIsRegisteredWithWarply; | ... | @@ -3654,7 +3730,9 @@ return appIsRegisteredWithWarply; |
| 3654 | - (void)addEvent:(WLEvent *)event priority:(BOOL)priority | 3730 | - (void)addEvent:(WLEvent *)event priority:(BOOL)priority |
| 3655 | { | 3731 | { |
| 3656 | NSData *jsonData = [NSJSONSerialization dataWithJSONObject:event.data options:0 error:NULL]; | 3732 | NSData *jsonData = [NSJSONSerialization dataWithJSONObject:event.data options:0 error:NULL]; |
| 3733 | + @synchronized (_DatabaseLock) { | ||
| 3657 | [_db executeUpdate:@"INSERT INTO events (_id, type, time, data, priority) VALUES (NULL, ?, ?, ?, ?)", [event getType], event.time, jsonData, [NSNumber numberWithBool:priority]]; | 3734 | [_db executeUpdate:@"INSERT INTO events (_id, type, time, data, priority) VALUES (NULL, ?, ?, ?, ?)", [event getType], event.time, jsonData, [NSNumber numberWithBool:priority]]; |
| 3735 | + } | ||
| 3658 | [self sendEventsIfNeeded]; | 3736 | [self sendEventsIfNeeded]; |
| 3659 | } | 3737 | } |
| 3660 | 3738 | ||
| ... | @@ -3710,7 +3788,9 @@ return appIsRegisteredWithWarply; | ... | @@ -3710,7 +3788,9 @@ return appIsRegisteredWithWarply; |
| 3710 | [self sendContext2:jsonAnalytics path:@"analytics" successBlock:^(NSDictionary *contextResponse) { | 3788 | [self sendContext2:jsonAnalytics path:@"analytics" successBlock:^(NSDictionary *contextResponse) { |
| 3711 | if(deleteSql){ | 3789 | if(deleteSql){ |
| 3712 | NSString *queryString = [NSString stringWithFormat:@"DELETE FROM events WHERE _id IN (%@)", commaSeperatedIds]; | 3790 | NSString *queryString = [NSString stringWithFormat:@"DELETE FROM events WHERE _id IN (%@)", commaSeperatedIds]; |
| 3791 | + @synchronized (_DatabaseLock) { | ||
| 3713 | [_db executeUpdate:queryString]; | 3792 | [_db executeUpdate:queryString]; |
| 3793 | + } | ||
| 3714 | 3794 | ||
| 3715 | if ([_db hadError]) { | 3795 | if ([_db hadError]) { |
| 3716 | NSLog(@"Err %d: %@", [_db lastErrorCode], [_db lastErrorMessage]); | 3796 | NSLog(@"Err %d: %@", [_db lastErrorCode], [_db lastErrorMessage]); |
| ... | @@ -3739,7 +3819,9 @@ return appIsRegisteredWithWarply; | ... | @@ -3739,7 +3819,9 @@ return appIsRegisteredWithWarply; |
| 3739 | [self sendContext2:jsonDevice path:@"deviceInfo" successBlock:^(NSDictionary *contextResponse) { | 3819 | [self sendContext2:jsonDevice path:@"deviceInfo" successBlock:^(NSDictionary *contextResponse) { |
| 3740 | if(deleteSql){ | 3820 | if(deleteSql){ |
| 3741 | NSString *queryString = [NSString stringWithFormat:@"DELETE FROM events WHERE _id IN (%@)", commaSeperatedIds]; | 3821 | NSString *queryString = [NSString stringWithFormat:@"DELETE FROM events WHERE _id IN (%@)", commaSeperatedIds]; |
| 3822 | + @synchronized (_DatabaseLock) { | ||
| 3742 | [_db executeUpdate:queryString]; | 3823 | [_db executeUpdate:queryString]; |
| 3824 | + } | ||
| 3743 | 3825 | ||
| 3744 | if ([_db hadError]) { | 3826 | if ([_db hadError]) { |
| 3745 | NSLog(@"Err %d: %@", [_db lastErrorCode], [_db lastErrorMessage]); | 3827 | NSLog(@"Err %d: %@", [_db lastErrorCode], [_db lastErrorMessage]); |
| ... | @@ -3768,7 +3850,9 @@ return appIsRegisteredWithWarply; | ... | @@ -3768,7 +3850,9 @@ return appIsRegisteredWithWarply; |
| 3768 | [self sendContext2:jsonOther path:nil successBlock:^(NSDictionary *contextResponse) { | 3850 | [self sendContext2:jsonOther path:nil successBlock:^(NSDictionary *contextResponse) { |
| 3769 | if(deleteSql){ | 3851 | if(deleteSql){ |
| 3770 | NSString *queryString = [NSString stringWithFormat:@"DELETE FROM events WHERE _id IN (%@)", commaSeperatedIds]; | 3852 | NSString *queryString = [NSString stringWithFormat:@"DELETE FROM events WHERE _id IN (%@)", commaSeperatedIds]; |
| 3853 | + @synchronized (_DatabaseLock) { | ||
| 3771 | [_db executeUpdate:queryString]; | 3854 | [_db executeUpdate:queryString]; |
| 3855 | + } | ||
| 3772 | 3856 | ||
| 3773 | if ([_db hadError]) { | 3857 | if ([_db hadError]) { |
| 3774 | NSLog(@"Err %d: %@", [_db lastErrorCode], [_db lastErrorMessage]); | 3858 | NSLog(@"Err %d: %@", [_db lastErrorCode], [_db lastErrorMessage]); |
| ... | @@ -3816,6 +3900,7 @@ return appIsRegisteredWithWarply; | ... | @@ -3816,6 +3900,7 @@ return appIsRegisteredWithWarply; |
| 3816 | -(BOOL)checkIfUserLoactionIsInPois:(CLLocation *) location { | 3900 | -(BOOL)checkIfUserLoactionIsInPois:(CLLocation *) location { |
| 3817 | // NSString *locationQuery = [NSString stringWithFormat:@"SELECT * FROM (SELECT distance(lat, lon, %@, %@) as distance, * FROM pois) WHERE distance < pois.radius", [NSNumber numberWithDouble:location.coordinate.latitude], [NSNumber numberWithDouble:location.coordinate.longitude]]; | 3901 | // NSString *locationQuery = [NSString stringWithFormat:@"SELECT * FROM (SELECT distance(lat, lon, %@, %@) as distance, * FROM pois) WHERE distance < pois.radius", [NSNumber numberWithDouble:location.coordinate.latitude], [NSNumber numberWithDouble:location.coordinate.longitude]]; |
| 3818 | 3902 | ||
| 3903 | + @synchronized (_DatabaseLock) { | ||
| 3819 | FMResultSet *result = [_db executeQuery:@"SELECT * FROM pois"]; | 3904 | FMResultSet *result = [_db executeQuery:@"SELECT * FROM pois"]; |
| 3820 | 3905 | ||
| 3821 | if (result == nil) return false; | 3906 | if (result == nil) return false; |
| ... | @@ -3831,6 +3916,7 @@ return appIsRegisteredWithWarply; | ... | @@ -3831,6 +3916,7 @@ return appIsRegisteredWithWarply; |
| 3831 | return true; | 3916 | return true; |
| 3832 | } | 3917 | } |
| 3833 | } | 3918 | } |
| 3919 | + } | ||
| 3834 | 3920 | ||
| 3835 | return false; | 3921 | return false; |
| 3836 | } | 3922 | } |
| ... | @@ -3852,8 +3938,10 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) | ... | @@ -3852,8 +3938,10 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) |
| 3852 | // _db remove | 3938 | // _db remove |
| 3853 | for (NSDictionary *poisDict in [contextResponse valueForKeyPath:@"MAPP_GEOFENCING"]) { | 3939 | for (NSDictionary *poisDict in [contextResponse valueForKeyPath:@"MAPP_GEOFENCING"]) { |
| 3854 | NSString *query = [NSString stringWithFormat: @"INSERT INTO pois (id, lat, lon, radius) VALUES (%@, %@, %@, %@)", [poisDict valueForKeyPath:@"id"], [poisDict valueForKeyPath:@"lat"], [poisDict valueForKeyPath:@"long"], [poisDict valueForKeyPath:@"radius"]]; | 3940 | NSString *query = [NSString stringWithFormat: @"INSERT INTO pois (id, lat, lon, radius) VALUES (%@, %@, %@, %@)", [poisDict valueForKeyPath:@"id"], [poisDict valueForKeyPath:@"lat"], [poisDict valueForKeyPath:@"long"], [poisDict valueForKeyPath:@"radius"]]; |
| 3941 | + @synchronized (_DatabaseLock) { | ||
| 3855 | [_db executeUpdate: query]; | 3942 | [_db executeUpdate: query]; |
| 3856 | } | 3943 | } |
| 3944 | + } | ||
| 3857 | 3945 | ||
| 3858 | // [[self locationManager] sendLocation:[self locationManager].locationManager.location]; | 3946 | // [[self locationManager] sendLocation:[self locationManager].locationManager.location]; |
| 3859 | } | 3947 | } |
| ... | @@ -4696,11 +4784,13 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) | ... | @@ -4696,11 +4784,13 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) |
| 4696 | // accessToken = [[accessTokenSet resultDictionary][@"access_token"] stringValue]; | 4784 | // accessToken = [[accessTokenSet resultDictionary][@"access_token"] stringValue]; |
| 4697 | // } | 4785 | // } |
| 4698 | @try { | 4786 | @try { |
| 4787 | + @synchronized (_DatabaseLock) { | ||
| 4699 | FMResultSet *accessTokenSet = [_db executeQuery:@"SELECT access_token FROM requestVariables WHERE id = 1;"]; | 4788 | FMResultSet *accessTokenSet = [_db executeQuery:@"SELECT access_token FROM requestVariables WHERE id = 1;"]; |
| 4700 | while ([accessTokenSet next]) { | 4789 | while ([accessTokenSet next]) { |
| 4701 | accessToken = [[accessTokenSet resultDictionary][@"access_token"] stringValue]; | 4790 | accessToken = [[accessTokenSet resultDictionary][@"access_token"] stringValue]; |
| 4702 | } | 4791 | } |
| 4703 | } | 4792 | } |
| 4793 | + } | ||
| 4704 | @catch (NSException *exception) { | 4794 | @catch (NSException *exception) { |
| 4705 | NSLog(@"SELECT accessToken error: %@", exception.reason); | 4795 | NSLog(@"SELECT accessToken error: %@", exception.reason); |
| 4706 | if (failureBlock) { | 4796 | if (failureBlock) { |
| ... | @@ -4851,11 +4941,13 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) | ... | @@ -4851,11 +4941,13 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) |
| 4851 | NSString *accessToken = @""; | 4941 | NSString *accessToken = @""; |
| 4852 | if ([_db tableExists:@"requestVariables"] == YES) { | 4942 | if ([_db tableExists:@"requestVariables"] == YES) { |
| 4853 | @try { | 4943 | @try { |
| 4944 | + @synchronized (_DatabaseLock) { | ||
| 4854 | FMResultSet *accessTokenSet = [_db executeQuery:@"SELECT access_token FROM requestVariables WHERE id = 1;"]; | 4945 | FMResultSet *accessTokenSet = [_db executeQuery:@"SELECT access_token FROM requestVariables WHERE id = 1;"]; |
| 4855 | while ([accessTokenSet next]) { | 4946 | while ([accessTokenSet next]) { |
| 4856 | accessToken = [[accessTokenSet resultDictionary][@"access_token"] stringValue]; | 4947 | accessToken = [[accessTokenSet resultDictionary][@"access_token"] stringValue]; |
| 4857 | } | 4948 | } |
| 4858 | } | 4949 | } |
| 4950 | + } | ||
| 4859 | @catch (NSException *exception) { | 4951 | @catch (NSException *exception) { |
| 4860 | NSLog(@"SELECT accessToken error: %@", exception.reason); | 4952 | NSLog(@"SELECT accessToken error: %@", exception.reason); |
| 4861 | if (failureBlock) { | 4953 | if (failureBlock) { |
| ... | @@ -6461,23 +6553,32 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) | ... | @@ -6461,23 +6553,32 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) |
| 6461 | { | 6553 | { |
| 6462 | if ([_db tableExists:@"events"] == YES && [_db tableExists:@"netstats"] == YES) { | 6554 | if ([_db tableExists:@"events"] == YES && [_db tableExists:@"netstats"] == YES) { |
| 6463 | if ([_db columnExists:@"priority" inTableWithName:@"events"] == NO) { | 6555 | if ([_db columnExists:@"priority" inTableWithName:@"events"] == NO) { |
| 6556 | + | ||
| 6557 | + @synchronized (_DatabaseLock) { | ||
| 6464 | [_db executeUpdate:@"ALTER TABLE events ADD COLUMN priority INTEGER"]; | 6558 | [_db executeUpdate:@"ALTER TABLE events ADD COLUMN priority INTEGER"]; |
| 6465 | WL_FMDBLogError | 6559 | WL_FMDBLogError |
| 6466 | } | 6560 | } |
| 6561 | + } | ||
| 6467 | 6562 | ||
| 6563 | + @synchronized (_DatabaseLock) { | ||
| 6468 | [_db executeUpdate:@"VACUUM"]; | 6564 | [_db executeUpdate:@"VACUUM"]; |
| 6469 | WL_FMDBLogError | 6565 | WL_FMDBLogError |
| 6566 | + } | ||
| 6470 | 6567 | ||
| 6471 | return; | 6568 | return; |
| 6472 | } | 6569 | } |
| 6473 | 6570 | ||
| 6474 | if ([_db tableExists:@"events"] == NO) { | 6571 | if ([_db tableExists:@"events"] == NO) { |
| 6572 | + @synchronized (_DatabaseLock) { | ||
| 6475 | [_db executeUpdate:@"CREATE TABLE events (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, type VARCHAR(255), time VARCHAR(255), data BLOB, priority INTEGER)"]; | 6573 | [_db executeUpdate:@"CREATE TABLE events (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, type VARCHAR(255), time VARCHAR(255), data BLOB, priority INTEGER)"]; |
| 6476 | WL_FMDBLogError | 6574 | WL_FMDBLogError |
| 6575 | + } | ||
| 6477 | } else if ([_db columnExists:@"priority" inTableWithName:@"events"] == NO) { | 6576 | } else if ([_db columnExists:@"priority" inTableWithName:@"events"] == NO) { |
| 6577 | + @synchronized (_DatabaseLock) { | ||
| 6478 | [_db executeUpdate:@"ALTER TABLE events ADD COLUMN priority INTEGER"]; | 6578 | [_db executeUpdate:@"ALTER TABLE events ADD COLUMN priority INTEGER"]; |
| 6479 | WL_FMDBLogError | 6579 | WL_FMDBLogError |
| 6480 | } | 6580 | } |
| 6581 | + } | ||
| 6481 | 6582 | ||
| 6482 | // if ([_db tableExists:@"netstats"] == NO) { | 6583 | // if ([_db tableExists:@"netstats"] == NO) { |
| 6483 | // [_db executeUpdate:@"CREATE TABLE netstats (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, wifi INTEGER, wwan INTEGER, overall INTEGER, wifistart_timestamp INTEGER, wifiend_timestamp INTEGER, wifi_totaltime INTEGER, wifi_dirty INTEGER, wwanstart_timestamp INTEGER, wwanend_timestamp INTEGER, wwan_totaltime INTEGER, wwan_dirty INTEGER)"]; | 6584 | // [_db executeUpdate:@"CREATE TABLE netstats (_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, wifi INTEGER, wwan INTEGER, overall INTEGER, wifistart_timestamp INTEGER, wifiend_timestamp INTEGER, wifi_totaltime INTEGER, wifi_dirty INTEGER, wwanstart_timestamp INTEGER, wwanend_timestamp INTEGER, wwan_totaltime INTEGER, wwan_dirty INTEGER)"]; |
| ... | @@ -6486,8 +6587,10 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) | ... | @@ -6486,8 +6587,10 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) |
| 6486 | // } | 6587 | // } |
| 6487 | 6588 | ||
| 6488 | if ([_db tableExists:@"pois"] == NO) { | 6589 | if ([_db tableExists:@"pois"] == NO) { |
| 6590 | + @synchronized (_DatabaseLock) { | ||
| 6489 | [_db executeUpdate:@"CREATE TABLE pois (id INTEGER PRIMARY KEY NOT NULL UNIQUE, lat NUMERIC, lon NUMERIC, radius NUMERIC)"]; | 6591 | [_db executeUpdate:@"CREATE TABLE pois (id INTEGER PRIMARY KEY NOT NULL UNIQUE, lat NUMERIC, lon NUMERIC, radius NUMERIC)"]; |
| 6490 | } | 6592 | } |
| 6593 | + } | ||
| 6491 | 6594 | ||
| 6492 | [_db makeFunctionNamed:@"DISTANCE" maximumArguments:4 withBlock:^(sqlite3_context *context, int argc, sqlite3_value **argv) { | 6595 | [_db makeFunctionNamed:@"DISTANCE" maximumArguments:4 withBlock:^(sqlite3_context *context, int argc, sqlite3_value **argv) { |
| 6493 | distanceFunc(context, argc, argv); | 6596 | distanceFunc(context, argc, argv); |
| ... | @@ -6498,10 +6601,14 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) | ... | @@ -6498,10 +6601,14 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) |
| 6498 | * both behaviour and performance. | 6601 | * both behaviour and performance. |
| 6499 | * http://sqlite.org/pragma.html | 6602 | * http://sqlite.org/pragma.html |
| 6500 | */ | 6603 | */ |
| 6604 | + @synchronized (_DatabaseLock) { | ||
| 6501 | [_db executeUpdate:@"PRAGMA auto_vacuum = FULL"]; | 6605 | [_db executeUpdate:@"PRAGMA auto_vacuum = FULL"]; |
| 6502 | WL_FMDBLogError | 6606 | WL_FMDBLogError |
| 6607 | + } | ||
| 6608 | + @synchronized (_DatabaseLock) { | ||
| 6503 | [_db executeUpdate:@"PRAGMA synchronous = NORMAL"]; | 6609 | [_db executeUpdate:@"PRAGMA synchronous = NORMAL"]; |
| 6504 | WL_FMDBLogError | 6610 | WL_FMDBLogError |
| 6611 | + } | ||
| 6505 | } | 6612 | } |
| 6506 | 6613 | ||
| 6507 | #pragma mark SQLite functions | 6614 | #pragma mark SQLite functions |
| ... | @@ -6539,12 +6646,15 @@ static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **arg | ... | @@ -6539,12 +6646,15 @@ static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **arg |
| 6539 | /////////////////////////////////////////////////////////////////////////////// | 6646 | /////////////////////////////////////////////////////////////////////////////// |
| 6540 | - (BOOL)shouldSendEvents | 6647 | - (BOOL)shouldSendEvents |
| 6541 | { | 6648 | { |
| 6649 | + @synchronized (_DatabaseLock) { | ||
| 6542 | FMResultSet *priorityEvents = [_db executeQuery:@"SELECT COUNT(*) FROM events WHERE priority = 1;"]; | 6650 | FMResultSet *priorityEvents = [_db executeQuery:@"SELECT COUNT(*) FROM events WHERE priority = 1;"]; |
| 6543 | while ([priorityEvents next]) { | 6651 | while ([priorityEvents next]) { |
| 6544 | if ([priorityEvents intForColumnIndex:0] > 0) { | 6652 | if ([priorityEvents intForColumnIndex:0] > 0) { |
| 6545 | return YES; | 6653 | return YES; |
| 6546 | } | 6654 | } |
| 6547 | } | 6655 | } |
| 6656 | + } | ||
| 6657 | + @synchronized (_DatabaseLock) { | ||
| 6548 | FMResultSet *rs = [_db executeQuery:@"SELECT COUNT(*) FROM events;"]; | 6658 | FMResultSet *rs = [_db executeQuery:@"SELECT COUNT(*) FROM events;"]; |
| 6549 | 6659 | ||
| 6550 | while ([rs next]) { | 6660 | while ([rs next]) { |
| ... | @@ -6553,6 +6663,7 @@ static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **arg | ... | @@ -6553,6 +6663,7 @@ static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **arg |
| 6553 | return YES; | 6663 | return YES; |
| 6554 | } | 6664 | } |
| 6555 | } | 6665 | } |
| 6666 | + } | ||
| 6556 | return NO; | 6667 | return NO; |
| 6557 | } | 6668 | } |
| 6558 | 6669 | ||
| ... | @@ -6560,6 +6671,7 @@ static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **arg | ... | @@ -6560,6 +6671,7 @@ static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **arg |
| 6560 | - (NSMutableArray *)topEventDictsInDB | 6671 | - (NSMutableArray *)topEventDictsInDB |
| 6561 | { | 6672 | { |
| 6562 | NSMutableArray *events=[NSMutableArray array]; | 6673 | NSMutableArray *events=[NSMutableArray array]; |
| 6674 | + @synchronized (_DatabaseLock) { | ||
| 6563 | FMResultSet *rs = [_db executeQueryWithFormat:@"SELECT * FROM events ORDER BY _id LIMIT %d", kEventsPerBulk]; | 6675 | FMResultSet *rs = [_db executeQueryWithFormat:@"SELECT * FROM events ORDER BY _id LIMIT %d", kEventsPerBulk]; |
| 6564 | while ([rs next]) { | 6676 | while ([rs next]) { |
| 6565 | NSData *data = [rs dataForColumn:@"data"]; | 6677 | NSData *data = [rs dataForColumn:@"data"]; |
| ... | @@ -6568,6 +6680,7 @@ static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **arg | ... | @@ -6568,6 +6680,7 @@ static void distanceFunc(sqlite3_context *context, int argc, sqlite3_value **arg |
| 6568 | [mutableEventDict setObject:[rs objectForColumnName:@"_id"] forKey:@"_id"]; | 6680 | [mutableEventDict setObject:[rs objectForColumnName:@"_id"] forKey:@"_id"]; |
| 6569 | [events addObject:mutableEventDict]; | 6681 | [events addObject:mutableEventDict]; |
| 6570 | } | 6682 | } |
| 6683 | + } | ||
| 6571 | return events; | 6684 | return events; |
| 6572 | } | 6685 | } |
| 6573 | 6686 | ... | ... |
-
Please register or login to post a comment