From 5e7b6ed60e9f678f28ee5abfa365d9c58247425d Mon Sep 17 00:00:00 2001 From: Maarten Billemont Date: Sat, 25 Aug 2012 12:38:29 +0200 Subject: [PATCH] Sharing on Facebook, Twitter and Google+ [FIXED] Font of navbar. [FIXED] A few compile fixes. [IMPROVED] Made properties nonatomic. [ADDED] Support for facebook, twitter and google+ sharing. --- .gitmodules | 3 + External/Pearl | 2 +- External/facebook-ios-sdk | 1 + External/google-plus-ios-sdk/Changelog | 3 + .../OpenSource/GTL/GTLBase64.h | 25 + .../OpenSource/GTL/GTLBase64.m | 139 + .../OpenSource/GTL/GTLBatchQuery.h | 49 + .../OpenSource/GTL/GTLBatchQuery.m | 133 + .../OpenSource/GTL/GTLBatchResult.h | 58 + .../OpenSource/GTL/GTLBatchResult.m | 92 + .../OpenSource/GTL/GTLDateTime.h | 56 + .../OpenSource/GTL/GTLDateTime.m | 422 +++ .../OpenSource/GTL/GTLDefines.h | 128 + .../OpenSource/GTL/GTLErrorObject.h | 45 + .../OpenSource/GTL/GTLErrorObject.m | 78 + .../OpenSource/GTL/GTLFramework.h | 35 + .../OpenSource/GTL/GTLFramework.m | 40 + .../OpenSource/GTL/GTLJSONParser.h | 41 + .../OpenSource/GTL/GTLJSONParser.m | 150 ++ .../OpenSource/GTL/GTLObject.h | 180 ++ .../OpenSource/GTL/GTLObject.m | 691 +++++ .../OpenSource/GTL/GTLPlus/GTLPlus.h | 36 + .../OpenSource/GTL/GTLPlus/GTLPlusConstants.h | 46 + .../OpenSource/GTL/GTLPlus/GTLPlusConstants.m | 37 + .../OpenSource/GTL/GTLPlus/GTLPlusItemScope.h | 225 ++ .../OpenSource/GTL/GTLPlus/GTLPlusItemScope.m | 78 + .../OpenSource/GTL/GTLPlus/GTLPlusMoment.h | 79 + .../OpenSource/GTL/GTLPlus/GTLPlusMoment.m | 58 + .../OpenSource/GTL/GTLPlus/GTLPlusPerson.h | 285 ++ .../OpenSource/GTL/GTLPlus/GTLPlusPerson.m | 145 + .../OpenSource/GTL/GTLPlus/GTLQueryPlus.h | 90 + .../OpenSource/GTL/GTLPlus/GTLQueryPlus.m | 72 + .../OpenSource/GTL/GTLPlus/GTLServicePlus.h | 61 + .../OpenSource/GTL/GTLPlus/GTLServicePlus.m | 63 + .../OpenSource/GTL/GTLQuery.h | 132 + .../OpenSource/GTL/GTLQuery.m | 267 ++ .../OpenSource/GTL/GTLRuntimeCommon.h | 57 + .../OpenSource/GTL/GTLRuntimeCommon.m | 1135 ++++++++ .../OpenSource/GTL/GTLService.h | 592 ++++ .../OpenSource/GTL/GTLService.m | 2387 +++++++++++++++++ .../OpenSource/GTL/GTLTargetNamespace.h | 58 + .../OpenSource/GTL/GTLUploadParameters.h | 57 + .../OpenSource/GTL/GTLUploadParameters.m | 107 + .../OpenSource/GTL/GTLUtilities.h | 105 + .../OpenSource/GTL/GTLUtilities.m | 376 +++ .../OpenSource/GTMDefines.h | 439 +++ .../OpenSource/GTMGarbageCollection.h | 72 + .../OpenSource/GTMHTTPFetchHistory.h | 187 ++ .../OpenSource/GTMHTTPFetchHistory.m | 590 ++++ .../OpenSource/GTMHTTPFetcher.h | 704 +++++ .../OpenSource/GTMHTTPFetcher.m | 1741 ++++++++++++ .../OpenSource/GTMHTTPFetcherLogging.h | 85 + .../OpenSource/GTMHTTPFetcherLogging.m | 1042 +++++++ .../OpenSource/GTMHTTPFetcherService.h | 118 + .../OpenSource/GTMHTTPFetcherService.m | 441 +++ .../OpenSource/GTMLogger.h | 504 ++++ .../OpenSource/GTMLogger.m | 598 +++++ .../OpenSource/GTMMethodCheck.h | 88 + .../OpenSource/GTMMethodCheck.m | 161 ++ .../OpenSource/GTMNSDictionary+URLArguments.h | 36 + .../OpenSource/GTMNSDictionary+URLArguments.m | 71 + .../OpenSource/GTMNSString+URLArguments.h | 41 + .../OpenSource/GTMNSString+URLArguments.m | 45 + .../OpenSource/GTMOAuth2Authentication.h | 325 +++ .../OpenSource/GTMOAuth2Authentication.m | 1167 ++++++++ .../OpenSource/GTMOAuth2SignIn.h | 174 ++ .../OpenSource/GTMOAuth2SignIn.m | 814 ++++++ .../OpenSource/GTMOAuth2ViewControllerTouch.h | 344 +++ .../OpenSource/GTMOAuth2ViewControllerTouch.m | 970 +++++++ .../OpenSource/GTMOAuth2ViewTouch.xib | 456 ++++ .../OpenSource/GTMObjC2Runtime.h | 113 + .../OpenSource/GTMObjC2Runtime.m | 163 ++ External/google-plus-ios-sdk/README | 39 + .../Resources/google_plus_share.png | Bin 0 -> 2934 bytes .../Resources/google_plus_share@2x.png | Bin 0 -> 5531 bytes .../Resources/google_plus_share_large.png | Bin 0 -> 3747 bytes .../Resources/google_plus_share_large@2x.png | Bin 0 -> 6712 bytes .../Resources/google_plus_sign_in.png | Bin 0 -> 3803 bytes .../Resources/google_plus_sign_in@2x.png | Bin 0 -> 6812 bytes .../Resources/google_plus_sign_in_wide.png | Bin 0 -> 6080 bytes .../Resources/google_plus_sign_in_wide@2x.png | Bin 0 -> 10894 bytes .../SampleCode/GooglePlusSample-Info.plist | 74 + .../SampleCode/GooglePlusSample-Prefix.pch | 14 + .../project.pbxproj | 648 +++++ .../contents.xcworkspacedata | 7 + .../UserInterfaceState.xcuserstate | Bin 0 -> 10782 bytes .../xcschemes/GooglePlusSample.xcscheme | 84 + .../xcschemes/xcschememanagement.plist | 22 + .../SampleCode/GooglePlusSampleAppDelegate.h | 41 + .../SampleCode/GooglePlusSampleAppDelegate.m | 89 + .../GooglePlusSampleMasterViewController.h | 23 + .../GooglePlusSampleMasterViewController.m | 98 + .../GooglePlusSampleMasterViewController.xib | 251 ++ .../GooglePlusSampleMomentsViewController.h | 45 + .../GooglePlusSampleMomentsViewController.m | 334 +++ .../GooglePlusSampleMomentsViewController.xib | 462 ++++ .../GooglePlusSampleShareViewController.h | 50 + .../GooglePlusSampleShareViewController.m | 145 + .../GooglePlusSampleShareViewController.xib | 493 ++++ .../GooglePlusSampleSignInViewController.h | 40 + .../GooglePlusSampleSignInViewController.m | 110 + .../GooglePlusSampleSignInViewController.xib | 256 ++ .../SampleCode/Resources/Icon.png | Bin 0 -> 4179 bytes .../SampleCode/Resources/Icon_2x.png | Bin 0 -> 10599 bytes .../Resources/button_background.png | Bin 0 -> 6039 bytes .../SampleCode/en.lproj/InfoPlist.strings | 2 + .../google-plus-ios-sdk/SampleCode/main.m | 28 + .../google-plus-ios-sdk/lib/GooglePlusShare.h | 112 + .../lib/GooglePlusSignIn.h | 67 + .../lib/GooglePlusSignInButton.h | 52 + .../google-plus-ios-sdk/lib/libGooglePlus.a | Bin 0 -> 326432 bytes .../lib/libGooglePlusUniversal.a | Bin 0 -> 483884 bytes MasterPassword-iOS.xcodeproj/project.pbxproj | 551 ++++ MasterPassword/MPAppDelegate_Shared.m | 2 +- MasterPassword/MPAppDelegate_Store.m | 4 +- MasterPassword/iOS/MPAppDelegate.m | 37 +- MasterPassword/iOS/MPMainViewController.h | 6 +- MasterPassword/iOS/MPMainViewController.m | 5 + MasterPassword/iOS/MPUnlockViewController.h | 3 + MasterPassword/iOS/MPUnlockViewController.m | 95 +- .../iOS/MainStoryboard_iPhone.storyboard | 60 +- MasterPassword/iOS/MasterPassword-Info.plist | 27 + Resources/iTunesArtwork-Rounded-73.png | Bin 0 -> 5929 bytes Resources/iTunesArtwork-Rounded-73@2x.png | Bin 0 -> 18511 bytes Resources/iTunesArtwork-Rounded.png | Bin 558179 -> 603337 bytes Resources/social-facebook.png | Bin 0 -> 1223 bytes Resources/social-facebook@2x.png | Bin 0 -> 1414 bytes Resources/social-google+.png | Bin 0 -> 1586 bytes Resources/social-google+@2x.png | Bin 0 -> 2293 bytes Resources/social-twitter.png | Bin 0 -> 1526 bytes Resources/social-twitter@2x.png | Bin 0 -> 2122 bytes 131 files changed, 24758 insertions(+), 26 deletions(-) create mode 160000 External/facebook-ios-sdk create mode 100644 External/google-plus-ios-sdk/Changelog create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLDefines.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlus.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLService.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLService.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLTargetNamespace.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMDefines.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMGarbageCollection.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherLogging.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherLogging.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMLogger.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMLogger.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.m create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewTouch.xib create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.h create mode 100644 External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.m create mode 100644 External/google-plus-ios-sdk/README create mode 100644 External/google-plus-ios-sdk/Resources/google_plus_share.png create mode 100644 External/google-plus-ios-sdk/Resources/google_plus_share@2x.png create mode 100644 External/google-plus-ios-sdk/Resources/google_plus_share_large.png create mode 100644 External/google-plus-ios-sdk/Resources/google_plus_share_large@2x.png create mode 100644 External/google-plus-ios-sdk/Resources/google_plus_sign_in.png create mode 100644 External/google-plus-ios-sdk/Resources/google_plus_sign_in@2x.png create mode 100644 External/google-plus-ios-sdk/Resources/google_plus_sign_in_wide.png create mode 100644 External/google-plus-ios-sdk/Resources/google_plus_sign_in_wide@2x.png create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Prefix.pch create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.pbxproj create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.xcworkspace/xcuserdata/xiangtian.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/xcuserdata/xiangtian.xcuserdatad/xcschemes/GooglePlusSample.xcscheme create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/xcuserdata/xiangtian.xcuserdatad/xcschemes/xcschememanagement.plist create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleAppDelegate.h create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleAppDelegate.m create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.h create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.m create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.xib create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.h create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.m create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.xib create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.h create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.m create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.xib create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.h create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.m create mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.xib create mode 100644 External/google-plus-ios-sdk/SampleCode/Resources/Icon.png create mode 100644 External/google-plus-ios-sdk/SampleCode/Resources/Icon_2x.png create mode 100644 External/google-plus-ios-sdk/SampleCode/Resources/button_background.png create mode 100644 External/google-plus-ios-sdk/SampleCode/en.lproj/InfoPlist.strings create mode 100644 External/google-plus-ios-sdk/SampleCode/main.m create mode 100644 External/google-plus-ios-sdk/lib/GooglePlusShare.h create mode 100644 External/google-plus-ios-sdk/lib/GooglePlusSignIn.h create mode 100644 External/google-plus-ios-sdk/lib/GooglePlusSignInButton.h create mode 100644 External/google-plus-ios-sdk/lib/libGooglePlus.a create mode 100644 External/google-plus-ios-sdk/lib/libGooglePlusUniversal.a create mode 100644 Resources/iTunesArtwork-Rounded-73.png create mode 100644 Resources/iTunesArtwork-Rounded-73@2x.png create mode 100644 Resources/social-facebook.png create mode 100644 Resources/social-facebook@2x.png create mode 100644 Resources/social-google+.png create mode 100644 Resources/social-google+@2x.png create mode 100644 Resources/social-twitter.png create mode 100644 Resources/social-twitter@2x.png diff --git a/.gitmodules b/.gitmodules index 32520cec..4bee5f39 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,3 +10,6 @@ [submodule "External/FontReplacer"] path = External/FontReplacer url = git://github.com/0xced/FontReplacer.git +[submodule "External/facebook-ios-sdk"] + path = External/facebook-ios-sdk + url = https://github.com/facebook/facebook-ios-sdk diff --git a/External/Pearl b/External/Pearl index d295f7d4..19a70544 160000 --- a/External/Pearl +++ b/External/Pearl @@ -1 +1 @@ -Subproject commit d295f7d413fb2afa9fcdf70079969fd78ac8fb70 +Subproject commit 19a7054441049ea1519fe0bb72bc52d4542964cc diff --git a/External/facebook-ios-sdk b/External/facebook-ios-sdk new file mode 160000 index 00000000..68253505 --- /dev/null +++ b/External/facebook-ios-sdk @@ -0,0 +1 @@ +Subproject commit 682535050207c771706823cbf0fc31a206b12956 diff --git a/External/google-plus-ios-sdk/Changelog b/External/google-plus-ios-sdk/Changelog new file mode 100644 index 00000000..90344a99 --- /dev/null +++ b/External/google-plus-ios-sdk/Changelog @@ -0,0 +1,3 @@ +2012-06-25 -- v1.0.0 +- Google+ sign-in button, share plugin, and Google+ history integration library + with sample app. diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.h new file mode 100644 index 00000000..fd0a0518 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.h @@ -0,0 +1,25 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +NSData *GTLDecodeBase64(NSString *base64Str); +NSString *GTLEncodeBase64(NSData *data); + +// "Web-safe" encoding substitutes - and _ for + and / in the encoding table, +// per http://www.ietf.org/rfc/rfc4648.txt section 5. + +NSData *GTLDecodeWebSafeBase64(NSString *base64Str); +NSString *GTLEncodeWebSafeBase64(NSData *data); diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.m new file mode 100644 index 00000000..28938e24 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.m @@ -0,0 +1,139 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GTLBase64.h" + +// Based on Cyrus Najmabadi's elegent little encoder and decoder from +// http://www.cocoadev.com/index.pl?BaseSixtyFour + +static char gStandardEncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; +static char gWebSafeEncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; + +#pragma mark Encode + +static NSString *EncodeBase64StringCommon(NSData *data, const char *table) { + if (data == nil) return nil; + + const uint8_t* input = [data bytes]; + NSUInteger length = [data length]; + + NSUInteger bufferSize = ((length + 2) / 3) * 4; + NSMutableData* buffer = [NSMutableData dataWithLength:bufferSize]; + + uint8_t *output = [buffer mutableBytes]; + + for (NSUInteger i = 0; i < length; i += 3) { + NSUInteger value = 0; + for (NSUInteger j = i; j < (i + 3); j++) { + value <<= 8; + + if (j < length) { + value |= (0xFF & input[j]); + } + } + + NSInteger idx = (i / 3) * 4; + output[idx + 0] = table[(value >> 18) & 0x3F]; + output[idx + 1] = table[(value >> 12) & 0x3F]; + output[idx + 2] = (i + 1) < length ? table[(value >> 6) & 0x3F] : '='; + output[idx + 3] = (i + 2) < length ? table[(value >> 0) & 0x3F] : '='; + } + + NSString *result = [[[NSString alloc] initWithData:buffer + encoding:NSASCIIStringEncoding] autorelease]; + return result; +} + +NSString *GTLEncodeBase64(NSData *data) { + return EncodeBase64StringCommon(data, gStandardEncodingTable); +} + +NSString *GTLEncodeWebSafeBase64(NSData *data) { + return EncodeBase64StringCommon(data, gWebSafeEncodingTable); +} + +#pragma mark Decode + +static void CreateDecodingTable(const char *encodingTable, + size_t encodingTableSize, char *decodingTable) { + memset(decodingTable, 0, 128); + for (unsigned int i = 0; i < encodingTableSize; i++) { + decodingTable[(unsigned int) encodingTable[i]] = i; + } +} + +static NSData *DecodeBase64StringCommon(NSString *base64Str, + char *decodingTable) { + // The input string should be plain ASCII + const char *cString = [base64Str cStringUsingEncoding:NSASCIIStringEncoding]; + if (cString == nil) return nil; + + NSUInteger inputLength = strlen(cString); + if (inputLength % 4 != 0) return nil; + if (inputLength == 0) return [NSData data]; + + while (inputLength > 0 && cString[inputLength - 1] == '=') { + inputLength--; + } + + NSInteger outputLength = inputLength * 3 / 4; + NSMutableData* data = [NSMutableData dataWithLength:outputLength]; + uint8_t *output = [data mutableBytes]; + + NSInteger inputPoint = 0; + NSInteger outputPoint = 0; + char *table = decodingTable; + + while (inputPoint < inputLength) { + int i0 = cString[inputPoint++]; + int i1 = cString[inputPoint++]; + int i2 = inputPoint < inputLength ? cString[inputPoint++] : 'A'; // 'A' will decode to \0 + int i3 = inputPoint < inputLength ? cString[inputPoint++] : 'A'; + + output[outputPoint++] = (table[i0] << 2) | (table[i1] >> 4); + if (outputPoint < outputLength) { + output[outputPoint++] = ((table[i1] & 0xF) << 4) | (table[i2] >> 2); + } + if (outputPoint < outputLength) { + output[outputPoint++] = ((table[i2] & 0x3) << 6) | table[i3]; + } + } + + return data; +} + +NSData *GTLDecodeBase64(NSString *base64Str) { + static char decodingTable[128]; + static BOOL hasInited = NO; + + if (!hasInited) { + CreateDecodingTable(gStandardEncodingTable, sizeof(gStandardEncodingTable), + decodingTable); + hasInited = YES; + } + return DecodeBase64StringCommon(base64Str, decodingTable); +} + +NSData *GTLDecodeWebSafeBase64(NSString *base64Str) { + static char decodingTable[128]; + static BOOL hasInited = NO; + + if (!hasInited) { + CreateDecodingTable(gWebSafeEncodingTable, sizeof(gWebSafeEncodingTable), + decodingTable); + hasInited = YES; + } + return DecodeBase64StringCommon(base64Str, decodingTable); +} diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.h new file mode 100644 index 00000000..68018bfa --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.h @@ -0,0 +1,49 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLBatchQuery.h +// + +#import "GTLQuery.h" + +@interface GTLBatchQuery : NSObject { + @private + NSMutableArray *queries_; + NSMutableDictionary *requestIDMap_; + BOOL skipAuthorization_; + NSDictionary *additionalHTTPHeaders_; +} + +// Queries included in this batch. Each query should have a unique requestID. +@property (retain) NSArray *queries; + +// Clients may set this to YES to disallow authorization. Defaults to NO. +@property (assign) BOOL shouldSkipAuthorization; + +// Any additional HTTP headers for this batch. +// +// These headers override the same keys from the service object's +// additionalHTTPHeaders. +@property (copy) NSDictionary *additionalHTTPHeaders; + ++ (id)batchQuery; ++ (id)batchQueryWithQueries:(NSArray *)array; + +- (void)addQuery:(GTLQuery *)query; + +- (GTLQuery *)queryForRequestID:(NSString *)requestID; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m new file mode 100644 index 00000000..f62eaca1 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m @@ -0,0 +1,133 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLBatchQuery.m +// + +#import "GTLBatchQuery.h" + +@implementation GTLBatchQuery + +@synthesize shouldSkipAuthorization = skipAuthorization_, + additionalHTTPHeaders = additionalHTTPHeaders_; + ++ (id)batchQuery { + GTLBatchQuery *obj = [[[self alloc] init] autorelease]; + return obj; +} + ++ (id)batchQueryWithQueries:(NSArray *)queries { + GTLBatchQuery *obj = [self batchQuery]; + obj.queries = queries; + return obj; +} + +- (id)copyWithZone:(NSZone *)zone { + // Deep copy the list of queries + NSArray *copiesOfQueries = [[[NSArray alloc] initWithArray:self.queries + copyItems:YES] autorelease]; + GTLBatchQuery *newBatch = [[[self class] allocWithZone:zone] init]; + newBatch.queries = copiesOfQueries; + newBatch.shouldSkipAuthorization = self.shouldSkipAuthorization; + newBatch.additionalHTTPHeaders = self.additionalHTTPHeaders; + return newBatch; +} + +- (void)dealloc { + [queries_ release]; + [additionalHTTPHeaders_ release]; + [requestIDMap_ release]; + + [super dealloc]; +} + +- (NSString *)description { + NSArray *queries = self.queries; + NSArray *methodNames = [queries valueForKey:@"methodName"]; + NSArray *dedupedNames = [[NSSet setWithArray:methodNames] allObjects]; + NSString *namesStr = [dedupedNames componentsJoinedByString:@","]; + + return [NSString stringWithFormat:@"%@ %p (queries:%lu methods:%@)", + [self class], self, (unsigned long) [queries count], namesStr]; +} + +#pragma mark - + +- (BOOL)isBatchQuery { + return YES; +} + +- (GTLUploadParameters *)uploadParameters { + // File upload is not supported for batches + return nil; +} + +- (void)executionDidStop { + NSArray *queries = self.queries; + [queries makeObjectsPerformSelector:@selector(executionDidStop)]; +} + +- (GTLQuery *)queryForRequestID:(NSString *)requestID { + GTLQuery *result = [requestIDMap_ objectForKey:requestID]; + if (result) return result; + + // We've not before tried to look up a query, or the map is stale + [requestIDMap_ release]; + requestIDMap_ = [[NSMutableDictionary alloc] init]; + + for (GTLQuery *query in queries_) { + [requestIDMap_ setObject:query forKey:query.requestID]; + } + + result = [requestIDMap_ objectForKey:requestID]; + return result; +} + +#pragma mark - + +- (void)setQueries:(NSArray *)array { +#if DEBUG + for (id obj in array) { + GTLQuery *query = obj; + GTL_DEBUG_ASSERT([query isKindOfClass:[GTLQuery class]], + @"unexpected query class: %@", [obj class]); + GTL_DEBUG_ASSERT(query.uploadParameters == nil, + @"batch may not contain upload: %@", query); + } +#endif + + [queries_ autorelease]; + queries_ = [array mutableCopy]; +} + +- (NSArray *)queries { + return queries_; +} + +- (void)addQuery:(GTLQuery *)query { + GTL_DEBUG_ASSERT([query isKindOfClass:[GTLQuery class]], + @"unexpected query class: %@", [query class]); + GTL_DEBUG_ASSERT(query.uploadParameters == nil, + @"batch may not contain upload: %@", query); + + if (queries_ == nil) { + queries_ = [[NSMutableArray alloc] init]; + } + + [queries_ addObject:query]; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.h new file mode 100644 index 00000000..9675aaf7 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.h @@ -0,0 +1,58 @@ +/* Copyright (c) 2011 Google Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// +// GTLBatchResult.h +// + +#import "GTLObject.h" + +@interface GTLBatchResult : GTLObject { + @private + NSMutableDictionary *successes_; + NSMutableDictionary *failures_; +} + +// Dictionaries of results for all queries in the batch +// +// Dictionary keys are requestID strings; objects are results or +// GTLErrorObjects. +// +// For successes with no returned object (such as from delete operations), +// the object for the dictionary entry is NSNull. +// +// +// The original query for each result is available from the service ticket, +// for example +// +// NSDictionary *successes = batchResults.successes; +// for (NSString *requestID in successes) { +// GTLObject *obj = [successes objectForKey:requestID]; +// GTLQuery *query = [ticket queryForRequestID:requestID]; +// NSLog(@"Query %@ returned object %@", query, obj); +// } +// +// NSDictionary *failures = batchResults.failures; +// for (NSString *requestID in failures) { +// GTLErrorObject *errorObj = [failures objectForKey:requestID]; +// GTLQuery *query = [ticket queryForRequestID:requestID]; +// NSLog(@"Query %@ failed with error %@", query, errorObj); +// } +// + +@property (retain) NSMutableDictionary *successes; +@property (retain) NSMutableDictionary *failures; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.m new file mode 100644 index 00000000..f17748d5 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.m @@ -0,0 +1,92 @@ +/* Copyright (c) 2011 Google Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// +// GTLBatchResult.m +// + +#import "GTLBatchResult.h" + +#import "GTLErrorObject.h" + +@implementation GTLBatchResult + +@synthesize successes = successes_, + failures = failures_; + +- (id)copyWithZone:(NSZone *)zone { + GTLBatchResult* newObject = [super copyWithZone:zone]; + newObject.successes = [[self.successes mutableCopyWithZone:zone] autorelease]; + newObject.failures = [[self.failures mutableCopyWithZone:zone] autorelease]; + return newObject; +} + +- (void)dealloc { + [successes_ release]; + [failures_ release]; + + [super dealloc]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %p (successes:%lu failures:%lu)", + [self class], self, + (unsigned long) [self.successes count], + (unsigned long) [self.failures count]]; +} + +#pragma mark - + +- (void)createItemsWithClassMap:(NSDictionary *)batchClassMap { + // This is called by GTLObject objectForJSON:defaultClass: + // JSON is defined to be a dictionary, but for batch results, it really + // is any array. + id json = self.JSON; + GTL_DEBUG_ASSERT([json isKindOfClass:[NSArray class]], + @"didn't get an array for the batch results"); + NSArray *jsonArray = json; + + NSMutableDictionary *successes = [NSMutableDictionary dictionary]; + NSMutableDictionary *failures = [NSMutableDictionary dictionary]; + + for (NSMutableDictionary *rpcResponse in jsonArray) { + NSString *responseID = [rpcResponse objectForKey:@"id"]; + + NSMutableDictionary *errorJSON = [rpcResponse objectForKey:@"error"]; + if (errorJSON) { + GTLErrorObject *errorObject = [GTLErrorObject objectWithJSON:errorJSON]; + [failures setValue:errorObject forKey:responseID]; + } else { + NSMutableDictionary *resultJSON = [rpcResponse objectForKey:@"result"]; + + NSDictionary *surrogates = self.surrogates; + Class defaultClass = [batchClassMap objectForKey:responseID]; + + id resultObject = [[self class] objectForJSON:resultJSON + defaultClass:defaultClass + surrogates:surrogates + batchClassMap:nil]; + if (resultObject == nil) { + // methods like delete return no object + resultObject = [NSNull null]; + } + [successes setValue:resultObject forKey:responseID]; + } + } + self.successes = successes; + self.failures = failures; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.h new file mode 100644 index 00000000..4a04b4dc --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.h @@ -0,0 +1,56 @@ +/* Copyright (c) 2011 Google Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// +// GTLDateTime.h +// + +#import +#import "GTLDefines.h" + +@interface GTLDateTime : NSObject { + NSDateComponents *dateComponents_; + NSInteger milliseconds_; // This is only for the fraction of a second 0-999 + NSInteger offsetSeconds_; // may be NSUndefinedDateComponent + BOOL isUniversalTime_; // preserves "Z" + NSTimeZone *timeZone_; // specific time zone by name, if known +} + +// Note: nil can be passed for time zone arguments when the time zone is not +// known. + ++ (GTLDateTime *)dateTimeWithRFC3339String:(NSString *)str; ++ (GTLDateTime *)dateTimeWithDate:(NSDate *)date timeZone:(NSTimeZone *)tz; + +- (void)setFromDate:(NSDate *)date timeZone:(NSTimeZone *)tz; +- (void)setFromRFC3339String:(NSString *)str; + +@property (nonatomic, readonly) NSDate *date; +@property (nonatomic, readonly) NSCalendar *calendar; + +@property (nonatomic, readonly) NSString *RFC3339String; +@property (nonatomic, readonly) NSString *stringValue; // same as RFC3339String + +@property (nonatomic, retain) NSTimeZone *timeZone; +@property (nonatomic, copy) NSDateComponents *dateComponents; +@property (nonatomic, assign) NSInteger milliseconds; // This is only for the fraction of a second 0-999 + +@property (nonatomic, assign) BOOL hasTime; +@property (nonatomic, assign) NSInteger offsetSeconds; +@property (nonatomic, assign, getter=isUniversalTime) BOOL universalTime; + +- (void)setTimeZone:(NSTimeZone *)timeZone withOffsetSeconds:(NSInteger)val; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.m new file mode 100644 index 00000000..7e45759e --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.m @@ -0,0 +1,422 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLDateTime.m +// + +#import "GTLDateTime.h" + + +@implementation GTLDateTime + +// A note about milliseconds_: +// RFC 3339 has support for fractions of a second. NSDateComponents is all +// NSInteger based, so it can't handle a fraction of a second. NSDate is +// built on NSTimeInterval so it has sub-millisecond precision. GTL takes +// the compromise of supporting the RFC's optional fractional second support +// by maintaining a number of milliseconds past what fits in the +// NSDateComponents. The parsing and string conversions will include +// 3 decimal digits (hence milliseconds). When going to a string, the decimal +// digits are only included if the milliseconds are non zero. + +@dynamic date; +@dynamic calendar; +@dynamic RFC3339String; +@dynamic stringValue; +@dynamic timeZone; +@dynamic hasTime; + +@synthesize dateComponents = dateComponents_, + milliseconds = milliseconds_, + offsetSeconds = offsetSeconds_, + universalTime = isUniversalTime_; + ++ (GTLDateTime *)dateTimeWithRFC3339String:(NSString *)str { + if (str == nil) return nil; + + GTLDateTime *result = [[[self alloc] init] autorelease]; + [result setFromRFC3339String:str]; + return result; +} + ++ (GTLDateTime *)dateTimeWithDate:(NSDate *)date timeZone:(NSTimeZone *)tz { + if (date == nil) return nil; + + GTLDateTime *result = [[[self alloc] init] autorelease]; + [result setFromDate:date timeZone:tz]; + return result; +} + +- (void)dealloc { + [dateComponents_ release]; + [timeZone_ release]; + [super dealloc]; +} + +- (id)copyWithZone:(NSZone *)zone { + + GTLDateTime *newObj = [[GTLDateTime alloc] init]; + + newObj.universalTime = self.isUniversalTime; + [newObj setTimeZone:self.timeZone withOffsetSeconds:self.offsetSeconds]; + newObj.dateComponents = self.dateComponents; + newObj.milliseconds = self.milliseconds; + + return newObj; +} + +// until NSDateComponent implements isEqual, we'll use this +- (BOOL)doesDateComponents:(NSDateComponents *)dc1 + equalDateComponents:(NSDateComponents *)dc2 { + + return [dc1 era] == [dc2 era] + && [dc1 year] == [dc2 year] + && [dc1 month] == [dc2 month] + && [dc1 day] == [dc2 day] + && [dc1 hour] == [dc2 hour] + && [dc1 minute] == [dc2 minute] + && [dc1 second] == [dc2 second] + && [dc1 week] == [dc2 week] + && [dc1 weekday] == [dc2 weekday] + && [dc1 weekdayOrdinal] == [dc2 weekdayOrdinal]; +} + +- (BOOL)isEqual:(GTLDateTime *)other { + + if (self == other) return YES; + if (![other isKindOfClass:[GTLDateTime class]]) return NO; + + BOOL areDateComponentsEqual = [self doesDateComponents:self.dateComponents + equalDateComponents:other.dateComponents]; + NSTimeZone *tz1 = self.timeZone; + NSTimeZone *tz2 = other.timeZone; + BOOL areTimeZonesEqual = (tz1 == tz2 || (tz2 && [tz1 isEqual:tz2])); + + return self.offsetSeconds == other.offsetSeconds + && self.isUniversalTime == other.isUniversalTime + && self.milliseconds == other.milliseconds + && areDateComponentsEqual + && areTimeZonesEqual; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %p: {%@}", + [self class], self, self.RFC3339String]; +} + +- (NSTimeZone *)timeZone { + if (timeZone_) { + return timeZone_; + } + + if (self.isUniversalTime) { + NSTimeZone *ztz = [NSTimeZone timeZoneWithName:@"Universal"]; + return ztz; + } + + NSInteger offsetSeconds = self.offsetSeconds; + + if (offsetSeconds != NSUndefinedDateComponent) { + NSTimeZone *tz = [NSTimeZone timeZoneForSecondsFromGMT:offsetSeconds]; + return tz; + } + return nil; +} + +- (void)setTimeZone:(NSTimeZone *)timeZone { + [timeZone_ release]; + timeZone_ = [timeZone retain]; + + if (timeZone) { + NSInteger offsetSeconds = [timeZone secondsFromGMTForDate:self.date]; + self.offsetSeconds = offsetSeconds; + } else { + self.offsetSeconds = NSUndefinedDateComponent; + } +} + +- (void)setTimeZone:(NSTimeZone *)timeZone withOffsetSeconds:(NSInteger)val { + [timeZone_ release]; + timeZone_ = [timeZone retain]; + + offsetSeconds_ = val; +} + +- (NSCalendar *)calendar { + NSCalendar *cal = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; + NSTimeZone *tz = self.timeZone; + if (tz) { + [cal setTimeZone:tz]; + } + return cal; +} + +- (NSDate *)date { + NSCalendar *cal = self.calendar; + NSDateComponents *dateComponents = self.dateComponents; + NSTimeInterval extraMillisecondsAsSeconds = 0.0; + + if (!self.hasTime) { + // we're not keeping track of a time, but NSDate always is based on + // an absolute time. We want to avoid returning an NSDate where the + // calendar date appears different from what was used to create our + // date-time object. + // + // We'll make a copy of the date components, setting the time on our + // copy to noon GMT, since that ensures the date renders correctly for + // any time zone + NSDateComponents *noonDateComponents = [[dateComponents copy] autorelease]; + [noonDateComponents setHour:12]; + [noonDateComponents setMinute:0]; + [noonDateComponents setSecond:0]; + dateComponents = noonDateComponents; + + NSTimeZone *gmt = [NSTimeZone timeZoneWithName:@"Universal"]; + [cal setTimeZone:gmt]; + } else { + // Add in the fractional seconds that don't fit into NSDateComponents. + extraMillisecondsAsSeconds = ((NSTimeInterval)self.milliseconds) / 1000.0; + } + + NSDate *date = [cal dateFromComponents:dateComponents]; + + // Add in any milliseconds that didn't fit into the dateComponents. + if (extraMillisecondsAsSeconds > 0.0) { +#if GTL_IPHONE || (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5) + date = [date dateByAddingTimeInterval:extraMillisecondsAsSeconds]; +#else + date = [date addTimeInterval:extraMillisecondsAsSeconds]; +#endif + } + + return date; +} + +- (NSString *)stringValue { + return self.RFC3339String; +} + +- (NSString *)RFC3339String { + NSDateComponents *dateComponents = self.dateComponents; + NSInteger offset = self.offsetSeconds; + + NSString *timeString = @""; // timeString like "T15:10:46-08:00" + + if (self.hasTime) { + + NSString *timeOffsetString; // timeOffsetString like "-08:00" + + if (self.isUniversalTime) { + timeOffsetString = @"Z"; + } else if (offset == NSUndefinedDateComponent) { + // unknown offset is rendered as -00:00 per + // http://www.ietf.org/rfc/rfc3339.txt section 4.3 + timeOffsetString = @"-00:00"; + } else { + NSString *sign = @"+"; + if (offset < 0) { + sign = @"-"; + offset = -offset; + } + timeOffsetString = [NSString stringWithFormat:@"%@%02ld:%02ld", + sign, (long)(offset/(60*60)) % 24, (long)(offset / 60) % 60]; + } + + NSString *fractionalSecondsString = @""; + if (self.milliseconds > 0.0) { + fractionalSecondsString = [NSString stringWithFormat:@".%03ld", (long)self.milliseconds]; + } + + timeString = [NSString stringWithFormat:@"T%02ld:%02ld:%02ld%@%@", + (long)[dateComponents hour], (long)[dateComponents minute], + (long)[dateComponents second], fractionalSecondsString, timeOffsetString]; + } + + // full dateString like "2006-11-17T15:10:46-08:00" + NSString *dateString = [NSString stringWithFormat:@"%04ld-%02ld-%02ld%@", + (long)[dateComponents year], (long)[dateComponents month], + (long)[dateComponents day], timeString]; + + return dateString; +} + +- (void)setFromDate:(NSDate *)date timeZone:(NSTimeZone *)tz { + NSCalendar *cal = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; + if (tz) { + [cal setTimeZone:tz]; + } + + NSUInteger const kComponentBits = (NSYearCalendarUnit | NSMonthCalendarUnit + | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit + | NSSecondCalendarUnit); + + NSDateComponents *components = [cal components:kComponentBits fromDate:date]; + self.dateComponents = components; + + // Extract the fractional seconds. + NSTimeInterval asTimeInterval = [date timeIntervalSince1970]; + NSTimeInterval worker = asTimeInterval - trunc(asTimeInterval); + self.milliseconds = (NSInteger)round(worker * 1000.0); + + self.universalTime = NO; + + NSInteger offset = NSUndefinedDateComponent; + + if (tz) { + offset = [tz secondsFromGMTForDate:date]; + + if (offset == 0 && [tz isEqualToTimeZone:[NSTimeZone timeZoneWithName:@"Universal"]]) { + self.universalTime = YES; + } + } + self.offsetSeconds = offset; + + // though offset seconds are authoritative, we'll retain the time zone + // since we can't regenerate it reliably from just the offset + timeZone_ = [tz retain]; +} + +- (void)setFromRFC3339String:(NSString *)str { + + NSInteger year = NSUndefinedDateComponent; + NSInteger month = NSUndefinedDateComponent; + NSInteger day = NSUndefinedDateComponent; + NSInteger hour = NSUndefinedDateComponent; + NSInteger minute = NSUndefinedDateComponent; + NSInteger sec = NSUndefinedDateComponent; + NSInteger milliseconds = 0; + double secDouble = -1.0; + NSString* sign = nil; + NSInteger offsetHour = 0; + NSInteger offsetMinute = 0; + + if ([str length] > 0) { + NSScanner* scanner = [NSScanner scannerWithString:str]; + // There should be no whitespace, so no skip characters. + [scanner setCharactersToBeSkipped:nil]; + + NSCharacterSet* dashSet = [NSCharacterSet characterSetWithCharactersInString:@"-"]; + NSCharacterSet* tSet = [NSCharacterSet characterSetWithCharactersInString:@"Tt "]; + NSCharacterSet* colonSet = [NSCharacterSet characterSetWithCharactersInString:@":"]; + NSCharacterSet* plusMinusZSet = [NSCharacterSet characterSetWithCharactersInString:@"+-zZ"]; + + // for example, scan 2006-11-17T15:10:46-08:00 + // or 2006-11-17T15:10:46Z + if (// yyyy-mm-dd + [scanner scanInteger:&year] && + [scanner scanCharactersFromSet:dashSet intoString:NULL] && + [scanner scanInteger:&month] && + [scanner scanCharactersFromSet:dashSet intoString:NULL] && + [scanner scanInteger:&day] && + // Thh:mm:ss + [scanner scanCharactersFromSet:tSet intoString:NULL] && + [scanner scanInteger:&hour] && + [scanner scanCharactersFromSet:colonSet intoString:NULL] && + [scanner scanInteger:&minute] && + [scanner scanCharactersFromSet:colonSet intoString:NULL] && + [scanner scanDouble:&secDouble]) { + + // At this point we got secDouble, pull it apart. + sec = (NSInteger)secDouble; + double worker = secDouble - ((double)sec); + milliseconds = (NSInteger)round(worker * 1000.0); + + // Finish parsing, now the offset info. + if (// Z or +hh:mm + [scanner scanCharactersFromSet:plusMinusZSet intoString:&sign] && + [scanner scanInteger:&offsetHour] && + [scanner scanCharactersFromSet:colonSet intoString:NULL] && + [scanner scanInteger:&offsetMinute]) { + } + } + } + + NSDateComponents *dateComponents = [[[NSDateComponents alloc] init] autorelease]; + [dateComponents setYear:year]; + [dateComponents setMonth:month]; + [dateComponents setDay:day]; + [dateComponents setHour:hour]; + [dateComponents setMinute:minute]; + [dateComponents setSecond:sec]; + + self.dateComponents = dateComponents; + self.milliseconds = milliseconds; + + // determine the offset, like from Z, or -08:00:00.0 + + self.timeZone = nil; + + NSInteger totalOffset = NSUndefinedDateComponent; + self.universalTime = NO; + + if ([sign caseInsensitiveCompare:@"Z"] == NSOrderedSame) { + + self.universalTime = YES; + totalOffset = 0; + + } else if (sign != nil) { + + totalOffset = (60 * offsetMinute) + (60 * 60 * offsetHour); + + if ([sign isEqual:@"-"]) { + + if (totalOffset == 0) { + // special case: offset of -0.00 means undefined offset + totalOffset = NSUndefinedDateComponent; + } else { + totalOffset *= -1; + } + } + } + + self.offsetSeconds = totalOffset; +} + +- (BOOL)hasTime { + NSDateComponents *dateComponents = self.dateComponents; + + BOOL hasTime = ([dateComponents hour] != NSUndefinedDateComponent + && [dateComponents minute] != NSUndefinedDateComponent); + + return hasTime; +} + +- (void)setHasTime:(BOOL)shouldHaveTime { + + // we'll set time values to zero or NSUndefinedDateComponent as appropriate + BOOL hadTime = self.hasTime; + + if (shouldHaveTime && !hadTime) { + [dateComponents_ setHour:0]; + [dateComponents_ setMinute:0]; + [dateComponents_ setSecond:0]; + milliseconds_ = 0; + offsetSeconds_ = NSUndefinedDateComponent; + isUniversalTime_ = NO; + + } else if (hadTime && !shouldHaveTime) { + [dateComponents_ setHour:NSUndefinedDateComponent]; + [dateComponents_ setMinute:NSUndefinedDateComponent]; + [dateComponents_ setSecond:NSUndefinedDateComponent]; + milliseconds_ = 0; + offsetSeconds_ = NSUndefinedDateComponent; + isUniversalTime_ = NO; + self.timeZone = nil; + } +} + + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLDefines.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLDefines.h new file mode 100644 index 00000000..ebd96558 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLDefines.h @@ -0,0 +1,128 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLDefines.h +// + +// Ensure Apple's conditionals we depend on are defined. +#import +#import + +// +// The developer may choose to define these in the project: +// +// #define GTL_TARGET_NAMESPACE Xxx // preface all GTL class names with Xxx (recommended for building plug-ins) +// #define GTL_FOUNDATION_ONLY 1 // builds without AppKit or Carbon (default for iPhone builds) +// #define STRIP_GTM_FETCH_LOGGING 1 // omit http logging code (default for iPhone release builds) +// +// Mac developers may find GTL_SIMPLE_DESCRIPTIONS and STRIP_GTM_FETCH_LOGGING useful for +// reducing code size. +// + +// Define later OS versions when building on earlier versions +#ifdef MAC_OS_X_VERSION_10_0 + #ifndef MAC_OS_X_VERSION_10_6 + #define MAC_OS_X_VERSION_10_6 1060 + #endif +#endif + + +#ifdef GTL_TARGET_NAMESPACE +// prefix all GTL class names with GTL_TARGET_NAMESPACE for this target + #import "GTLTargetNamespace.h" +#endif + +// Provide a common definition for externing constants/functions +#if defined(__cplusplus) + #define GTL_EXTERN extern "C" +#else + #define GTL_EXTERN extern +#endif + +#if TARGET_OS_IPHONE // iPhone SDK + + #define GTL_IPHONE 1 + +#endif + +#if GTL_IPHONE + + #define GTL_FOUNDATION_ONLY 1 + +#endif + +// +// GTL_ASSERT is like NSAssert, but takes a variable number of arguments: +// +// GTL_ASSERT(condition, @"Problem in argument %@", argStr); +// +// GTL_DEBUG_ASSERT is similar, but compiles in only for debug builds +// + +#ifndef GTL_ASSERT + // we directly invoke the NSAssert handler so we can pass on the varargs + #if !defined(NS_BLOCK_ASSERTIONS) + #define GTL_ASSERT(condition, ...) \ + do { \ + if (!(condition)) { \ + [[NSAssertionHandler currentHandler] \ + handleFailureInFunction:[NSString stringWithUTF8String:__PRETTY_FUNCTION__] \ + file:[NSString stringWithUTF8String:__FILE__] \ + lineNumber:__LINE__ \ + description:__VA_ARGS__]; \ + } \ + } while(0) + #else + #define GTL_ASSERT(condition, ...) do { } while (0) + #endif // !defined(NS_BLOCK_ASSERTIONS) +#endif // GTL_ASSERT + +#ifndef GTL_DEBUG_ASSERT + #if DEBUG + #define GTL_DEBUG_ASSERT(condition, ...) GTL_ASSERT(condition, __VA_ARGS__) + #else + #define GTL_DEBUG_ASSERT(condition, ...) do { } while (0) + #endif +#endif + +#ifndef GTL_DEBUG_LOG + #if DEBUG + #define GTL_DEBUG_LOG(...) NSLog(__VA_ARGS__) + #else + #define GTL_DEBUG_LOG(...) do { } while (0) + #endif +#endif + +#ifndef STRIP_GTM_FETCH_LOGGING + #if GTL_IPHONE && !DEBUG + #define STRIP_GTM_FETCH_LOGGING 1 + #else + #define STRIP_GTM_FETCH_LOGGING 0 + #endif +#endif + +// Some support for advanced clang static analysis functionality +// See http://clang-analyzer.llvm.org/annotations.html +#ifndef __has_feature // Optional. + #define __has_feature(x) 0 // Compatibility with non-clang compilers. +#endif +#ifndef NS_RETURNS_NOT_RETAINED + #if __has_feature(attribute_ns_returns_not_retained) + #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) + #else + #define NS_RETURNS_NOT_RETAINED + #endif +#endif diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.h new file mode 100644 index 00000000..c2ec67db --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.h @@ -0,0 +1,45 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLErrorObject.h +// + +#import "GTLObject.h" + +@class GTLErrorObjectData; + +@interface GTLErrorObject : GTLObject +@property (retain) NSNumber *code; +@property (retain) NSString *message; +@property (retain) NSArray *data; // of GTLErrorObjectData + +// Convenience accessor for creating an NSError from a GTLErrorObject. +@property (readonly) NSError *foundationError; + +// Convenience accessor for extracting the GTLErrorObject that was used to +// create an NSError. +// +// Returns nil if the error was not originally from a GTLErrorObject. ++ (GTLErrorObject *)underlyingObjectForError:(NSError *)foundationError; + +@end + +@interface GTLErrorObjectData : GTLObject +@property (retain) NSString *domain; +@property (retain) NSString *reason; +@property (retain) NSString *message; +@property (retain) NSString *location; +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.m new file mode 100644 index 00000000..1fa1023a --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.m @@ -0,0 +1,78 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLErrorObject.m +// + +#import "GTLErrorObject.h" +#import "GTLService.h" + +@implementation GTLErrorObject + +@dynamic code; +@dynamic message; +@dynamic data; + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = [NSDictionary dictionaryWithObject:[GTLErrorObjectData class] + forKey:@"data"]; + return map; +} + +- (NSError *)foundationError { + NSMutableDictionary *userInfo; + + // This structured GTLErrorObject will be available in the error's userInfo + // dictionary + userInfo = [NSMutableDictionary dictionaryWithObject:self + forKey:kGTLStructuredErrorKey]; + + NSString *reasonStr = self.message; + if (reasonStr) { + // We always store an error in the userInfo key "error" + [userInfo setObject:reasonStr + forKey:kGTLServerErrorStringKey]; + + // Store a user-readable "reason" to show up when an error is logged, + // in parentheses like NSError does it + NSString *parenthesized = [NSString stringWithFormat:@"(%@)", reasonStr]; + [userInfo setObject:parenthesized + forKey:NSLocalizedFailureReasonErrorKey]; + } + + NSInteger code = [self.code integerValue]; + NSError *error = [NSError errorWithDomain:kGTLJSONRPCErrorDomain + code:code + userInfo:userInfo]; + return error; +} + ++ (GTLErrorObject *)underlyingObjectForError:(NSError *)foundationError { + NSDictionary *userInfo = [foundationError userInfo]; + GTLErrorObject *errorObj = [userInfo objectForKey:kGTLStructuredErrorKey]; + return errorObj; +} + +@end + +@implementation GTLErrorObjectData +@dynamic domain; +@dynamic reason; +@dynamic message; +@dynamic location; +@end + + diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.h new file mode 100644 index 00000000..106f420e --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.h @@ -0,0 +1,35 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef _GTLFRAMEWORK_H_ +#define _GTLFRAMEWORK_H_ + +#import + +#import "GTLDefines.h" + + +// Returns the version of the framework. Major and minor should +// match the bundle version in the Info.plist file. +// +// Pass NULL to ignore any of the parameters. + +void GTLFrameworkVersion(NSUInteger* major, NSUInteger* minor, NSUInteger* release); + +// Returns the version in @"a.b" or @"a.b.c" format +NSString *GTLFrameworkVersionString(void); + +#endif diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.m new file mode 100644 index 00000000..6bfc7f22 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.m @@ -0,0 +1,40 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "GTLFramework.h" + +void GTLFrameworkVersion(NSUInteger* major, NSUInteger* minor, NSUInteger* release) { + // version 2.0.0 + if (major) *major = 2; + if (minor) *minor = 0; + if (release) *release = 0; +} + +NSString *GTLFrameworkVersionString(void) { + NSUInteger major, minor, release; + NSString *libVersionString; + + GTLFrameworkVersion(&major, &minor, &release); + + // most library releases will have a release value of zero + if (release != 0) { + libVersionString = [NSString stringWithFormat:@"%d.%d.%d", + (int)major, (int)minor, (int)release]; + } else { + libVersionString = [NSString stringWithFormat:@"%d.%d", + (int)major, (int)minor]; + } + return libVersionString; +} diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.h new file mode 100644 index 00000000..d9715295 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.h @@ -0,0 +1,41 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLJSONParser.h +// + +// This class is a thin wrapper around the JSON parser. It uses +// NSJSONSerialization when available, and SBJSON otherwise. + +#import + +#import "GTLDefines.h" + +@interface GTLJSONParser : NSObject ++ (NSString*)stringWithObject:(id)value + humanReadable:(BOOL)humanReadable + error:(NSError**)error; + ++ (NSData *)dataWithObject:(id)obj + humanReadable:(BOOL)humanReadable + error:(NSError**)error; + ++ (id)objectWithString:(NSString *)jsonStr + error:(NSError **)error; + ++ (id)objectWithData:(NSData *)jsonData + error:(NSError **)error; +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.m new file mode 100644 index 00000000..a089a93d --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.m @@ -0,0 +1,150 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLJSONParser.m +// + +#import "GTLJSONParser.h" + +// We can assume NSJSONSerialization is present on Mac OS X 10.7 and iOS 5 +#if !defined(GTL_REQUIRES_NSJSONSERIALIZATION) +#if (!TARGET_OS_IPHONE && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1070)) || \ + (TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MIN_REQUIRED >= 50000)) +#define GTL_REQUIRES_NSJSONSERIALIZATION 1 +#endif +#endif + +// If GTMNSJSONSerialization is available, it is used for parsing and +// formatting JSON +#if !GTL_REQUIRES_NSJSONSERIALIZATION +@interface GTMNSJSONSerialization : NSObject ++ (NSData *)dataWithJSONObject:(id)obj options:(NSUInteger)opt error:(NSError **)error; ++ (id)JSONObjectWithData:(NSData *)data options:(NSUInteger)opt error:(NSError **)error; +@end + +// As a fallback, SBJSON is used for parsing and formatting JSON +@interface GTLSBJSON +- (void)setHumanReadable:(BOOL)flag; +- (NSString*)stringWithObject:(id)value error:(NSError**)error; +- (id)objectWithString:(NSString*)jsonrep error:(NSError**)error; +@end +#endif // !GTL_REQUIRES_NSJSONSERIALIZATION + +@implementation GTLJSONParser + +#if DEBUG && !GTL_REQUIRES_NSJSONSERIALIZATION +// When compiling for iOS 4 compatibility, SBJSON must be available ++ (void)load { + Class writer = NSClassFromString(@"SBJsonWriter"); + Class parser = NSClassFromString(@"SBJsonParser"); + Class oldParser = NSClassFromString(@"SBJSON"); + GTL_ASSERT((oldParser != Nil) + || (writer != Nil && parser != Nil), + @"No parsing class found"); +} +#endif // DEBUG && !GTL_REQUIRES_NSJSONSERIALIZATION + ++ (NSString*)stringWithObject:(id)obj + humanReadable:(BOOL)humanReadable + error:(NSError**)error { + NSData *data = [self dataWithObject:obj + humanReadable:humanReadable + error:error]; + if (data) { + NSString *jsonStr = [[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding] autorelease]; + return jsonStr; + } + return nil; +} + ++ (NSData *)dataWithObject:(id)obj + humanReadable:(BOOL)humanReadable + error:(NSError**)error { + const NSUInteger kOpts = humanReadable ? (1UL << 0) : 0; // NSJSONWritingPrettyPrinted + +#if GTL_REQUIRES_NSJSONSERIALIZATION + NSData *data = [NSJSONSerialization dataWithJSONObject:obj + options:kOpts + error:error]; + return data; +#else + Class serializer = NSClassFromString(@"NSJSONSerialization"); + if (serializer) { + NSData *data = [serializer dataWithJSONObject:obj + options:kOpts + error:error]; + return data; + } else { + Class jsonWriteClass = NSClassFromString(@"SBJsonWriter"); + if (!jsonWriteClass) { + jsonWriteClass = NSClassFromString(@"SBJSON"); + } + + if (error) *error = nil; + + GTLSBJSON *writer = [[[jsonWriteClass alloc] init] autorelease]; + [writer setHumanReadable:humanReadable]; + NSString *jsonStr = [writer stringWithObject:obj + error:error]; + NSData *data = [jsonStr dataUsingEncoding:NSUTF8StringEncoding]; + return data; + } +#endif +} + ++ (id)objectWithString:(NSString *)jsonStr + error:(NSError **)error { + NSData *data = [jsonStr dataUsingEncoding:NSUTF8StringEncoding]; + return [self objectWithData:data + error:error]; +} + ++ (id)objectWithData:(NSData *)jsonData + error:(NSError **)error { +#if GTL_REQUIRES_NSJSONSERIALIZATION + NSMutableDictionary *obj = [NSJSONSerialization JSONObjectWithData:jsonData + options:NSJSONReadingMutableContainers + error:error]; + return obj; +#else + Class serializer = NSClassFromString(@"NSJSONSerialization"); + if (serializer) { + const NSUInteger kOpts = (1UL << 0); // NSJSONReadingMutableContainers + NSMutableDictionary *obj = [serializer JSONObjectWithData:jsonData + options:kOpts + error:error]; + return obj; + } else { + Class jsonParseClass = NSClassFromString(@"SBJsonParser"); + if (!jsonParseClass) { + jsonParseClass = NSClassFromString(@"SBJSON"); + } + + if (error) *error = nil; + + GTLSBJSON *parser = [[[jsonParseClass alloc] init] autorelease]; + + NSString *jsonrep = [[[NSString alloc] initWithData:jsonData + encoding:NSUTF8StringEncoding] autorelease]; + id obj = [parser objectWithString:jsonrep + error:error]; + return obj; + } +#endif +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.h new file mode 100644 index 00000000..fcbdf43c --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.h @@ -0,0 +1,180 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLObject.h +// + + +#import + +#import "GTLDefines.h" +#import "GTLUtilities.h" +#import "GTLDateTime.h" + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTLOBJECT_DEFINE_GLOBALS +#define _EXTERN +#define _INITIALIZE_AS(x) =x +#else +#define _EXTERN extern +#define _INITIALIZE_AS(x) +#endif + +@protocol GTLCollectionProtocol +@optional +@property (retain) NSArray *items; +@end + +@protocol GTLBatchItemCreationProtocol +- (void)createItemsWithClassMap:(NSDictionary *)batchClassMap; +@end + +@interface GTLObject : NSObject { + + @private + + NSMutableDictionary *json_; + + // Used when creating the subobjects from this one. + NSDictionary *surrogates_; + + // Any complex object hung off this object goes into the cache so the + // next fetch will get the same object back instead of having to recreate + // it. + NSMutableDictionary *childCache_; + + // Anything defined by the client; retained but not used internally; not + // copied by copyWithZone: + NSMutableDictionary *userProperties_; +} + +@property (nonatomic, retain) NSMutableDictionary *JSON; +@property (nonatomic, retain) NSDictionary *surrogates; +@property (nonatomic, retain) NSMutableDictionary *userProperties; + +/////////////////////////////////////////////////////////////////////////////// +// +// Public methods +// +// These methods are intended for users of the library +// + ++ (id)object; ++ (id)objectWithJSON:(NSMutableDictionary *)dict; + +- (id)copyWithZone:(NSZone *)zone; + +- (NSString *)JSONString; + +// generic access to json; also creates it if necessary +- (void)setJSONValue:(id)obj forKey:(NSString *)key; +- (id)JSONValueForKey:(NSString *)key; + +// Returns the list of keys in this object's JSON that aren't listed as +// properties on the object. +- (NSArray *)additionalJSONKeys; + +// Any keys in the JSON that aren't listed as @properties on the object +// are counted as "additional properties". These allow you to get/set them. +- (id)additionalPropertyForName:(NSString *)name; +- (void)setAdditionalProperty:(id)obj forName:(NSString *)name; +- (NSDictionary *)additionalProperties; + +// User properties are supported for client convenience, but are not copied by +// copyWithZone. User Properties keys beginning with _ are reserved by the library. +- (void)setProperty:(id)obj forKey:(NSString *)key; // pass nil obj to remove property +- (id)propertyForKey:(NSString *)key; + +// userData is stored as a property with key "_userData" +- (void)setUserData:(id)obj; +- (id)userData; + +// Makes a partial query-compatible string describing the fields present +// in this object. (Note: only the first element of any array is examined.) +// +// http://code.google.com/apis/tasks/v1/performance.html#partial +// +- (NSString *)fieldsDescription; + +// Makes an object containing only the changes needed to do a partial update +// (patch), where the patch would be to change an object from the original +// to the receiver, such as +// +// GTLSomeObject *patchObject = [newVersion patchObjectFromOriginal:oldVersion]; +// +// http://code.google.com/apis/tasks/v1/performance.html#patch +// +// NOTE: this method returns nil if there are no changes between the original +// and the receiver. +- (id)patchObjectFromOriginal:(GTLObject *)original; + +// Method creating a null value to set object properties for patch queries that +// delete fields. Do not use this except when setting an object property for +// a patch query. ++ (id)nullValue; + +/////////////////////////////////////////////////////////////////////////////// +// +// Protected methods +// +// These methods are intended for subclasses of GTLObject +// + +// class registration ("kind" strings) for subclasses ++ (Class)registeredObjectClassForKind:(NSString *)kind; ++ (void)registerObjectClassForKind:(NSString *)kind; + +// creation of objects from a JSON dictionary ++ (GTLObject *)objectForJSON:(NSMutableDictionary *)json + defaultClass:(Class)defaultClass + surrogates:(NSDictionary *)surrogates + batchClassMap:(NSDictionary *)batchClassMap; + +// property-to-key mapping (for JSON keys which are not used as method names) ++ (NSDictionary *)propertyToJSONKeyMap; + +// property-to-Class mapping for array properties (to say what is in the array) ++ (NSDictionary *)arrayPropertyToClassMap; + +// The default class for additional JSON keys ++ (Class)classForAdditionalProperties; + +@end + +// Collection objects with an "items" property should derive from GTLCollection +// object. This provides support for fast object enumeration and the +// itemAtIndex: convenience method. +// +// Subclasses must implement the items method dynamically. +@interface GTLCollectionObject : GTLObject + +// itemAtIndex: returns nil when the index exceeds the bounds of the items array +- (id)itemAtIndex:(NSUInteger)idx; + +@end + +@interface GTLCollectionObject (DynamicMethods) +- (NSArray *)items; +@end + +// Base object use for when an service method directly returns an array instead +// of an object. Normally methods should return an object with an 'items' +// property, this exists for the methods not up to spec. +@interface GTLResultArray : GTLCollectionObject +// This method should only be called by subclasses. +- (NSArray *)itemsWithItemClass:(Class)itemClass; +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.m new file mode 100644 index 00000000..cf4e84cc --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.m @@ -0,0 +1,691 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLObject.m +// + +#define GTLOBJECT_DEFINE_GLOBALS 1 + +#include + +#import "GTLObject.h" +#import "GTLRuntimeCommon.h" +#import "GTLJSONParser.h" + +static NSString *const kUserDataPropertyKey = @"_userData"; + +@interface GTLObject () ++ (NSMutableArray *)allDeclaredProperties; ++ (NSArray *)allKnownKeys; + ++ (NSArray *)fieldsElementsForJSON:(NSDictionary *)targetJSON; ++ (NSString *)fieldsDescriptionForJSON:(NSDictionary *)targetJSON; + ++ (NSMutableDictionary *)patchDictionaryForJSON:(NSDictionary *)newJSON + fromOriginalJSON:(NSDictionary *)originalJSON; +@end + +@implementation GTLObject + +@synthesize JSON = json_, + surrogates = surrogates_, + userProperties = userProperties_; + ++ (id)object { + return [[[self alloc] init] autorelease]; +} + ++ (id)objectWithJSON:(NSMutableDictionary *)dict { + GTLObject *obj = [self object]; + obj.JSON = dict; + return obj; +} + ++ (NSDictionary *)propertyToJSONKeyMap { + return nil; +} + ++ (NSDictionary *)arrayPropertyToClassMap { + return nil; +} + ++ (Class)classForAdditionalProperties { + return Nil; +} + +- (BOOL)isEqual:(GTLObject *)other { + if (self == other) return YES; + if (other == nil) return NO; + + // The objects should be the same class, or one should be a subclass of the + // other's class + if (![other isKindOfClass:[self class]] + && ![self isKindOfClass:[other class]]) return NO; + + // What we're not comparing here: + // properties + return GTL_AreEqualOrBothNil(json_, [other JSON]); +} + +// By definition, for two objects to potentially be considered equal, +// they must have the same hash value. The hash is mostly ignored, +// but removeObjectsInArray: in Leopard does seem to check the hash, +// and NSObject's default hash method just returns the instance pointer. +// We'll define hash here for all of our GTLObjects. +- (NSUInteger)hash { + return (NSUInteger) (void *) [GTLObject class]; +} + +- (id)copyWithZone:(NSZone *)zone { + GTLObject* newObject = [[[self class] allocWithZone:zone] init]; + CFPropertyListRef ref = CFPropertyListCreateDeepCopy(kCFAllocatorDefault, + json_, kCFPropertyListMutableContainers); + GTL_DEBUG_ASSERT(ref != NULL, @"GTLObject: copy failed (probably a non-plist type in the JSON)"); + newObject.JSON = [NSMakeCollectable(ref) autorelease]; + newObject.surrogates = self.surrogates; + + // What we're not copying: + // userProperties + return newObject; +} + +- (NSString *)descriptionWithLocale:(id)locale { + return [self description]; +} + +- (void)dealloc { + [json_ release]; + [surrogates_ release]; + [childCache_ release]; + [userProperties_ release]; + + [super dealloc]; +} + +#pragma mark JSON values + +- (void)setJSONValue:(id)obj forKey:(NSString *)key { + NSMutableDictionary *dict = self.JSON; + if (dict == nil && obj != nil) { + dict = [NSMutableDictionary dictionaryWithCapacity:1]; + self.JSON = dict; + } + [dict setValue:obj forKey:key]; +} + +- (id)JSONValueForKey:(NSString *)key { + id obj = [self.JSON objectForKey:key]; + return obj; +} + +- (NSString *)JSONString { + NSError *error = nil; + NSString *str = [GTLJSONParser stringWithObject:[self JSON] + humanReadable:YES + error:&error]; + if (error) { + return [error description]; + } + return str; +} + +- (NSArray *)additionalJSONKeys { + NSArray *knownKeys = [[self class] allKnownKeys]; + NSMutableArray *result = [NSMutableArray arrayWithArray:[json_ allKeys]]; + [result removeObjectsInArray:knownKeys]; + // Return nil instead of an empty array. + if ([result count] == 0) { + result = nil; + } + return result; +} + +#pragma mark Partial - Fields + +- (NSString *)fieldsDescription { + NSString *str = [GTLObject fieldsDescriptionForJSON:self.JSON]; + return str; +} + ++ (NSString *)fieldsDescriptionForJSON:(NSDictionary *)targetJSON { + // Internal routine: recursively generate a string field description + // by joining elements + NSArray *array = [self fieldsElementsForJSON:targetJSON]; + NSString *str = [array componentsJoinedByString:@","]; + return str; +} + ++ (NSArray *)fieldsElementsForJSON:(NSDictionary *)targetJSON { + // Internal routine: recursively generate an array of field description + // element strings + NSMutableArray *resultFields = [NSMutableArray array]; + + // Sorting the dictionary keys gives us deterministic results when iterating + NSArray *sortedKeys = [[targetJSON allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; + for (NSString *key in sortedKeys) { + // We'll build a comma-separated list of fields + id value = [targetJSON objectForKey:key]; + if ([value isKindOfClass:[NSString class]] + || [value isKindOfClass:[NSNumber class]]) { + // Basic type (string, number), so the key is what we want + [resultFields addObject:key]; + } else if ([value isKindOfClass:[NSDictionary class]]) { + // Object (dictionary): "parent/child1,parent/child2,parent/child3" + NSArray *subElements = [self fieldsElementsForJSON:value]; + for (NSString *subElem in subElements) { + NSString *prepended = [NSString stringWithFormat:@"%@/%@", + key, subElem]; + [resultFields addObject:prepended]; + } + } else if ([value isKindOfClass:[NSArray class]]) { + // Array; we'll generate from the first array entry: + // "parent(child1,child2,child3)" + // + // Open question: should this instead create the union of elements for + // all items in the array, rather than just get fields from the first + // array object? + if ([value count] > 0) { + id firstObj = [value objectAtIndex:0]; + if ([firstObj isKindOfClass:[NSDictionary class]]) { + // An array of objects + NSString *contentsStr = [self fieldsDescriptionForJSON:firstObj]; + NSString *encapsulated = [NSString stringWithFormat:@"%@(%@)", + key, contentsStr]; + [resultFields addObject:encapsulated]; + } else { + // An array of some basic type, or of arrays + [resultFields addObject:key]; + } + } + } else { + GTL_ASSERT(0, @"GTLObject unknown field element for %@ (%@)", + key, NSStringFromClass([value class])); + } + } + return resultFields; +} + +#pragma mark Partial - Patch + +- (id)patchObjectFromOriginal:(GTLObject *)original { + id resultObj; + NSMutableDictionary *resultJSON = [GTLObject patchDictionaryForJSON:self.JSON + fromOriginalJSON:original.JSON]; + if ([resultJSON count] > 0) { + resultObj = [[self class] objectWithJSON:resultJSON]; + } else { + // Client apps should not attempt to patch with an object containing + // empty JSON + resultObj = nil; + } + return resultObj; +} + ++ (NSMutableDictionary *)patchDictionaryForJSON:(NSDictionary *)newJSON + fromOriginalJSON:(NSDictionary *)originalJSON { + // Internal recursive routine to create an object suitable for + // our patch semantics + NSMutableDictionary *resultJSON = [NSMutableDictionary dictionary]; + + // Iterate through keys present in the old object + NSArray *originalKeys = [originalJSON allKeys]; + for (NSString *key in originalKeys) { + id originalValue = [originalJSON objectForKey:key]; + id newValue = [newJSON valueForKey:key]; + if (newValue == nil) { + // There is no new value for this key, so set the value to NSNull + [resultJSON setValue:[NSNull null] forKey:key]; + } else if (!GTL_AreEqualOrBothNil(originalValue, newValue)) { + // The values for this key differ + if ([originalValue isKindOfClass:[NSDictionary class]] + && [newValue isKindOfClass:[NSDictionary class]]) { + // Both are objects; recurse + NSMutableDictionary *subDict = [self patchDictionaryForJSON:newValue + fromOriginalJSON:originalValue]; + [resultJSON setValue:subDict forKey:key]; + } else { + // They are non-object values; the new replaces the old. Per the + // documentation for patch, this replaces entire arrays. + [resultJSON setValue:newValue forKey:key]; + } + } else { + // The values are the same; omit this key-value pair + } + } + + // Iterate through keys present only in the new object, and add them to the + // result + NSMutableArray *newKeys = [NSMutableArray arrayWithArray:[newJSON allKeys]]; + [newKeys removeObjectsInArray:originalKeys]; + + for (NSString *key in newKeys) { + id value = [newJSON objectForKey:key]; + [resultJSON setValue:value forKey:key]; + } + return resultJSON; +} + ++ (id)nullValue { + return [NSNull null]; +} + +#pragma mark Additional Properties + +- (id)additionalPropertyForName:(NSString *)name { + // Return the cached object, if any, before creating one. + id result = [self cacheChildForKey:name]; + if (result != nil) { + return result; + } + + Class defaultClass = [[self class] classForAdditionalProperties]; + id jsonObj = [self JSONValueForKey:name]; + BOOL shouldCache = NO; + if (jsonObj != nil) { + NSDictionary *surrogates = self.surrogates; + result = [GTLRuntimeCommon objectFromJSON:jsonObj + defaultClass:defaultClass + surrogates:surrogates + isCacheable:&shouldCache]; + } + + [self setCacheChild:(shouldCache ? result : nil) + forKey:name]; + return result; +} + +- (void)setAdditionalProperty:(id)obj forName:(NSString *)name { + BOOL shouldCache = NO; + Class defaultClass = [[self class] classForAdditionalProperties]; + id json = [GTLRuntimeCommon jsonFromAPIObject:obj + expectedClass:defaultClass + isCacheable:&shouldCache]; + [self setJSONValue:json forKey:name]; + [self setCacheChild:(shouldCache ? obj : nil) + forKey:name]; +} + +- (NSDictionary *)additionalProperties { + NSMutableDictionary *result = [NSMutableDictionary dictionary]; + + NSArray *propertyNames = [self additionalJSONKeys]; + for (NSString *name in propertyNames) { + id obj = [self additionalPropertyForName:name]; + [result setObject:obj forKey:name]; + } + + return result; +} + +#pragma mark Child Cache methods + +// There is no property for childCache_ as there shouldn't be KVC/KVO +// support for it, it's an implementation detail. + +- (void)setCacheChild:(id)obj forKey:(NSString *)key { + if (childCache_ == nil && obj != nil) { + childCache_ = [[NSMutableDictionary alloc] initWithObjectsAndKeys: + obj, key, nil]; + } else { + [childCache_ setValue:obj forKey:key]; + } +} + +- (id)cacheChildForKey:(NSString *)key { + id obj = [childCache_ objectForKey:key]; + return obj; +} + +#pragma mark userData and user properties + +- (void)setUserData:(id)userData { + [self setProperty:userData forKey:kUserDataPropertyKey]; +} + +- (id)userData { + // be sure the returned pointer has the life of the autorelease pool, + // in case self is released immediately + return [[[self propertyForKey:kUserDataPropertyKey] retain] autorelease]; +} + +- (void)setProperty:(id)obj forKey:(NSString *)key { + if (obj == nil) { + // user passed in nil, so delete the property + [userProperties_ removeObjectForKey:key]; + } else { + // be sure the property dictionary exists + if (userProperties_ == nil) { + self.userProperties = [NSMutableDictionary dictionary]; + } + [userProperties_ setObject:obj forKey:key]; + } +} + +- (id)propertyForKey:(NSString *)key { + id obj = [userProperties_ objectForKey:key]; + + // be sure the returned pointer has the life of the autorelease pool, + // in case self is released immediately + return [[obj retain] autorelease]; +} + +#pragma mark Support methods + ++ (NSMutableArray *)allDeclaredProperties { + NSMutableArray *array = [NSMutableArray array]; + + // walk from this class up the hierarchy to GTLObject + Class topClass = class_getSuperclass([GTLObject class]); + for (Class currClass = self; + currClass != topClass; + currClass = class_getSuperclass(currClass)) { + // step through this class's properties, and add the property names to the + // array + objc_property_t *properties = class_copyPropertyList(currClass, NULL); + if (properties) { + for (objc_property_t *prop = properties; + *prop != NULL; + ++prop) { + const char *propName = property_getName(*prop); + // We only want dynamic properties; their attributes contain ",D". + const char *attr = property_getAttributes(*prop); + const char *dynamicMarker = strstr(attr, ",D"); + if (dynamicMarker && + (dynamicMarker[2] == 0 || dynamicMarker[2] == ',' )) { + [array addObject:[NSString stringWithUTF8String:propName]]; + } + } + free(properties); + } + } + return array; +} + ++ (NSArray *)allKnownKeys { + NSArray *allProps = [self allDeclaredProperties]; + NSMutableArray *knownKeys = [NSMutableArray arrayWithArray:allProps]; + + NSDictionary *propMap = [GTLObject propertyToJSONKeyMapForClass:[self class]]; + + NSUInteger idx = 0; + for (NSString *propName in allProps) { + NSString *jsonKey = [propMap objectForKey:propName]; + if (jsonKey) { + [knownKeys replaceObjectAtIndex:idx + withObject:jsonKey]; + } + ++idx; + } + return knownKeys; +} + +- (NSString *)description { + // find the list of declared and otherwise known JSON keys for this class + NSArray *knownKeys = [[self class] allKnownKeys]; + + NSMutableString *descStr = [NSMutableString string]; + + NSString *spacer = @""; + for (NSString *key in json_) { + NSString *value = nil; + // show question mark for JSON keys not supported by a declared property: + // foo?:"Hi mom." + NSString *qmark = [knownKeys containsObject:key] ? @"" : @"?"; + + // determine property value to dislay + id rawValue = [json_ valueForKey:key]; + if ([rawValue isKindOfClass:[NSDictionary class]]) { + // for dictionaries, show the list of keys: + // {key1,key2,key3} + NSString *subkeyList = [[rawValue allKeys] componentsJoinedByString:@","]; + value = [NSString stringWithFormat:@"{%@}", subkeyList]; + } else if ([rawValue isKindOfClass:[NSArray class]]) { + // for arrays, show the number of items in the array: + // [3] + value = [NSString stringWithFormat:@"[%lu]", (unsigned long)[rawValue count]]; + } else if ([rawValue isKindOfClass:[NSString class]]) { + // for strings, show the string in quotes: + // "Hi mom." + value = [NSString stringWithFormat:@"\"%@\"", rawValue]; + } else { + // for numbers, show just the number + value = [rawValue description]; + } + [descStr appendFormat:@"%@%@%@:%@", spacer, key, qmark, value]; + spacer = @" "; + } + + NSString *str = [NSString stringWithFormat:@"%@ %p: {%@}", + [self class], self, descStr]; + return str; +} + +#pragma mark Class Registration + +static NSMutableDictionary *gKindMap = nil; + ++ (Class)registeredObjectClassForKind:(NSString *)kind { + Class resultClass = [gKindMap objectForKey:kind]; + return resultClass; +} + ++ (void)registerObjectClassForKind:(NSString *)kind { + // there's no autorelease pool in place at +load time, so we'll create our own + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + if (gKindMap == nil) { + gKindMap = [GTLUtilities newStaticDictionary]; + } + + Class selfClass = [self class]; + +#if DEBUG + // ensure this is a unique registration + if ([gKindMap objectForKey:kind] != nil ) { + GTL_DEBUG_LOG(@"%@ (%@) registration conflicts with %@", + selfClass, kind, [gKindMap objectForKey:kind]); + } + if ([[gKindMap allKeysForObject:selfClass] count] != 0) { + GTL_DEBUG_LOG(@"%@ (%@) registration conflicts with %@", + selfClass, kind, [gKindMap allKeysForObject:selfClass]); + } +#endif + + [gKindMap setValue:selfClass forKey:kind]; + + // we drain here to keep the clang static analyzer quiet + [pool drain]; +} + +#pragma mark Object Instantiation + ++ (GTLObject *)objectForJSON:(NSMutableDictionary *)json + defaultClass:(Class)defaultClass + surrogates:(NSDictionary *)surrogates + batchClassMap:(NSDictionary *)batchClassMap { + if ([json isEqual:[NSNull null]]) { + // no actual result, such as the response from a delete + return nil; + } + + GTL_ASSERT([json count] != 0, @"Creating object from empty json"); + if ([json count] == 0) return nil; + + // Determine the class to instantiate, based on the original fetch + // request or by looking up "kind" string from the registration at + // +load time of GTLObject subclasses + // + // We're letting the dynamic kind override the default class so + // feeds of heterogenous entries can use the defaultClass as a + // fallback + Class classToCreate = defaultClass; + NSString *kind = nil; + if ([json isKindOfClass:[NSDictionary class]]) { + kind = [json valueForKey:@"kind"]; + if ([kind isKindOfClass:[NSString class]] && [kind length] > 0) { + Class dynamicClass = [GTLObject registeredObjectClassForKind:kind]; + if (dynamicClass) { + classToCreate = dynamicClass; + } + } + } + + // Warn the developer that no specific class of GTLObject + // was requested with the fetch call, and no class is found + // compiled in to match the "kind" attribute of the JSON + // returned by the server + GTL_ASSERT(classToCreate != nil, + @"Could not find registered GTLObject subclass to " + "match JSON with kind \"%@\"", kind); + + if (classToCreate == nil) { + classToCreate = [self class]; + } + + // See if the top-level class for the JSON is listed in the surrogates; + // if so, instantiate the surrogate class instead + Class baseSurrogate = [surrogates objectForKey:classToCreate]; + if (baseSurrogate) { + classToCreate = baseSurrogate; + } + + // now instantiate the GTLObject + GTLObject *parsedObject = [classToCreate object]; + + parsedObject.surrogates = surrogates; + parsedObject.JSON = json; + + // it's time to instantiate inner items + if ([parsedObject conformsToProtocol:@protocol(GTLBatchItemCreationProtocol)]) { + id batch = + (id ) parsedObject; + [batch createItemsWithClassMap:batchClassMap]; + } + + return parsedObject; +} + +#pragma mark Runtime Utilities + +static NSMutableDictionary *gJSONKeyMapCache = nil; +static NSMutableDictionary *gArrayPropertyToClassMapCache = nil; + ++ (void)initialize { + // Note that initialize is guaranteed by the runtime to be called in a + // thread-safe manner + if (gJSONKeyMapCache == nil) { + gJSONKeyMapCache = [GTLUtilities newStaticDictionary]; + } + if (gArrayPropertyToClassMapCache == nil) { + gArrayPropertyToClassMapCache = [GTLUtilities newStaticDictionary]; + } +} + ++ (NSDictionary *)propertyToJSONKeyMapForClass:(Class)aClass { + NSDictionary *resultMap = + [GTLUtilities mergedClassDictionaryForSelector:@selector(propertyToJSONKeyMap) + startClass:aClass + ancestorClass:[GTLObject class] + cache:gJSONKeyMapCache]; + return resultMap; +} + ++ (NSDictionary *)arrayPropertyToClassMapForClass:(Class)aClass { + NSDictionary *resultMap = + [GTLUtilities mergedClassDictionaryForSelector:@selector(arrayPropertyToClassMap) + startClass:aClass + ancestorClass:[GTLObject class] + cache:gArrayPropertyToClassMapCache]; + return resultMap; +} + +#pragma mark Runtime Support + ++ (Class)ancestorClass { + return [GTLObject class]; +} + ++ (BOOL)resolveInstanceMethod:(SEL)sel { + BOOL resolved = [GTLRuntimeCommon resolveInstanceMethod:sel onClass:self]; + if (resolved) + return YES; + + return [super resolveInstanceMethod:sel]; +} + +@end + +@implementation GTLCollectionObject + +// Subclasses must implement the items method dynamically. + +- (id)itemAtIndex:(NSUInteger)idx { + NSArray *items = [self performSelector:@selector(items)]; + if (idx < [items count]) { + return [items objectAtIndex:idx]; + } + return nil; +} + +// NSFastEnumeration protocol +- (NSUInteger)countByEnumeratingWithState:(NSFastEnumerationState *)state + objects:(id *)stackbuf + count:(NSUInteger)len { + NSArray *items = [self performSelector:@selector(items)]; + NSUInteger result = [items countByEnumeratingWithState:state + objects:stackbuf + count:len]; + return result; +} + +@end + +@implementation GTLResultArray + +- (NSArray *)itemsWithItemClass:(Class)itemClass { + // Return the cached array before creating on demand. + NSString *cacheKey = @"result_array_items"; + NSMutableArray *cachedArray = [self cacheChildForKey:cacheKey]; + if (cachedArray != nil) { + return cachedArray; + } + NSArray *result = nil; + NSArray *array = (NSArray *)[self JSON]; + if (array != nil) { + if ([array isKindOfClass:[NSArray class]]) { + NSDictionary *surrogates = self.surrogates; + result = [GTLRuntimeCommon objectFromJSON:array + defaultClass:itemClass + surrogates:surrogates + isCacheable:NULL]; + } else { +#if DEBUG + if (![array isKindOfClass:[NSNull class]]) { + GTL_DEBUG_LOG(@"GTLObject: unexpected JSON: %@ should be an array, actually is a %@:\n%@", + NSStringFromClass([self class]), + NSStringFromClass([array class]), + array); + } +#endif + result = array; + } + } + + [self setCacheChild:result forKey:cacheKey]; + return result; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlus.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlus.h new file mode 100644 index 00000000..ac691b73 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlus.h @@ -0,0 +1,36 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLPlus.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ + +#import "GTLPlusConstants.h" + +#import "GTLPlusItemScope.h" +#import "GTLPlusMoment.h" +#import "GTLPlusPerson.h" + +#import "GTLQueryPlus.h" +#import "GTLServicePlus.h" diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.h new file mode 100644 index 00000000..e2e425dd --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.h @@ -0,0 +1,46 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLPlusConstants.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ + +#import + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLDefines.h" +#else + #import "GTLDefines.h" +#endif + +// Authorization scope +// Know who you are on Google +GTL_EXTERN NSString * const kGTLAuthScopePlusMe; // "https://www.googleapis.com/auth/plus.me" +// View and manage user activity information in Google+ +GTL_EXTERN NSString * const kGTLAuthScopePlusMomentsWrite; // "https://www.googleapis.com/auth/plus.moments.write" +// View your email address +GTL_EXTERN NSString * const kGTLAuthScopePlusUserinfoEmail; // "https://www.googleapis.com/auth/userinfo.email" + +// Collection +GTL_EXTERN NSString * const kGTLPlusCollectionVault; // "vault" diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.m new file mode 100644 index 00000000..2c15fda1 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.m @@ -0,0 +1,37 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLPlusConstants.m +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ + +#import "GTLPlusConstants.h" + +// Authorization scope +NSString * const kGTLAuthScopePlusMe = @"https://www.googleapis.com/auth/plus.me"; +NSString * const kGTLAuthScopePlusMomentsWrite = @"https://www.googleapis.com/auth/plus.moments.write"; +NSString * const kGTLAuthScopePlusUserinfoEmail = @"https://www.googleapis.com/auth/userinfo.email"; + +// Collection +NSString * const kGTLPlusCollectionVault = @"vault"; diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.h new file mode 100644 index 00000000..38166b26 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.h @@ -0,0 +1,225 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLPlusItemScope.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ +// Classes: +// GTLPlusItemScope (0 custom class methods, 55 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusItemScope; + +// ---------------------------------------------------------------------------- +// +// GTLPlusItemScope +// + +@interface GTLPlusItemScope : GTLObject + +// The subject matter of the content. +@property (retain) GTLPlusItemScope *about; + +// An additional name for a Person, can be used for a middle name. +@property (retain) NSArray *additionalName; // of NSString + +// Postal address. +@property (retain) GTLPlusItemScope *address; + +// Address country. +@property (copy) NSString *addressCountry; + +// Address locality. +@property (copy) NSString *addressLocality; + +// Address region. +@property (copy) NSString *addressRegion; + +// The encoding. +@property (retain) NSArray *associatedMedia; // of GTLPlusItemScope + +// Number of attendees. +@property (retain) NSNumber *attendeeCount; // intValue + +// A person attending the event. +@property (retain) NSArray *attendees; // of GTLPlusItemScope + +// From http://schema.org/MusicRecording, the audio file. +@property (retain) GTLPlusItemScope *audio; + +// The person who created this scope. +@property (retain) NSArray *author; // of GTLPlusItemScope + +// Best possible rating value. +@property (copy) NSString *bestRating; + +// Date of birth. +@property (copy) NSString *birthDate; + +// From http://schema.org/MusicRecording, the artist that performed this +// recording. +@property (retain) GTLPlusItemScope *byArtist; + +// The caption for this object. +@property (copy) NSString *caption; + +// File size in (mega/kilo) bytes. +@property (copy) NSString *contentSize; + +// Actual bytes of the media object, for example the image file or video file. +@property (copy) NSString *contentUrl; + +// The list of contributors for this scope. +@property (retain) NSArray *contributor; // of GTLPlusItemScope + +// The date this scope was created. +@property (copy) NSString *dateCreated; + +// The date this scope was last modified. +@property (copy) NSString *dateModified; + +// The initial date this scope was published. +@property (copy) NSString *datePublished; + +// The string describing the content of this scope. +// Remapped to 'descriptionProperty' to avoid NSObject's 'description'. +@property (copy) NSString *descriptionProperty; + +// The duration of the item (movie, audio recording, event, etc.) in ISO 8601 +// date format. +@property (copy) NSString *duration; + +// A URL pointing to a player for a specific video. In general, this is the +// information in the src element of an embed tag and should not be the same as +// the content of the loc tag. +@property (copy) NSString *embedUrl; + +// The end date and time of the event (in ISO 8601 date format). +@property (copy) NSString *endDate; + +// Family name. In the U.S., the last name of an Person. This can be used along +// with givenName instead of the Name property. +@property (copy) NSString *familyName; + +// Gender of the person. +@property (copy) NSString *gender; + +// Geo coordinates. +@property (retain) GTLPlusItemScope *geo; + +// Given name. In the U.S., the first name of a Person. This can be used along +// with familyName instead of the Name property. +@property (copy) NSString *givenName; + +// The height of the media object. +@property (copy) NSString *height; + +// The id for this item scope. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// A url to the image for this scope. +@property (copy) NSString *image; + +// From http://schema.org/MusicRecording, which album a song is in. +@property (retain) GTLPlusItemScope *inAlbum; + +// Identifies this resource as an itemScope. +@property (copy) NSString *kind; + +// Latitude. +@property (retain) NSNumber *latitude; // doubleValue + +// The location of the event or organization. +@property (retain) GTLPlusItemScope *location; + +// Longitude. +@property (retain) NSNumber *longitude; // doubleValue + +// The name of this scope. +@property (copy) NSString *name; + +// Property of http://schema.org/TVEpisode indicating which series the episode +// belongs to. +@property (retain) GTLPlusItemScope *partOfTVSeries; + +// The main performer or performers of the event—for example, a presenter, +// musician, or actor. +@property (retain) NSArray *performers; // of GTLPlusItemScope + +// Player type required—for example, Flash or Silverlight. +@property (copy) NSString *playerType; + +// Postal code. +@property (copy) NSString *postalCode; + +// Post office box number. +@property (copy) NSString *postOfficeBoxNumber; + +// Rating value. +@property (copy) NSString *ratingValue; + +// Review rating. +@property (retain) NSArray *reviewRating; // of GTLPlusItemScope + +// The start date and time of the event (in ISO 8601 date format). +@property (copy) NSString *startDate; + +// Street address. +@property (copy) NSString *streetAddress; + +// Comment text, review text, etc. +@property (copy) NSString *text; + +// Thumbnail image for an image or video. +@property (retain) GTLPlusItemScope *thumbnail; + +// A url to a thumbnail image for this scope. +@property (copy) NSString *thumbnailUrl; + +// The exchange traded instrument associated with a Corporation object. The +// tickerSymbol is expressed as an exchange and an instrument name separated by +// a space character. For the exchange component of the tickerSymbol attribute, +// we reccommend using the controlled vocaulary of Market Identifier Codes (MIC) +// specified in ISO15022. +@property (copy) NSString *tickerSymbol; + +// The item type. +@property (copy) NSString *type; + +// A url for this scope. +@property (copy) NSString *url; + +// The width of the media object. +@property (copy) NSString *width; + +// Worst possible rating value. +@property (copy) NSString *worstRating; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.m new file mode 100644 index 00000000..e9c89799 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.m @@ -0,0 +1,78 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLPlusItemScope.m +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ +// Classes: +// GTLPlusItemScope (0 custom class methods, 55 custom properties) + +#import "GTLPlusItemScope.h" + +// ---------------------------------------------------------------------------- +// +// GTLPlusItemScope +// + +@implementation GTLPlusItemScope +@dynamic about, additionalName, address, addressCountry, addressLocality, + addressRegion, associatedMedia, attendeeCount, attendees, audio, + author, bestRating, birthDate, byArtist, caption, contentSize, + contentUrl, contributor, dateCreated, dateModified, datePublished, + descriptionProperty, duration, embedUrl, endDate, familyName, gender, + geo, givenName, height, identifier, image, inAlbum, kind, latitude, + location, longitude, name, partOfTVSeries, performers, playerType, + postalCode, postOfficeBoxNumber, ratingValue, reviewRating, startDate, + streetAddress, text, thumbnail, thumbnailUrl, tickerSymbol, type, url, + width, worstRating; + ++ (NSDictionary *)propertyToJSONKeyMap { + NSDictionary *map = + [NSDictionary dictionaryWithObjectsAndKeys: + @"associated_media", @"associatedMedia", + @"description", @"descriptionProperty", + @"id", @"identifier", + nil]; + return map; +} + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = + [NSDictionary dictionaryWithObjectsAndKeys: + [NSString class], @"additionalName", + [GTLPlusItemScope class], @"associated_media", + [GTLPlusItemScope class], @"attendees", + [GTLPlusItemScope class], @"author", + [GTLPlusItemScope class], @"contributor", + [GTLPlusItemScope class], @"performers", + [GTLPlusItemScope class], @"reviewRating", + nil]; + return map; +} + ++ (void)load { + [self registerObjectClassForKind:@"plus#itemScope"]; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.h new file mode 100644 index 00000000..1d4d98d1 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.h @@ -0,0 +1,79 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLPlusMoment.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ +// Classes: +// GTLPlusMoment (0 custom class methods, 6 custom properties) +// GTLPlusMomentVerb (0 custom class methods, 1 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusItemScope; +@class GTLPlusMomentVerb; + +// ---------------------------------------------------------------------------- +// +// GTLPlusMoment +// + +@interface GTLPlusMoment : GTLObject + +// Identifies this resource as a moment. +@property (copy) NSString *kind; + +// The object generated by performing the action on the item +@property (retain) GTLPlusItemScope *result; + +// Timestamp of the action (when it occured) in RFC3339 format. +@property (retain) GTLDateTime *startDate; + +// The object on which the action was performed +@property (retain) GTLPlusItemScope *target; + +// The schema.org activity type +@property (copy) NSString *type; + +// The action the user performed +@property (retain) GTLPlusMomentVerb *verb; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusMomentVerb +// + +@interface GTLPlusMomentVerb : GTLObject + +// Url name of the verb +@property (copy) NSString *url; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.m new file mode 100644 index 00000000..6d95a0ac --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.m @@ -0,0 +1,58 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLPlusMoment.m +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ +// Classes: +// GTLPlusMoment (0 custom class methods, 6 custom properties) +// GTLPlusMomentVerb (0 custom class methods, 1 custom properties) + +#import "GTLPlusMoment.h" + +#import "GTLPlusItemScope.h" + +// ---------------------------------------------------------------------------- +// +// GTLPlusMoment +// + +@implementation GTLPlusMoment +@dynamic kind, result, startDate, target, type, verb; + ++ (void)load { + [self registerObjectClassForKind:@"plus#moment"]; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusMomentVerb +// + +@implementation GTLPlusMomentVerb +@dynamic url; +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.h new file mode 100644 index 00000000..95169fa8 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.h @@ -0,0 +1,285 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLPlusPerson.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ +// Classes: +// GTLPlusPerson (0 custom class methods, 21 custom properties) +// GTLPlusPersonEmailsItem (0 custom class methods, 3 custom properties) +// GTLPlusPersonImage (0 custom class methods, 1 custom properties) +// GTLPlusPersonName (0 custom class methods, 6 custom properties) +// GTLPlusPersonOrganizationsItem (0 custom class methods, 9 custom properties) +// GTLPlusPersonPlacesLivedItem (0 custom class methods, 2 custom properties) +// GTLPlusPersonUrlsItem (0 custom class methods, 3 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLObject.h" +#else + #import "GTLObject.h" +#endif + +@class GTLPlusPersonEmailsItem; +@class GTLPlusPersonImage; +@class GTLPlusPersonName; +@class GTLPlusPersonOrganizationsItem; +@class GTLPlusPersonPlacesLivedItem; +@class GTLPlusPersonUrlsItem; + +// ---------------------------------------------------------------------------- +// +// GTLPlusPerson +// + +@interface GTLPlusPerson : GTLObject + +// A short biography for this person. +@property (copy) NSString *aboutMe; + +// The person's date of birth, represented as YYYY-MM-DD. +@property (copy) NSString *birthday; + +// The current location for this person. +@property (copy) NSString *currentLocation; + +// The name of this person, suitable for display. +@property (copy) NSString *displayName; + +// A list of email addresses for this person. +@property (retain) NSArray *emails; // of GTLPlusPersonEmailsItem + +// ETag of this response for caching purposes. +@property (copy) NSString *ETag; + +// The person's gender. Possible values are: +// - "male" - Male gender. +// - "female" - Female gender. +// - "other" - Other. +@property (copy) NSString *gender; + +// If "true", indicates that the person has installed the app that is making the +// request and has chosen to expose this install state to the caller. A value of +// "false" indicates that the install state cannot be determined (it is either +// not installed or the person has chosen to keep this information private). +@property (retain) NSNumber *hasApp; // boolValue + +// The ID of this person. +// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). +@property (copy) NSString *identifier; + +// The representation of the person's profile photo. +@property (retain) GTLPlusPersonImage *image; + +// Identifies this resource as a person. Value: "plus#person". +@property (copy) NSString *kind; + +// The languages spoken by this person. +@property (retain) NSArray *languagesSpoken; // of NSString + +// An object representation of the individual components of a person's name. +@property (retain) GTLPlusPersonName *name; + +// The nickname of this person. +@property (copy) NSString *nickname; + +// Type of person within Google+. Possible values are: +// - "person" - represents an actual person. +// - "page" - represents a page. +@property (copy) NSString *objectType; + +// A list of current or past organizations with which this person is associated. +@property (retain) NSArray *organizations; // of GTLPlusPersonOrganizationsItem + +// A list of places where this person has lived. +@property (retain) NSArray *placesLived; // of GTLPlusPersonPlacesLivedItem + +// The person's relationship status. Possible values are: +// - "single" - Person is single. +// - "in_a_relationship" - Person is in a relationship. +// - "engaged" - Person is engaged. +// - "married" - Person is married. +// - "its_complicated" - The relationship is complicated. +// - "open_relationship" - Person is in an open relationship. +// - "widowed" - Person is widowed. +// - "in_domestic_partnership" - Person is in a domestic partnership. +// - "in_civil_union" - Person is in a civil union. +@property (copy) NSString *relationshipStatus; + +// The brief description (tagline) of this person. +@property (copy) NSString *tagline; + +// The URL of this person's profile. +@property (copy) NSString *url; + +// A list of URLs for this person. +@property (retain) NSArray *urls; // of GTLPlusPersonUrlsItem + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonEmailsItem +// + +@interface GTLPlusPersonEmailsItem : GTLObject + +// If "true", indicates this email address is the person's primary one. +@property (retain) NSNumber *primary; // boolValue + +// The type of address. Possible values are: +// - "home" - Home email address. +// - "work" - Work email address. +// - "other" - Other. +@property (copy) NSString *type; + +// The email address. +@property (copy) NSString *value; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonImage +// + +@interface GTLPlusPersonImage : GTLObject + +// The URL of the person's profile photo. To re-size the image and crop it to a +// square, append the query string ?sz=x, where x is the dimension in pixels of +// each side. +@property (copy) NSString *url; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonName +// + +@interface GTLPlusPersonName : GTLObject + +// The family name (last name) of this person. +@property (copy) NSString *familyName; + +// The full name of this person, including middle names, suffixes, etc. +@property (copy) NSString *formatted; + +// The given name (first name) of this person. +@property (copy) NSString *givenName; + +// The honorific prefixes (such as "Dr." or "Mrs.") for this person. +@property (copy) NSString *honorificPrefix; + +// The honorific suffixes (such as "Jr.") for this person. +@property (copy) NSString *honorificSuffix; + +// The middle name of this person. +@property (copy) NSString *middleName; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonOrganizationsItem +// + +@interface GTLPlusPersonOrganizationsItem : GTLObject + +// The department within the organization. +@property (copy) NSString *department; + +// A short description of the person's role in this organization. +// Remapped to 'descriptionProperty' to avoid NSObject's 'description'. +@property (copy) NSString *descriptionProperty; + +// The date the person left this organization. +@property (copy) NSString *endDate; + +// The location of this organization. +@property (copy) NSString *location; + +// The name of the organization. +@property (copy) NSString *name; + +// If "true", indicates this organization is the person's primary one (typically +// interpreted as current one). +@property (retain) NSNumber *primary; // boolValue + +// The date the person joined this organization. +@property (copy) NSString *startDate; + +// The person's job title or role within the organization. +@property (copy) NSString *title; + +// The type of organization. Possible values are: +// - "work" - Work. +// - "school" - School. +@property (copy) NSString *type; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonPlacesLivedItem +// + +@interface GTLPlusPersonPlacesLivedItem : GTLObject + +// If "true", this place of residence is this person's primary residence. +@property (retain) NSNumber *primary; // boolValue + +// A place where this person has lived. For example: "Seattle, WA", "Near +// Toronto". +@property (copy) NSString *value; + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonUrlsItem +// + +@interface GTLPlusPersonUrlsItem : GTLObject + +// If "true", this URL is the person's primary URL. +@property (retain) NSNumber *primary; // boolValue + +// The type of URL. Possible values are: +// - "home" - URL for home. +// - "work" - URL for work. +// - "blog" - URL for blog. +// - "profile" - URL for profile. +// - "other" - Other. +@property (copy) NSString *type; + +// The URL value. +@property (copy) NSString *value; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.m new file mode 100644 index 00000000..d56f8824 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.m @@ -0,0 +1,145 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLPlusPerson.m +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ +// Classes: +// GTLPlusPerson (0 custom class methods, 21 custom properties) +// GTLPlusPersonEmailsItem (0 custom class methods, 3 custom properties) +// GTLPlusPersonImage (0 custom class methods, 1 custom properties) +// GTLPlusPersonName (0 custom class methods, 6 custom properties) +// GTLPlusPersonOrganizationsItem (0 custom class methods, 9 custom properties) +// GTLPlusPersonPlacesLivedItem (0 custom class methods, 2 custom properties) +// GTLPlusPersonUrlsItem (0 custom class methods, 3 custom properties) + +#import "GTLPlusPerson.h" + +// ---------------------------------------------------------------------------- +// +// GTLPlusPerson +// + +@implementation GTLPlusPerson +@dynamic aboutMe, birthday, currentLocation, displayName, emails, ETag, gender, + hasApp, identifier, image, kind, languagesSpoken, name, nickname, + objectType, organizations, placesLived, relationshipStatus, tagline, + url, urls; + ++ (NSDictionary *)propertyToJSONKeyMap { + NSDictionary *map = + [NSDictionary dictionaryWithObjectsAndKeys: + @"etag", @"ETag", + @"id", @"identifier", + nil]; + return map; +} + ++ (NSDictionary *)arrayPropertyToClassMap { + NSDictionary *map = + [NSDictionary dictionaryWithObjectsAndKeys: + [GTLPlusPersonEmailsItem class], @"emails", + [NSString class], @"languagesSpoken", + [GTLPlusPersonOrganizationsItem class], @"organizations", + [GTLPlusPersonPlacesLivedItem class], @"placesLived", + [GTLPlusPersonUrlsItem class], @"urls", + nil]; + return map; +} + ++ (void)load { + [self registerObjectClassForKind:@"plus#person"]; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonEmailsItem +// + +@implementation GTLPlusPersonEmailsItem +@dynamic primary, type, value; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonImage +// + +@implementation GTLPlusPersonImage +@dynamic url; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonName +// + +@implementation GTLPlusPersonName +@dynamic familyName, formatted, givenName, honorificPrefix, honorificSuffix, + middleName; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonOrganizationsItem +// + +@implementation GTLPlusPersonOrganizationsItem +@dynamic department, descriptionProperty, endDate, location, name, primary, + startDate, title, type; + ++ (NSDictionary *)propertyToJSONKeyMap { + NSDictionary *map = + [NSDictionary dictionaryWithObject:@"description" + forKey:@"descriptionProperty"]; + return map; +} + +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonPlacesLivedItem +// + +@implementation GTLPlusPersonPlacesLivedItem +@dynamic primary, value; +@end + + +// ---------------------------------------------------------------------------- +// +// GTLPlusPersonUrlsItem +// + +@implementation GTLPlusPersonUrlsItem +@dynamic primary, type, value; +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.h new file mode 100644 index 00000000..4d39389d --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.h @@ -0,0 +1,90 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLQueryPlus.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ +// Classes: +// GTLQueryPlus (2 custom class methods, 4 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLQuery.h" +#else + #import "GTLQuery.h" +#endif + +@class GTLPlusMoment; + +@interface GTLQueryPlus : GTLQuery + +// +// Parameters valid on all methods. +// + +// Selector specifying which fields to include in a partial response. +@property (copy) NSString *fields; + +// +// Method-specific parameters; see the comments below for more information. +// +@property (copy) NSString *collection; +@property (assign) BOOL debug; +@property (copy) NSString *userId; + +#pragma mark - +#pragma mark "moments" methods +// These create a GTLQueryPlus object. + +// Method: plus.moments.insert +// Record a user activity (e.g Bill watched a video on Youtube) +// Required: +// userId: The ID of the user to get activities for. The special value "me" +// can be used to indicate the authenticated user. +// collection: The collection to which to write moments. +// kGTLPlusCollectionVault: The default collection for writing new moments. +// Optional: +// debug: Return the moment as written. Should be used only for debugging. +// Authorization scope(s): +// kGTLAuthScopePlusMomentsWrite +// Fetches a GTLPlusMoment. ++ (id)queryForMomentsInsertWithObject:(GTLPlusMoment *)object + userId:(NSString *)userId + collection:(NSString *)collection; + +#pragma mark - +#pragma mark "people" methods +// These create a GTLQueryPlus object. + +// Method: plus.people.get +// Get a person's profile. +// Required: +// userId: The ID of the person to get the profile for. The special value "me" +// can be used to indicate the authenticated user. +// Authorization scope(s): +// kGTLAuthScopePlusMe +// kGTLAuthScopePlusUserinfoEmail +// Fetches a GTLPlusPerson. ++ (id)queryForPeopleGetWithUserId:(NSString *)userId; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.m new file mode 100644 index 00000000..65bff36b --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.m @@ -0,0 +1,72 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLQueryPlus.m +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ +// Classes: +// GTLQueryPlus (2 custom class methods, 4 custom properties) + +#import "GTLQueryPlus.h" + +#import "GTLPlusMoment.h" +#import "GTLPlusPerson.h" + +@implementation GTLQueryPlus + +@dynamic collection, debug, fields, userId; + +#pragma mark - +#pragma mark "moments" methods +// These create a GTLQueryPlus object. + ++ (id)queryForMomentsInsertWithObject:(GTLPlusMoment *)object + userId:(NSString *)userId + collection:(NSString *)collection { + if (object == nil) { + GTL_DEBUG_ASSERT(object != nil, @"%@ got a nil object", NSStringFromSelector(_cmd)); + return nil; + } + NSString *methodName = @"plus.moments.insert"; + GTLQueryPlus *query = [self queryWithMethodName:methodName]; + query.bodyObject = object; + query.userId = userId; + query.collection = collection; + query.expectedObjectClass = [GTLPlusMoment class]; + return query; +} + +#pragma mark - +#pragma mark "people" methods +// These create a GTLQueryPlus object. + ++ (id)queryForPeopleGetWithUserId:(NSString *)userId { + NSString *methodName = @"plus.people.get"; + GTLQueryPlus *query = [self queryWithMethodName:methodName]; + query.userId = userId; + query.expectedObjectClass = [GTLPlusPerson class]; + return query; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.h new file mode 100644 index 00000000..22a575b8 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.h @@ -0,0 +1,61 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLServicePlus.h +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ +// Classes: +// GTLServicePlus (0 custom class methods, 0 custom properties) + +#if GTL_BUILT_AS_FRAMEWORK + #import "GTL/GTLService.h" +#else + #import "GTLService.h" +#endif + +@interface GTLServicePlus : GTLService + +// No new methods + +// Clients should create a standard query with any of the class methods in +// GTLQueryPlus.h. The query can the be sent with GTLService's execute methods, +// +// - (GTLServiceTicket *)executeQuery:(GTLQuery *)query +// completionHandler:(void (^)(GTLServiceTicket *ticket, +// id object, NSError *error))handler; +// or +// - (GTLServiceTicket *)executeQuery:(GTLQuery *)query +// delegate:(id)delegate +// didFinishSelector:(SEL)finishedSelector; +// +// where finishedSelector has a signature of: +// +// - (void)serviceTicket:(GTLServiceTicket *)ticket +// finishedWithObject:(id)object +// error:(NSError *)error; +// +// The object passed to the completion handler or delegate method +// is a subclass of GTLObject, determined by the query method executed. + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.m new file mode 100644 index 00000000..ee66db50 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.m @@ -0,0 +1,63 @@ +/* Copyright (c) 2012 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLServicePlus.m +// + +// ---------------------------------------------------------------------------- +// NOTE: This file is generated from Google APIs Discovery Service. +// Service: +// Google+ API (plus/v1moments) +// Description: +// The Google+ API enables developers to build on top of the Google+ platform. +// Documentation: +// http://developers.google.com/+/api/ +// Classes: +// GTLServicePlus (0 custom class methods, 0 custom properties) + +#import "GTLPlus.h" + +@implementation GTLServicePlus + +#if DEBUG +// Method compiled in debug builds just to check that all the needed support +// classes are present at link time. ++ (NSArray *)checkClasses { + NSArray *classes = [NSArray arrayWithObjects: + [GTLQueryPlus class], + [GTLPlusItemScope class], + [GTLPlusMoment class], + [GTLPlusPerson class], + nil]; + return classes; +} +#endif // DEBUG + +- (id)init { + self = [super init]; + if (self) { + // Version from discovery. + self.apiVersion = @"v1moments"; + + // From discovery. Where to send JSON-RPC. + // Turn off prettyPrint for this service to save bandwidth (especially on + // mobile). The fetcher logging will pretty print. + self.rpcURL = [NSURL URLWithString:@"https://www.googleapis.com/rpc?prettyPrint=false"]; + } + return self; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.h new file mode 100644 index 00000000..0afe823e --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.h @@ -0,0 +1,132 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLQuery.h +// + +#import "GTLObject.h" +#import "GTLUploadParameters.h" + +@protocol GTLQueryProtocol +- (BOOL)isBatchQuery; +- (BOOL)shouldSkipAuthorization; +- (void)executionDidStop; +- (NSDictionary *)additionalHTTPHeaders; +- (GTLUploadParameters *)uploadParameters; +@end + +@protocol GTLQueryCollectionProtocol +@optional +@property (retain) NSString *pageToken; +@property (retain) NSNumber *startIndex; +@end + +@class GTLServiceTicket; + +@interface GTLQuery : NSObject { + @private + NSString *methodName_; + NSMutableDictionary *json_; + GTLObject *bodyObject_; + NSMutableDictionary *childCache_; + NSString *requestID_; + GTLUploadParameters *uploadParameters_; + NSDictionary *urlQueryParameters_; + NSDictionary *additionalHTTPHeaders_; + Class expectedObjectClass_; + BOOL skipAuthorization_; +#if NS_BLOCKS_AVAILABLE + void (^completionBlock_)(GTLServiceTicket *ticket, id object, NSError *error); +#elif !__LP64__ + // Placeholders: for 32-bit builds, keep the size of the object's ivar section + // the same with and without blocks + id completionPlaceholder_; +#endif +} + +// The rpc method name. +@property (readonly) NSString *methodName; + +// The JSON dictionary of all the parameters set on this query. +@property (retain) NSMutableDictionary *JSON; + +// The object set to be uploaded with the query. +@property (retain) GTLObject *bodyObject; + +// Each query must have a request ID string. The user may replace the +// default assigned request ID with a custom string, provided that if +// used in a batch query, all request IDs in the batch must be unique. +@property (copy) NSString *requestID; + +// For queries which support file upload, the MIME type and file handle +// or data must be provided. +@property (copy) GTLUploadParameters *uploadParameters; + +// Any url query parameters to add to the query (useful for debugging with some +// services). +@property (copy) NSDictionary *urlQueryParameters; + +// Any additional HTTP headers for this query. Not valid when this query +// is added to a batch. +// +// These headers override the same keys from the service object's +// additionalHTTPHeaders. +@property (copy) NSDictionary *additionalHTTPHeaders; + +// The GTLObject subclass expected for results (used if the result doesn't +// include a kind attribute). +@property (assign) Class expectedObjectClass; + +// Clients may set this to YES to disallow authorization. Defaults to NO. +@property (assign) BOOL shouldSkipAuthorization; + +#if NS_BLOCKS_AVAILABLE +// Clients may provide an optional callback block to be called immediately +// before the executeQuery: callback. +// +// The completionBlock property is particularly useful for queries executed +// in a batch. +// +// Errors passed to the completionBlock will have an "underlying" GTLErrorObject +// when the server returned an error for this specific query: +// +// GTLErrorObject *errorObj = [GTLErrorObject underlyingObjectForError:error]; +// if (errorObj) { +// // the server returned this error for this specific query +// } else { +// // the batch execution failed +// } +@property (copy) void (^completionBlock)(GTLServiceTicket *ticket, id object, NSError *error); +#endif + +// methodName is the RPC method name to use. ++ (id)queryWithMethodName:(NSString *)methodName; + +// methodName is the RPC method name to use. +- (id)initWithMethodName:(NSString *)method; + +// If you need to set a parameter that is not listed as a property for a +// query class, you can do so via this api. If you need to clear it after +// setting, pass nil for obj. +- (void)setCustomParameter:(id)obj forKey:(NSString *)key; + +// Auto-generated request IDs ++ (NSString *)nextRequestID; + +// Methods for subclasses to override. ++ (NSDictionary *)parameterNameMap; ++ (NSDictionary *)arrayPropertyToClassMap; +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.m new file mode 100644 index 00000000..55f98223 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.m @@ -0,0 +1,267 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLQuery.m +// + +#include + +#import "GTLQuery.h" +#import "GTLRuntimeCommon.h" +#import "GTLUtilities.h" + +@interface GTLQuery () +@end + +@implementation GTLQuery + +// Implementation Note: bodyObject could be done as a dynamic property and map +// it to the key "resource". But we expose the object on the ServiceTicket +// for developers, and so sending it through the plumbing already in the +// parameters and outside of that gets into a grey area. For requests sent +// via this class, we don't need to touch the JSON, but for developers that +// have to use the lower level apis for something we'd need to know to add +// it to the JSON. + +@synthesize methodName = methodName_, + JSON = json_, + bodyObject = bodyObject_, + requestID = requestID_, + uploadParameters = uploadParameters_, + urlQueryParameters = urlQueryParameters_, + additionalHTTPHeaders = additionalHTTPHeaders_, + expectedObjectClass = expectedObjectClass_, + shouldSkipAuthorization = skipAuthorization_; + +#if NS_BLOCKS_AVAILABLE +@synthesize completionBlock = completionBlock_; +#endif + ++ (id)queryWithMethodName:(NSString *)methodName { + return [[[self alloc] initWithMethodName:methodName] autorelease]; +} + +- (id)initWithMethodName:(NSString *)methodName { + self = [super init]; + if (self) { + requestID_ = [[[self class] nextRequestID] retain]; + + methodName_ = [methodName copy]; + if ([methodName_ length] == 0) { + [self release]; + self = nil; + } + } + return self; +} + +- (void)dealloc { + [methodName_ release]; + [json_ release]; + [bodyObject_ release]; + [childCache_ release]; + [requestID_ release]; + [uploadParameters_ release]; + [urlQueryParameters_ release]; + [additionalHTTPHeaders_ release]; +#if NS_BLOCKS_AVAILABLE + [completionBlock_ release]; +#endif + + [super dealloc]; +} + + +- (id)copyWithZone:(NSZone *)zone { + GTLQuery *query = + [[[self class] allocWithZone:zone] initWithMethodName:self.methodName]; + + if ([json_ count] > 0) { + // Deep copy the parameters + CFPropertyListRef ref = CFPropertyListCreateDeepCopy(kCFAllocatorDefault, + json_, kCFPropertyListMutableContainers); + query.JSON = [NSMakeCollectable(ref) autorelease]; + } + query.bodyObject = self.bodyObject; + query.requestID = self.requestID; + query.uploadParameters = self.uploadParameters; + query.urlQueryParameters = self.urlQueryParameters; + query.additionalHTTPHeaders = self.additionalHTTPHeaders; + query.expectedObjectClass = self.expectedObjectClass; + query.shouldSkipAuthorization = self.shouldSkipAuthorization; +#if NS_BLOCKS_AVAILABLE + query.completionBlock = self.completionBlock; +#endif + return query; +} + +- (NSString *)description { + NSArray *keys = [self.JSON allKeys]; + NSArray *params = [keys sortedArrayUsingSelector:@selector(compare:)]; + NSString *paramsSummary = @""; + if ([params count] > 0) { + paramsSummary = [NSString stringWithFormat:@" params:(%@)", + [params componentsJoinedByString:@","]]; + } + + keys = [self.urlQueryParameters allKeys]; + NSArray *urlQParams = [keys sortedArrayUsingSelector:@selector(compare:)]; + NSString *urlQParamsSummary = @""; + if ([urlQParams count] > 0) { + urlQParamsSummary = [NSString stringWithFormat:@" urlQParams:(%@)", + [urlQParams componentsJoinedByString:@","]]; + } + + GTLObject *bodyObj = self.bodyObject; + NSString *bodyObjSummary = @""; + if (bodyObj != nil) { + bodyObjSummary = [NSString stringWithFormat:@" bodyObject:%@", [bodyObj class]]; + } + + NSString *uploadStr = @""; + GTLUploadParameters *uploadParams = self.uploadParameters; + if (uploadParams) { + uploadStr = [NSString stringWithFormat:@" %@", uploadParams]; + } + + return [NSString stringWithFormat:@"%@ %p: {method:%@%@%@%@%@}", + [self class], self, self.methodName, + paramsSummary, urlQParamsSummary, bodyObjSummary, uploadStr]; +} + +- (void)setCustomParameter:(id)obj forKey:(NSString *)key { + [self setJSONValue:obj forKey:key]; +} + +- (BOOL)isBatchQuery { + return NO; +} + +- (void)executionDidStop { +#if NS_BLOCKS_AVAILABLE + self.completionBlock = nil; +#endif +} + ++ (NSString *)nextRequestID { + static unsigned long lastRequestID = 0; + NSString *result; + + @synchronized([GTLQuery class]) { + ++lastRequestID; + result = [NSString stringWithFormat:@"gtl_%lu", + (unsigned long) lastRequestID]; + } + return result; +} + +#pragma mark GTLRuntimeCommon Support + +- (void)setJSONValue:(id)obj forKey:(NSString *)key { + NSMutableDictionary *dict = self.JSON; + if (dict == nil && obj != nil) { + dict = [NSMutableDictionary dictionaryWithCapacity:1]; + self.JSON = dict; + } + [dict setValue:obj forKey:key]; +} + +- (id)JSONValueForKey:(NSString *)key { + id obj = [self.JSON objectForKey:key]; + return obj; +} + +// There is no property for childCache_ as there shouldn't be KVC/KVO +// support for it, it's an implementation detail. + +- (void)setCacheChild:(id)obj forKey:(NSString *)key { + if (childCache_ == nil && obj != nil) { + childCache_ = + [[NSMutableDictionary alloc] initWithObjectsAndKeys:obj, key, nil]; + } else { + [childCache_ setValue:obj forKey:key]; + } +} + +- (id)cacheChildForKey:(NSString *)key { + id obj = [childCache_ objectForKey:key]; + return obj; +} + +#pragma mark Methods for Subclasses to Override + ++ (NSDictionary *)parameterNameMap { + return nil; +} + ++ (NSDictionary *)arrayPropertyToClassMap { + return nil; +} + +#pragma mark Runtime Utilities + +static NSMutableDictionary *gParameterNameMapCache = nil; +static NSMutableDictionary *gArrayPropertyToClassMapCache = nil; + ++ (void)initialize { + // note that initialize is guaranteed by the runtime to be called in a + // thread-safe manner + if (gParameterNameMapCache == nil) { + gParameterNameMapCache = [GTLUtilities newStaticDictionary]; + } + if (gArrayPropertyToClassMapCache == nil) { + gArrayPropertyToClassMapCache = [GTLUtilities newStaticDictionary]; + } +} + ++ (NSDictionary *)propertyToJSONKeyMapForClass:(Class)aClass { + NSDictionary *resultMap = + [GTLUtilities mergedClassDictionaryForSelector:@selector(parameterNameMap) + startClass:aClass + ancestorClass:[GTLQuery class] + cache:gParameterNameMapCache]; + return resultMap; +} + ++ (NSDictionary *)arrayPropertyToClassMapForClass:(Class)aClass { + NSDictionary *resultMap = + [GTLUtilities mergedClassDictionaryForSelector:@selector(arrayPropertyToClassMap) + startClass:aClass + ancestorClass:[GTLQuery class] + cache:gArrayPropertyToClassMapCache]; + return resultMap; +} + +#pragma mark Runtime Support + +- (NSDictionary *)surrogates { + // Stub method just needed for RumtimeCommon, query doesn't use surrogates. + return nil; +} + ++ (Class)ancestorClass { + return [GTLQuery class]; +} + ++ (BOOL)resolveInstanceMethod:(SEL)sel { + BOOL resolved = [GTLRuntimeCommon resolveInstanceMethod:sel onClass:self]; + if (resolved) + return YES; + + return [super resolveInstanceMethod:sel]; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.h new file mode 100644 index 00000000..28822b5e --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.h @@ -0,0 +1,57 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLRuntimeCommon.h +// + + +#import + +#import "GTLDefines.h" + +// This protocol and support class are an internal implementation detail so +// GTLObject and GTLQuery can share some code. + +@protocol GTLRuntimeCommon +@required +// Get/Set properties +- (void)setJSONValue:(id)obj forKey:(NSString *)key; +- (id)JSONValueForKey:(NSString *)key; +// Child cache +- (void)setCacheChild:(id)obj forKey:(NSString *)key; +- (id)cacheChildForKey:(NSString *)key; +// Surrogate class mappings. +- (NSDictionary *)surrogates; +// Key map ++ (NSDictionary *)propertyToJSONKeyMapForClass:(Class)aClass; +// Array item types ++ (NSDictionary *)arrayPropertyToClassMapForClass:(Class)aClass; +// The parent class for dynamic support ++ (Class)ancestorClass; +@end + +@interface GTLRuntimeCommon : NSObject +// Wire things up. ++ (BOOL)resolveInstanceMethod:(SEL)sel onClass:(Class)onClass; +// Helpers ++ (id)objectFromJSON:(id)json + defaultClass:(Class)defaultClass + surrogates:(NSDictionary *)surrogates + isCacheable:(BOOL*)isCacheable; ++ (id)jsonFromAPIObject:(id)obj + expectedClass:(Class)expectedClass + isCacheable:(BOOL*)isCacheable; +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.m new file mode 100644 index 00000000..6b2880be --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.m @@ -0,0 +1,1135 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLRuntimeCommon.m +// + +#include + +#import "GTLRuntimeCommon.h" + +#import "GTLDateTime.h" +#import "GTLObject.h" +#import "GTLUtilities.h" + +static NSString *const kReturnClassKey = @"returnClass"; +static NSString *const kContainedClassKey = @"containedClass"; +static NSString *const kJSONKey = @"jsonKey"; + +// Note: NSObject's class is used as a marker for the expected/default class +// when Discovery says it can be any type of object. + +@implementation GTLRuntimeCommon + +// Helper to generically convert JSON to an api object type. ++ (id)objectFromJSON:(id)json + defaultClass:(Class)defaultClass + surrogates:(NSDictionary *)surrogates + isCacheable:(BOOL*)isCacheable { + id result = nil; + BOOL canBeCached = YES; + + // TODO(TVL): use defaultClass to validate things like expectedClass is + // done in jsonFromAPIObject:expectedClass:isCacheable:? + + if ([json isKindOfClass:[NSDictionary class]]) { + // If no default, or the default was any object, then default to base + // object here (and hope there is a kind to get the right thing). + if ((defaultClass == Nil) || [defaultClass isEqual:[NSObject class]]) { + defaultClass = [GTLObject class]; + } + result = [GTLObject objectForJSON:json + defaultClass:defaultClass + surrogates:surrogates + batchClassMap:nil]; + } else if ([json isKindOfClass:[NSArray class]]) { + NSArray *jsonArray = json; + // make an object for each JSON dictionary in the array + NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:[jsonArray count]]; + for (id jsonItem in jsonArray) { + id item = [self objectFromJSON:jsonItem + defaultClass:defaultClass + surrogates:surrogates + isCacheable:NULL]; + [resultArray addObject:item]; + } + result = resultArray; + } else if ([json isKindOfClass:[NSString class]]) { + // DateTimes live in JSON as strings, so convert + if ([defaultClass isEqual:[GTLDateTime class]]) { + result = [GTLDateTime dateTimeWithRFC3339String:json]; + } else { + result = json; + canBeCached = NO; + } + } else if ([json isKindOfClass:[NSNumber class]] || + [json isKindOfClass:[NSNull class]]) { + result = json; + canBeCached = NO; + } else { + GTL_DEBUG_LOG(@"GTLRuntimeCommon: unsupported class '%s' in objectFromJSON", + class_getName([json class])); + } + + if (isCacheable) { + *isCacheable = canBeCached; + } + return result; +} + +// Helper to generically convert an api object type to JSON. +// |expectedClass| is the type that was expected for |obj|. ++ (id)jsonFromAPIObject:(id)obj + expectedClass:(Class)expectedClass + isCacheable:(BOOL*)isCacheable { + id result = nil; + BOOL canBeCached = YES; + BOOL checkExpected = (expectedClass != Nil); + + if ([obj isKindOfClass:[NSString class]]) { + result = [[obj copy] autorelease]; + canBeCached = NO; + } else if ([obj isKindOfClass:[NSNumber class]] || + [obj isKindOfClass:[NSNull class]]) { + result = obj; + canBeCached = NO; + } else if ([obj isKindOfClass:[GTLObject class]]) { + result = [obj JSON]; + } else if ([obj isKindOfClass:[NSArray class]]) { + checkExpected = NO; + NSArray *array = obj; + // get the JSON for each thing in the array + NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:[array count]]; + for (id item in array) { + id itemJSON = [self jsonFromAPIObject:item + expectedClass:expectedClass + isCacheable:NULL]; + [resultArray addObject:itemJSON]; + } + result = resultArray; + } else if ([obj isKindOfClass:[GTLDateTime class]]) { + // DateTimes live in JSON as strings, so convert. + GTLDateTime *dateTime = obj; + result = [dateTime stringValue]; + } else { + checkExpected = NO; + GTL_DEBUG_LOG(@"GTLRuntimeCommon: unsupported class '%s' in jsonFromAPIObject", + class_getName([obj class])); + } + + if (checkExpected) { + // If the default was any object, then clear it to skip validation checks. + if ([expectedClass isEqual:[NSObject class]] || + [obj isKindOfClass:[NSNull class]]) { + expectedClass = nil; + } + if (expectedClass && ![obj isKindOfClass:expectedClass]) { + GTL_DEBUG_LOG(@"GTLRuntimeCommon: jsonFromAPIObject expected class '%s' instead got '%s'", + class_getName(expectedClass), class_getName([obj class])); + } + } + + if (isCacheable) { + *isCacheable = canBeCached; + } + return result; +} + +#pragma mark JSON/Object Utilities + +static NSMutableDictionary *gDispatchCache = nil; + +static CFStringRef SelectorKeyCopyDescriptionCallBack(const void *key) { + // Make a CFString from the key + NSString *name = NSStringFromSelector((SEL) key); + CFStringRef str = CFStringCreateCopy(kCFAllocatorDefault, (CFStringRef) name); + return str; +} + +// Save the dispatch details for the specified class and selector ++ (void)setStoredDispatchForClass:(Class)dispatchClass + selector:(SEL)sel + returnClass:(Class)returnClass + containedClass:(Class)containedClass + jsonKey:(NSString *)jsonKey { + // cache structure: + // class -> + // selector -> + // returnClass + // containedClass + // jsonKey + @synchronized([GTLRuntimeCommon class]) { + if (gDispatchCache == nil) { + gDispatchCache = [GTLUtilities newStaticDictionary]; + } + + CFMutableDictionaryRef classDict = + (CFMutableDictionaryRef) [gDispatchCache objectForKey:dispatchClass]; + if (classDict == nil) { + // We create a CFDictionary since the keys are raw selectors rather than + // NSStrings + const CFDictionaryKeyCallBacks keyCallBacks = { + .version = 0, + .retain = NULL, + .release = NULL, + .copyDescription = SelectorKeyCopyDescriptionCallBack, + .equal = NULL, // defaults to pointer comparison + .hash = NULL // defaults to the pointer value + }; + const CFIndex capacity = 0; // no limit + classDict = CFDictionaryCreateMutable(kCFAllocatorDefault, capacity, + &keyCallBacks, + &kCFTypeDictionaryValueCallBacks); + [gDispatchCache setObject:(id)classDict + forKey:(id)dispatchClass]; + CFRelease(classDict); + } + + NSDictionary *selDict = (NSDictionary *)CFDictionaryGetValue(classDict, sel); + if (selDict == nil) { + selDict = [NSDictionary dictionaryWithObjectsAndKeys: + jsonKey, kJSONKey, + returnClass, kReturnClassKey, // can be nil (primitive types) + containedClass, kContainedClassKey, // may be nil + nil]; + CFDictionarySetValue(classDict, sel, selDict); + } else { + // we already have a dictionary for this selector on this class, which is + // surprising + GTL_DEBUG_LOG(@"Storing duplicate dispatch for %@ selector %@", + dispatchClass, NSStringFromSelector(sel)); + } + } +} + ++ (BOOL)getStoredDispatchForClass:(Class)dispatchClass + selector:(SEL)sel + returnClass:(Class *)outReturnClass + containedClass:(Class *)outContainedClass + jsonKey:(NSString **)outJsonKey { + @synchronized([GTLRuntimeCommon class]) { + // walk from this class up the hierarchy to the ancestor class + Class topClass = class_getSuperclass([dispatchClass ancestorClass]); + for (Class currClass = dispatchClass; + currClass != topClass; + currClass = class_getSuperclass(currClass)) { + + CFMutableDictionaryRef classDict = + (CFMutableDictionaryRef) [gDispatchCache objectForKey:currClass]; + if (classDict) { + NSMutableDictionary *selDict = + (NSMutableDictionary *) CFDictionaryGetValue(classDict, sel); + if (selDict) { + if (outReturnClass) { + *outReturnClass = [selDict objectForKey:kReturnClassKey]; + } + if (outContainedClass) { + *outContainedClass = [selDict objectForKey:kContainedClassKey]; + } + if (outJsonKey) { + *outJsonKey = [selDict objectForKey:kJSONKey]; + } + return YES; + } + } + } + } + GTL_DEBUG_LOG(@"Failed to find stored dispatch info for %@ %s", + dispatchClass, sel_getName(sel)); + return NO; +} + +#pragma mark IMPs - getters and setters for specific object types + +#if !__LP64__ + +// NSInteger on 32bit +static NSInteger DynamicInteger32Getter(id self, SEL sel) { + // get an NSInteger (NSNumber) from the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [self JSONValueForKey:jsonKey]; + num = GTL_EnsureNSNumber(num); + NSInteger result = [num integerValue]; + return result; + } + return 0; +} + +static void DynamicInteger32Setter(id self, SEL sel, NSInteger val) { + // save an NSInteger (NSNumber) into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [NSNumber numberWithInteger:val]; + [self setJSONValue:num forKey:jsonKey]; + } +} + +// NSUInteger on 32bit +static NSUInteger DynamicUInteger32Getter(id self, SEL sel) { + // get an NSUInteger (NSNumber) from the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [self JSONValueForKey:jsonKey]; + num = GTL_EnsureNSNumber(num); + NSUInteger result = [num unsignedIntegerValue]; + return result; + } + return 0; +} + +static void DynamicUInteger32Setter(id self, SEL sel, NSUInteger val) { + // save an NSUInteger (NSNumber) into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [NSNumber numberWithUnsignedInteger:val]; + [self setJSONValue:num forKey:jsonKey]; + } +} + +#endif // !__LP64__ + +// NSInteger on 64bit, long long on 32bit and 64bit +static long long DynamicLongLongGetter(id self, SEL sel) { + // get a long long (NSNumber) from the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [self JSONValueForKey:jsonKey]; + num = GTL_EnsureNSNumber(num); + long long result = [num longLongValue]; + return result; + } + return 0; +} + +static void DynamicLongLongSetter(id self, SEL sel, long long val) { + // save a long long (NSNumber) into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [NSNumber numberWithLongLong:val]; + [self setJSONValue:num forKey:jsonKey]; + } +} + +// NSUInteger on 64bit, unsiged long long on 32bit and 64bit +static unsigned long long DynamicULongLongGetter(id self, SEL sel) { + // get an unsigned long long (NSNumber) from the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [self JSONValueForKey:jsonKey]; + num = GTL_EnsureNSNumber(num); + unsigned long long result = [num unsignedLongLongValue]; + return result; + } + return 0; +} + +static void DynamicULongLongSetter(id self, SEL sel, unsigned long long val) { + // save an unsigned long long (NSNumber) into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [NSNumber numberWithUnsignedLongLong:val]; + [self setJSONValue:num forKey:jsonKey]; + } +} + +// float +static float DynamicFloatGetter(id self, SEL sel) { + // get a float (NSNumber) from the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [self JSONValueForKey:jsonKey]; + num = GTL_EnsureNSNumber(num); + float result = [num floatValue]; + return result; + } + return 0.0f; +} + +static void DynamicFloatSetter(id self, SEL sel, float val) { + // save a float (NSNumber) into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [NSNumber numberWithFloat:val]; + [self setJSONValue:num forKey:jsonKey]; + } +} + +// double +static double DynamicDoubleGetter(id self, SEL sel) { + // get a double (NSNumber) from the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [self JSONValueForKey:jsonKey]; + num = GTL_EnsureNSNumber(num); + double result = [num doubleValue]; + return result; + } + return 0.0; +} + +static void DynamicDoubleSetter(id self, SEL sel, double val) { + // save a double (NSNumber) into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [NSNumber numberWithDouble:val]; + [self setJSONValue:num forKey:jsonKey]; + } +} + +// BOOL +static BOOL DynamicBooleanGetter(id self, SEL sel) { + // get a BOOL (NSNumber) from the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [self JSONValueForKey:jsonKey]; + BOOL flag = [num boolValue]; + return flag; + } + return NO; +} + +static void DynamicBooleanSetter(id self, SEL sel, BOOL val) { + // save a BOOL (NSNumber) into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSNumber *num = [NSNumber numberWithBool:val]; + [self setJSONValue:num forKey:jsonKey]; + } +} + +// NSString +static NSString *DynamicStringGetter(id self, SEL sel) { + // get an NSString from the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + + NSString *str = [self JSONValueForKey:jsonKey]; + return str; + } + return nil; +} + +static void DynamicStringSetter(id self, SEL sel, + NSString *str) { + // save an NSString into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + NSString *copiedStr = [str copy]; + [self setJSONValue:copiedStr forKey:jsonKey]; + [copiedStr release]; + } +} + +// GTLDateTime +static GTLDateTime *DynamicDateTimeGetter(id self, SEL sel) { + // get a GTLDateTime from the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + + // Return the cached object before creating on demand. + GTLDateTime *cachedDateTime = [self cacheChildForKey:jsonKey]; + if (cachedDateTime != nil) { + return cachedDateTime; + } + NSString *str = [self JSONValueForKey:jsonKey]; + id cacheValue, resultValue; + if (![str isKindOfClass:[NSNull class]]) { + GTLDateTime *dateTime = [GTLDateTime dateTimeWithRFC3339String:str]; + + cacheValue = dateTime; + resultValue = dateTime; + } else { + cacheValue = nil; + resultValue = [NSNull null]; + } + [self setCacheChild:cacheValue forKey:jsonKey]; + return resultValue; + } + return nil; +} + +static void DynamicDateTimeSetter(id self, SEL sel, + GTLDateTime *dateTime) { + // save an GTLDateTime into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + id cacheValue, jsonValue; + if (![dateTime isKindOfClass:[NSNull class]]) { + jsonValue = [dateTime stringValue]; + cacheValue = dateTime; + } else { + jsonValue = [NSNull null]; + cacheValue = nil; + } + + [self setJSONValue:jsonValue forKey:jsonKey]; + [self setCacheChild:cacheValue forKey:jsonKey]; + } +} + +// NSNumber +static NSNumber *DynamicNumberGetter(id self, SEL sel) { + // get an NSNumber from the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + + NSNumber *num = [self JSONValueForKey:jsonKey]; + num = GTL_EnsureNSNumber(num); + return num; + } + return nil; +} + +static void DynamicNumberSetter(id self, SEL sel, + NSNumber *num) { + // save an NSNumber into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + [self setJSONValue:num forKey:jsonKey]; + } +} + +// GTLObject +static GTLObject *DynamicObjectGetter(id self, SEL sel) { + // get a GTLObject from the JSON dictionary + NSString *jsonKey = nil; + Class returnClass = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:&returnClass + containedClass:NULL + jsonKey:&jsonKey]) { + + // Return the cached object before creating on demand. + GTLObject *cachedObj = [self cacheChildForKey:jsonKey]; + if (cachedObj != nil) { + return cachedObj; + } + NSMutableDictionary *dict = [self JSONValueForKey:jsonKey]; + if ([dict isKindOfClass:[NSMutableDictionary class]]) { + // get the class of the object being returned, and instantiate it + if (returnClass == Nil) { + returnClass = [GTLObject class]; + } + + NSDictionary *surrogates = self.surrogates; + GTLObject *obj = [GTLObject objectForJSON:dict + defaultClass:returnClass + surrogates:surrogates + batchClassMap:nil]; + [self setCacheChild:obj forKey:jsonKey]; + return obj; + } else if ([dict isKindOfClass:[NSNull class]]) { + [self setCacheChild:nil forKey:jsonKey]; + return (id) [NSNull null]; + } else if (dict != nil) { + // unexpected; probably got a string -- let the caller figure it out + GTL_DEBUG_LOG(@"GTLObject: unexpected JSON: %@.%@ should be a dictionary, actually is a %@:\n%@", + NSStringFromClass(selfClass), NSStringFromSelector(sel), + NSStringFromClass([dict class]), dict); + return (GTLObject *)dict; + } + } + return nil; +} + +static void DynamicObjectSetter(id self, SEL sel, + GTLObject *obj) { + // save a GTLObject into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + id cacheValue, jsonValue; + if (![obj isKindOfClass:[NSNull class]]) { + NSMutableDictionary *dict = [obj JSON]; + if (dict == nil && obj != nil) { + // adding an empty object; it should have a JSON dictionary so it can + // hold future assignments + obj.JSON = [NSMutableDictionary dictionary]; + jsonValue = obj.JSON; + } else { + jsonValue = dict; + } + cacheValue = obj; + } else { + jsonValue = [NSNull null]; + cacheValue = nil; + } + [self setJSONValue:jsonValue forKey:jsonKey]; + [self setCacheChild:cacheValue forKey:jsonKey]; + } +} + +// get an NSArray of GTLObjects, NSStrings, or NSNumbers from the +// JSON dictionary for this object +static NSMutableArray *DynamicArrayGetter(id self, SEL sel) { + NSString *jsonKey = nil; + Class containedClass = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:&containedClass + jsonKey:&jsonKey]) { + + // Return the cached array before creating on demand. + NSMutableArray *cachedArray = [self cacheChildForKey:jsonKey]; + if (cachedArray != nil) { + return cachedArray; + } + NSMutableArray *result = nil; + NSArray *array = [self JSONValueForKey:jsonKey]; + if (array != nil) { + if ([array isKindOfClass:[NSArray class]]) { + NSDictionary *surrogates = self.surrogates; + result = [GTLRuntimeCommon objectFromJSON:array + defaultClass:containedClass + surrogates:surrogates + isCacheable:NULL]; + } else { +#if DEBUG + if (![array isKindOfClass:[NSNull class]]) { + GTL_DEBUG_LOG(@"GTLObject: unexpected JSON: %@.%@ should be an array, actually is a %@:\n%@", + NSStringFromClass(selfClass), NSStringFromSelector(sel), + NSStringFromClass([array class]), array); + } +#endif + result = (NSMutableArray *)array; + } + } + + [self setCacheChild:result forKey:jsonKey]; + return result; + } + return nil; +} + +static void DynamicArraySetter(id self, SEL sel, + NSMutableArray *array) { + // save an array of GTLObjects objects into the JSON dictionary + NSString *jsonKey = nil; + Class selfClass = [self class]; + Class containedClass = nil; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:&containedClass + jsonKey:&jsonKey]) { + id json = [GTLRuntimeCommon jsonFromAPIObject:array + expectedClass:containedClass + isCacheable:NULL]; + [self setJSONValue:json forKey:jsonKey]; + [self setCacheChild:array forKey:jsonKey]; + } +} + +// type 'id' +static id DynamicNSObjectGetter(id self, SEL sel) { + NSString *jsonKey = nil; + Class returnClass = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:&returnClass + containedClass:NULL + jsonKey:&jsonKey]) { + + // Return the cached object before creating on demand. + id cachedObj = [self cacheChildForKey:jsonKey]; + if (cachedObj != nil) { + return cachedObj; + } + + id jsonObj = [self JSONValueForKey:jsonKey]; + if (jsonObj != nil) { + BOOL shouldCache = NO; + NSDictionary *surrogates = self.surrogates; + id result = [GTLRuntimeCommon objectFromJSON:jsonObj + defaultClass:nil + surrogates:surrogates + isCacheable:&shouldCache]; + + [self setCacheChild:(shouldCache ? result : nil) + forKey:jsonKey]; + return result; + } + } + return nil; +} + +static void DynamicNSObjectSetter(id self, SEL sel, id obj) { + NSString *jsonKey = nil; + Class selfClass = [self class]; + if ([GTLRuntimeCommon getStoredDispatchForClass:selfClass + selector:sel + returnClass:NULL + containedClass:NULL + jsonKey:&jsonKey]) { + BOOL shouldCache = NO; + id json = [GTLRuntimeCommon jsonFromAPIObject:obj + expectedClass:Nil + isCacheable:&shouldCache]; + [self setJSONValue:json forKey:jsonKey]; + [self setCacheChild:(shouldCache ? obj : nil) + forKey:jsonKey]; + } +} + +#pragma mark Runtime lookup support + +static objc_property_t PropertyForSel(Class startClass, + SEL sel, BOOL isSetter, + Class *outFoundClass) { + const char *baseName = sel_getName(sel); + size_t baseNameLen = strlen(baseName); + if (isSetter) { + baseName += 3; // skip "set" + baseNameLen -= 4; // subtract "set" and the final colon + } + + // walk from this class up the hierarchy to the ancestor class + Class topClass = class_getSuperclass([startClass ancestorClass]); + for (Class currClass = startClass; + currClass != topClass; + currClass = class_getSuperclass(currClass)) { + // step through this class's properties + objc_property_t foundProp = NULL; + objc_property_t *properties = class_copyPropertyList(currClass, NULL); + if (properties) { + for (objc_property_t *prop = properties; *prop != NULL; ++prop) { + const char *propName = property_getName(*prop); + size_t propNameLen = strlen(propName); + + // search for an exact-name match (a getter), but case-insensitive on the + // first character (in case baseName comes from a setter) + if (baseNameLen == propNameLen + && strncasecmp(baseName, propName, 1) == 0 + && (baseNameLen <= 1 + || strncmp(baseName + 1, propName + 1, baseNameLen - 1) == 0)) { + // return the actual property name + foundProp = *prop; + + // if requested, return the class containing the property + if (outFoundClass) *outFoundClass = currClass; + break; + } + } + free(properties); + } + if (foundProp) return foundProp; + } + + // not found; this occasionally happens when the system looks for a method + // like "getFoo" or "descriptionWithLocale:indent:" + return NULL; +} + +typedef struct { + const char *attributePrefix; + + const char *setterEncoding; + IMP setterFunction; + const char *getterEncoding; + IMP getterFunction; + + // These are the "fixed" return classes, but some properties will require + // looking up the return class instead (because it is a subclass of + // GTLObject). + const char *returnClassName; + Class returnClass; + BOOL extractReturnClass; + +} GTLDynamicImpInfo; + +static const GTLDynamicImpInfo *DynamicImpInfoForProperty(objc_property_t prop, + Class *outReturnClass) { + + if (outReturnClass) *outReturnClass = nil; + + // dynamic method resolution: + // http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html + // + // property runtimes: + // http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html + + // Get and parse the property attributes, which look something like + // T@"NSString",&,D,P + // Ti,D -- NSInteger on 32bit + // Tq,D -- NSInteger on 64bit, long long on 32bit & 64bit + // Tc,D -- BOOL comes as char + // T@"NSString",D + // T@"GTLLink",D + // T@"NSArray",D + + + static GTLDynamicImpInfo kImplInfo[] = { +#if !__LP64__ + { // NSInteger on 32bit + "Ti", + "v@:i", (IMP)DynamicInteger32Setter, + "i@:", (IMP)DynamicInteger32Getter, + nil, nil, + NO + }, + { // NSUInteger on 32bit + "TI", + "v@:I", (IMP)DynamicUInteger32Setter, + "I@:", (IMP)DynamicUInteger32Getter, + nil, nil, + NO + }, +#endif + { // NSInteger on 64bit, long long on 32bit and 64bit. + "Tq", + "v@:q", (IMP)DynamicLongLongSetter, + "q@:", (IMP)DynamicLongLongGetter, + nil, nil, + NO + }, + { // NSUInteger on 64bit, long long on 32bit and 64bit. + "TQ", + "v@:Q", (IMP)DynamicULongLongSetter, + "Q@:", (IMP)DynamicULongLongGetter, + nil, nil, + NO + }, + { // float + "Tf", + "v@:f", (IMP)DynamicFloatSetter, + "f@:", (IMP)DynamicFloatGetter, + nil, nil, + NO + }, + { // double + "Td", + "v@:d", (IMP)DynamicDoubleSetter, + "d@:", (IMP)DynamicDoubleGetter, + nil, nil, + NO + }, + { // BOOL + "Tc", + "v@:c", (IMP)DynamicBooleanSetter, + "c@:", (IMP)DynamicBooleanGetter, + nil, nil, + NO + }, + { // NSString + "T@\"NSString\"", + "v@:@", (IMP)DynamicStringSetter, + "@@:", (IMP)DynamicStringGetter, + "NSString", nil, + NO + }, + { // NSNumber + "T@\"NSNumber\"", + "v@:@", (IMP)DynamicNumberSetter, + "@@:", (IMP)DynamicNumberGetter, + "NSNumber", nil, + NO + }, + { // GTLDateTime +#if !defined(GTL_TARGET_NAMESPACE) + "T@\"GTLDateTime\"", + "v@:@", (IMP)DynamicDateTimeSetter, + "@@:", (IMP)DynamicDateTimeGetter, + "GTLDateTime", nil, + NO +#else + "T@\"" GTL_TARGET_NAMESPACE_STRING "_" "GTLDateTime\"", + "v@:@", (IMP)DynamicDateTimeSetter, + "@@:", (IMP)DynamicDateTimeGetter, + GTL_TARGET_NAMESPACE_STRING "_" "GTLDateTime", nil, + NO +#endif + }, + { // NSArray with type + "T@\"NSArray\"", + "v@:@", (IMP)DynamicArraySetter, + "@@:", (IMP)DynamicArrayGetter, + "NSArray", nil, + NO + }, + { // id (any of the objects above) + "T@,", + "v@:@", (IMP)DynamicNSObjectSetter, + "@@:", (IMP)DynamicNSObjectGetter, + "NSObject", nil, + NO + }, + { // GTLObject - Last, cause it's a special case and prefix is general + "T@\"", + "v@:@", (IMP)DynamicObjectSetter, + "@@:", (IMP)DynamicObjectGetter, + nil, nil, + YES + }, + }; + + static BOOL hasLookedUpClasses = NO; + if (!hasLookedUpClasses) { + // Unfortunately, you can't put [NSString class] into the static structure, + // so this lookup has to be done at runtime. + hasLookedUpClasses = YES; + for (uint32_t idx = 0; idx < sizeof(kImplInfo)/sizeof(kImplInfo[0]); ++idx) { + if (kImplInfo[idx].returnClassName) { + kImplInfo[idx].returnClass = objc_getClass(kImplInfo[idx].returnClassName); + NSCAssert1(kImplInfo[idx].returnClass != nil, + @"GTLRuntimeCommon: class lookup failed: %s", kImplInfo[idx].returnClassName); + } + } + } + + const char *attr = property_getAttributes(prop); + + const char *dynamicMarker = strstr(attr, ",D"); + if (!dynamicMarker || + (dynamicMarker[2] != 0 && dynamicMarker[2] != ',' )) { + GTL_DEBUG_LOG(@"GTLRuntimeCommon: property %s isn't dynamic, attributes %s", + property_getName(prop), attr ? attr : "(nil)"); + return NULL; + } + + const GTLDynamicImpInfo *result = NULL; + + // Cycle over the list + + for (uint32_t idx = 0; idx < sizeof(kImplInfo)/sizeof(kImplInfo[0]); ++idx) { + const char *attributePrefix = kImplInfo[idx].attributePrefix; + if (strncmp(attr, attributePrefix, strlen(attributePrefix)) == 0) { + result = &kImplInfo[idx]; + if (outReturnClass) *outReturnClass = result->returnClass; + break; + } + } + + if (result == NULL) { + GTL_DEBUG_LOG(@"GTLRuntimeCommon: unexpected attributes %s for property %s", + attr ? attr : "(nil)", property_getName(prop)); + return NULL; + } + + if (result->extractReturnClass && outReturnClass) { + + // add a null at the next quotation mark + char *attrCopy = strdup(attr); + char *classNameStart = attrCopy + 3; + char *classNameEnd = strstr(classNameStart, "\""); + if (classNameEnd) { + *classNameEnd = '\0'; + + // Lookup the return class + *outReturnClass = objc_getClass(classNameStart); + if (*outReturnClass == nil) { + GTL_DEBUG_LOG(@"GTLRuntimeCommon: did not find class with name \"%s\" " + "for property \"%s\" with attributes \"%s\"", + classNameStart, property_getName(prop), attr); + } + } else { + GTL_DEBUG_LOG(@"GTLRuntimeCommon: Failed to find end of class name for " + "property \"%s\" with attributes \"%s\"", + property_getName(prop), attr); + } + free(attrCopy); + } + + return result; +} + +#pragma mark Runtime - wiring point + ++ (BOOL)resolveInstanceMethod:(SEL)sel onClass:(Class)onClass { + // dynamic method resolution: + // http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtDynamicResolution.html + // + // property runtimes: + // http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html + + const char *selName = sel_getName(sel); + size_t selNameLen = strlen(selName); + char lastChar = selName[selNameLen - 1]; + BOOL isSetter = (lastChar == ':'); + + // look for a declared property matching this selector name exactly + Class foundClass = nil; + + objc_property_t prop = PropertyForSel(onClass, sel, isSetter, &foundClass); + if (prop != NULL && foundClass != nil) { + + Class returnClass = nil; + const GTLDynamicImpInfo *implInfo = DynamicImpInfoForProperty(prop, + &returnClass); + if (implInfo == NULL) { + GTL_DEBUG_LOG(@"GTLRuntimeCommon: unexpected return type class %s for " + "property \"%s\" of class \"%s\"", + returnClass ? class_getName(returnClass) : "", + property_getName(prop), + class_getName(onClass)); + } + + if (implInfo != NULL) { + IMP imp = ( isSetter ? implInfo->setterFunction : implInfo->getterFunction ); + const char *encoding = ( isSetter ? implInfo->setterEncoding : implInfo->getterEncoding ); + + class_addMethod(foundClass, sel, imp, encoding); + + const char *propName = property_getName(prop); + NSString *propStr = [NSString stringWithUTF8String:propName]; + + // replace the property name with the proper JSON key if it's + // special-cased with a map in the found class; otherwise, the property + // name is the JSON key + NSDictionary *keyMap = + [[foundClass ancestorClass] propertyToJSONKeyMapForClass:foundClass]; + NSString *jsonKey = [keyMap objectForKey:propStr]; + if (jsonKey == nil) { + jsonKey = propStr; + } + + Class containedClass = nil; + + // For arrays we need to look up what the contained class is. + if (imp == (IMP)DynamicArraySetter || imp == (IMP)DynamicArrayGetter) { + NSDictionary *classMap = + [[foundClass ancestorClass] arrayPropertyToClassMapForClass:foundClass]; + containedClass = [classMap objectForKey:jsonKey]; + if (containedClass == Nil) { + GTL_DEBUG_LOG(@"GTLRuntimeCommon: expected array item class for " + "property \"%s\" of class \"%s\"", + property_getName(prop), class_getName(foundClass)); + } + } + + // save the dispatch info to the cache + [GTLRuntimeCommon setStoredDispatchForClass:foundClass + selector:sel + returnClass:returnClass + containedClass:containedClass + jsonKey:jsonKey]; + return YES; + } + } + + return NO; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.h new file mode 100644 index 00000000..f7929e2f --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.h @@ -0,0 +1,592 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLService.h +// + +#import + +#import "GTLDefines.h" +#import "GTMHTTPFetcherService.h" +#import "GTLBatchQuery.h" +#import "GTLBatchResult.h" +#import "GTLDateTime.h" +#import "GTLErrorObject.h" +#import "GTLFramework.h" +#import "GTLJSONParser.h" +#import "GTLObject.h" +#import "GTLQuery.h" +#import "GTLUtilities.h" + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTLSERVICE_DEFINE_GLOBALS +#define _EXTERN +#define _INITIALIZE_AS(x) =x +#else +#define _EXTERN extern +#define _INITIALIZE_AS(x) +#endif + +// Error domains +_EXTERN NSString* const kGTLServiceErrorDomain _INITIALIZE_AS(@"com.google.GTLServiceDomain"); +enum { + kGTLErrorQueryResultMissing = -3000, + kGTLErrorWaitTimedOut = -3001 +}; + +_EXTERN NSString* const kGTLJSONRPCErrorDomain _INITIALIZE_AS(@"com.google.GTLJSONRPCErrorDomain"); + +// We'll consistently store the server error string in the userInfo under +// this key +_EXTERN NSString* const kGTLServerErrorStringKey _INITIALIZE_AS(@"error"); + +_EXTERN Class const kGTLUseRegisteredClass _INITIALIZE_AS(nil); + +_EXTERN NSUInteger const kGTLStandardUploadChunkSize _INITIALIZE_AS(NSUIntegerMax); + +// When servers return us structured JSON errors, the NSError will +// contain a GTLErrorObject in the userInfo dictionary under the key +// kGTLStructuredErrorsKey +_EXTERN NSString* const kGTLStructuredErrorKey _INITIALIZE_AS(@"GTLStructuredError"); + +// When specifying an ETag for updating or deleting a single entry, use +// kGTLETagWildcard to tell the server to replace the current value +// unconditionally. Do not use this in entries in a batch feed. +_EXTERN NSString* const kGTLETagWildcard _INITIALIZE_AS(@"*"); + +// Notifications when parsing of a fetcher feed or entry begins or ends +_EXTERN NSString* const kGTLServiceTicketParsingStartedNotification _INITIALIZE_AS(@"kGTLServiceTicketParsingStartedNotification"); +_EXTERN NSString* const kGTLServiceTicketParsingStoppedNotification _INITIALIZE_AS(@"kGTLServiceTicketParsingStoppedNotification"); + +@class GTLServiceTicket; + +// Block types used for fetch callbacks +// +// These typedefs are not used in the header file method declarations +// since it's more useful when code sense expansions show the argument +// types rather than the typedefs + +#if NS_BLOCKS_AVAILABLE +typedef void (^GTLServiceCompletionHandler)(GTLServiceTicket *ticket, id object, NSError *error); + +typedef void (^GTLServiceUploadProgressBlock)(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength); +#else +typedef void *GTLServiceCompletionHandler; + +typedef void *GTLServiceUploadProgressBlock; +#endif // NS_BLOCKS_AVAILABLE + +#pragma mark - + +// +// Service base class +// + +@interface GTLService : NSObject { + @private + NSOperationQueue *parseQueue_; + NSString *userAgent_; + GTMHTTPFetcherService *fetcherService_; + NSString *userAgentAddition_; + + NSMutableDictionary *serviceProperties_; // initial values for properties in future tickets + + NSDictionary *surrogates_; // initial value for surrogates in future tickets + + SEL uploadProgressSelector_; // optional + +#if NS_BLOCKS_AVAILABLE + BOOL (^retryBlock_)(GTLServiceTicket *, BOOL, NSError *); + void (^uploadProgressBlock_)(GTLServiceTicket *ticket, + unsigned long long numberOfBytesRead, + unsigned long long dataLength); +#elif !__LP64__ + // Placeholders: for 32-bit builds, keep the size of the object's ivar section + // the same with and without blocks + id retryPlaceholder_; + id uploadProgressPlaceholder_; +#endif + + NSUInteger uploadChunkSize_; // zero when uploading via multi-part MIME http body + + BOOL isRetryEnabled_; // user allows auto-retries + SEL retrySelector_; // optional; set with setServiceRetrySelector + NSTimeInterval maxRetryInterval_; // default to 600. seconds + + BOOL shouldFetchNextPages_; + + NSString *apiKey_; + BOOL isRESTDataWrapperRequired_; + NSString *apiVersion_; + NSURL *rpcURL_; + NSURL *rpcUploadURL_; + NSDictionary *urlQueryParameters_; + NSDictionary *additionalHTTPHeaders_; +} + +#pragma mark Query Execution + +// The finishedSelector has a signature matching: +// +// - (void)serviceTicket:(GTLServiceTicket *)ticket +// finishedWithObject:(GTLObject *)object +// error:(NSError *)error +// +// If an error occurs, the error parameter will be non-nil. Otherwise, +// the object parameter will point to a GTLObject, if any was returned by +// the fetch. (Delete fetches return no object, so the second parameter will +// be nil.) +// +// If the query object is a GTLBatchQuery, the object passed to the callback +// will be a GTLBatchResult + +- (GTLServiceTicket *)executeQuery:(id)query + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector; + +#if NS_BLOCKS_AVAILABLE +- (GTLServiceTicket *)executeQuery:(id)query + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler; +#endif + +// Automatic page fetches +// +// Tickets can optionally do a sequence of fetches for queries where +// repeated requests with nextPageToken or nextStartIndex values is required to +// retrieve items of all pages of the response collection. The client's +// callback is invoked only when all items have been retrieved, or an error has +// occurred. During the fetch, the items accumulated so far are available from +// the ticket. +// +// Note that the final object may be a combination of multiple page responses +// so it may not be the same as if all results had been returned in a single +// page. Some fields of the response such as total item counts may reflect only +// the final page's values. +// +// Automatic page fetches will return an error if more than 25 page fetches are +// required. For debug builds, this will log a warning to the console when more +// than 2 page fetches occur, as a reminder that the query's maxResults +// parameter should probably be increased to specify more items returned per +// page. +// +// Default value is NO. +@property (nonatomic, assign) BOOL shouldFetchNextPages; + +// Retrying; see comments on retry support at the top of GTMHTTPFetcher. +// +// Default value is NO. +@property (nonatomic, assign, getter=isRetryEnabled) BOOL retryEnabled; + +// Some services require a developer key for quotas and limits. Setting this +// will include it on all request sent to this service via a GTLQuery class. +@property (nonatomic, copy) NSString *APIKey; + +// An authorizer adds user authentication headers to the request as needed. +@property (nonatomic, retain) id authorizer; + +// Retry selector is optional for retries. +// +// If present, it should have the signature: +// -(BOOL)ticket:(GTLServiceTicket *)ticket willRetry:(BOOL)suggestedWillRetry forError:(NSError *)error +// and return YES to cause a retry. Note that unlike the GTMHTTPFetcher retry +// selector, this selector's first argument is a ticket, not a fetcher. + +@property (nonatomic, assign) SEL retrySelector; +#if NS_BLOCKS_AVAILABLE +@property (copy) BOOL (^retryBlock)(GTLServiceTicket *ticket, BOOL suggestedWillRetry, NSError *error); +#endif + +@property (nonatomic, assign) NSTimeInterval maxRetryInterval; + +// +// Fetches may be done using RPC or REST APIs, without creating +// a GTLQuery object +// + +#pragma mark RPC Fetch Methods + +// +// These methods may be used for RPC fetches without creating a GTLQuery object +// + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector; + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector; + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector; + +#if NS_BLOCKS_AVAILABLE +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + objectClass:(Class)objectClass + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler; + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler; + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler; +#endif + +#pragma mark REST Fetch Methods + +- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector; + +- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector; + +- (GTLServiceTicket *)fetchPublicObjectWithURL:(NSURL *)objectURL + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector; + +- (GTLServiceTicket *)fetchObjectByInsertingObject:(GTLObject *)bodyToPut + forURL:(NSURL *)destinationURL + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector; + +- (GTLServiceTicket *)fetchObjectByUpdatingObject:(GTLObject *)bodyToPut + forURL:(NSURL *)destinationURL + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector; + +- (GTLServiceTicket *)deleteResourceURL:(NSURL *)destinationURL + ETag:(NSString *)etagOrNil + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector; + +#if NS_BLOCKS_AVAILABLE +- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler; + +- (GTLServiceTicket *)fetchObjectByInsertingObject:(GTLObject *)bodyToPut + forURL:(NSURL *)destinationURL + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler; + +- (GTLServiceTicket *)fetchObjectByUpdatingObject:(GTLObject *)bodyToPut + forURL:(NSURL *)destinationURL + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler; + +- (GTLServiceTicket *)deleteResourceURL:(NSURL *)destinationURL + ETag:(NSString *)etagOrNil + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler; +#endif + +#pragma mark User Properties + +// Properties and userData are supported for client convenience. +// +// Property keys beginning with _ are reserved by the library. +// +// The service properties dictionary is copied to become the initial property +// dictionary for each ticket. +- (void)setServiceProperty:(id)obj forKey:(NSString *)key; // pass nil obj to remove property +- (id)servicePropertyForKey:(NSString *)key; + +@property (nonatomic, copy) NSDictionary *serviceProperties; + +// The service userData becomes the initial value for each future ticket's +// userData. +@property (nonatomic, retain) id serviceUserData; + +#pragma mark Request Settings + +// Set the surrogates to be used for future tickets. Surrogates are subclasses +// to be used instead of standard classes when creating objects from the JSON. +// For example, this code will make the framework generate objects +// using MyCalendarItemSubclass instead of GTLItemCalendar and +// MyCalendarEventSubclass instead of GTLItemCalendarEvent. +// +// NSDictionary *surrogates = [NSDictionary dictionaryWithObjectsAndKeys: +// [MyCalendarEntrySubclass class], [GTLItemCalendar class], +// [MyCalendarEventSubclass class], [GTLItemCalendarEvent class], +// nil]; +// [calendarService setServiceSurrogates:surrogates]; +// +@property (nonatomic, retain) NSDictionary *surrogates; + +// On iOS 4 and later, the fetch may optionally continue in the background +// until finished or stopped by OS expiration. +// +// The default value is NO. +// +// For Mac OS X, background fetches are always supported, and this property +// is ignored. +@property (nonatomic, assign) BOOL shouldFetchInBackground; + +// Run loop modes are used for scheduling NSURLConnections. +// +// The default value, nil, schedules connections using the current run +// loop mode. To use the service during a modal dialog, be sure to specify +// NSModalPanelRunLoopMode as one of the modes. +@property (nonatomic, retain) NSArray *runLoopModes; + +// Applications needing an additional identifier in the server logs may specify +// one. +@property (nonatomic, copy) NSString *userAgentAddition; + +// Applications have a default user-agent based on the application signature +// in the Info.plist settings. Most applications should not explicitly set +// this property. +@property (nonatomic, copy) NSString *userAgent; + +// The request user agent includes the library and OS version appended to the +// base userAgent, along with the optional addition string. +@property (nonatomic, readonly) NSString *requestUserAgent; + +// Applications may call requestForURL:httpMethod to get a request with the +// proper user-agent and ETag headers +// +// For http method, pass nil (for default GET method), POST, PUT, or DELETE +- (NSMutableURLRequest *)requestForURL:(NSURL *)url + ETag:(NSString *)etagOrNil + httpMethod:(NSString *)httpMethodOrNil; + +// objectRequestForURL returns an NSMutableURLRequest for a JSON GTL object +// +// The object is the object being sent to the server, or nil; +// the http method may be nil for GET, or POST, PUT, DELETE +- (NSMutableURLRequest *)objectRequestForURL:(NSURL *)url + object:(GTLObject *)object + ETag:(NSString *)etag + httpMethod:(NSString *)httpMethod + isREST:(BOOL)isREST + additionalHeaders:(NSDictionary *)additionalHeaders + ticket:(GTLServiceTicket *)ticket; + +// The queue used for parsing JSON responses (previously this property +// was called operationQueue) +@property (nonatomic, retain) NSOperationQueue *parseQueue; + +// The fetcher service object issues the GTMHTTPFetcher instances +// for this API service +@property (nonatomic, retain) GTMHTTPFetcherService *fetcherService; + +// Default storage for cookies is in the service object's fetchHistory. +// +// Apps that want to share cookies between all standalone fetchers and the +// service object may specify static application-wide cookie storage, +// kGTMHTTPFetcherCookieStorageMethodStatic. +@property (nonatomic, assign) NSInteger cookieStorageMethod; + +// When sending REST style queries, should the payload be wrapped in a "data" +// element, and will the reply be wrapped in an "data" element. +@property (nonatomic, assign) BOOL isRESTDataWrapperRequired; + +// Any url query parameters to add to urls (useful for debugging with some +// services). +@property (copy) NSDictionary *urlQueryParameters; + +// Any extra http headers to set on requests for GTLObjects. +@property (copy) NSDictionary *additionalHTTPHeaders; + +// The service API version. +@property (nonatomic, copy) NSString *apiVersion; + +// The URL for sending RPC requests for this service. +@property (nonatomic, retain) NSURL *rpcURL; + +// The URL for sending RPC requests which initiate file upload. +@property (nonatomic, retain) NSURL *rpcUploadURL; + +// Set a non-zero value to enable uploading via chunked fetches +// (resumable uploads); typically this defaults to kGTLStandardUploadChunkSize +// for service subclasses that support chunked uploads +@property (nonatomic, assign) NSUInteger serviceUploadChunkSize; + +// Service subclasses may specify their own default chunk size ++ (NSUInteger)defaultServiceUploadChunkSize; + +// The service uploadProgressSelector becomes the initial value for each future +// ticket's uploadProgressSelector. +// +// The optional uploadProgressSelector will be called in the delegate as bytes +// are uploaded to the server. It should have a signature matching +// +// - (void)ticket:(GTLServiceTicket *)ticket +// hasDeliveredByteCount:(unsigned long long)numberOfBytesRead +// ofTotalByteCount:(unsigned long long)dataLength; +@property (nonatomic, assign) SEL uploadProgressSelector; + +#if NS_BLOCKS_AVAILABLE +@property (copy) void (^uploadProgressBlock)(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength); +#endif + +// Wait synchronously for fetch to complete (strongly discouraged) +// +// This just runs the current event loop until the fetch completes +// or the timout limit is reached. This may discard unexpected events +// that occur while spinning, so it's really not appropriate for use +// in serious applications. +// +// Returns true if an object was successfully fetched. If the wait +// timed out, returns false and the returned error is nil. +// +// The returned object or error, if any, will be already autoreleased +// +// This routine will likely be removed in some future releases of the library. +- (BOOL)waitForTicket:(GTLServiceTicket *)ticket + timeout:(NSTimeInterval)timeoutInSeconds + fetchedObject:(GTLObject **)outObjectOrNil + error:(NSError **)outErrorOrNil; +@end + +#pragma mark - + +// +// Ticket base class +// +@interface GTLServiceTicket : NSObject { + GTLService *service_; + + NSMutableDictionary *ticketProperties_; + NSDictionary *surrogates_; + + GTMHTTPFetcher *objectFetcher_; + SEL uploadProgressSelector_; + BOOL shouldFetchNextPages_; + BOOL isRetryEnabled_; + SEL retrySelector_; + NSTimeInterval maxRetryInterval_; + +#if NS_BLOCKS_AVAILABLE + BOOL (^retryBlock_)(GTLServiceTicket *, BOOL, NSError *); + void (^uploadProgressBlock_)(GTLServiceTicket *ticket, + unsigned long long numberOfBytesRead, + unsigned long long dataLength); +#elif !__LP64__ + // Placeholders: for 32-bit builds, keep the size of the object's ivar section + // the same with and without blocks + id retryPlaceholder_; + id uploadProgressPlaceholder_; +#endif + + GTLObject *postedObject_; + GTLObject *fetchedObject_; + id executingQuery_; + id originalQuery_; + NSError *fetchError_; + BOOL hasCalledCallback_; + NSUInteger pagesFetchedCounter_; + + NSString *apiKey_; + BOOL isREST_; + + NSOperation *parseOperation_; +} + ++ (id)ticketForService:(GTLService *)service; + +- (id)initWithService:(GTLService *)service; + +- (id)service; + +#pragma mark Execution Control +// if cancelTicket is called, the fetch is stopped if it is in progress, +// the callbacks will not be called, and the ticket will no longer be useful +// (though the client must still release the ticket if it retained the ticket) +- (void)cancelTicket; + +// chunked upload tickets may be paused +- (void)pauseUpload; +- (void)resumeUpload; +- (BOOL)isUploadPaused; + +@property (nonatomic, retain) GTMHTTPFetcher *objectFetcher; +@property (nonatomic, assign) SEL uploadProgressSelector; + +// Services which do not require an user authorization may require a developer +// API key for quota management +@property (nonatomic, copy) NSString *APIKey; + +#pragma mark User Properties + +// Properties and userData are supported for client convenience. +// +// Property keys beginning with _ are reserved by the library. +- (void)setProperty:(id)obj forKey:(NSString *)key; // pass nil obj to remove property +- (id)propertyForKey:(NSString *)key; + +@property (nonatomic, copy) NSDictionary *properties; +@property (nonatomic, retain) id userData; + +#pragma mark Payload + +@property (nonatomic, retain) GTLObject *postedObject; +@property (nonatomic, retain) GTLObject *fetchedObject; +@property (nonatomic, retain) id executingQuery; // Query currently being fetched by this ticket +@property (nonatomic, retain) id originalQuery; // Query used to create this ticket +- (GTLQuery *)queryForRequestID:(NSString *)requestID; // Returns the query from within the batch with the given id. + +@property (nonatomic, retain) NSDictionary *surrogates; + +#pragma mark Retry + +@property (nonatomic, assign, getter=isRetryEnabled) BOOL retryEnabled; +@property (nonatomic, assign) SEL retrySelector; +#if NS_BLOCKS_AVAILABLE +@property (copy) BOOL (^retryBlock)(GTLServiceTicket *ticket, BOOL suggestedWillRetry, NSError *error); +#endif +@property (nonatomic, assign) NSTimeInterval maxRetryInterval; + +#pragma mark Status + +@property (nonatomic, readonly) NSInteger statusCode; // server status from object fetch +@property (nonatomic, retain) NSError *fetchError; +@property (nonatomic, assign) BOOL hasCalledCallback; + +#pragma mark Pagination + +@property (nonatomic, assign) BOOL shouldFetchNextPages; +@property (nonatomic, assign) NSUInteger pagesFetchedCounter; + +#pragma mark Upload + +#if NS_BLOCKS_AVAILABLE +@property (copy) void (^uploadProgressBlock)(GTLServiceTicket *ticket, unsigned long long numberOfBytesRead, unsigned long long dataLength); +#endif + +@end + + +// Category to provide opaque access to tickets stored in fetcher properties +@interface GTMHTTPFetcher (GTLServiceTicketAdditions) +- (id)ticket; +@end + diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.m new file mode 100644 index 00000000..2e405324 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.m @@ -0,0 +1,2387 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLService.m +// + +#import +#if TARGET_OS_MAC +#include +#endif + +#if TARGET_OS_IPHONE +#import +#endif + +#define GTLSERVICE_DEFINE_GLOBALS 1 +#import "GTLService.h" + +static NSString *const kUserDataPropertyKey = @"_userData"; + +static NSString* const kFetcherDelegateKey = @"_delegate"; +static NSString* const kFetcherObjectClassKey = @"_objectClass"; +static NSString* const kFetcherFinishedSelectorKey = @"_finishedSelector"; +static NSString* const kFetcherCompletionHandlerKey = @"_completionHandler"; +static NSString* const kFetcherTicketKey = @"_ticket"; +static NSString* const kFetcherFetchErrorKey = @"_fetchError"; +static NSString* const kFetcherParsingNotificationKey = @"_parseNotification"; +static NSString* const kFetcherParsedObjectKey = @"_parsedObject"; +static NSString* const kFetcherBatchClassMapKey = @"_batchClassMap"; +static NSString* const kFetcherCallbackThreadKey = @"_callbackThread"; +static NSString* const kFetcherCallbackRunLoopModesKey = @"_runLoopModes"; + +static const NSUInteger kMaxNumberOfNextPagesFetched = 25; + +// we'll enforce 50K chunks minimum just to avoid the server getting hit +// with too many small upload chunks +static const NSUInteger kMinimumUploadChunkSize = 50000; +static const NSUInteger kStandardUploadChunkSize = NSUIntegerMax; + +// Helper to get the ETag if it is defined on an object. +static NSString *ETagIfPresent(GTLObject *obj) { + NSString *result = [obj.JSON objectForKey:@"etag"]; + return result; +} + +@interface GTLServiceTicket () +@property (retain) NSOperation *parseOperation; +@property (assign) BOOL isREST; +@end + +// category to provide opaque access to tickets stored in fetcher properties +@implementation GTMHTTPFetcher (GTLServiceTicketAdditions) +- (id)ticket { + return [self propertyForKey:kFetcherTicketKey]; +} +@end + +// If GTMHTTPUploadFetcher is available, it can be used for chunked uploads +// +// We locally declare some methods of GTMHTTPUploadFetcher so we +// do not need to import the header, as some projects may not have it available +@interface GTMHTTPUploadFetcher : GTMHTTPFetcher ++ (GTMHTTPUploadFetcher *)uploadFetcherWithRequest:(NSURLRequest *)request + uploadData:(NSData *)data + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(NSUInteger)chunkSize + fetcherService:(GTMHTTPFetcherService *)fetcherService; ++ (GTMHTTPUploadFetcher *)uploadFetcherWithRequest:(NSURLRequest *)request + uploadFileHandle:(NSFileHandle *)uploadFileHandle + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(NSUInteger)chunkSize + fetcherService:(GTMHTTPFetcherService *)fetcherService; ++ (GTMHTTPUploadFetcher *)uploadFetcherWithLocation:(NSURL *)location + uploadFileHandle:(NSFileHandle *)fileHandle + uploadMIMEType:(NSString *)uploadMIMEType + chunkSize:(NSUInteger)chunkSize + fetcherService:(GTMHTTPFetcherService *)fetcherService; +- (void)pauseFetching; +- (void)resumeFetching; +- (BOOL)isPaused; +@end + + +@interface GTLService () +- (void)prepareToParseObjectForFetcher:(GTMHTTPFetcher *)fetcher; +- (void)handleParsedObjectForFetcher:(GTMHTTPFetcher *)fetcher; +- (BOOL)fetchNextPageWithQuery:(GTLQuery *)query + delegate:(id)delegate + didFinishedSelector:(SEL)finishedSelector + completionHandler:(GTLServiceCompletionHandler)completionHandler + ticket:(GTLServiceTicket *)ticket; +- (id )nextPageQueryForQuery:(GTLQuery *)query + result:(GTLObject *)object + ticket:(GTLServiceTicket *)ticket; +- (GTLObject *)mergedNewResultObject:(GTLObject *)newResult + oldResultObject:(GTLObject *)oldResult + forQuery:(GTLQuery *)query; +- (GTMHTTPUploadFetcher *)uploadFetcherWithRequest:(NSURLRequest *)request + fetcherService:(GTMHTTPFetcherService *)fetcherService + params:(GTLUploadParameters *)uploadParams; ++ (void)invokeCallback:(SEL)callbackSel + target:(id)target + ticket:(id)ticket + object:(id)object + error:(id)error; +- (BOOL)invokeRetrySelector:(SEL)retrySelector + delegate:(id)delegate + ticket:(GTLServiceTicket *)ticket + willRetry:(BOOL)willRetry + error:(NSError *)error; +- (BOOL)objectFetcher:(GTMHTTPFetcher *)fetcher + willRetry:(BOOL)willRetry + forError:(NSError *)error; +- (void)objectFetcher:(GTMHTTPFetcher *)fetcher + finishedWithData:(NSData *)data + error:(NSError *)error; +- (void)parseObjectFromDataOfFetcher:(GTMHTTPFetcher *)fetcher; +@end + +@interface GTLObject (StandardProperties) +@property (retain) NSString *ETag; +@property (retain) NSString *nextPageToken; +@property (retain) NSNumber *nextStartIndex; +@end + +@implementation GTLService + +@synthesize userAgentAddition = userAgentAddition_, + fetcherService = fetcherService_, + parseQueue = parseQueue_, + shouldFetchNextPages = shouldFetchNextPages_, + surrogates = surrogates_, + uploadProgressSelector = uploadProgressSelector_, + retryEnabled = isRetryEnabled_, + retrySelector = retrySelector_, + maxRetryInterval = maxRetryInterval_, + APIKey = apiKey_, + isRESTDataWrapperRequired = isRESTDataWrapperRequired_, + urlQueryParameters = urlQueryParameters_, + additionalHTTPHeaders = additionalHTTPHeaders_, + apiVersion = apiVersion_, + rpcURL = rpcURL_, + rpcUploadURL = rpcUploadURL_; + +#if NS_BLOCKS_AVAILABLE +@synthesize retryBlock = retryBlock_, + uploadProgressBlock = uploadProgressBlock_; +#endif + ++ (Class)ticketClass { + return [GTLServiceTicket class]; +} + +- (id)init { + self = [super init]; + if (self) { + +#if GTL_IPHONE || (MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_5) + // For 10.6 and up, always use an operation queue + parseQueue_ = [[NSOperationQueue alloc] init]; +#elif !GTL_SKIP_PARSE_THREADING + // Avoid NSOperationQueue prior to 10.5.6, per + // http://www.mikeash.com/?page=pyblog/use-nsoperationqueue.html + SInt32 bcdSystemVersion = 0; + (void) Gestalt(gestaltSystemVersion, &bcdSystemVersion); + + if (bcdSystemVersion >= 0x1057) { + parseQueue_ = [[NSOperationQueue alloc] init]; + } +#else + // parseQueue_ defaults to nil, so parsing will be done immediately + // on the current thread +#endif + + fetcherService_ = [[GTMHTTPFetcherService alloc] init]; + + NSUInteger chunkSize = [[self class] defaultServiceUploadChunkSize]; + self.serviceUploadChunkSize = chunkSize; + } + return self; +} + +- (void)dealloc { + [parseQueue_ release]; + [userAgent_ release]; + [fetcherService_ release]; + [userAgentAddition_ release]; + [serviceProperties_ release]; + [surrogates_ release]; +#if NS_BLOCKS_AVAILABLE + [uploadProgressBlock_ release]; + [retryBlock_ release]; +#endif + [apiKey_ release]; + [apiVersion_ release]; + [rpcURL_ release]; + [rpcUploadURL_ release]; + [urlQueryParameters_ release]; + [additionalHTTPHeaders_ release]; + + [super dealloc]; +} + +- (NSString *)requestUserAgent { + NSString *userAgent = self.userAgent; + if ([userAgent length] == 0) { + // the service instance is missing an explicit user-agent; use the bundle ID + // or process name + NSBundle *owningBundle = [NSBundle bundleForClass:[self class]]; + if (owningBundle == nil + || [[owningBundle bundleIdentifier] isEqual:@"com.google.GTLFramework"]) { + + owningBundle = [NSBundle mainBundle]; + } + + userAgent = GTMApplicationIdentifier(owningBundle); + } + + NSString *requestUserAgent = userAgent; + + // if the user agent already specifies the library version, we'll + // use it verbatim in the request + NSString *libraryString = @"google-api-objc-client"; + NSRange libRange = [userAgent rangeOfString:libraryString + options:NSCaseInsensitiveSearch]; + if (libRange.location == NSNotFound) { + // the user agent doesn't specify the client library, so append that + // information, and the system version + NSString *libVersionString = GTLFrameworkVersionString(); + + NSString *systemString = GTMSystemVersionString(); + + // We don't clean this with GTMCleanedUserAgentString so spaces are + // preserved + NSString *userAgentAddition = self.userAgentAddition; + NSString *customString = userAgentAddition ? + [@" " stringByAppendingString:userAgentAddition] : @""; + + // Google servers look for gzip in the user agent before sending gzip- + // encoded responses. See Service.java + requestUserAgent = [NSString stringWithFormat:@"%@ %@/%@ %@%@ (gzip)", + userAgent, libraryString, libVersionString, systemString, customString]; + } + return requestUserAgent; +} + +- (NSMutableURLRequest *)requestForURL:(NSURL *)url + ETag:(NSString *)etag + httpMethod:(NSString *)httpMethod + ticket:(GTLServiceTicket *)ticket { + + // subclasses may add headers to this + NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:url + cachePolicy:NSURLRequestReloadIgnoringCacheData + timeoutInterval:60] autorelease]; + NSString *requestUserAgent = self.requestUserAgent; + [request setValue:requestUserAgent forHTTPHeaderField:@"User-Agent"]; + + if ([httpMethod length] > 0) { + [request setHTTPMethod:httpMethod]; + } + + if ([etag length] > 0) { + + // it's rather unexpected for an etagged object to be provided for a GET, + // but we'll check for an etag anyway, similar to HttpGDataRequest.java, + // and if present use it to request only an unchanged resource + + BOOL isDoingHTTPGet = (httpMethod == nil + || [httpMethod caseInsensitiveCompare:@"GET"] == NSOrderedSame); + + if (isDoingHTTPGet) { + + // set the etag header, even if weak, indicating we don't want + // another copy of the resource if it's the same as the object + [request setValue:etag forHTTPHeaderField:@"If-None-Match"]; + + } else { + + // if we're doing PUT or DELETE, set the etag header indicating + // we only want to update the resource if our copy matches the current + // one (unless the etag is weak and so shouldn't be a constraint at all) + BOOL isWeakETag = [etag hasPrefix:@"W/"]; + + BOOL isModifying = + [httpMethod caseInsensitiveCompare:@"PUT"] == NSOrderedSame + || [httpMethod caseInsensitiveCompare:@"DELETE"] == NSOrderedSame + || [httpMethod caseInsensitiveCompare:@"PATCH"] == NSOrderedSame; + + if (isModifying && !isWeakETag) { + [request setValue:etag forHTTPHeaderField:@"If-Match"]; + } + } + } + + return request; +} + +- (NSMutableURLRequest *)requestForURL:(NSURL *)url + ETag:(NSString *)etag + httpMethod:(NSString *)httpMethod { + // this public entry point authenticates from the service object but + // not from the auth token in the ticket + return [self requestForURL:url ETag:etag httpMethod:httpMethod ticket:nil]; +} + +// objectRequestForURL returns an NSMutableURLRequest for a GTLObject +// +// the object is the object being sent to the server, or nil; +// the http method may be nil for get, or POST, PUT, DELETE + +- (NSMutableURLRequest *)objectRequestForURL:(NSURL *)url + object:(GTLObject *)object + ETag:(NSString *)etag + httpMethod:(NSString *)httpMethod + isREST:(BOOL)isREST + additionalHeaders:(NSDictionary *)additionalHeaders + ticket:(GTLServiceTicket *)ticket { + if (object) { + // if the object being sent has an etag, add it to the request header to + // avoid retrieving a duplicate or to avoid writing over an updated + // version of the resource on the server + // + // Typically, delete requests will provide an explicit ETag parameter, and + // other requests will have the ETag carried inside the object being updated + if (etag == nil) { + SEL selEtag = @selector(ETag); + if ([object respondsToSelector:selEtag]) { + etag = [object performSelector:selEtag]; + } + } + } + + NSMutableURLRequest *request = [self requestForURL:url + ETag:etag + httpMethod:httpMethod + ticket:ticket]; + NSString *acceptValue; + NSString *contentTypeValue; + if (isREST) { + acceptValue = @"application/json"; + contentTypeValue = @"application/json; charset=utf-8"; + } else { + acceptValue = @"application/json-rpc"; + contentTypeValue = @"application/json-rpc; charset=utf-8"; + } + [request setValue:acceptValue forHTTPHeaderField:@"Accept"]; + [request setValue:contentTypeValue forHTTPHeaderField:@"Content-Type"]; + + [request setValue:@"no-cache" forHTTPHeaderField:@"Cache-Control"]; + + // Add the additional http headers from the service, and then from the query + NSDictionary *headers = self.additionalHTTPHeaders; + for (NSString *key in headers) { + NSString *value = [headers valueForKey:key]; + [request setValue:value forHTTPHeaderField:key]; + } + + headers = additionalHeaders; + for (NSString *key in headers) { + NSString *value = [headers valueForKey:key]; + [request setValue:value forHTTPHeaderField:key]; + } + + return request; +} + +#pragma mark - + +// common fetch starting method + +- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)targetURL + objectClass:(Class)objectClass + bodyObject:(GTLObject *)bodyObject + dataToPost:(NSData *)dataToPost + ETag:(NSString *)etag + httpMethod:(NSString *)httpMethod + mayAuthorize:(BOOL)mayAuthorize + isREST:(BOOL)isREST + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector + completionHandler:(id)completionHandler // GTLServiceCompletionHandler + executingQuery:(id)query + ticket:(GTLServiceTicket *)ticket { + + GTMAssertSelectorNilOrImplementedWithArgs(delegate, finishedSelector, @encode(GTLServiceTicket *), @encode(GTLObject *), @encode(NSError *), 0); + + // The completionHandler argument is declared as an id, not as a block + // pointer, so this can be built with the 10.6 SDK and still run on 10.5. + // If the argument were declared as a block pointer, the invocation for + // fetchObjectWithURL: created in GTLService would cause an exception + // since 10.5's NSInvocation cannot deal with encoding of block pointers. + + GTL_DEBUG_ASSERT(targetURL != nil, @"no url?"); + if (targetURL == nil) return nil; + + // we need to create a ticket unless one was created earlier (like during + // authentication) + if (!ticket) { + ticket = [[[self class] ticketClass] ticketForService:self]; + } + + ticket.isREST = isREST; + + // Add any service specific query parameters. + NSDictionary *urlQueryParameters = self.urlQueryParameters; + if ([urlQueryParameters count] > 0) { + targetURL = [GTLUtilities URLWithString:[targetURL absoluteString] + queryParameters:urlQueryParameters]; + } + + // If this is REST and there is a developer key, add it onto the url. RPC + // adds the key into the payload, not on the url. + NSString *apiKey = self.APIKey; + if (isREST && [apiKey length] > 0) { + NSString *const kDeveloperAPIQueryParamKey = @"key"; + NSDictionary *queryParameters; + queryParameters = [NSDictionary dictionaryWithObject:apiKey + forKey:kDeveloperAPIQueryParamKey]; + targetURL = [GTLUtilities URLWithString:[targetURL absoluteString] + queryParameters:queryParameters]; + } + + NSDictionary *additionalHeaders = query.additionalHTTPHeaders; + + NSMutableURLRequest *request = [self objectRequestForURL:targetURL + object:bodyObject + ETag:etag + httpMethod:httpMethod + isREST:isREST + additionalHeaders:additionalHeaders + ticket:ticket]; + + GTMAssertSelectorNilOrImplementedWithArgs(delegate, ticket.uploadProgressSelector, + @encode(GTLServiceTicket *), @encode(unsigned long long), + @encode(unsigned long long), 0); + GTMAssertSelectorNilOrImplementedWithArgs(delegate, ticket.retrySelector, + @encode(GTLServiceTicket *), @encode(BOOL), @encode(NSError *), 0); + + SEL finishedSel = @selector(objectFetcher:finishedWithData:error:); + + ticket.postedObject = bodyObject; + + ticket.executingQuery = query; + if (ticket.originalQuery == nil) { + ticket.originalQuery = query; + } + + GTMHTTPFetcherService *fetcherService = self.fetcherService; + GTMHTTPFetcher *fetcher; + + GTLUploadParameters *uploadParams = query.uploadParameters; + if (uploadParams == nil) { + // Not uploading a file with this request + fetcher = [fetcherService fetcherWithRequest:request]; + } else { + fetcher = [self uploadFetcherWithRequest:request + fetcherService:fetcherService + params:uploadParams]; + } + + if (finishedSelector) { + // if we don't have a method name, default to the finished selector as + // a useful fetcher log comment + fetcher.comment = NSStringFromSelector(finishedSelector); + } + + // allow the user to specify static app-wide cookies for fetching + NSInteger cookieStorageMethod = [self cookieStorageMethod]; + if (cookieStorageMethod >= 0) { + fetcher.cookieStorageMethod = cookieStorageMethod; + } + + if (!mayAuthorize) { + fetcher.authorizer = nil; + } + + // copy the ticket's retry settings into the fetcher + fetcher.retryEnabled = ticket.retryEnabled; + fetcher.maxRetryInterval = ticket.maxRetryInterval; + + BOOL shouldExamineRetries; +#if NS_BLOCKS_AVAILABLE + shouldExamineRetries = (ticket.retrySelector != nil + || ticket.retryBlock != nil); +#else + shouldExamineRetries = (ticket.retrySelector != nil); +#endif + if (shouldExamineRetries) { + [fetcher setRetrySelector:@selector(objectFetcher:willRetry:forError:)]; + } + + // remember the object fetcher in the ticket + ticket.objectFetcher = fetcher; + + // add parameters used by the callbacks + + [fetcher setProperty:objectClass forKey:kFetcherObjectClassKey]; + + [fetcher setProperty:delegate forKey:kFetcherDelegateKey]; + + [fetcher setProperty:NSStringFromSelector(finishedSelector) + forKey:kFetcherFinishedSelectorKey]; + + [fetcher setProperty:ticket + forKey:kFetcherTicketKey]; + +#if NS_BLOCKS_AVAILABLE + // copy the completion handler block to the heap; this does nothing if the + // block is already on the heap + completionHandler = [[completionHandler copy] autorelease]; + [fetcher setProperty:completionHandler + forKey:kFetcherCompletionHandlerKey]; +#endif + + // set the upload data + fetcher.postData = dataToPost; + + // failed fetches call the failure selector, which will delete the ticket + BOOL didFetch = [fetcher beginFetchWithDelegate:self + didFinishSelector:finishedSel]; + + // If something weird happens and the networking callbacks have been called + // already synchronously, we don't want to return the ticket since the caller + // will never know when to stop retaining it, so we'll make sure the + // success/failure callbacks have not yet been called by checking the + // ticket + if (!didFetch || ticket.hasCalledCallback) { + fetcher.properties = nil; + return nil; + } + + return ticket; +} + +- (GTMHTTPUploadFetcher *)uploadFetcherWithRequest:(NSURLRequest *)request + fetcherService:(GTMHTTPFetcherService *)fetcherService + params:(GTLUploadParameters *)uploadParams { + // Hang on to the user's requested chunk size, and ensure it's not tiny + NSUInteger uploadChunkSize = [self serviceUploadChunkSize]; + if (uploadChunkSize < kMinimumUploadChunkSize) { + uploadChunkSize = kMinimumUploadChunkSize; + } + +#ifdef GTL_TARGET_NAMESPACE + // Prepend the class name prefix + Class uploadClass = NSClassFromString(@GTL_TARGET_NAMESPACE_STRING + "_GTMHTTPUploadFetcher"); +#else + Class uploadClass = NSClassFromString(@"GTMHTTPUploadFetcher"); +#endif + GTL_ASSERT(uploadClass != nil, @"GTMHTTPUploadFetcher needed"); + + NSString *uploadMIMEType = uploadParams.MIMEType; + NSData *uploadData = uploadParams.data; + NSFileHandle *uploadFileHandle = uploadParams.fileHandle; + NSURL *uploadLocationURL = uploadParams.uploadLocationURL; + + GTMHTTPUploadFetcher *fetcher; + if (uploadData) { + fetcher = [uploadClass uploadFetcherWithRequest:request + uploadData:uploadData + uploadMIMEType:uploadMIMEType + chunkSize:uploadChunkSize + fetcherService:fetcherService]; + } else if (uploadLocationURL) { + GTL_DEBUG_ASSERT(uploadFileHandle != nil, + @"Resume requires a file handle"); + fetcher = [uploadClass uploadFetcherWithLocation:uploadLocationURL + uploadFileHandle:uploadFileHandle + uploadMIMEType:uploadMIMEType + chunkSize:uploadChunkSize + fetcherService:fetcherService]; + } else { + fetcher = [uploadClass uploadFetcherWithRequest:request + uploadFileHandle:uploadFileHandle + uploadMIMEType:uploadMIMEType + chunkSize:uploadChunkSize + fetcherService:fetcherService]; + } + + NSString *slug = [uploadParams slug]; + if ([slug length] > 0) { + [[fetcher mutableRequest] setValue:slug forHTTPHeaderField:@"Slug"]; + } + return fetcher; +} + +#pragma mark - + +// RPC fetch methods + +- (NSDictionary *)rpcPayloadForMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + bodyObject:(GTLObject *)bodyObject + requestID:(NSString *)requestID { + GTL_DEBUG_ASSERT([requestID length] > 0, @"Got an empty request id"); + + // First, merge the developer key and bodyObject into the parameters. + + NSString *apiKey = self.APIKey; + NSUInteger apiKeyLen = [apiKey length]; + + NSString *const kDeveloperAPIParamKey = @"key"; + NSString *const kBodyObjectParamKey = @"resource"; + + NSDictionary *finalParams; + if ((apiKeyLen == 0) && (bodyObject == nil)) { + // Nothing needs to be added, just send the dict along. + finalParams = parameters; + } else { + NSMutableDictionary *worker = [NSMutableDictionary dictionary]; + if ([parameters count] > 0) { + [worker addEntriesFromDictionary:parameters]; + } + if ((apiKeyLen > 0) + && ([worker objectForKey:kDeveloperAPIParamKey] == nil)) { + [worker setObject:apiKey forKey:kDeveloperAPIParamKey]; + } + if (bodyObject != nil) { + GTL_DEBUG_ASSERT([parameters objectForKey:kBodyObjectParamKey] == nil, + @"There was already something under the 'data' key?!"); + [worker setObject:[bodyObject JSON] forKey:kBodyObjectParamKey]; + } + finalParams = worker; + } + + // Now, build up the full dictionary for the JSON-RPC (this is the body of + // the HTTP PUT). + + // Spec calls for the jsonrpc entry. Google doesn't require it, but include + // it so the code can work with other servers. + NSMutableDictionary *rpcPayload = [NSMutableDictionary dictionaryWithObjectsAndKeys: + @"2.0", @"jsonrpc", + methodName, @"method", + requestID, @"id", + nil]; + + // Google extension, provide the version of the api. + NSString *apiVersion = self.apiVersion; + if ([apiVersion length] > 0) { + [rpcPayload setObject:apiVersion forKey:@"apiVersion"]; + } + + if ([finalParams count] > 0) { + [rpcPayload setObject:finalParams forKey:@"params"]; + } + + return rpcPayload; +} + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + objectClass:(Class)objectClass + parameters:(NSDictionary *)parameters + bodyObject:(GTLObject *)bodyObject + requestID:(NSString *)requestID + urlQueryParameters:(NSDictionary *)urlQueryParameters + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector + completionHandler:(id)completionHandler // GTLServiceCompletionHandler + executingQuery:(id)executingQuery + ticket:(GTLServiceTicket *)ticket { + GTL_DEBUG_ASSERT([methodName length] > 0, @"Got an empty method name"); + if ([methodName length] == 0) return nil; + + // If we didn't get a requestID, assign one (call came from one of the public + // calls that doesn't take a GTLQuery object). + if (requestID == nil) { + requestID = [GTLQuery nextRequestID]; + } + + NSData *dataToPost = nil; + GTLUploadParameters *uploadParameters = executingQuery.uploadParameters; + BOOL shouldSendBody = !uploadParameters.shouldSendUploadOnly; + if (shouldSendBody) { + NSDictionary *rpcPayload = [self rpcPayloadForMethodNamed:methodName + parameters:parameters + bodyObject:bodyObject + requestID:requestID]; + + NSError *error = nil; + dataToPost = [GTLJSONParser dataWithObject:rpcPayload + humanReadable:NO + error:&error]; + if (dataToPost == nil) { + // There is the chance something went into parameters that wasn't valid. + GTL_DEBUG_LOG(@"JSON generation error: %@", error); + return nil; + } + } + + BOOL isUploading = (uploadParameters != nil); + NSURL *rpcURL = (isUploading ? self.rpcUploadURL : self.rpcURL); + + if ([urlQueryParameters count] > 0) { + rpcURL = [GTLUtilities URLWithString:[rpcURL absoluteString] + queryParameters:urlQueryParameters]; + } + + BOOL mayAuthorize = (executingQuery ? + !executingQuery.shouldSkipAuthorization : YES); + + GTLServiceTicket *resultTicket = [self fetchObjectWithURL:rpcURL + objectClass:objectClass + bodyObject:bodyObject + dataToPost:dataToPost + ETag:nil + httpMethod:@"POST" + mayAuthorize:mayAuthorize + isREST:NO + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:completionHandler + executingQuery:executingQuery + ticket:ticket]; + + // Set the fetcher log comment to default to the method name + NSUInteger pageNumber = resultTicket.pagesFetchedCounter; + if (pageNumber == 0) { + resultTicket.objectFetcher.comment = methodName; + } else { + // Also put the page number in the log comment + [resultTicket.objectFetcher setCommentWithFormat:@"%@ (page %lu)", + methodName, (unsigned long) (pageNumber + 1)]; + } + + return resultTicket; +} + +- (GTLServiceTicket *)executeBatchQuery:(GTLBatchQuery *)batch + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector + completionHandler:(id)completionHandler // GTLServiceCompletionHandler + ticket:(GTLServiceTicket *)ticket { + GTLBatchQuery *batchCopy = [[batch copy] autorelease]; + NSArray *queries = batchCopy.queries; + NSUInteger numberOfQueries = [queries count]; + if (numberOfQueries == 0) return nil; + + // Build up the array of RPC calls. + NSMutableArray *rpcPayloads = [NSMutableArray arrayWithCapacity:numberOfQueries]; + NSMutableArray *requestIDs = [NSMutableSet setWithCapacity:numberOfQueries]; + for (GTLQuery *query in queries) { + NSString *methodName = query.methodName; + NSDictionary *parameters = query.JSON; + GTLObject *bodyObject = query.bodyObject; + NSString *requestID = query.requestID; + + if ([methodName length] == 0 || [requestID length] == 0) { + GTL_DEBUG_ASSERT(0, @"Invalid query - id:%@ method:%@", + requestID, methodName); + return nil; + } + + GTL_DEBUG_ASSERT(query.additionalHTTPHeaders == nil, + @"additionalHTTPHeaders disallowed on queries added to a batch - query %@ (%@)", + requestID, methodName); + + GTL_DEBUG_ASSERT(query.uploadParameters == nil, + @"uploadParameters disallowed on queries added to a batch - query %@ (%@)", + requestID, methodName); + + NSDictionary *rpcPayload = [self rpcPayloadForMethodNamed:methodName + parameters:parameters + bodyObject:bodyObject + requestID:requestID]; + [rpcPayloads addObject:rpcPayload]; + + if ([requestIDs containsObject:requestID]) { + GTL_DEBUG_LOG(@"Duplicate request id in batch: %@", requestID); + return nil; + } + [requestIDs addObject:requestID]; + } + + NSError *error = nil; + NSData *dataToPost = nil; + dataToPost = [GTLJSONParser dataWithObject:rpcPayloads + humanReadable:NO + error:&error]; + if (dataToPost == nil) { + // There is the chance something went into parameters that wasn't valid. + GTL_DEBUG_LOG(@"JSON generation error: %@", error); + return nil; + } + + BOOL mayAuthorize = (batchCopy ? !batchCopy.shouldSkipAuthorization : YES); + + // urlQueryParameters on the queries are currently unsupport during a batch + // as it's not clear how to map them. + + NSURL *rpcURL = self.rpcURL; + GTLServiceTicket *resultTicket = [self fetchObjectWithURL:rpcURL + objectClass:[GTLBatchResult class] + bodyObject:nil + dataToPost:dataToPost + ETag:nil + httpMethod:@"POST" + mayAuthorize:mayAuthorize + isREST:NO + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:completionHandler + executingQuery:batch + ticket:ticket]; + +#if !STRIP_GTM_FETCH_LOGGING + // Set the fetcher log comment + // + // Because this has expensive set operations, it's conditionally + // compiled in + NSArray *methodNames = [queries valueForKey:@"methodName"]; + methodNames = [[NSSet setWithArray:methodNames] allObjects]; // de-dupe + NSString *methodsStr = [methodNames componentsJoinedByString:@", "]; + + NSUInteger pageNumber = ticket.pagesFetchedCounter; + NSString *pageStr = @""; + if (pageNumber > 0) { + pageStr = [NSString stringWithFormat:@"page %lu, ", + (unsigned long) pageNumber + 1]; + } + [resultTicket.objectFetcher setCommentWithFormat:@"batch: %@ (%@%lu queries)", + methodsStr, pageStr, (unsigned long) numberOfQueries]; +#endif + + return resultTicket; +} + + +#pragma mark - + +// REST fetch methods + +- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)targetURL + objectClass:(Class)objectClass + bodyObject:(GTLObject *)bodyObject + ETag:(NSString *)etag + httpMethod:(NSString *)httpMethod + mayAuthorize:(BOOL)mayAuthorize + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector + completionHandler:(id)completionHandler // GTLServiceCompletionHandler + ticket:(GTLServiceTicket *)ticket { + // if no URL was supplied, treat this as if the fetch failed (below) + // and immediately return a nil ticket, skipping the callbacks + // + // this might be considered normal (say, updating a read-only entry + // that lacks an edit link) though higher-level calls may assert or + // return errors depending on the specific usage + if (targetURL == nil) return nil; + + NSData *dataToPost = nil; + if (bodyObject != nil) { + NSError *error = nil; + + NSDictionary *whatToSend; + NSDictionary *json = bodyObject.JSON; + if (isRESTDataWrapperRequired_) { + // create the top-level "data" object + NSDictionary *dataDict = [NSDictionary dictionaryWithObject:json + forKey:@"data"]; + whatToSend = dataDict; + } else { + whatToSend = json; + } + dataToPost = [GTLJSONParser dataWithObject:whatToSend + humanReadable:NO + error:&error]; + if (dataToPost == nil) { + GTL_DEBUG_LOG(@"JSON generation error: %@", error); + } + } + + return [self fetchObjectWithURL:targetURL + objectClass:objectClass + bodyObject:bodyObject + dataToPost:dataToPost + ETag:etag + httpMethod:httpMethod + mayAuthorize:mayAuthorize + isREST:YES + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:completionHandler + executingQuery:nil + ticket:ticket]; +} + +- (void)invokeProgressCallbackForTicket:(GTLServiceTicket *)ticket + deliveredBytes:(unsigned long long)numReadSoFar + totalBytes:(unsigned long long)total { + + SEL progressSelector = [ticket uploadProgressSelector]; + if (progressSelector) { + + GTMHTTPFetcher *fetcher = ticket.objectFetcher; + id delegate = [fetcher propertyForKey:kFetcherDelegateKey]; + + NSMethodSignature *signature = [delegate methodSignatureForSelector:progressSelector]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; + + [invocation setSelector:progressSelector]; + [invocation setTarget:delegate]; + [invocation setArgument:&ticket atIndex:2]; + [invocation setArgument:&numReadSoFar atIndex:3]; + [invocation setArgument:&total atIndex:4]; + [invocation invoke]; + } + +#if NS_BLOCKS_AVAILABLE + GTLServiceUploadProgressBlock block = ticket.uploadProgressBlock; + if (block) { + block(ticket, numReadSoFar, total); + } +#endif +} + +// sentData callback from fetcher +- (void)objectFetcher:(GTMHTTPFetcher *)fetcher + didSendBytes:(NSInteger)bytesSent + totalBytesSent:(NSInteger)totalBytesSent +totalBytesExpectedToSend:(NSInteger)totalBytesExpected { + + GTLServiceTicket *ticket = [fetcher propertyForKey:kFetcherTicketKey]; + + [self invokeProgressCallbackForTicket:ticket + deliveredBytes:(unsigned long long)totalBytesSent + totalBytes:(unsigned long long)totalBytesExpected]; +} + +- (void)objectFetcher:(GTMHTTPFetcher *)fetcher finishedWithData:(NSData *)data error:(NSError *)error { + // we now have the JSON data for an object, or an error + if (error == nil) { + if ([data length] > 0) { + [self prepareToParseObjectForFetcher:fetcher]; + } else { + // no data (such as when deleting) + [self handleParsedObjectForFetcher:fetcher]; + } + } else { + // There was an error from the fetch + NSInteger status = [error code]; + if (status >= 300) { + // Return the HTTP error status code along with a more descriptive error + // from within the HTTP response payload. + NSData *responseData = fetcher.downloadedData; + if ([responseData length] > 0) { + NSDictionary *responseHeaders = fetcher.responseHeaders; + NSString *contentType = [responseHeaders objectForKey:@"Content-Type"]; + + if ([data length] > 0) { + if ([contentType hasPrefix:@"application/json"]) { + NSError *parseError = nil; + NSMutableDictionary *jsonWrapper = [GTLJSONParser objectWithData:data + error:&parseError]; + if (parseError) { + // We could not parse the JSON payload + error = parseError; + } else { + // Convert the JSON error payload into a structured error + NSMutableDictionary *errorJSON = [jsonWrapper valueForKey:@"error"]; + GTLErrorObject *errorObject = [GTLErrorObject objectWithJSON:errorJSON]; + error = [errorObject foundationError]; + } + } else { + // No structured JSON error was available; make a plaintext server + // error response visible in the error object. + NSString *reasonStr = [[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding] autorelease]; + NSDictionary *userInfo = [NSDictionary dictionaryWithObject:reasonStr + forKey:NSLocalizedFailureReasonErrorKey]; + error = [NSError errorWithDomain:kGTMHTTPFetcherStatusDomain + code:status + userInfo:userInfo]; + } + } else { + // Response data length is zero; we'll settle for returning the + // fetcher's error. + } + } + } + + // store the error, call the callbacks, and bail + [fetcher setProperty:error + forKey:kFetcherFetchErrorKey]; + + [self handleParsedObjectForFetcher:fetcher]; + } +} + +// Three methods handle parsing of the fetched JSON data: +// - prepareToParse posts a start notification and then spawns off parsing +// on the operation queue (if there's an operation queue) +// - parseObject does the parsing of the JSON string +// - handleParsedObject posts the stop notification and calls the callback +// with the parsed object or an error +// +// The middle method may run on a separate thread. + +- (void)prepareToParseObjectForFetcher:(GTMHTTPFetcher *)fetcher { + // save the current thread into the fetcher, since we'll handle additional + // fetches and callbacks on this thread + [fetcher setProperty:[NSThread currentThread] + forKey:kFetcherCallbackThreadKey]; + + // copy the run loop modes, if any, so we don't need to access them + // from the parsing thread + [fetcher setProperty:[[[self runLoopModes] copy] autorelease] + forKey:kFetcherCallbackRunLoopModesKey]; + + // we post parsing notifications now to ensure they're on caller's + // original thread + GTLServiceTicket *ticket = [fetcher propertyForKey:kFetcherTicketKey]; + NSNotificationCenter *defaultNC = [NSNotificationCenter defaultCenter]; + [defaultNC postNotificationName:kGTLServiceTicketParsingStartedNotification + object:ticket]; + [fetcher setProperty:@"1" + forKey:kFetcherParsingNotificationKey]; + + id executingQuery = ticket.executingQuery; + if ([executingQuery isBatchQuery]) { + // build a dictionary of expected classes for the batch responses + GTLBatchQuery *batchQuery = executingQuery; + NSArray *queries = batchQuery.queries; + NSDictionary *batchClassMap = [NSMutableDictionary dictionaryWithCapacity:[queries count]]; + for (GTLQuery *query in queries) { + [batchClassMap setValue:query.expectedObjectClass + forKey:query.requestID]; + } + [fetcher setProperty:batchClassMap + forKey:kFetcherBatchClassMapKey]; + } + + // if there's an operation queue, then use that to schedule parsing on another + // thread + SEL parseSel = @selector(parseObjectFromDataOfFetcher:); + NSOperationQueue *queue = self.parseQueue; + if (queue) { + NSInvocationOperation *op; + op = [[[NSInvocationOperation alloc] initWithTarget:self + selector:parseSel + object:fetcher] autorelease]; + ticket.parseOperation = op; + [queue addOperation:op]; + // the fetcher now belongs to the parsing thread + } else { + // parse on the current thread, on Mac OS X 10.4 through 10.5.7 + // or when the project defines GTL_SKIP_PARSE_THREADING + [self performSelector:parseSel + withObject:fetcher]; + } +} + +- (void)parseObjectFromDataOfFetcher:(GTMHTTPFetcher *)fetcher { + // This method runs in a separate thread + + // Generally protect the fetcher properties, since canceling a ticket would + // release the fetcher properties dictionary + NSMutableDictionary *properties = [[fetcher.properties retain] autorelease]; + + // The callback thread is retaining the fetcher, so the fetcher shouldn't keep + // retaining the callback thread + NSThread *callbackThread = [properties valueForKey:kFetcherCallbackThreadKey]; + [[callbackThread retain] autorelease]; + [properties removeObjectForKey:kFetcherCallbackThreadKey]; + + GTLServiceTicket *ticket = [properties valueForKey:kFetcherTicketKey]; + [[ticket retain] autorelease]; + + NSDictionary *responseHeaders = fetcher.responseHeaders; + NSString *contentType = [responseHeaders objectForKey:@"Content-Type"]; + NSData *data = fetcher.downloadedData; + + NSOperation *parseOperation = ticket.parseOperation; + + GTL_DEBUG_ASSERT([contentType hasPrefix:@"application/json"], + @"Got unexpected content type '%@'", contentType); + if ([contentType hasPrefix:@"application/json"] && [data length] > 0) { +#if GTL_LOG_PERFORMANCE + NSTimeInterval secs1, secs2; + secs1 = [NSDate timeIntervalSinceReferenceDate]; +#endif + + NSError *parseError = nil; + NSMutableDictionary *jsonWrapper = [GTLJSONParser objectWithData:data + error:&parseError]; + if ([parseOperation isCancelled]) return; + + if (parseError != nil) { + [properties setValue:parseError forKey:kFetcherFetchErrorKey]; + } else { + NSMutableDictionary *json; + NSDictionary *batchClassMap = nil; + + // In theory, just checking for "application/json-rpc" vs + // "application/json" would work. But the JSON-RPC spec allows for + // "application/json" also so we have to carry a flag all the way in + // saying which type of result to expect and process as. + BOOL isREST = ticket.isREST; + if (isREST) { + if (isRESTDataWrapperRequired_) { + json = [jsonWrapper valueForKey:@"data"]; + } else { + json = jsonWrapper; + } + } else { + batchClassMap = [properties valueForKey:kFetcherBatchClassMapKey]; + if (batchClassMap) { + // A batch gets the whole array as it's json. + json = jsonWrapper; + } else { + json = [jsonWrapper valueForKey:@"result"]; + } + } + + if (json != nil) { + Class defaultClass = [properties valueForKey:kFetcherObjectClassKey]; + NSDictionary *surrogates = ticket.surrogates; + + GTLObject *parsedObject = [GTLObject objectForJSON:json + defaultClass:defaultClass + surrogates:surrogates + batchClassMap:batchClassMap]; + + [properties setValue:parsedObject forKey:kFetcherParsedObjectKey]; + } else if (!isREST) { + NSMutableDictionary *errorJSON = [jsonWrapper valueForKey:@"error"]; + GTL_DEBUG_ASSERT(errorJSON != nil, @"no result or error in response:\n%@", + jsonWrapper); + GTLErrorObject *errorObject = [GTLErrorObject objectWithJSON:errorJSON]; + NSError *error = [errorObject foundationError]; + + // Store the error and let it go to the callback + [properties setValue:error + forKey:kFetcherFetchErrorKey]; + } + } + +#if GTL_LOG_PERFORMANCE + secs2 = [NSDate timeIntervalSinceReferenceDate]; + NSLog(@"allocation of %@ took %f seconds", objectClass, secs2 - secs1); +#endif + } + + if ([parseOperation isCancelled]) return; + + SEL parseDoneSel = @selector(handleParsedObjectForFetcher:); + NSArray *runLoopModes = [properties valueForKey:kFetcherCallbackRunLoopModesKey]; + if (runLoopModes) { + [self performSelector:parseDoneSel + onThread:callbackThread + withObject:fetcher + waitUntilDone:NO + modes:runLoopModes]; + } else { + // defaults to common modes + [self performSelector:parseDoneSel + onThread:callbackThread + withObject:fetcher + waitUntilDone:NO]; + } + + // the fetcher now belongs to the callback thread +} + +- (void)handleParsedObjectForFetcher:(GTMHTTPFetcher *)fetcher { + // After parsing is complete, this is invoked on the thread that the + // fetch was performed on + // + // There may not be an object due to a fetch or parsing error + + GTLServiceTicket *ticket = [fetcher propertyForKey:kFetcherTicketKey]; + ticket.parseOperation = nil; + + // unpack the callback parameters + id delegate = [fetcher propertyForKey:kFetcherDelegateKey]; + NSString *selString = [fetcher propertyForKey:kFetcherFinishedSelectorKey]; + SEL finishedSelector = NSSelectorFromString(selString); + +#if NS_BLOCKS_AVAILABLE + GTLServiceCompletionHandler completionHandler; + completionHandler = [fetcher propertyForKey:kFetcherCompletionHandlerKey]; +#else + id completionHandler = nil; +#endif + + GTLObject *object = [fetcher propertyForKey:kFetcherParsedObjectKey]; + NSError *error = [fetcher propertyForKey:kFetcherFetchErrorKey]; + + GTLQuery *executingQuery = (GTLQuery *)ticket.executingQuery; + + BOOL shouldFetchNextPages = ticket.shouldFetchNextPages; + GTLObject *previousObject = ticket.fetchedObject; + + if (shouldFetchNextPages + && (previousObject != nil) + && (object != nil)) { + // Accumulate new results + object = [self mergedNewResultObject:object + oldResultObject:previousObject + forQuery:executingQuery]; + } + + ticket.fetchedObject = object; + ticket.fetchError = error; + + if ([fetcher propertyForKey:kFetcherParsingNotificationKey] != nil) { + // we want to always balance the start and stop notifications + NSNotificationCenter *defaultNC = [NSNotificationCenter defaultCenter]; + [defaultNC postNotificationName:kGTLServiceTicketParsingStoppedNotification + object:ticket]; + } + + BOOL shouldCallCallbacks = YES; + + // Use the nextPageToken to fetch any later pages for non-batch queries + // + // This assumes a pagination model where objects have entries in an "items" + // field and a "nextPageToken" field, and queries support a "pageToken" + // parameter. + if (ticket.shouldFetchNextPages) { + // Determine if we should fetch more pages of results + + GTLQuery *nextPageQuery = [self nextPageQueryForQuery:executingQuery + result:object + ticket:ticket]; + if (nextPageQuery) { + BOOL isFetchingMore = [self fetchNextPageWithQuery:nextPageQuery + delegate:delegate + didFinishedSelector:finishedSelector + completionHandler:completionHandler + ticket:ticket]; + if (isFetchingMore) { + shouldCallCallbacks = NO; + } + } else { + // No more page tokens are present +#if DEBUG && !GTL_SKIP_PAGES_WARNING + // Each next page followed to accumulate all pages of a feed takes up to + // a few seconds. When multiple pages are being fetched, that + // usually indicates that a larger page size (that is, more items per + // feed fetched) should be requested. + // + // To avoid fetching many pages, set query.maxResults so the feed + // requested is large enough to rarely need to follow next links. + NSUInteger pageCount = ticket.pagesFetchedCounter; + if (pageCount > 2) { + NSString *queryLabel = [executingQuery isBatchQuery] ? + @"batch query" : executingQuery.methodName; + NSLog(@"Executing %@ required fetching %u pages; use a query with a" + @" larger maxResults for faster results", + queryLabel, (unsigned int) pageCount); + } +#endif + } + } + + // We no longer care about the queries for page 2 or later, so for the client + // inspecting the ticket in the callback, the executing query should be + // the original one + ticket.executingQuery = ticket.originalQuery; + + if (shouldCallCallbacks) { + // First, call query-specific callback blocks. We do this before the + // fetch callback to let applications do any final clean-up (or update + // their UI) in the fetch callback. + GTLQuery *originalQuery = (GTLQuery *)ticket.originalQuery; +#if NS_BLOCKS_AVAILABLE + if (![originalQuery isBatchQuery]) { + // Single query + GTLServiceCompletionHandler completionBlock = originalQuery.completionBlock; + if (completionBlock) { + completionBlock(ticket, object, error); + } + } else { + // Batch query + // + // We'll step through the queries of the original batch, not of the + // batch result + GTLBatchQuery *batchQuery = (GTLBatchQuery *)originalQuery; + GTLBatchResult *batchResult = (GTLBatchResult *)object; + NSDictionary *successes = batchResult.successes; + NSDictionary *failures = batchResult.failures; + + for (GTLQuery *oneQuery in batchQuery.queries) { + GTLServiceCompletionHandler completionBlock = oneQuery.completionBlock; + if (completionBlock) { + // If there was no networking error, look for a query-specific + // error or result + GTLObject *oneResult = nil; + NSError *oneError = error; + if (oneError == nil) { + NSString *requestID = [oneQuery requestID]; + GTLErrorObject *gtlError = [failures objectForKey:requestID]; + if (gtlError) { + oneError = [gtlError foundationError]; + } else { + oneResult = [successes objectForKey:requestID]; + if (oneResult == nil) { + // We found neither a success nor a failure for this + // query, unexpectedly + GTL_DEBUG_LOG(@"GTLService: Batch result missing for request %@", + requestID); + oneError = [NSError errorWithDomain:kGTLServiceErrorDomain + code:kGTLErrorQueryResultMissing + userInfo:nil]; + } + } + } + completionBlock(ticket, oneResult, oneError); + } + } + } +#endif + // Release query callback blocks + [originalQuery executionDidStop]; + + if (finishedSelector) { + [[self class] invokeCallback:finishedSelector + target:delegate + ticket:ticket + object:object + error:error]; + } + +#if NS_BLOCKS_AVAILABLE + if (completionHandler) { + completionHandler(ticket, object, error); + } +#endif + ticket.hasCalledCallback = YES; + } + fetcher.properties = nil; + +#if NS_BLOCKS_AVAILABLE + // Tickets don't know when the fetch has completed, so the service will + // release their blocks here to avoid unintended retain loops + ticket.retryBlock = nil; + ticket.uploadProgressBlock = nil; +#endif +} + +#pragma mark - + ++ (void)invokeCallback:(SEL)callbackSel + target:(id)target + ticket:(id)ticket + object:(id)object + error:(id)error { + + // GTL fetch callbacks have no return value + NSMethodSignature *signature = [target methodSignatureForSelector:callbackSel]; + NSInvocation *retryInvocation = [NSInvocation invocationWithMethodSignature:signature]; + [retryInvocation setSelector:callbackSel]; + [retryInvocation setTarget:target]; + [retryInvocation setArgument:&ticket atIndex:2]; + [retryInvocation setArgument:&object atIndex:3]; + [retryInvocation setArgument:&error atIndex:4]; + [retryInvocation invoke]; +} + +// The object fetcher may call into this retry method; this one invokes the +// selector provided by the user. +- (BOOL)objectFetcher:(GTMHTTPFetcher *)fetcher willRetry:(BOOL)willRetry forError:(NSError *)error { + + GTLServiceTicket *ticket = [fetcher propertyForKey:kFetcherTicketKey]; + SEL retrySelector = ticket.retrySelector; + if (retrySelector) { + id delegate = [fetcher propertyForKey:kFetcherDelegateKey]; + + willRetry = [self invokeRetrySelector:retrySelector + delegate:delegate + ticket:ticket + willRetry:willRetry + error:error]; + } + +#if NS_BLOCKS_AVAILABLE + BOOL (^retryBlock)(GTLServiceTicket *, BOOL, NSError *) = ticket.retryBlock; + if (retryBlock) { + willRetry = retryBlock(ticket, willRetry, error); + } +#endif + + return willRetry; +} + +- (BOOL)invokeRetrySelector:(SEL)retrySelector + delegate:(id)delegate + ticket:(GTLServiceTicket *)ticket + willRetry:(BOOL)willRetry + error:(NSError *)error { + + if ([delegate respondsToSelector:retrySelector]) { + // Unlike the retry selector invocation in GTMHTTPFetcher, this invocation + // passes the ticket rather than the fetcher as argument 2 + NSMethodSignature *signature = [delegate methodSignatureForSelector:retrySelector]; + NSInvocation *retryInvocation = [NSInvocation invocationWithMethodSignature:signature]; + [retryInvocation setSelector:retrySelector]; + [retryInvocation setTarget:delegate]; + [retryInvocation setArgument:&ticket atIndex:2]; // ticket passed + [retryInvocation setArgument:&willRetry atIndex:3]; + [retryInvocation setArgument:&error atIndex:4]; + [retryInvocation invoke]; + + [retryInvocation getReturnValue:&willRetry]; + } + return willRetry; +} + +- (BOOL)waitForTicket:(GTLServiceTicket *)ticket + timeout:(NSTimeInterval)timeoutInSeconds + fetchedObject:(GTLObject **)outObjectOrNil + error:(NSError **)outErrorOrNil { + + NSDate* giveUpDate = [NSDate dateWithTimeIntervalSinceNow:timeoutInSeconds]; + + // loop until the fetch completes with an object or an error, + // or until the timeout has expired + while (![ticket hasCalledCallback] + && [giveUpDate timeIntervalSinceNow] > 0) { + + // run the current run loop 1/1000 of a second to give the networking + // code a chance to work + NSDate *stopDate = [NSDate dateWithTimeIntervalSinceNow:0.001]; + [[NSRunLoop currentRunLoop] runUntilDate:stopDate]; + } + + NSError *fetchError = ticket.fetchError; + + if (![ticket hasCalledCallback] && fetchError == nil) { + fetchError = [NSError errorWithDomain:kGTLServiceErrorDomain + code:kGTLErrorWaitTimedOut + userInfo:nil]; + } + + if (outObjectOrNil) *outObjectOrNil = ticket.fetchedObject; + if (outErrorOrNil) *outErrorOrNil = fetchError; + + return (fetchError == nil); +} + +#pragma mark - + +// Given a single or batch query and its result, make a new query +// for the next pages, if any. Returns nil if there's no additional +// query to make. +// +// This method calls itself recursively to make the individual next page +// queries for a batch query. +- (id )nextPageQueryForQuery:(GTLQuery *)query + result:(GTLObject *)object + ticket:(GTLServiceTicket *)ticket { + if (!query.isBatchQuery) { + // This is a single query + + // Determine if we should fetch more pages of results + GTLQuery *nextPageQuery = nil; + NSString *nextPageToken = nil; + NSNumber *nextStartIndex = nil; + + if ([object respondsToSelector:@selector(nextPageToken)] + && [query respondsToSelector:@selector(pageToken)]) { + nextPageToken = [object performSelector:@selector(nextPageToken)]; + } + + if ([object respondsToSelector:@selector(nextStartIndex)] + && [query respondsToSelector:@selector(startIndex)]) { + nextStartIndex = [object performSelector:@selector(nextStartIndex)]; + } + + if (nextPageToken || nextStartIndex) { + // Make a query for the next page, preserving the request ID + nextPageQuery = [[query copy] autorelease]; + nextPageQuery.requestID = query.requestID; + + if (nextPageToken) { + [nextPageQuery performSelector:@selector(setPageToken:) + withObject:nextPageToken]; + } else { + // Use KVC to unwrap the scalar type instead of converting the + // NSNumber to an integer and using NSInvocation + [nextPageQuery setValue:nextStartIndex + forKey:@"startIndex"]; + } + } + return nextPageQuery; + } else { + // This is a batch query + // + // Check if there's a next page to fetch for any of the success + // results by invoking this method recursively on each of those results + GTLBatchResult *batchResult = (GTLBatchResult *)object; + GTLBatchQuery *nextPageBatchQuery = nil; + NSDictionary *successes = batchResult.successes; + + for (NSString *requestID in successes) { + GTLObject *singleObject = [successes objectForKey:requestID]; + GTLQuery *singleQuery = [ticket queryForRequestID:requestID]; + + GTLQuery *newQuery = [self nextPageQueryForQuery:singleQuery + result:singleObject + ticket:ticket]; + if (newQuery) { + // There is another query to fetch + if (nextPageBatchQuery == nil) { + nextPageBatchQuery = [GTLBatchQuery batchQuery]; + } + [nextPageBatchQuery addQuery:newQuery]; + } + } + return nextPageBatchQuery; + } +} + +// When a ticket is set to fetch more pages for feeds, this routine +// initiates the fetch for each additional feed page +- (BOOL)fetchNextPageWithQuery:(GTLQuery *)query + delegate:(id)delegate + didFinishedSelector:(SEL)finishedSelector + completionHandler:(GTLServiceCompletionHandler)completionHandler + ticket:(GTLServiceTicket *)ticket { + // Sanity check the number of pages fetched already + NSUInteger oldPagesFetchedCounter = ticket.pagesFetchedCounter; + + if (oldPagesFetchedCounter > kMaxNumberOfNextPagesFetched) { + // Sanity check failed: way too many pages were fetched + // + // The client should be querying with a higher max results per page + // to avoid this + GTL_DEBUG_ASSERT(0, @"Fetched too many next pages for %@", + query.methodName); + return NO; + } + + ticket.pagesFetchedCounter = 1 + oldPagesFetchedCounter; + + GTLServiceTicket *newTicket; + if (query.isBatchQuery) { + newTicket = [self executeBatchQuery:(GTLBatchQuery *)query + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:completionHandler + ticket:ticket]; + } else { + newTicket = [self fetchObjectWithMethodNamed:query.methodName + objectClass:query.expectedObjectClass + parameters:query.JSON + bodyObject:query.bodyObject + requestID:query.requestID + urlQueryParameters:query.urlQueryParameters + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:completionHandler + executingQuery:query + ticket:ticket]; + } + + // In the bizarre case that the fetch didn't begin, newTicket will be + // nil. So long as the new ticket is the same as the ticket we're + // continuing, then we're happy. + return (newTicket == ticket); +} + +// Given a new single or batch result (meaning additional pages for a previous +// query result), merge it into the old result. +- (GTLObject *)mergedNewResultObject:(GTLObject *)newResult + oldResultObject:(GTLObject *)oldResult + forQuery:(GTLQuery *)query { + if (query.isBatchQuery) { + // Batch query result + // + // The new batch results are a subset of the old result's queries, since + // not all queries in the batch necessarily have additional pages. + // + // New success objects replace old success objects, with the old items + // prepended; new failure objects replace old success objects. + // We will update the old batch results with accumulated items, using the + // new objects, and return the old batch. + // + // We reuse the old batch results object because it may include some earlier + // results which did not have additional pages. + GTLBatchResult *newBatchResult = (GTLBatchResult *)newResult; + GTLBatchResult *oldBatchResult = (GTLBatchResult *)oldResult; + + NSMutableDictionary *newSuccesses = newBatchResult.successes; + NSMutableDictionary *newFailures = newBatchResult.failures; + NSMutableDictionary *oldSuccesses = oldBatchResult.successes; + NSMutableDictionary *oldFailures = oldBatchResult.failures; + + for (NSString *requestID in newSuccesses) { + // Prepend the old items to the new response's items + // + // We can assume the objects are collections since they're present in + // additional pages. + GTLCollectionObject *newObj = [newSuccesses objectForKey:requestID]; + GTLCollectionObject *oldObj = [oldSuccesses objectForKey:requestID]; + + NSMutableArray *items = [NSMutableArray arrayWithArray:oldObj.items]; + [items addObjectsFromArray:newObj.items]; + [newObj performSelector:@selector(setItems:) withObject:items]; + + // Replace the old object with the new one + [oldSuccesses setObject:newObj forKey:requestID]; + } + + for (NSString *requestID in newFailures) { + // Replace old successes or failures with the new failure + GTLErrorObject *newError = [newFailures objectForKey:requestID]; + [oldFailures setObject:newError forKey:requestID]; + [oldSuccesses removeObjectForKey:requestID]; + } + return oldBatchResult; + } else { + // Single query result + // + // Merge the items into the new object, and return that. + // + // We can assume the objects are collections since they're present in + // additional pages. + GTLCollectionObject *newObj = (GTLCollectionObject *)newResult; + GTLCollectionObject *oldObj = (GTLCollectionObject *)oldResult; + + NSMutableArray *items = [NSMutableArray arrayWithArray:oldObj.items]; + [items addObjectsFromArray:newObj.items]; + [newObj performSelector:@selector(setItems:) withObject:items]; + + return newObj; + } +} + +#pragma mark - + +// GTLQuery methods. + +- (GTLServiceTicket *)executeQuery:(id)queryObj + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + if ([queryObj isBatchQuery]) { + return [self executeBatchQuery:queryObj + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:NULL + ticket:nil]; + } + + GTLQuery *query = [[(GTLQuery *)queryObj copy] autorelease]; + NSString *methodName = query.methodName; + NSDictionary *params = query.JSON; + GTLObject *bodyObject = query.bodyObject; + + return [self fetchObjectWithMethodNamed:methodName + objectClass:query.expectedObjectClass + parameters:params + bodyObject:bodyObject + requestID:query.requestID + urlQueryParameters:query.urlQueryParameters + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:nil + executingQuery:query + ticket:nil]; +} + +#if NS_BLOCKS_AVAILABLE +- (GTLServiceTicket *)executeQuery:(id)queryObj + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler { + if ([queryObj isBatchQuery]) { + return [self executeBatchQuery:queryObj + delegate:nil + didFinishSelector:NULL + completionHandler:handler + ticket:nil]; + } + + GTLQuery *query = [[(GTLQuery *)queryObj copy] autorelease]; + NSString *methodName = query.methodName; + NSDictionary *params = query.JSON; + GTLObject *bodyObject = query.bodyObject; + + return [self fetchObjectWithMethodNamed:methodName + objectClass:query.expectedObjectClass + parameters:params + bodyObject:bodyObject + requestID:query.requestID + urlQueryParameters:query.urlQueryParameters + delegate:nil + didFinishSelector:NULL + completionHandler:handler + executingQuery:query + ticket:nil]; +} +#endif + +#pragma mark - + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + return [self fetchObjectWithMethodNamed:methodName + objectClass:objectClass + parameters:parameters + bodyObject:nil + requestID:nil + urlQueryParameters:nil + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:nil + executingQuery:nil + ticket:nil]; +} + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + return [self fetchObjectWithMethodNamed:methodName + objectClass:objectClass + parameters:nil + bodyObject:bodyObject + requestID:nil + urlQueryParameters:nil + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:nil + executingQuery:nil + ticket:nil]; +} + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + return [self fetchObjectWithMethodNamed:methodName + objectClass:objectClass + parameters:parameters + bodyObject:bodyObject + requestID:nil + urlQueryParameters:nil + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:nil + executingQuery:nil + ticket:nil]; +} + +#if NS_BLOCKS_AVAILABLE +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + objectClass:(Class)objectClass + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler { + return [self fetchObjectWithMethodNamed:methodName + objectClass:objectClass + parameters:parameters + bodyObject:nil + requestID:nil + urlQueryParameters:nil + delegate:nil + didFinishSelector:NULL + completionHandler:handler + executingQuery:nil + ticket:nil]; +} + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler { + return [self fetchObjectWithMethodNamed:methodName + objectClass:objectClass + parameters:nil + bodyObject:bodyObject + requestID:nil + urlQueryParameters:nil + delegate:nil + didFinishSelector:NULL + completionHandler:handler + executingQuery:nil + ticket:nil]; +} + +- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName + parameters:(NSDictionary *)parameters + insertingObject:(GTLObject *)bodyObject + objectClass:(Class)objectClass + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler { + return [self fetchObjectWithMethodNamed:methodName + objectClass:objectClass + parameters:parameters + bodyObject:bodyObject + requestID:nil + urlQueryParameters:nil + delegate:nil + didFinishSelector:NULL + completionHandler:handler + executingQuery:nil + ticket:nil]; +} +#endif + +#pragma mark - + +// These external entry points doing a REST style fetch. + +- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)feedURL + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + // no object class specified; use registered class + return [self fetchObjectWithURL:feedURL + objectClass:nil + bodyObject:nil + ETag:nil + httpMethod:nil + mayAuthorize:YES + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:nil + ticket:nil]; +} + +- (GTLServiceTicket *)fetchPublicObjectWithURL:(NSURL *)feedURL + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + return [self fetchObjectWithURL:feedURL + objectClass:objectClass + bodyObject:nil + ETag:nil + httpMethod:nil + mayAuthorize:NO + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:nil + ticket:nil]; +} + +- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)feedURL + objectClass:(Class)objectClass + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + return [self fetchObjectWithURL:feedURL + objectClass:objectClass + bodyObject:nil + ETag:nil + httpMethod:nil + mayAuthorize:YES + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:nil + ticket:nil]; +} + + +- (GTLServiceTicket *)fetchObjectByInsertingObject:(GTLObject *)bodyToPost + forURL:(NSURL *)destinationURL + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + Class objClass = [bodyToPost class]; + NSString *etag = ETagIfPresent(bodyToPost); + + return [self fetchObjectWithURL:destinationURL + objectClass:objClass + bodyObject:bodyToPost + ETag:etag + httpMethod:@"POST" + mayAuthorize:YES + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:nil + ticket:nil]; +} + +- (GTLServiceTicket *)fetchObjectByUpdatingObject:(GTLObject *)bodyToPut + forURL:(NSURL *)destinationURL + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + Class objClass = [bodyToPut class]; + NSString *etag = ETagIfPresent(bodyToPut); + + return [self fetchObjectWithURL:destinationURL + objectClass:objClass + bodyObject:bodyToPut + ETag:etag + httpMethod:@"PUT" + mayAuthorize:YES + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:nil + ticket:nil]; +} + + +- (GTLServiceTicket *)deleteResourceURL:(NSURL *)destinationURL + ETag:(NSString *)etagOrNil + delegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + return [self fetchObjectWithURL:destinationURL + objectClass:nil + bodyObject:nil + ETag:etagOrNil + httpMethod:@"DELETE" + mayAuthorize:YES + delegate:delegate + didFinishSelector:finishedSelector + completionHandler:nil + ticket:nil]; +} + + +#if NS_BLOCKS_AVAILABLE +- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler { + return [self fetchObjectWithURL:objectURL + objectClass:nil + bodyObject:nil + ETag:nil + httpMethod:nil + mayAuthorize:YES + delegate:nil + didFinishSelector:NULL + completionHandler:handler + ticket:nil]; +} + +- (GTLServiceTicket *)fetchObjectByInsertingObject:(GTLObject *)bodyToPost + forURL:(NSURL *)destinationURL + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler { + Class objClass = [bodyToPost class]; + NSString *etag = ETagIfPresent(bodyToPost); + + return [self fetchObjectWithURL:destinationURL + objectClass:objClass + bodyObject:bodyToPost + ETag:etag + httpMethod:@"POST" + mayAuthorize:YES + delegate:nil + didFinishSelector:NULL + completionHandler:handler + ticket:nil]; +} + +- (GTLServiceTicket *)fetchObjectByUpdatingObject:(GTLObject *)bodyToPut + forURL:(NSURL *)destinationURL + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler { + Class objClass = [bodyToPut class]; + NSString *etag = ETagIfPresent(bodyToPut); + + return [self fetchObjectWithURL:destinationURL + objectClass:objClass + bodyObject:bodyToPut + ETag:etag + httpMethod:@"PUT" + mayAuthorize:YES + delegate:nil + didFinishSelector:NULL + completionHandler:handler + ticket:nil]; +} + +- (GTLServiceTicket *)deleteResourceURL:(NSURL *)destinationURL + ETag:(NSString *)etagOrNil + completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler { + return [self fetchObjectWithURL:destinationURL + objectClass:nil + bodyObject:nil + ETag:etagOrNil + httpMethod:@"DELETE" + mayAuthorize:YES + delegate:nil + didFinishSelector:NULL + completionHandler:handler + ticket:nil]; +} + +#endif // NS_BLOCKS_AVAILABLE + +#pragma mark - + +- (NSString *)userAgent { + return userAgent_; +} + +- (void)setExactUserAgent:(NSString *)userAgent { + // internal use only + [userAgent_ release]; + userAgent_ = [userAgent copy]; +} + +- (void)setUserAgent:(NSString *)userAgent { + // remove whitespace and unfriendly characters + NSString *str = GTMCleanedUserAgentString(userAgent); + [self setExactUserAgent:str]; +} + +// +// The following methods pass through to the fetcher service object +// + +- (void)setCookieStorageMethod:(NSInteger)method { + self.fetcherService.cookieStorageMethod = method; +} + +- (NSInteger)cookieStorageMethod { + return self.fetcherService.cookieStorageMethod; +} + +- (void)setShouldFetchInBackground:(BOOL)flag { + self.fetcherService.shouldFetchInBackground = flag; +} + +- (BOOL)shouldFetchInBackground { + return self.fetcherService.shouldFetchInBackground; +} + +- (void)setRunLoopModes:(NSArray *)array { + self.fetcherService.runLoopModes = array; +} + +- (NSArray *)runLoopModes { + return self.fetcherService.runLoopModes; +} + +#pragma mark - + +// The service properties becomes the initial value for each future ticket's +// properties +- (void)setServiceProperties:(NSDictionary *)dict { + [serviceProperties_ autorelease]; + serviceProperties_ = [dict mutableCopy]; +} + +- (NSDictionary *)serviceProperties { + // be sure the returned pointer has the life of the autorelease pool, + // in case self is released immediately + return [[serviceProperties_ retain] autorelease]; +} + +- (void)setServiceProperty:(id)obj forKey:(NSString *)key { + + if (obj == nil) { + // user passed in nil, so delete the property + [serviceProperties_ removeObjectForKey:key]; + } else { + // be sure the property dictionary exists + if (serviceProperties_ == nil) { + [self setServiceProperties:[NSDictionary dictionary]]; + } + [serviceProperties_ setObject:obj forKey:key]; + } +} + +- (id)servicePropertyForKey:(NSString *)key { + id obj = [serviceProperties_ objectForKey:key]; + + // be sure the returned pointer has the life of the autorelease pool, + // in case self is released immediately + return [[obj retain] autorelease]; +} + +- (void)setServiceUserData:(id)userData { + [self setServiceProperty:userData forKey:kUserDataPropertyKey]; +} + +- (id)serviceUserData { + return [[[self servicePropertyForKey:kUserDataPropertyKey] retain] autorelease]; +} + +- (void)setAuthorizer:(id )authorizer { + self.fetcherService.authorizer = authorizer; +} + +- (id )authorizer { + return self.fetcherService.authorizer; +} + ++ (NSUInteger)defaultServiceUploadChunkSize { + // subclasses may override + return kStandardUploadChunkSize; +} + +- (NSUInteger)serviceUploadChunkSize { + return uploadChunkSize_; +} + +- (void)setServiceUploadChunkSize:(NSUInteger)val { + + if (val == kGTLStandardUploadChunkSize) { + // determine an appropriate upload chunk size for the system + + if (![GTMHTTPFetcher doesSupportSentDataCallback]) { + // for 10.4 and iPhone 2, we need a small upload chunk size so there + // are frequent intrachunk callbacks for progress monitoring + val = 75000; + } else { +#if GTL_IPHONE + val = 1000000; +#else + if (NSFoundationVersionNumber >= 751.00) { + // Mac OS X 10.6 + // + // we'll pick a huge upload chunk size, which minimizes http overhead + // and server effort, and we'll hope that NSURLConnection can finally + // handle big uploads reliably + val = 25000000; + } else { + // Mac OS X 10.5 + // + // NSURLConnection is more reliable on POSTs in 10.5 than it was in + // 10.4, but it still fails mysteriously on big uploads on some + // systems, so we'll limit the chunks to a megabyte + val = 1000000; + } +#endif + } + } + uploadChunkSize_ = val; +} + +@end + +@implementation GTLServiceTicket + +@synthesize shouldFetchNextPages = shouldFetchNextPages_, + surrogates = surrogates_, + uploadProgressSelector = uploadProgressSelector_, + retryEnabled = isRetryEnabled_, + hasCalledCallback = hasCalledCallback_, + retrySelector = retrySelector_, + maxRetryInterval = maxRetryInterval_, + objectFetcher = objectFetcher_, + postedObject = postedObject_, + fetchedObject = fetchedObject_, + executingQuery = executingQuery_, + originalQuery = originalQuery_, + fetchError = fetchError_, + pagesFetchedCounter = pagesFetchedCounter_, + APIKey = apiKey_, + parseOperation = parseOperation_, + isREST = isREST_; + +#if NS_BLOCKS_AVAILABLE +@synthesize retryBlock = retryBlock_; +#endif + ++ (id)ticketForService:(GTLService *)service { + return [[[self alloc] initWithService:service] autorelease]; +} + +- (id)initWithService:(GTLService *)service { + self = [super init]; + if (self) { + service_ = [service retain]; + + ticketProperties_ = [service.serviceProperties mutableCopy]; + surrogates_ = [service.surrogates retain]; + uploadProgressSelector_ = service.uploadProgressSelector; + isRetryEnabled_ = service.retryEnabled; + retrySelector_ = service.retrySelector; + maxRetryInterval_ = service.maxRetryInterval; + shouldFetchNextPages_ = service.shouldFetchNextPages; + apiKey_ = [service.APIKey copy]; + +#if NS_BLOCKS_AVAILABLE + uploadProgressBlock_ = [service.uploadProgressBlock copy]; + retryBlock_ = [service.retryBlock copy]; +#endif + } + return self; +} + +- (void)dealloc { + [service_ release]; + [ticketProperties_ release]; + [surrogates_ release]; + [objectFetcher_ release]; +#if NS_BLOCKS_AVAILABLE + [uploadProgressBlock_ release]; + [retryBlock_ release]; +#endif + [postedObject_ release]; + [fetchedObject_ release]; + [executingQuery_ release]; + [originalQuery_ release]; + [fetchError_ release]; + [apiKey_ release]; + [parseOperation_ release]; + + [super dealloc]; +} + +- (NSString *)description { + NSString *devKeyInfo = @""; + if (apiKey_ != nil) { + devKeyInfo = [NSString stringWithFormat:@" devKey:%@", apiKey_]; + } + + NSString *authorizerInfo = @""; + id authorizer = self.objectFetcher.authorizer; + if (authorizer != nil) { + authorizerInfo = [NSString stringWithFormat:@" authorizer:%@", authorizer]; + } + + return [NSString stringWithFormat:@"%@ %p: {service:%@%@%@ fetcher:%@ }", + [self class], self, service_, devKeyInfo, authorizerInfo, objectFetcher_]; +} + +- (void)pauseUpload { + BOOL canPause = [objectFetcher_ respondsToSelector:@selector(pauseFetching)]; + GTL_DEBUG_ASSERT(canPause, @"unpauseable ticket"); + + if (canPause) { + [(GTMHTTPUploadFetcher *)objectFetcher_ pauseFetching]; + } +} + +- (void)resumeUpload { + BOOL canResume = [objectFetcher_ respondsToSelector:@selector(resumeFetching)]; + GTL_DEBUG_ASSERT(canResume, @"unresumable ticket"); + + if (canResume) { + [(GTMHTTPUploadFetcher *)objectFetcher_ resumeFetching]; + } +} + +- (BOOL)isUploadPaused { + BOOL isPausable = [objectFetcher_ respondsToSelector:@selector(isPaused)]; + GTL_DEBUG_ASSERT(isPausable, @"unpauseable ticket"); + + if (isPausable) { + return [(GTMHTTPUploadFetcher *)objectFetcher_ isPaused]; + } + return NO; +} + +- (void)cancelTicket { + NSOperation *parseOperation = self.parseOperation; + [parseOperation cancel]; + self.parseOperation = nil; + + [objectFetcher_ stopFetching]; + objectFetcher_.properties = nil; + + self.objectFetcher = nil; + self.properties = nil; + self.uploadProgressSelector = nil; + +#if NS_BLOCKS_AVAILABLE + self.uploadProgressBlock = nil; + self.retryBlock = nil; +#endif + [self.executingQuery executionDidStop]; + self.executingQuery = self.originalQuery; + + [service_ autorelease]; + service_ = nil; +} + +- (id)service { + return service_; +} + +- (void)setUserData:(id)userData { + [self setProperty:userData forKey:kUserDataPropertyKey]; +} + +- (id)userData { + // be sure the returned pointer has the life of the autorelease pool, + // in case self is released immediately + return [[[self propertyForKey:kUserDataPropertyKey] retain] autorelease]; +} + +- (void)setProperties:(NSDictionary *)dict { + [ticketProperties_ autorelease]; + ticketProperties_ = [dict mutableCopy]; +} + +- (NSDictionary *)properties { + // be sure the returned pointer has the life of the autorelease pool, + // in case self is released immediately + return [[ticketProperties_ retain] autorelease]; +} + +- (void)setProperty:(id)obj forKey:(NSString *)key { + if (obj == nil) { + // user passed in nil, so delete the property + [ticketProperties_ removeObjectForKey:key]; + } else { + // be sure the property dictionary exists + if (ticketProperties_ == nil) { + // call setProperties so observers are notified + [self setProperties:[NSDictionary dictionary]]; + } + [ticketProperties_ setObject:obj forKey:key]; + } +} + +- (id)propertyForKey:(NSString *)key { + id obj = [ticketProperties_ objectForKey:key]; + + // be sure the returned pointer has the life of the autorelease pool, + // in case self is released immediately + return [[obj retain] autorelease]; +} + +- (NSDictionary *)surrogates { + return surrogates_; +} + +- (void)setSurrogates:(NSDictionary *)dict { + [surrogates_ autorelease]; + surrogates_ = [dict retain]; +} + +- (SEL)uploadProgressSelector { + return uploadProgressSelector_; +} + +- (void)setUploadProgressSelector:(SEL)progressSelector { + uploadProgressSelector_ = progressSelector; + + // if the user is turning on the progress selector in the ticket after the + // ticket's fetcher has been created, we need to give the fetcher our sentData + // callback. + // + // The progress monitor must be set in the service prior to creation of the + // ticket on 10.4 and iPhone 2.0, since on those systems the upload data must + // be wrapped with a ProgressMonitorInputStream prior to the creation of the + // fetcher. + if (progressSelector != NULL) { + SEL sentDataSel = @selector(objectFetcher:didSendBytes:totalBytesSent:totalBytesExpectedToSend:); + [[self objectFetcher] setSentDataSelector:sentDataSel]; + } +} + +#if NS_BLOCKS_AVAILABLE +- (void)setUploadProgressBlock:(GTLServiceUploadProgressBlock)block { + [uploadProgressBlock_ autorelease]; + uploadProgressBlock_ = [block copy]; + + if (uploadProgressBlock_) { + // As above, we need the fetcher to call us back when bytes are sent. + SEL sentDataSel = @selector(objectFetcher:didSendBytes:totalBytesSent:totalBytesExpectedToSend:); + [[self objectFetcher] setSentDataSelector:sentDataSel]; + } +} + +- (GTLServiceUploadProgressBlock)uploadProgressBlock { + return uploadProgressBlock_; +} +#endif + +- (NSInteger)statusCode { + return [objectFetcher_ statusCode]; +} + +- (GTLQuery *)queryForRequestID:(NSString *)requestID { + id queryObj = self.executingQuery; + if ([queryObj isBatchQuery]) { + GTLBatchQuery *batch = (GTLBatchQuery *)queryObj; + GTLQuery *result = [batch queryForRequestID:requestID]; + return result; + } else { + GTL_DEBUG_ASSERT(0, @"just use ticket.executingQuery"); + return nil; + } +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLTargetNamespace.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLTargetNamespace.h new file mode 100644 index 00000000..9e08a9e4 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLTargetNamespace.h @@ -0,0 +1,58 @@ +// +// Makes the value of GTL_TARGET_NAMESPACE a prefix for all GTL +// library class names +// + +// +// To avoid global namespace issues, define GTL_TARGET_NAMESPACE to a short +// string in your target if you are using the GTL library in a shared-code +// environment like a plug-in. +// +// For example: -DGTL_TARGET_NAMESPACE=MyPlugin +// + +// +// com.google.GTLFramework v. 2.0 (29 classes) 2011-10-25 19:25:36 -0700 +// + +#if defined(__OBJC__) && defined(GTL_TARGET_NAMESPACE) + + #define _GTL_NS_SYMBOL_INNER(ns, symbol) ns ## _ ## symbol + #define _GTL_NS_SYMBOL_MIDDLE(ns, symbol) _GTL_NS_SYMBOL_INNER(ns, symbol) + #define _GTL_NS_SYMBOL(symbol) _GTL_NS_SYMBOL_MIDDLE(GTL_TARGET_NAMESPACE, symbol) + + #define _GTL_NS_STRING_INNER(ns) #ns + #define _GTL_NS_STRING_MIDDLE(ns) _GTL_NS_STRING_INNER(ns) + #define GTL_TARGET_NAMESPACE_STRING _GTL_NS_STRING_MIDDLE(GTL_TARGET_NAMESPACE) + + #define GTLBatchQuery _GTL_NS_SYMBOL(GTLBatchQuery) + #define GTLBatchResult _GTL_NS_SYMBOL(GTLBatchResult) + #define GTLCollectionObject _GTL_NS_SYMBOL(GTLCollectionObject) + #define GTLDateTime _GTL_NS_SYMBOL(GTLDateTime) + #define GTLErrorObject _GTL_NS_SYMBOL(GTLErrorObject) + #define GTLErrorObjectData _GTL_NS_SYMBOL(GTLErrorObjectData) + #define GTLJSONParser _GTL_NS_SYMBOL(GTLJSONParser) + #define GTLObject _GTL_NS_SYMBOL(GTLObject) + #define GTLQuery _GTL_NS_SYMBOL(GTLQuery) + #define GTLRuntimeCommon _GTL_NS_SYMBOL(GTLRuntimeCommon) + #define GTLService _GTL_NS_SYMBOL(GTLService) + #define GTLServiceTicket _GTL_NS_SYMBOL(GTLServiceTicket) + #define GTLUploadParameters _GTL_NS_SYMBOL(GTLUploadParameters) + #define GTLUtilities _GTL_NS_SYMBOL(GTLUtilities) + #define GTMCachedURLResponse _GTL_NS_SYMBOL(GTMCachedURLResponse) + #define GTMCookieStorage _GTL_NS_SYMBOL(GTMCookieStorage) + #define GTMGatherInputStream _GTL_NS_SYMBOL(GTMGatherInputStream) + #define GTMHTTPFetcher _GTL_NS_SYMBOL(GTMHTTPFetcher) + #define GTMHTTPFetcherService _GTL_NS_SYMBOL(GTMHTTPFetcherService) + #define GTMHTTPFetchHistory _GTL_NS_SYMBOL(GTMHTTPFetchHistory) + #define GTMHTTPUploadFetcher _GTL_NS_SYMBOL(GTMHTTPUploadFetcher) + #define GTMMIMEDocument _GTL_NS_SYMBOL(GTMMIMEDocument) + #define GTMMIMEPart _GTL_NS_SYMBOL(GTMMIMEPart) + #define GTMOAuth2Authentication _GTL_NS_SYMBOL(GTMOAuth2Authentication) + #define GTMOAuth2AuthorizationArgs _GTL_NS_SYMBOL(GTMOAuth2AuthorizationArgs) + #define GTMOAuth2SignIn _GTL_NS_SYMBOL(GTMOAuth2SignIn) + #define GTMOAuth2WindowController _GTL_NS_SYMBOL(GTMOAuth2WindowController) + #define GTMReadMonitorInputStream _GTL_NS_SYMBOL(GTMReadMonitorInputStream) + #define GTMURLCache _GTL_NS_SYMBOL(GTMURLCache) + +#endif diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.h new file mode 100644 index 00000000..6b6c20ba --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.h @@ -0,0 +1,57 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLUploadParameters.h +// + +#import + +#import "GTLDefines.h" + +@interface GTLUploadParameters : NSObject { + @private + NSString *MIMEType_; + NSData *data_; + NSFileHandle *fileHandle_; + NSURL *uploadLocationURL_; + NSString *slug_; + BOOL shouldSendUploadOnly_; +} + +// Uploading requires MIME type and one of +// - data to be uploaded +// - file handle for uploading +@property (copy) NSString *MIMEType; +@property (retain) NSData *data; +@property (retain) NSFileHandle *fileHandle; + +// Resuming an in-progress upload is done with the upload location URL, +// and requires a file handle for uploading +@property (retain) NSURL *uploadLocationURL; + +// Some services need a slug (filename) header +@property (copy) NSString *slug; + +// Uploads may be done without a JSON body in the initial request +@property (assign) BOOL shouldSendUploadOnly; + ++ (GTLUploadParameters *)uploadParametersWithData:(NSData *)data + MIMEType:(NSString *)mimeType; + ++ (GTLUploadParameters *)uploadParametersWithFileHandle:(NSFileHandle *)fileHandle + MIMEType:(NSString *)mimeType; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.m new file mode 100644 index 00000000..1a668a9d --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.m @@ -0,0 +1,107 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTLObject.m +// + +#include + +#import "GTLUploadParameters.h" + +@implementation GTLUploadParameters + +@synthesize MIMEType = MIMEType_, + data = data_, + fileHandle = fileHandle_, + uploadLocationURL = uploadLocationURL_, + slug = slug_, + shouldSendUploadOnly = shouldSendUploadOnly_; + ++ (GTLUploadParameters *)uploadParametersWithData:(NSData *)data + MIMEType:(NSString *)mimeType { + GTLUploadParameters *params = [[[GTLUploadParameters alloc] init] autorelease]; + params.data = data; + params.MIMEType = mimeType; + return params; +} + ++ (GTLUploadParameters *)uploadParametersWithFileHandle:(NSFileHandle *)fileHandle + MIMEType:(NSString *)mimeType { + GTLUploadParameters *params = [[[GTLUploadParameters alloc] init] autorelease]; + params.fileHandle = fileHandle; + params.MIMEType = mimeType; + return params; +} + +- (id)copyWithZone:(NSZone *)zone { + GTLUploadParameters *newParams = [[[self class] allocWithZone:zone] init]; + newParams.MIMEType = self.MIMEType; + newParams.data = self.data; + newParams.fileHandle = self.fileHandle; + newParams.uploadLocationURL = self.uploadLocationURL; + newParams.slug = self.slug; + newParams.shouldSendUploadOnly = self.shouldSendUploadOnly; + return newParams; +} + +- (void)dealloc { + [MIMEType_ release]; + [data_ release]; + [fileHandle_ release]; + [uploadLocationURL_ release]; + [slug_ release]; + + [super dealloc]; +} + +- (NSString *)description { + NSMutableArray *array = [NSMutableArray array]; + NSString *str = [NSString stringWithFormat:@"MIMEType:%@", MIMEType_]; + [array addObject:str]; + + if (data_) { + str = [NSString stringWithFormat:@"data:%llu bytes", + (unsigned long long)[data_ length]]; + [array addObject:str]; + } + + if (fileHandle_) { + str = [NSString stringWithFormat:@"fileHandle:%@", fileHandle_]; + [array addObject:str]; + } + + if (uploadLocationURL_) { + str = [NSString stringWithFormat:@"uploadLocation:%@", + [uploadLocationURL_ absoluteString]]; + [array addObject:str]; + } + + if (slug_) { + str = [NSString stringWithFormat:@"slug:%@", slug_]; + [array addObject:str]; + } + + if (shouldSendUploadOnly_) { + [array addObject:@"shouldSendUploadOnly"]; + } + + NSString *descStr = [array componentsJoinedByString:@", "]; + str = [NSString stringWithFormat:@"%@ %p: {%@}", + [self class], self, descStr]; + return str; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.h new file mode 100644 index 00000000..1694df61 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.h @@ -0,0 +1,105 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import + +#ifndef SKIP_GTL_DEFINES + #import "GTLDefines.h" +#endif + +// helper functions for implementing isEqual: +BOOL GTL_AreEqualOrBothNil(id obj1, id obj2); +BOOL GTL_AreBoolsEqual(BOOL b1, BOOL b2); + +// Helper to ensure a number is a number. +// +// The GoogleAPI servers will send numbers >53 bits as strings to avoid +// bugs in some JavaScript implementations. Work around this by catching +// the string and turning it back into a number. +NSNumber *GTL_EnsureNSNumber(NSNumber *num); + +@interface GTLUtilities : NSObject + +// +// String encoding +// + +// URL encoding, different for parts of URLs and parts of URL parameters +// +// +stringByURLEncodingString just makes a string legal for a URL +// +// +stringByURLEncodingForURI also encodes some characters that are legal in +// URLs but should not be used in URIs, +// per http://bitworking.org/projects/atom/rfc5023.html#rfc.section.9.7 +// +// +stringByURLEncodingStringParameter is like +stringByURLEncodingForURI but +// replaces space characters with + characters rather than percent-escaping them +// ++ (NSString *)stringByURLEncodingString:(NSString *)str; ++ (NSString *)stringByURLEncodingForURI:(NSString *)str; ++ (NSString *)stringByURLEncodingStringParameter:(NSString *)str; + +// Percent-encoded UTF-8 ++ (NSString *)stringByPercentEncodingUTF8ForString:(NSString *)str; + +// Key-value coding searches in an array +// +// Utilities to get from an array objects having a known value (or nil) +// at a keyPath + ++ (NSArray *)objectsFromArray:(NSArray *)sourceArray + withValue:(id)desiredValue + forKeyPath:(NSString *)keyPath; + ++ (id)firstObjectFromArray:(NSArray *)sourceArray + withValue:(id)desiredValue + forKeyPath:(NSString *)keyPath; + +// +// Version helpers +// + ++ (NSComparisonResult)compareVersion:(NSString *)ver1 toVersion:(NSString *)ver2; + +// +// URL builder +// + +// If there are already query parameters on urlString, the new ones are simple +// appended after them. ++ (NSURL *)URLWithString:(NSString *)urlString + queryParameters:(NSDictionary *)queryParameters; + +// Allocate a global dictionary ++ (NSMutableDictionary *)newStaticDictionary; + +// Walk up the class tree merging dictionaries and return the result. ++ (NSDictionary *)mergedClassDictionaryForSelector:(SEL)selector + startClass:(Class)startClass + ancestorClass:(Class)ancestorClass + cache:(NSMutableDictionary *)cache; + +// +// MIME Types +// + +// Utility routine to convert a file path to the file's MIME type using +// Mac OS X's UTI database +#if !GTL_FOUNDATION_ONLY ++ (NSString *)MIMETypeForFileAtPath:(NSString *)path + defaultMIMEType:(NSString *)defaultType; +#endif + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.m new file mode 100644 index 00000000..71b7ee8a --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.m @@ -0,0 +1,376 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GTLUtilities.h" + +#include + +@implementation GTLUtilities + +#pragma mark String encoding + +// URL Encoding + ++ (NSString *)stringByURLEncodingString:(NSString *)str { + NSString *result = [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + return result; +} + +// NSURL's stringByAddingPercentEscapesUsingEncoding: does not escape +// some characters that should be escaped in URL parameters, like / and ?; +// we'll use CFURL to force the encoding of those +// +// Reference: http://www.ietf.org/rfc/rfc3986.txt + +const CFStringRef kCharsToForceEscape = CFSTR("!*'();:@&=+$,/?%#[]"); + ++ (NSString *)stringByURLEncodingForURI:(NSString *)str { + + NSString *resultStr = str; + + CFStringRef originalString = (CFStringRef) str; + CFStringRef leaveUnescaped = NULL; + + CFStringRef escapedStr; + escapedStr = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, + originalString, + leaveUnescaped, + kCharsToForceEscape, + kCFStringEncodingUTF8); + if (escapedStr) { + resultStr = [(id)CFMakeCollectable(escapedStr) autorelease]; + } + return resultStr; +} + ++ (NSString *)stringByURLEncodingStringParameter:(NSString *)str { + // For parameters, we'll explicitly leave spaces unescaped now, and replace + // them with +'s + NSString *resultStr = str; + + CFStringRef originalString = (CFStringRef) str; + CFStringRef leaveUnescaped = CFSTR(" "); + + CFStringRef escapedStr; + escapedStr = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, + originalString, + leaveUnescaped, + kCharsToForceEscape, + kCFStringEncodingUTF8); + + if (escapedStr) { + NSMutableString *mutableStr = [NSMutableString stringWithString:(NSString *)escapedStr]; + CFRelease(escapedStr); + + // replace spaces with plusses + [mutableStr replaceOccurrencesOfString:@" " + withString:@"+" + options:0 + range:NSMakeRange(0, [mutableStr length])]; + resultStr = mutableStr; + } + return resultStr; +} + ++ (NSString *)stringByPercentEncodingUTF8ForString:(NSString *)inputStr { + + // Encode per http://bitworking.org/projects/atom/rfc5023.html#rfc.section.9.7 + // + // This is used for encoding upload slug headers + // + // Step through the string as UTF-8, and replace characters outside 20..7E + // (and the percent symbol itself, 25) with percent-encodings + // + // We avoid creating an encoding string unless we encounter some characters + // that require it + const char* utf8 = [inputStr UTF8String]; + if (utf8 == NULL) { + return nil; + } + + NSMutableString *encoded = nil; + + for (unsigned int idx = 0; utf8[idx] != '\0'; idx++) { + + unsigned char currChar = utf8[idx]; + if (currChar < 0x20 || currChar == 0x25 || currChar > 0x7E) { + + if (encoded == nil) { + // Start encoding and catch up on the character skipped so far + encoded = [[[NSMutableString alloc] initWithBytes:utf8 + length:idx + encoding:NSUTF8StringEncoding] autorelease]; + } + + // append this byte as a % and then uppercase hex + [encoded appendFormat:@"%%%02X", currChar]; + + } else { + // This character does not need encoding + // + // Encoded is nil here unless we've encountered a previous character + // that needed encoding + [encoded appendFormat:@"%c", currChar]; + } + } + + if (encoded) { + return encoded; + } + + return inputStr; +} + +#pragma mark Key-Value Coding Searches in an Array + ++ (NSArray *)objectsFromArray:(NSArray *)sourceArray + withValue:(id)desiredValue + forKeyPath:(NSString *)keyPath { + // Step through all entries, get the value from + // the key path, and see if it's equal to the + // desired value + NSMutableArray *results = [NSMutableArray array]; + + for(id obj in sourceArray) { + id val = [obj valueForKeyPath:keyPath]; + if (GTL_AreEqualOrBothNil(val, desiredValue)) { + + // found a match; add it to the results array + [results addObject:obj]; + } + } + return results; +} + ++ (id)firstObjectFromArray:(NSArray *)sourceArray + withValue:(id)desiredValue + forKeyPath:(NSString *)keyPath { + for (id obj in sourceArray) { + id val = [obj valueForKeyPath:keyPath]; + if (GTL_AreEqualOrBothNil(val, desiredValue)) { + // found a match; return it + return obj; + } + } + return nil; +} + +#pragma mark Version helpers + +// compareVersion compares two strings in 1.2.3.4 format +// missing fields are interpreted as zeros, so 1.2 = 1.2.0.0 ++ (NSComparisonResult)compareVersion:(NSString *)ver1 toVersion:(NSString *)ver2 { + + static NSCharacterSet* dotSet = nil; + if (dotSet == nil) { + dotSet = [[NSCharacterSet characterSetWithCharactersInString:@"."] retain]; + } + + if (ver1 == nil) ver1 = @""; + if (ver2 == nil) ver2 = @""; + + NSScanner* scanner1 = [NSScanner scannerWithString:ver1]; + NSScanner* scanner2 = [NSScanner scannerWithString:ver2]; + + [scanner1 setCharactersToBeSkipped:dotSet]; + [scanner2 setCharactersToBeSkipped:dotSet]; + + int partA1 = 0, partA2 = 0, partB1 = 0, partB2 = 0; + int partC1 = 0, partC2 = 0, partD1 = 0, partD2 = 0; + + if ([scanner1 scanInt:&partA1] && [scanner1 scanInt:&partB1] + && [scanner1 scanInt:&partC1] && [scanner1 scanInt:&partD1]) { + } + if ([scanner2 scanInt:&partA2] && [scanner2 scanInt:&partB2] + && [scanner2 scanInt:&partC2] && [scanner2 scanInt:&partD2]) { + } + + if (partA1 != partA2) return ((partA1 < partA2) ? NSOrderedAscending : NSOrderedDescending); + if (partB1 != partB2) return ((partB1 < partB2) ? NSOrderedAscending : NSOrderedDescending); + if (partC1 != partC2) return ((partC1 < partC2) ? NSOrderedAscending : NSOrderedDescending); + if (partD1 != partD2) return ((partD1 < partD2) ? NSOrderedAscending : NSOrderedDescending); + return NSOrderedSame; +} + +#pragma mark URL builder + ++ (NSURL *)URLWithString:(NSString *)urlString + queryParameters:(NSDictionary *)queryParameters { + if ([urlString length] == 0) return nil; + + NSString *fullURLString; + if ([queryParameters count] > 0) { + NSMutableArray *queryItems = [NSMutableArray arrayWithCapacity:[queryParameters count]]; + + // sort the custom parameter keys so that we have deterministic parameter + // order for unit tests + NSArray *queryKeys = [queryParameters allKeys]; + NSArray *sortedQueryKeys = [queryKeys sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; + + for (NSString *paramKey in sortedQueryKeys) { + NSString *paramValue = [queryParameters valueForKey:paramKey]; + + NSString *paramItem = [NSString stringWithFormat:@"%@=%@", + [self stringByURLEncodingStringParameter:paramKey], + [self stringByURLEncodingStringParameter:paramValue]]; + + [queryItems addObject:paramItem]; + } + + NSString *paramStr = [queryItems componentsJoinedByString:@"&"]; + + BOOL hasQMark = ([urlString rangeOfString:@"?"].location == NSNotFound); + char joiner = hasQMark ? '?' : '&'; + fullURLString = [NSString stringWithFormat:@"%@%c%@", + urlString, joiner, paramStr]; + } else { + fullURLString = urlString; + } + NSURL *result = [NSURL URLWithString:fullURLString]; + return result; +} + +#pragma mark Collections + ++ (NSMutableDictionary *)newStaticDictionary { + NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; + + // make the dictionary ineligible for garbage collection +#if !GTL_IPHONE + [[NSGarbageCollector defaultCollector] disableCollectorForPointer:dict]; +#endif + return dict; +} + ++ (NSDictionary *)mergedClassDictionaryForSelector:(SEL)selector + startClass:(Class)startClass + ancestorClass:(Class)ancestorClass + cache:(NSMutableDictionary *)cache { + NSDictionary *result; + @synchronized(cache) { + result = [cache objectForKey:startClass]; + if (result == nil) { + // Collect the class's dictionary. + NSDictionary *classDict = [startClass performSelector:selector]; + + // Collect the parent class's merged dictionary. + NSDictionary *parentClassMergedDict; + if ([startClass isEqual:ancestorClass]) { + parentClassMergedDict = nil; + } else { + Class parentClass = class_getSuperclass(startClass); + parentClassMergedDict = + [GTLUtilities mergedClassDictionaryForSelector:selector + startClass:parentClass + ancestorClass:ancestorClass + cache:cache]; + } + + // Merge this class's into the parent's so things properly override. + NSMutableDictionary *mergeDict; + if (parentClassMergedDict != nil) { + mergeDict = + [NSMutableDictionary dictionaryWithDictionary:parentClassMergedDict]; + } else { + mergeDict = [NSMutableDictionary dictionary]; + } + if (classDict != nil) { + [mergeDict addEntriesFromDictionary:classDict]; + } + + // Make an immutable version. + result = [NSDictionary dictionaryWithDictionary:mergeDict]; + + // Save it. + [cache setObject:result forKey:(id)startClass]; + } + } + return result; +} + +#pragma mark MIME Types + +// Utility routine to convert a file path to the file's MIME type using +// Mac OS X's UTI database +#if !GTL_FOUNDATION_ONLY ++ (NSString *)MIMETypeForFileAtPath:(NSString *)path + defaultMIMEType:(NSString *)defaultType { + NSString *result = defaultType; + + // Convert the path to an FSRef + FSRef fileFSRef; + Boolean isDirectory; + OSStatus err = FSPathMakeRef((UInt8 *) [path fileSystemRepresentation], + &fileFSRef, &isDirectory); + if (err == noErr) { + // Get the UTI (content type) for the FSRef + CFStringRef fileUTI; + err = LSCopyItemAttribute(&fileFSRef, kLSRolesAll, kLSItemContentType, + (CFTypeRef *)&fileUTI); + if (err == noErr) { + // Get the MIME type for the UTI + CFStringRef mimeTypeTag; + mimeTypeTag = UTTypeCopyPreferredTagWithClass(fileUTI, + kUTTagClassMIMEType); + if (mimeTypeTag) { + // Convert the CFStringRef to an autoreleased NSString + result = [(id)CFMakeCollectable(mimeTypeTag) autorelease]; + } + CFRelease(fileUTI); + } + } + return result; +} +#endif + +@end + +// isEqual: has the fatal flaw that it doesn't deal well with the receiver +// being nil. We'll use this utility instead. +BOOL GTL_AreEqualOrBothNil(id obj1, id obj2) { + if (obj1 == obj2) { + return YES; + } + if (obj1 && obj2) { + BOOL areEqual = [obj1 isEqual:obj2]; + return areEqual; + } + return NO; +} + +BOOL GTL_AreBoolsEqual(BOOL b1, BOOL b2) { + // avoid comparison problems with boolean types by negating + // both booleans + return (!b1 == !b2); +} + +NSNumber *GTL_EnsureNSNumber(NSNumber *num) { + if ([num isKindOfClass:[NSString class]]) { + NSDecimalNumber *reallyNum; + // Force the parse to use '.' as the number seperator. + static NSLocale *usLocale = nil; + @synchronized([GTLUtilities class]) { + if (usLocale == nil) { + usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; + } + reallyNum = [NSDecimalNumber decimalNumberWithString:(NSString*)num + locale:(id)usLocale]; + } + if (reallyNum != nil) { + num = reallyNum; + } + } + return num; +} diff --git a/External/google-plus-ios-sdk/OpenSource/GTMDefines.h b/External/google-plus-ios-sdk/OpenSource/GTMDefines.h new file mode 100644 index 00000000..59a1723c --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMDefines.h @@ -0,0 +1,439 @@ +// +// GTMDefines.h +// +// Copyright 2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +// ============================================================================ + +#include +#include + +#if TARGET_OS_IPHONE +#include +#endif // TARGET_OS_IPHONE + +// Not all MAC_OS_X_VERSION_10_X macros defined in past SDKs +#ifndef MAC_OS_X_VERSION_10_5 + #define MAC_OS_X_VERSION_10_5 1050 +#endif +#ifndef MAC_OS_X_VERSION_10_6 + #define MAC_OS_X_VERSION_10_6 1060 +#endif +#ifndef MAC_OS_X_VERSION_10_7 + #define MAC_OS_X_VERSION_10_7 1070 +#endif + +// Not all __IPHONE_X macros defined in past SDKs +#ifndef __IPHONE_3_0 + #define __IPHONE_3_0 30000 +#endif +#ifndef __IPHONE_3_1 + #define __IPHONE_3_1 30100 +#endif +#ifndef __IPHONE_3_2 + #define __IPHONE_3_2 30200 +#endif +#ifndef __IPHONE_4_0 + #define __IPHONE_4_0 40000 +#endif +#ifndef __IPHONE_4_3 + #define __IPHONE_4_3 40300 +#endif +#ifndef __IPHONE_5_0 + #define __IPHONE_5_0 50000 +#endif + +// ---------------------------------------------------------------------------- +// CPP symbols that can be overridden in a prefix to control how the toolbox +// is compiled. +// ---------------------------------------------------------------------------- + + +// By setting the GTM_CONTAINERS_VALIDATION_FAILED_LOG and +// GTM_CONTAINERS_VALIDATION_FAILED_ASSERT macros you can control what happens +// when a validation fails. If you implement your own validators, you may want +// to control their internals using the same macros for consistency. +#ifndef GTM_CONTAINERS_VALIDATION_FAILED_ASSERT + #define GTM_CONTAINERS_VALIDATION_FAILED_ASSERT 0 +#endif + +// Give ourselves a consistent way to do inlines. Apple's macros even use +// a few different actual definitions, so we're based off of the foundation +// one. +#if !defined(GTM_INLINE) + #if (defined (__GNUC__) && (__GNUC__ == 4)) || defined (__clang__) + #define GTM_INLINE static __inline__ __attribute__((always_inline)) + #else + #define GTM_INLINE static __inline__ + #endif +#endif + +// Give ourselves a consistent way of doing externs that links up nicely +// when mixing objc and objc++ +#if !defined (GTM_EXTERN) + #if defined __cplusplus + #define GTM_EXTERN extern "C" + #define GTM_EXTERN_C_BEGIN extern "C" { + #define GTM_EXTERN_C_END } + #else + #define GTM_EXTERN extern + #define GTM_EXTERN_C_BEGIN + #define GTM_EXTERN_C_END + #endif +#endif + +// Give ourselves a consistent way of exporting things if we have visibility +// set to hidden. +#if !defined (GTM_EXPORT) + #define GTM_EXPORT __attribute__((visibility("default"))) +#endif + +// Give ourselves a consistent way of declaring something as unused. This +// doesn't use __unused because that is only supported in gcc 4.2 and greater. +#if !defined (GTM_UNUSED) +#define GTM_UNUSED(x) ((void)(x)) +#endif + +// _GTMDevLog & _GTMDevAssert +// +// _GTMDevLog & _GTMDevAssert are meant to be a very lightweight shell for +// developer level errors. This implementation simply macros to NSLog/NSAssert. +// It is not intended to be a general logging/reporting system. +// +// Please see http://code.google.com/p/google-toolbox-for-mac/wiki/DevLogNAssert +// for a little more background on the usage of these macros. +// +// _GTMDevLog log some error/problem in debug builds +// _GTMDevAssert assert if conditon isn't met w/in a method/function +// in all builds. +// +// To replace this system, just provide different macro definitions in your +// prefix header. Remember, any implementation you provide *must* be thread +// safe since this could be called by anything in what ever situtation it has +// been placed in. +// + +// We only define the simple macros if nothing else has defined this. +#ifndef _GTMDevLog + +#ifdef DEBUG + #define _GTMDevLog(...) NSLog(__VA_ARGS__) +#else + #define _GTMDevLog(...) do { } while (0) +#endif + +#endif // _GTMDevLog + +#ifndef _GTMDevAssert +// we directly invoke the NSAssert handler so we can pass on the varargs +// (NSAssert doesn't have a macro we can use that takes varargs) +#if !defined(NS_BLOCK_ASSERTIONS) + #define _GTMDevAssert(condition, ...) \ + do { \ + if (!(condition)) { \ + [[NSAssertionHandler currentHandler] \ + handleFailureInFunction:[NSString stringWithUTF8String:__PRETTY_FUNCTION__] \ + file:[NSString stringWithUTF8String:__FILE__] \ + lineNumber:__LINE__ \ + description:__VA_ARGS__]; \ + } \ + } while(0) +#else // !defined(NS_BLOCK_ASSERTIONS) + #define _GTMDevAssert(condition, ...) do { } while (0) +#endif // !defined(NS_BLOCK_ASSERTIONS) + +#endif // _GTMDevAssert + +// _GTMCompileAssert +// _GTMCompileAssert is an assert that is meant to fire at compile time if you +// want to check things at compile instead of runtime. For example if you +// want to check that a wchar is 4 bytes instead of 2 you would use +// _GTMCompileAssert(sizeof(wchar_t) == 4, wchar_t_is_4_bytes_on_OS_X) +// Note that the second "arg" is not in quotes, and must be a valid processor +// symbol in it's own right (no spaces, punctuation etc). + +// Wrapping this in an #ifndef allows external groups to define their own +// compile time assert scheme. +#ifndef _GTMCompileAssert + // We got this technique from here: + // http://unixjunkie.blogspot.com/2007/10/better-compile-time-asserts_29.html + + #define _GTMCompileAssertSymbolInner(line, msg) _GTMCOMPILEASSERT ## line ## __ ## msg + #define _GTMCompileAssertSymbol(line, msg) _GTMCompileAssertSymbolInner(line, msg) + #define _GTMCompileAssert(test, msg) \ + typedef char _GTMCompileAssertSymbol(__LINE__, msg) [ ((test) ? 1 : -1) ] +#endif // _GTMCompileAssert + +// ---------------------------------------------------------------------------- +// CPP symbols defined based on the project settings so the GTM code has +// simple things to test against w/o scattering the knowledge of project +// setting through all the code. +// ---------------------------------------------------------------------------- + +// Provide a single constant CPP symbol that all of GTM uses for ifdefing +// iPhone code. +#if TARGET_OS_IPHONE // iPhone SDK + // For iPhone specific stuff + #define GTM_IPHONE_SDK 1 + #if TARGET_IPHONE_SIMULATOR + #define GTM_IPHONE_SIMULATOR 1 + #else + #define GTM_IPHONE_DEVICE 1 + #endif // TARGET_IPHONE_SIMULATOR + // By default, GTM has provided it's own unittesting support, define this + // to use the support provided by Xcode, especially for the Xcode4 support + // for unittesting. + #ifndef GTM_IPHONE_USE_SENTEST + #define GTM_IPHONE_USE_SENTEST 0 + #endif +#else + // For MacOS specific stuff + #define GTM_MACOS_SDK 1 +#endif + +// Some of our own availability macros +#if GTM_MACOS_SDK +#define GTM_AVAILABLE_ONLY_ON_IPHONE UNAVAILABLE_ATTRIBUTE +#define GTM_AVAILABLE_ONLY_ON_MACOS +#else +#define GTM_AVAILABLE_ONLY_ON_IPHONE +#define GTM_AVAILABLE_ONLY_ON_MACOS UNAVAILABLE_ATTRIBUTE +#endif + +// Provide a symbol to include/exclude extra code for GC support. (This mainly +// just controls the inclusion of finalize methods). +#ifndef GTM_SUPPORT_GC + #if GTM_IPHONE_SDK + // iPhone never needs GC + #define GTM_SUPPORT_GC 0 + #else + // We can't find a symbol to tell if GC is supported/required, so best we + // do on Mac targets is include it if we're on 10.5 or later. + #if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 + #define GTM_SUPPORT_GC 0 + #else + #define GTM_SUPPORT_GC 1 + #endif + #endif +#endif + +// To simplify support for 64bit (and Leopard in general), we provide the type +// defines for non Leopard SDKs +#if !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_5) + // NSInteger/NSUInteger and Max/Mins + #ifndef NSINTEGER_DEFINED + #if __LP64__ || NS_BUILD_32_LIKE_64 + typedef long NSInteger; + typedef unsigned long NSUInteger; + #else + typedef int NSInteger; + typedef unsigned int NSUInteger; + #endif + #define NSIntegerMax LONG_MAX + #define NSIntegerMin LONG_MIN + #define NSUIntegerMax ULONG_MAX + #define NSINTEGER_DEFINED 1 + #endif // NSINTEGER_DEFINED + // CGFloat + #ifndef CGFLOAT_DEFINED + #if defined(__LP64__) && __LP64__ + // This really is an untested path (64bit on Tiger?) + typedef double CGFloat; + #define CGFLOAT_MIN DBL_MIN + #define CGFLOAT_MAX DBL_MAX + #define CGFLOAT_IS_DOUBLE 1 + #else /* !defined(__LP64__) || !__LP64__ */ + typedef float CGFloat; + #define CGFLOAT_MIN FLT_MIN + #define CGFLOAT_MAX FLT_MAX + #define CGFLOAT_IS_DOUBLE 0 + #endif /* !defined(__LP64__) || !__LP64__ */ + #define CGFLOAT_DEFINED 1 + #endif // CGFLOAT_DEFINED +#endif // MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5 + +// Some support for advanced clang static analysis functionality +// See http://clang-analyzer.llvm.org/annotations.html +#ifndef __has_feature // Optional. + #define __has_feature(x) 0 // Compatibility with non-clang compilers. +#endif + +#ifndef NS_RETURNS_RETAINED + #if __has_feature(attribute_ns_returns_retained) + #define NS_RETURNS_RETAINED __attribute__((ns_returns_retained)) + #else + #define NS_RETURNS_RETAINED + #endif +#endif + +#ifndef NS_RETURNS_NOT_RETAINED + #if __has_feature(attribute_ns_returns_not_retained) + #define NS_RETURNS_NOT_RETAINED __attribute__((ns_returns_not_retained)) + #else + #define NS_RETURNS_NOT_RETAINED + #endif +#endif + +#ifndef CF_RETURNS_RETAINED + #if __has_feature(attribute_cf_returns_retained) + #define CF_RETURNS_RETAINED __attribute__((cf_returns_retained)) + #else + #define CF_RETURNS_RETAINED + #endif +#endif + +#ifndef CF_RETURNS_NOT_RETAINED + #if __has_feature(attribute_cf_returns_not_retained) + #define CF_RETURNS_NOT_RETAINED __attribute__((cf_returns_not_retained)) + #else + #define CF_RETURNS_NOT_RETAINED + #endif +#endif + +#ifndef NS_CONSUMED + #if __has_feature(attribute_ns_consumed) + #define NS_CONSUMED __attribute__((ns_consumed)) + #else + #define NS_CONSUMED + #endif +#endif + +#ifndef CF_CONSUMED + #if __has_feature(attribute_cf_consumed) + #define CF_CONSUMED __attribute__((cf_consumed)) + #else + #define CF_CONSUMED + #endif +#endif + +#ifndef NS_CONSUMES_SELF + #if __has_feature(attribute_ns_consumes_self) + #define NS_CONSUMES_SELF __attribute__((ns_consumes_self)) + #else + #define NS_CONSUMES_SELF + #endif +#endif + +// Defined on 10.6 and above. +#ifndef NS_FORMAT_ARGUMENT + #define NS_FORMAT_ARGUMENT(A) +#endif + +// Defined on 10.6 and above. +#ifndef NS_FORMAT_FUNCTION + #define NS_FORMAT_FUNCTION(F,A) +#endif + +// Defined on 10.6 and above. +#ifndef CF_FORMAT_ARGUMENT + #define CF_FORMAT_ARGUMENT(A) +#endif + +// Defined on 10.6 and above. +#ifndef CF_FORMAT_FUNCTION + #define CF_FORMAT_FUNCTION(F,A) +#endif + +#ifndef GTM_NONNULL + #define GTM_NONNULL(x) __attribute__((nonnull(x))) +#endif + +// Invalidates the initializer from which it's called. +#ifndef GTMInvalidateInitializer + #if __has_feature(objc_arc) + #define GTMInvalidateInitializer() \ + do { \ + _GTMDevAssert(NO, @"Invalid initializer."); \ + return nil; \ + } while (0) + #else + #define GTMInvalidateInitializer() \ + do { \ + [self release]; \ + _GTMDevAssert(NO, @"Invalid initializer."); \ + return nil; \ + } while (0) + #endif +#endif + +#ifdef __OBJC__ + +// Declared here so that it can easily be used for logging tracking if +// necessary. See GTMUnitTestDevLog.h for details. +@class NSString; +GTM_EXTERN void _GTMUnitTestDevLog(NSString *format, ...) NS_FORMAT_FUNCTION(1, 2); + +// Macro to allow you to create NSStrings out of other macros. +// #define FOO foo +// NSString *fooString = GTM_NSSTRINGIFY(FOO); +#if !defined (GTM_NSSTRINGIFY) + #define GTM_NSSTRINGIFY_INNER(x) @#x + #define GTM_NSSTRINGIFY(x) GTM_NSSTRINGIFY_INNER(x) +#endif + +// Macro to allow fast enumeration when building for 10.5 or later, and +// reliance on NSEnumerator for 10.4. Remember, NSDictionary w/ FastEnumeration +// does keys, so pick the right thing, nothing is done on the FastEnumeration +// side to be sure you're getting what you wanted. +#ifndef GTM_FOREACH_OBJECT + #if TARGET_OS_IPHONE || !(MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) + #define GTM_FOREACH_ENUMEREE(element, enumeration) \ + for (element in enumeration) + #define GTM_FOREACH_OBJECT(element, collection) \ + for (element in collection) + #define GTM_FOREACH_KEY(element, collection) \ + for (element in collection) + #else + #define GTM_FOREACH_ENUMEREE(element, enumeration) \ + for (NSEnumerator *_ ## element ## _enum = enumeration; \ + (element = [_ ## element ## _enum nextObject]) != nil; ) + #define GTM_FOREACH_OBJECT(element, collection) \ + GTM_FOREACH_ENUMEREE(element, [collection objectEnumerator]) + #define GTM_FOREACH_KEY(element, collection) \ + GTM_FOREACH_ENUMEREE(element, [collection keyEnumerator]) + #endif +#endif + +// ============================================================================ + +// To simplify support for both Leopard and Snow Leopard we declare +// the Snow Leopard protocols that we need here. +#if !defined(GTM_10_6_PROTOCOLS_DEFINED) && !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) +#define GTM_10_6_PROTOCOLS_DEFINED 1 +@protocol NSConnectionDelegate +@end +@protocol NSAnimationDelegate +@end +@protocol NSImageDelegate +@end +@protocol NSTabViewDelegate +@end +#endif // !defined(GTM_10_6_PROTOCOLS_DEFINED) && !(MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6) + +// GTM_SEL_STRING is for specifying selector (usually property) names to KVC +// or KVO methods. +// In debug it will generate warnings for undeclared selectors if +// -Wunknown-selector is turned on. +// In release it will have no runtime overhead. +#ifndef GTM_SEL_STRING + #ifdef DEBUG + #define GTM_SEL_STRING(selName) NSStringFromSelector(@selector(selName)) + #else + #define GTM_SEL_STRING(selName) @#selName + #endif // DEBUG +#endif // GTM_SEL_STRING + +#endif // __OBJC__ diff --git a/External/google-plus-ios-sdk/OpenSource/GTMGarbageCollection.h b/External/google-plus-ios-sdk/OpenSource/GTMGarbageCollection.h new file mode 100644 index 00000000..93d4efab --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMGarbageCollection.h @@ -0,0 +1,72 @@ +// +// GTMGarbageCollection.h +// +// Copyright 2007-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import + +#import "GTMDefines.h" + +// This allows us to easily move our code from GC to non GC. +// They are no-ops unless we are require Leopard or above. +// See +// http://developer.apple.com/documentation/Cocoa/Conceptual/GarbageCollection/index.html +// and +// http://developer.apple.com/documentation/Cocoa/Conceptual/GarbageCollection/Articles/gcCoreFoundation.html#//apple_ref/doc/uid/TP40006687-SW1 +// for details. + +#if (MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_5) && !GTM_IPHONE_SDK +// General use would be to call this through GTMCFAutorelease +// but there may be a reason the you want to make something collectable +// but not autoreleased, especially in pure GC code where you don't +// want to bother with the nop autorelease. Done as a define instead of an +// inline so that tools like Clang's scan-build don't report code as leaking. +#define GTMNSMakeCollectable(cf) ((id)NSMakeCollectable(cf)) + +// GTMNSMakeUncollectable is for global maps, etc. that we don't +// want released ever. You should still retain these in non-gc code. +GTM_INLINE void GTMNSMakeUncollectable(id object) { + [[NSGarbageCollector defaultCollector] disableCollectorForPointer:object]; +} + +// Hopefully no code really needs this, but GTMIsGarbageCollectionEnabled is +// a common way to check at runtime if GC is on. +// There are some places where GC doesn't work w/ things w/in Apple's +// frameworks, so this is here so GTM unittests and detect it, and not run +// individual tests to work around bugs in Apple's frameworks. +GTM_INLINE BOOL GTMIsGarbageCollectionEnabled(void) { + return ([NSGarbageCollector defaultCollector] != nil); +} + +#else + +#define GTMNSMakeCollectable(cf) ((id)(cf)) + +GTM_INLINE void GTMNSMakeUncollectable(id object) { +} + +GTM_INLINE BOOL GTMIsGarbageCollectionEnabled(void) { + return NO; +} + +#endif + +// GTMCFAutorelease makes a CF object collectable in GC mode, or adds it +// to the autorelease pool in non-GC mode. Either way it is taken care +// of. Done as a define instead of an inline so that tools like Clang's +// scan-build don't report code as leaking. +#define GTMCFAutorelease(cf) ([GTMNSMakeCollectable(cf) autorelease]) + diff --git a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.h b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.h new file mode 100644 index 00000000..96018f5d --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.h @@ -0,0 +1,187 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTMHTTPFetchHistory.h +// + +// +// Users of the GTMHTTPFetcher class may optionally create and set a fetch +// history object. The fetch history provides "memory" between subsequent +// fetches, including: +// +// - For fetch responses with Etag headers, the fetch history +// remembers the response headers. Future fetcher requests to the same URL +// will be given an "If-None-Match" header, telling the server to return +// a 304 Not Modified status if the response is unchanged, reducing the +// server load and network traffic. +// +// - Optionally, the fetch history can cache the ETagged data that was returned +// in the responses that contained Etag headers. If a later fetch +// results in a 304 status, the fetcher will return the cached ETagged data +// to the client along with a 200 status, hiding the 304. +// +// - The fetch history can track cookies. +// + +#pragma once + +#import + +#import "GTMHTTPFetcher.h" + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTMHTTPFETCHHISTORY_DEFINE_GLOBALS + #define _EXTERN + #define _INITIALIZE_AS(x) =x +#else + #if defined(__cplusplus) + #define _EXTERN extern "C" + #else + #define _EXTERN extern + #endif + #define _INITIALIZE_AS(x) +#endif + + +// default data cache size for when we're caching responses to handle "not +// modified" errors for the client +#if GTM_IPHONE +// iPhone: up to 1MB memory +_EXTERN const NSUInteger kGTMDefaultETaggedDataCacheMemoryCapacity _INITIALIZE_AS(1*1024*1024); +#else +// Mac OS X: up to 15MB memory +_EXTERN const NSUInteger kGTMDefaultETaggedDataCacheMemoryCapacity _INITIALIZE_AS(15*1024*1024); +#endif + +// forward declarations +@class GTMURLCache; +@class GTMCookieStorage; + +@interface GTMHTTPFetchHistory : NSObject { + @private + GTMURLCache *etaggedDataCache_; + BOOL shouldRememberETags_; + BOOL shouldCacheETaggedData_; // if NO, then only headers are cached + GTMCookieStorage *cookieStorage_; +} + +// With caching enabled, previously-cached data will be returned instead of +// 304 Not Modified responses when repeating a fetch of an URL that previously +// included an ETag header in its response +@property (assign) BOOL shouldRememberETags; // default: NO +@property (assign) BOOL shouldCacheETaggedData; // default: NO + +// the default ETag data cache capacity is kGTMDefaultETaggedDataCacheMemoryCapacity +@property (assign) NSUInteger memoryCapacity; + +@property (retain) GTMCookieStorage *cookieStorage; + +- (id)initWithMemoryCapacity:(NSUInteger)totalBytes + shouldCacheETaggedData:(BOOL)shouldCacheETaggedData; + +- (void)updateRequest:(NSMutableURLRequest *)request isHTTPGet:(BOOL)isHTTPGet; + +- (void)clearETaggedDataCache; +- (void)clearHistory; + +- (void)removeAllCookies; + +@end + + +// GTMURLCache and GTMCachedURLResponse have interfaces similar to their +// NSURLCache counterparts, in hopes that someday the NSURLCache versions +// can be used. But in 10.5.8, those are not reliable enough except when +// used with +setSharedURLCache. Our goal here is just to cache +// responses for handling If-None-Match requests that return +// "Not Modified" responses, not for replacing the general URL +// caches. + +@interface GTMCachedURLResponse : NSObject { + @private + NSURLResponse *response_; + NSData *data_; + NSDate *useDate_; // date this response was last saved or used + NSDate *reservationDate_; // date this response's ETag was used +} + +@property (readonly) NSURLResponse* response; +@property (readonly) NSData* data; + +// date the response was saved or last accessed +@property (retain) NSDate *useDate; + +// date the response's ETag header was last used for a fetch request +@property (retain) NSDate *reservationDate; + +- (id)initWithResponse:(NSURLResponse *)response data:(NSData *)data; +@end + +@interface GTMURLCache : NSObject { + NSMutableDictionary *responses_; // maps request URL to GTMCachedURLResponse + NSUInteger memoryCapacity_; // capacity of NSDatas in the responses + NSUInteger totalDataSize_; // sum of sizes of NSDatas of all responses + NSTimeInterval reservationInterval_; // reservation expiration interval +} + +@property (assign) NSUInteger memoryCapacity; + +- (id)initWithMemoryCapacity:(NSUInteger)totalBytes; + +- (GTMCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request; +- (void)storeCachedResponse:(GTMCachedURLResponse *)cachedResponse forRequest:(NSURLRequest *)request; +- (void)removeCachedResponseForRequest:(NSURLRequest *)request; +- (void)removeAllCachedResponses; + +// for unit testing +- (void)setReservationInterval:(NSTimeInterval)secs; +- (NSDictionary *)responses; +- (NSUInteger)totalDataSize; +@end + +@interface GTMCookieStorage : NSObject { + @private + // The cookie storage object manages an array holding cookies, but the array + // is allocated externally (it may be in a fetcher object or the static + // fetcher cookie array.) See the fetcher's setCookieStorageMethod: + // for allocation of this object and assignment of its cookies array. + NSMutableArray *cookies_; +} + +// add all NSHTTPCookies in the supplied array to the storage array, +// replacing cookies in the storage array as appropriate +// Side effect: removes expired cookies from the storage array +- (void)setCookies:(NSArray *)newCookies; + +// retrieve all cookies appropriate for the given URL, considering +// domain, path, cookie name, expiration, security setting. +// Side effect: removes expired cookies from the storage array +- (NSArray *)cookiesForURL:(NSURL *)theURL; + +// return a cookie with the same name, domain, and path as the +// given cookie, or else return nil if none found +// +// Both the cookie being tested and all stored cookies should +// be valid (non-nil name, domains, paths) +- (NSHTTPCookie *)cookieMatchingCookie:(NSHTTPCookie *)cookie; + +// remove any expired cookies, excluding cookies with nil expirations +- (void)removeExpiredCookies; + +- (void)removeAllCookies; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.m b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.m new file mode 100644 index 00000000..7bf0684a --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.m @@ -0,0 +1,590 @@ +/* Copyright (c) 2010 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTMHTTPFetchHistory.m +// + +#define GTMHTTPFETCHHISTORY_DEFINE_GLOBALS 1 + +#import "GTMHTTPFetchHistory.h" + +const NSTimeInterval kCachedURLReservationInterval = 60.0; // 1 minute +static NSString* const kGTMIfNoneMatchHeader = @"If-None-Match"; +static NSString* const kGTMETagHeader = @"Etag"; + +@implementation GTMCookieStorage + +- (id)init { + self = [super init]; + if (self != nil) { + cookies_ = [[NSMutableArray alloc] init]; + } + return self; +} + +- (void)dealloc { + [cookies_ release]; + [super dealloc]; +} + +// add all cookies in the new cookie array to the storage, +// replacing stored cookies as appropriate +// +// Side effect: removes expired cookies from the storage array +- (void)setCookies:(NSArray *)newCookies { + + @synchronized(cookies_) { + [self removeExpiredCookies]; + + for (NSHTTPCookie *newCookie in newCookies) { + if ([[newCookie name] length] > 0 + && [[newCookie domain] length] > 0 + && [[newCookie path] length] > 0) { + + // remove the cookie if it's currently in the array + NSHTTPCookie *oldCookie = [self cookieMatchingCookie:newCookie]; + if (oldCookie) { + [cookies_ removeObjectIdenticalTo:oldCookie]; + } + + // make sure the cookie hasn't already expired + NSDate *expiresDate = [newCookie expiresDate]; + if ((!expiresDate) || [expiresDate timeIntervalSinceNow] > 0) { + [cookies_ addObject:newCookie]; + } + + } else { + NSAssert1(NO, @"Cookie incomplete: %@", newCookie); + } + } + } +} + +- (void)deleteCookie:(NSHTTPCookie *)cookie { + @synchronized(cookies_) { + NSHTTPCookie *foundCookie = [self cookieMatchingCookie:cookie]; + if (foundCookie) { + [cookies_ removeObjectIdenticalTo:foundCookie]; + } + } +} + +// retrieve all cookies appropriate for the given URL, considering +// domain, path, cookie name, expiration, security setting. +// Side effect: removed expired cookies from the storage array +- (NSArray *)cookiesForURL:(NSURL *)theURL { + + NSMutableArray *foundCookies = nil; + + @synchronized(cookies_) { + [self removeExpiredCookies]; + + // we'll prepend "." to the desired domain, since we want the + // actual domain "nytimes.com" to still match the cookie domain + // ".nytimes.com" when we check it below with hasSuffix + NSString *host = [[theURL host] lowercaseString]; + NSString *path = [theURL path]; + NSString *scheme = [theURL scheme]; + + NSString *domain = nil; + BOOL isLocalhostRetrieval = NO; + + if ([host isEqual:@"localhost"]) { + isLocalhostRetrieval = YES; + } else { + if (host) { + domain = [@"." stringByAppendingString:host]; + } + } + + NSUInteger numberOfCookies = [cookies_ count]; + for (NSUInteger idx = 0; idx < numberOfCookies; idx++) { + + NSHTTPCookie *storedCookie = [cookies_ objectAtIndex:idx]; + + NSString *cookieDomain = [[storedCookie domain] lowercaseString]; + NSString *cookiePath = [storedCookie path]; + BOOL cookieIsSecure = [storedCookie isSecure]; + + BOOL isDomainOK; + + if (isLocalhostRetrieval) { + // prior to 10.5.6, the domain stored into NSHTTPCookies for localhost + // is "localhost.local" + isDomainOK = [cookieDomain isEqual:@"localhost"] + || [cookieDomain isEqual:@"localhost.local"]; + } else { + isDomainOK = [domain hasSuffix:cookieDomain]; + } + + BOOL isPathOK = [cookiePath isEqual:@"/"] || [path hasPrefix:cookiePath]; + BOOL isSecureOK = (!cookieIsSecure) || [scheme isEqual:@"https"]; + + if (isDomainOK && isPathOK && isSecureOK) { + if (foundCookies == nil) { + foundCookies = [NSMutableArray arrayWithCapacity:1]; + } + [foundCookies addObject:storedCookie]; + } + } + } + return foundCookies; +} + +// return a cookie from the array with the same name, domain, and path as the +// given cookie, or else return nil if none found +// +// Both the cookie being tested and all cookies in the storage array should +// be valid (non-nil name, domains, paths) +// +// note: this should only be called from inside a @synchronized(cookies_) block +- (NSHTTPCookie *)cookieMatchingCookie:(NSHTTPCookie *)cookie { + + NSUInteger numberOfCookies = [cookies_ count]; + NSString *name = [cookie name]; + NSString *domain = [cookie domain]; + NSString *path = [cookie path]; + + NSAssert3(name && domain && path, @"Invalid cookie (name:%@ domain:%@ path:%@)", + name, domain, path); + + for (NSUInteger idx = 0; idx < numberOfCookies; idx++) { + + NSHTTPCookie *storedCookie = [cookies_ objectAtIndex:idx]; + + if ([[storedCookie name] isEqual:name] + && [[storedCookie domain] isEqual:domain] + && [[storedCookie path] isEqual:path]) { + + return storedCookie; + } + } + return nil; +} + + +// internal routine to remove any expired cookies from the array, excluding +// cookies with nil expirations +// +// note: this should only be called from inside a @synchronized(cookies_) block +- (void)removeExpiredCookies { + + // count backwards since we're deleting items from the array + for (NSInteger idx = [cookies_ count] - 1; idx >= 0; idx--) { + + NSHTTPCookie *storedCookie = [cookies_ objectAtIndex:idx]; + + NSDate *expiresDate = [storedCookie expiresDate]; + if (expiresDate && [expiresDate timeIntervalSinceNow] < 0) { + [cookies_ removeObjectAtIndex:idx]; + } + } +} + +- (void)removeAllCookies { + @synchronized(cookies_) { + [cookies_ removeAllObjects]; + } +} +@end + +// +// GTMCachedURLResponse +// + +@implementation GTMCachedURLResponse + +@synthesize response = response_; +@synthesize data = data_; +@synthesize reservationDate = reservationDate_; +@synthesize useDate = useDate_; + +- (id)initWithResponse:(NSURLResponse *)response data:(NSData *)data { + self = [super init]; + if (self != nil) { + response_ = [response retain]; + data_ = [data retain]; + useDate_ = [[NSDate alloc] init]; + } + return self; +} + +- (void)dealloc { + [response_ release]; + [data_ release]; + [useDate_ release]; + [reservationDate_ release]; + [super dealloc]; +} + +- (NSString *)description { + NSString *reservationStr = reservationDate_ ? + [NSString stringWithFormat:@" resDate:%@", reservationDate_] : @""; + + return [NSString stringWithFormat:@"%@ %p: {bytes:%@ useDate:%@%@}", + [self class], self, + data_ ? [NSNumber numberWithInt:(int)[data_ length]] : nil, + useDate_, + reservationStr]; +} + +- (NSComparisonResult)compareUseDate:(GTMCachedURLResponse *)other { + return [useDate_ compare:[other useDate]]; +} + +@end + +// +// GTMURLCache +// + +@implementation GTMURLCache + +@dynamic memoryCapacity; + +- (id)init { + return [self initWithMemoryCapacity:kGTMDefaultETaggedDataCacheMemoryCapacity]; +} + +- (id)initWithMemoryCapacity:(NSUInteger)totalBytes { + self = [super init]; + if (self != nil) { + memoryCapacity_ = totalBytes; + + responses_ = [[NSMutableDictionary alloc] initWithCapacity:5]; + + reservationInterval_ = kCachedURLReservationInterval; + } + return self; +} + +- (void)dealloc { + [responses_ release]; + [super dealloc]; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %p: {responses:%@}", + [self class], self, [responses_ allValues]]; +} + +// setters/getters + +- (void)pruneCacheResponses { + // internal routine to remove the least-recently-used responses when the + // cache has grown too large + if (memoryCapacity_ >= totalDataSize_) return; + + // sort keys by date + SEL sel = @selector(compareUseDate:); + NSArray *sortedKeys = [responses_ keysSortedByValueUsingSelector:sel]; + + // the least-recently-used keys are at the beginning of the sorted array; + // remove those (except ones still reserved) until the total data size is + // reduced sufficiently + for (NSURL *key in sortedKeys) { + GTMCachedURLResponse *response = [responses_ objectForKey:key]; + + NSDate *resDate = [response reservationDate]; + BOOL isResponseReserved = (resDate != nil) + && ([resDate timeIntervalSinceNow] > -reservationInterval_); + + if (!isResponseReserved) { + // we can remove this response from the cache + NSUInteger storedSize = [[response data] length]; + totalDataSize_ -= storedSize; + [responses_ removeObjectForKey:key]; + } + + // if we've removed enough response data, then we're done + if (memoryCapacity_ >= totalDataSize_) break; + } +} + +- (void)storeCachedResponse:(GTMCachedURLResponse *)cachedResponse + forRequest:(NSURLRequest *)request { + @synchronized(self) { + // remove any previous entry for this request + [self removeCachedResponseForRequest:request]; + + // cache this one only if it's not bigger than our cache + NSUInteger storedSize = [[cachedResponse data] length]; + if (storedSize < memoryCapacity_) { + + NSURL *key = [request URL]; + [responses_ setObject:cachedResponse forKey:key]; + totalDataSize_ += storedSize; + + [self pruneCacheResponses]; + } + } +} + +- (GTMCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request { + GTMCachedURLResponse *response; + + @synchronized(self) { + NSURL *key = [request URL]; + response = [[[responses_ objectForKey:key] retain] autorelease]; + + // touch the date to indicate this was recently retrieved + [response setUseDate:[NSDate date]]; + } + return response; +} + +- (void)removeCachedResponseForRequest:(NSURLRequest *)request { + @synchronized(self) { + NSURL *key = [request URL]; + totalDataSize_ -= [[[responses_ objectForKey:key] data] length]; + [responses_ removeObjectForKey:key]; + } +} + +- (void)removeAllCachedResponses { + @synchronized(self) { + [responses_ removeAllObjects]; + totalDataSize_ = 0; + } +} + +- (NSUInteger)memoryCapacity { + return memoryCapacity_; +} + +- (void)setMemoryCapacity:(NSUInteger)totalBytes { + @synchronized(self) { + BOOL didShrink = (totalBytes < memoryCapacity_); + memoryCapacity_ = totalBytes; + + if (didShrink) { + [self pruneCacheResponses]; + } + } +} + +// methods for unit testing +- (void)setReservationInterval:(NSTimeInterval)secs { + reservationInterval_ = secs; +} + +- (NSDictionary *)responses { + return responses_; +} + +- (NSUInteger)totalDataSize { + return totalDataSize_; +} + +@end + +// +// GTMHTTPFetchHistory +// + +@interface GTMHTTPFetchHistory () +- (NSString *)cachedETagForRequest:(NSURLRequest *)request; +- (void)removeCachedDataForRequest:(NSURLRequest *)request; +@end + +@implementation GTMHTTPFetchHistory + +@synthesize cookieStorage = cookieStorage_; + +@dynamic shouldRememberETags; +@dynamic shouldCacheETaggedData; +@dynamic memoryCapacity; + +- (id)init { + return [self initWithMemoryCapacity:kGTMDefaultETaggedDataCacheMemoryCapacity + shouldCacheETaggedData:NO]; +} + +- (id)initWithMemoryCapacity:(NSUInteger)totalBytes + shouldCacheETaggedData:(BOOL)shouldCacheETaggedData { + self = [super init]; + if (self != nil) { + etaggedDataCache_ = [[GTMURLCache alloc] initWithMemoryCapacity:totalBytes]; + shouldRememberETags_ = shouldCacheETaggedData; + shouldCacheETaggedData_ = shouldCacheETaggedData; + cookieStorage_ = [[GTMCookieStorage alloc] init]; + } + return self; +} + +- (void)dealloc { + [etaggedDataCache_ release]; + [cookieStorage_ release]; + [super dealloc]; +} + +- (void)updateRequest:(NSMutableURLRequest *)request isHTTPGet:(BOOL)isHTTPGet { + if ([self shouldRememberETags]) { + // If this URL is in the history, and no ETag has been set, then + // set the ETag header field + + // if we have a history, we're tracking across fetches, so we don't + // want to pull results from any other cache + [request setCachePolicy:NSURLRequestReloadIgnoringCacheData]; + + if (isHTTPGet) { + // we'll only add an ETag if there's no ETag specified in the user's + // request + NSString *specifiedETag = [request valueForHTTPHeaderField:kGTMIfNoneMatchHeader]; + if (specifiedETag == nil) { + // no ETag: extract the previous ETag for this request from the + // fetch history, and add it to the request + NSString *cachedETag = [self cachedETagForRequest:request]; + + if (cachedETag != nil) { + [request addValue:cachedETag forHTTPHeaderField:kGTMIfNoneMatchHeader]; + } + } else { + // has an ETag: remove any stored response in the fetch history + // for this request, as the If-None-Match header could lead to + // a 304 Not Modified, and we want that error delivered to the + // user since they explicitly specified the ETag + [self removeCachedDataForRequest:request]; + } + } + } +} + +- (void)updateFetchHistoryWithRequest:(NSURLRequest *)request + response:(NSURLResponse *)response + downloadedData:(NSData *)downloadedData { + if (![self shouldRememberETags]) return; + + if (![response respondsToSelector:@selector(allHeaderFields)]) return; + + NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode]; + + if (statusCode != kGTMHTTPFetcherStatusNotModified) { + // save this ETag string for successful results (<300) + // If there's no last modified string, clear the dictionary + // entry for this URL. Also cache or delete the data, if appropriate + // (when etaggedDataCache is non-nil.) + NSDictionary *headers = [(NSHTTPURLResponse *)response allHeaderFields]; + NSString* etag = [headers objectForKey:kGTMETagHeader]; + + if (etag != nil && statusCode < 300) { + + // we want to cache responses for the headers, even if the client + // doesn't want the response body data caches + NSData *dataToStore = shouldCacheETaggedData_ ? downloadedData : nil; + + GTMCachedURLResponse *cachedResponse; + cachedResponse = [[[GTMCachedURLResponse alloc] initWithResponse:response + data:dataToStore] autorelease]; + [etaggedDataCache_ storeCachedResponse:cachedResponse + forRequest:request]; + } else { + [etaggedDataCache_ removeCachedResponseForRequest:request]; + } + } +} + +- (NSString *)cachedETagForRequest:(NSURLRequest *)request { + GTMCachedURLResponse *cachedResponse; + cachedResponse = [etaggedDataCache_ cachedResponseForRequest:request]; + + NSURLResponse *response = [cachedResponse response]; + NSDictionary *headers = [(NSHTTPURLResponse *)response allHeaderFields]; + NSString *cachedETag = [headers objectForKey:kGTMETagHeader]; + if (cachedETag) { + // since the request having an ETag implies this request is about + // to be fetched again, reserve the cached response to ensure that + // that it will be around at least until the fetch completes + // + // when the fetch completes, either the cached response will be replaced + // with a new response, or the cachedDataForRequest: method below will + // clear the reservation + [cachedResponse setReservationDate:[NSDate date]]; + } + return cachedETag; +} + +- (NSData *)cachedDataForRequest:(NSURLRequest *)request { + GTMCachedURLResponse *cachedResponse; + cachedResponse = [etaggedDataCache_ cachedResponseForRequest:request]; + + NSData *cachedData = [cachedResponse data]; + + // since the data for this cached request is being obtained from the cache, + // we can clear the reservation as the fetch has completed + [cachedResponse setReservationDate:nil]; + + return cachedData; +} + +- (void)removeCachedDataForRequest:(NSURLRequest *)request { + [etaggedDataCache_ removeCachedResponseForRequest:request]; +} + +- (void)clearETaggedDataCache { + [etaggedDataCache_ removeAllCachedResponses]; +} + +- (void)clearHistory { + [self clearETaggedDataCache]; + [cookieStorage_ removeAllCookies]; +} + +- (void)removeAllCookies { + [cookieStorage_ removeAllCookies]; +} + +- (BOOL)shouldRememberETags { + return shouldRememberETags_; +} + +- (void)setShouldRememberETags:(BOOL)flag { + BOOL wasRemembering = shouldRememberETags_; + shouldRememberETags_ = flag; + + if (wasRemembering && !flag) { + // free up the cache memory + [self clearETaggedDataCache]; + } +} + +- (BOOL)shouldCacheETaggedData { + return shouldCacheETaggedData_; +} + +- (void)setShouldCacheETaggedData:(BOOL)flag { + BOOL wasCaching = shouldCacheETaggedData_; + shouldCacheETaggedData_ = flag; + + if (flag) { + self.shouldRememberETags = YES; + } + + if (wasCaching && !flag) { + // users expect turning off caching to free up the cache memory + [self clearETaggedDataCache]; + } +} + +- (NSUInteger)memoryCapacity { + return [etaggedDataCache_ memoryCapacity]; +} + +- (void)setMemoryCapacity:(NSUInteger)totalBytes { + [etaggedDataCache_ setMemoryCapacity:totalBytes]; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.h b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.h new file mode 100644 index 00000000..dedc4c01 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.h @@ -0,0 +1,704 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTMHTTPFetcher.h +// + +// This is essentially a wrapper around NSURLConnection for POSTs and GETs. +// If setPostData: is called, then POST is assumed. +// +// When would you use this instead of NSURLConnection? +// +// - When you just want the result from a GET, POST, or PUT +// - When you want the "standard" behavior for connections (redirection handling +// an so on) +// - When you want automatic retry on failures +// - When you want to avoid cookie collisions with Safari and other applications +// - When you are fetching resources with ETags and want to avoid the overhead +// of repeated fetches of unchanged data +// - When you need to set a credential for the http operation +// +// This is assumed to be a one-shot fetch request; don't reuse the object +// for a second fetch. +// +// The fetcher may be created auto-released, in which case it will release +// itself after the fetch completion callback. The fetcher is implicitly +// retained as long as a connection is pending. +// +// But if you may need to cancel the fetcher, retain it and have the delegate +// release the fetcher in the callbacks. +// +// Sample usage: +// +// NSURLRequest *request = [NSURLRequest requestWithURL:myURL]; +// GTMHTTPFetcher* myFetcher = [GTMHTTPFetcher fetcherWithRequest:request]; +// +// // optional upload body data +// [myFetcher setPostData:[postString dataUsingEncoding:NSUTF8StringEncoding]]; +// +// [myFetcher beginFetchWithDelegate:self +// didFinishSelector:@selector(myFetcher:finishedWithData:error:)]; +// +// Upon fetch completion, the callback selector is invoked; it should have +// this signature (you can use any callback method name you want so long as +// the signature matches this): +// +// - (void)myFetcher:(GTMHTTPFetcher *)fetcher finishedWithData:(NSData *)retrievedData error:(NSError *)error; +// +// The block callback version looks like: +// +// [myFetcher beginFetchWithCompletionHandler:^(NSData *retrievedData, NSError *error) { +// if (error != nil) { +// // status code or network error +// } else { +// // succeeded +// } +// }]; + +// +// NOTE: Fetches may retrieve data from the server even though the server +// returned an error. The failure selector is called when the server +// status is >= 300, with an NSError having domain +// kGTMHTTPFetcherStatusDomain and code set to the server status. +// +// Status codes are at +// +// +// Downloading to disk: +// +// To have downloaded data saved directly to disk, specify either a path for the +// downloadPath property, or a file handle for the downloadFileHandle property. +// When downloading to disk, callbacks will be passed a nil for the NSData* +// arguments. +// +// +// HTTP methods and headers: +// +// Alternative HTTP methods, like PUT, and custom headers can be specified by +// creating the fetcher with an appropriate NSMutableURLRequest +// +// +// Proxies: +// +// Proxy handling is invisible so long as the system has a valid credential in +// the keychain, which is normally true (else most NSURL-based apps would have +// difficulty.) But when there is a proxy authetication error, the the fetcher +// will call the failedWithError: method with the NSURLChallenge in the error's +// userInfo. The error method can get the challenge info like this: +// +// NSURLAuthenticationChallenge *challenge +// = [[error userInfo] objectForKey:kGTMHTTPFetcherErrorChallengeKey]; +// BOOL isProxyChallenge = [[challenge protectionSpace] isProxy]; +// +// If a proxy error occurs, you can ask the user for the proxy username/password +// and call fetcher's setProxyCredential: to provide those for the +// next attempt to fetch. +// +// +// Cookies: +// +// There are three supported mechanisms for remembering cookies between fetches. +// +// By default, GTMHTTPFetcher uses a mutable array held statically to track +// cookies for all instantiated fetchers. This avoids server cookies being set +// by servers for the application from interfering with Safari cookie settings, +// and vice versa. The fetcher cookies are lost when the application quits. +// +// To rely instead on WebKit's global NSHTTPCookieStorage, call +// setCookieStorageMethod: with kGTMHTTPFetcherCookieStorageMethodSystemDefault. +// +// If the fetcher is created from a GTMHTTPFetcherService object +// then the cookie storage mechanism is set to use the cookie storage in the +// service object rather than the static storage. +// +// +// Fetching for periodic checks: +// +// The fetcher object tracks ETag headers from responses and +// provide an "If-None-Match" header. This allows the server to save +// bandwidth by providing a status message instead of repeated response +// data. +// +// To get this behavior, create the fetcher from an GTMHTTPFetcherService object +// and look for a fetch callback error with code 304 +// (kGTMHTTPFetcherStatusNotModified) like this: +// +// - (void)myFetcher:(GTMHTTPFetcher *)fetcher finishedWithData:(NSData *)data error:(NSError *)error { +// if ([error code] == kGTMHTTPFetcherStatusNotModified) { +// // |data| is empty; use the data from the previous finishedWithData: for this URL +// } else { +// // handle other server status code +// } +// } +// +// +// Monitoring received data +// +// The optional received data selector can be set with setReceivedDataSelector: +// and should have the signature +// +// - (void)myFetcher:(GTMHTTPFetcher *)fetcher receivedData:(NSData *)dataReceivedSoFar; +// +// The number bytes received so far is available as [fetcher downloadedLength]. +// This number may go down if a redirect causes the download to begin again from +// a new server. +// +// If supplied by the server, the anticipated total download size is available +// as [[myFetcher response] expectedContentLength] (and may be -1 for unknown +// download sizes.) +// +// +// Automatic retrying of fetches +// +// The fetcher can optionally create a timer and reattempt certain kinds of +// fetch failures (status codes 408, request timeout; 503, service unavailable; +// 504, gateway timeout; networking errors NSURLErrorTimedOut and +// NSURLErrorNetworkConnectionLost.) The user may set a retry selector to +// customize the type of errors which will be retried. +// +// Retries are done in an exponential-backoff fashion (that is, after 1 second, +// 2, 4, 8, and so on.) +// +// Enabling automatic retries looks like this: +// [myFetcher setRetryEnabled:YES]; +// +// With retries enabled, the success or failure callbacks are called only +// when no more retries will be attempted. Calling the fetcher's stopFetching +// method will terminate the retry timer, without the finished or failure +// selectors being invoked. +// +// Optionally, the client may set the maximum retry interval: +// [myFetcher setMaxRetryInterval:60.0]; // in seconds; default is 60 seconds +// // for downloads, 600 for uploads +// +// Also optionally, the client may provide a callback selector to determine +// if a status code or other error should be retried. +// [myFetcher setRetrySelector:@selector(myFetcher:willRetry:forError:)]; +// +// If set, the retry selector should have the signature: +// -(BOOL)fetcher:(GTMHTTPFetcher *)fetcher willRetry:(BOOL)suggestedWillRetry forError:(NSError *)error +// and return YES to set the retry timer or NO to fail without additional +// fetch attempts. +// +// The retry method may return the |suggestedWillRetry| argument to get the +// default retry behavior. Server status codes are present in the +// error argument, and have the domain kGTMHTTPFetcherStatusDomain. The +// user's method may look something like this: +// +// -(BOOL)myFetcher:(GTMHTTPFetcher *)fetcher willRetry:(BOOL)suggestedWillRetry forError:(NSError *)error { +// +// // perhaps examine [error domain] and [error code], or [fetcher retryCount] +// // +// // return YES to start the retry timer, NO to proceed to the failure +// // callback, or |suggestedWillRetry| to get default behavior for the +// // current error domain and code values. +// return suggestedWillRetry; +// } + + + +#pragma once + +#import + +#if defined(GTL_TARGET_NAMESPACE) + // we're using target namespace macros + #import "GTLDefines.h" +#elif defined(GDATA_TARGET_NAMESPACE) + #import "GDataDefines.h" +#else + #if TARGET_OS_IPHONE + #ifndef GTM_FOUNDATION_ONLY + #define GTM_FOUNDATION_ONLY 1 + #endif + #ifndef GTM_IPHONE + #define GTM_IPHONE 1 + #endif + #endif +#endif + +#if TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 40000) + #define GTM_BACKGROUND_FETCHING 1 +#endif + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTMHTTPFETCHER_DEFINE_GLOBALS + #define _EXTERN + #define _INITIALIZE_AS(x) =x +#else + #if defined(__cplusplus) + #define _EXTERN extern "C" + #else + #define _EXTERN extern + #endif + #define _INITIALIZE_AS(x) +#endif + +// notifications +// +// fetch started and stopped, and fetch retry delay started and stopped +_EXTERN NSString* const kGTMHTTPFetcherStartedNotification _INITIALIZE_AS(@"kGTMHTTPFetcherStartedNotification"); +_EXTERN NSString* const kGTMHTTPFetcherStoppedNotification _INITIALIZE_AS(@"kGTMHTTPFetcherStoppedNotification"); +_EXTERN NSString* const kGTMHTTPFetcherRetryDelayStartedNotification _INITIALIZE_AS(@"kGTMHTTPFetcherRetryDelayStartedNotification"); +_EXTERN NSString* const kGTMHTTPFetcherRetryDelayStoppedNotification _INITIALIZE_AS(@"kGTMHTTPFetcherRetryDelayStoppedNotification"); + +// callback constants +_EXTERN NSString* const kGTMHTTPFetcherErrorDomain _INITIALIZE_AS(@"com.google.GTMHTTPFetcher"); +_EXTERN NSString* const kGTMHTTPFetcherStatusDomain _INITIALIZE_AS(@"com.google.HTTPStatus"); +_EXTERN NSString* const kGTMHTTPFetcherErrorChallengeKey _INITIALIZE_AS(@"challenge"); +_EXTERN NSString* const kGTMHTTPFetcherStatusDataKey _INITIALIZE_AS(@"data"); // data returned with a kGTMHTTPFetcherStatusDomain error + +enum { + kGTMHTTPFetcherErrorDownloadFailed = -1, + kGTMHTTPFetcherErrorAuthenticationChallengeFailed = -2, + kGTMHTTPFetcherErrorChunkUploadFailed = -3, + kGTMHTTPFetcherErrorFileHandleException = -4, + kGTMHTTPFetcherErrorBackgroundExpiration = -6, + + // The code kGTMHTTPFetcherErrorAuthorizationFailed (-5) has been removed; + // look for status 401 instead. + + kGTMHTTPFetcherStatusNotModified = 304, + kGTMHTTPFetcherStatusBadRequest = 400, + kGTMHTTPFetcherStatusUnauthorized = 401, + kGTMHTTPFetcherStatusForbidden = 403, + kGTMHTTPFetcherStatusPreconditionFailed = 412 +}; + +// cookie storage methods +enum { + kGTMHTTPFetcherCookieStorageMethodStatic = 0, + kGTMHTTPFetcherCookieStorageMethodFetchHistory = 1, + kGTMHTTPFetcherCookieStorageMethodSystemDefault = 2, + kGTMHTTPFetcherCookieStorageMethodNone = 3 +}; + +#ifdef __cplusplus +extern "C" { +#endif + +void GTMAssertSelectorNilOrImplementedWithArgs(id obj, SEL sel, ...); + +// Utility functions for applications self-identifying to servers via a +// user-agent header + +// Make a proper app name without whitespace from the given string, removing +// whitespace and other characters that may be special parsed marks of +// the full user-agent string. +NSString *GTMCleanedUserAgentString(NSString *str); + +// Make an identifier like "MacOSX/10.7.1" or "iPod_Touch/4.1" +NSString *GTMSystemVersionString(void); + +// Make a generic name and version for the current application, like +// com.example.MyApp/1.2.3 relying on the bundle identifier and the +// CFBundleShortVersionString or CFBundleVersion. If no bundle ID +// is available, the process name preceded by "proc_" is used. +NSString *GTMApplicationIdentifier(NSBundle *bundle); + +#ifdef __cplusplus +} // extern "C" +#endif + +@class GTMHTTPFetcher; + +@protocol GTMCookieStorageProtocol +// This protocol allows us to call into the service without requiring +// GTMCookieStorage sources in this project +// +// The public interface for cookie handling is the GTMCookieStorage class, +// accessible from a fetcher service object's fetchHistory or from the fetcher's +// +staticCookieStorage method. +- (NSArray *)cookiesForURL:(NSURL *)theURL; +- (void)setCookies:(NSArray *)newCookies; +@end + +@protocol GTMHTTPFetchHistoryProtocol +// This protocol allows us to call the fetch history object without requiring +// GTMHTTPFetchHistory sources in this project +- (void)updateRequest:(NSMutableURLRequest *)request isHTTPGet:(BOOL)isHTTPGet; +- (BOOL)shouldCacheETaggedData; +- (NSData *)cachedDataForRequest:(NSURLRequest *)request; +- (id )cookieStorage; +- (void)updateFetchHistoryWithRequest:(NSURLRequest *)request + response:(NSURLResponse *)response + downloadedData:(NSData *)downloadedData; +- (void)removeCachedDataForRequest:(NSURLRequest *)request; +@end + +@protocol GTMHTTPFetcherServiceProtocol +// This protocol allows us to call into the service without requiring +// GTMHTTPFetcherService sources in this project +- (BOOL)fetcherShouldBeginFetching:(GTMHTTPFetcher *)fetcher; +- (void)fetcherDidStop:(GTMHTTPFetcher *)fetcher; + +- (GTMHTTPFetcher *)fetcherWithRequest:(NSURLRequest *)request; +- (BOOL)isDelayingFetcher:(GTMHTTPFetcher *)fetcher; +@end + +@protocol GTMFetcherAuthorizationProtocol +@required +// This protocol allows us to call the authorizer without requiring its sources +// in this project +- (void)authorizeRequest:(NSMutableURLRequest *)request + delegate:(id)delegate + didFinishSelector:(SEL)sel; + +- (void)stopAuthorization; + +- (BOOL)isAuthorizingRequest:(NSURLRequest *)request; + +- (BOOL)isAuthorizedRequest:(NSURLRequest *)request; + +- (NSString *)userEmail; + +@optional +@property (assign) id fetcherService; // WEAK + +- (BOOL)primeForRefresh; +@end + +// GTMHTTPFetcher objects are used for async retrieval of an http get or post +// +// See additional comments at the beginning of this file +@interface GTMHTTPFetcher : NSObject { + @protected + NSMutableURLRequest *request_; + NSURLConnection *connection_; + NSMutableData *downloadedData_; + NSString *downloadPath_; + NSString *temporaryDownloadPath_; + NSFileHandle *downloadFileHandle_; + unsigned long long downloadedLength_; + NSURLCredential *credential_; // username & password + NSURLCredential *proxyCredential_; // credential supplied to proxy servers + NSData *postData_; + NSInputStream *postStream_; + NSMutableData *loggedStreamData_; + NSURLResponse *response_; // set in connection:didReceiveResponse: + id delegate_; + SEL finishedSel_; // should by implemented by delegate + SEL sentDataSel_; // optional, set with setSentDataSelector + SEL receivedDataSel_; // optional, set with setReceivedDataSelector +#if NS_BLOCKS_AVAILABLE + void (^completionBlock_)(NSData *, NSError *); + void (^receivedDataBlock_)(NSData *); + void (^sentDataBlock_)(NSInteger, NSInteger, NSInteger); + BOOL (^retryBlock_)(BOOL, NSError *); +#elif !__LP64__ + // placeholders: for 32-bit builds, keep the size of the object's ivar section + // the same with and without blocks + id completionPlaceholder_; + id receivedDataPlaceholder_; + id sentDataPlaceholder_; + id retryPlaceholder_; +#endif + BOOL hasConnectionEnded_; // set if the connection need not be cancelled + BOOL isCancellingChallenge_; // set only when cancelling an auth challenge + BOOL isStopNotificationNeeded_; // set when start notification has been sent + BOOL shouldFetchInBackground_; +#if GTM_BACKGROUND_FETCHING + NSUInteger backgroundTaskIdentifer_; // UIBackgroundTaskIdentifier +#endif + id userData_; // retained, if set by caller + NSMutableDictionary *properties_; // more data retained for caller + NSArray *runLoopModes_; // optional, for 10.5 and later + id fetchHistory_; // if supplied by the caller, used for Last-Modified-Since checks and cookies + NSInteger cookieStorageMethod_; // constant from above + id cookieStorage_; + + id authorizer_; + + // the service object that created and monitors this fetcher, if any + id service_; + NSString *serviceHost_; + NSInteger servicePriority_; + NSThread *thread_; + + BOOL isRetryEnabled_; // user wants auto-retry + SEL retrySel_; // optional; set with setRetrySelector + NSTimer *retryTimer_; + NSUInteger retryCount_; + NSTimeInterval maxRetryInterval_; // default 600 seconds + NSTimeInterval minRetryInterval_; // random between 1 and 2 seconds + NSTimeInterval retryFactor_; // default interval multiplier is 2 + NSTimeInterval lastRetryInterval_; + BOOL hasAttemptedAuthRefresh_; + + NSString *comment_; // comment for log + NSString *log_; +} + +// Create a fetcher +// +// fetcherWithRequest will return an autoreleased fetcher, but if +// the connection is successfully created, the connection should retain the +// fetcher for the life of the connection as well. So the caller doesn't have +// to retain the fetcher explicitly unless they want to be able to cancel it. ++ (GTMHTTPFetcher *)fetcherWithRequest:(NSURLRequest *)request; + +// Convenience methods that make a request, like +fetcherWithRequest ++ (GTMHTTPFetcher *)fetcherWithURL:(NSURL *)requestURL; ++ (GTMHTTPFetcher *)fetcherWithURLString:(NSString *)requestURLString; + +// Designated initializer +- (id)initWithRequest:(NSURLRequest *)request; + +// Fetcher request +// +// The underlying request is mutable and may be modified by the caller +@property (retain) NSMutableURLRequest *mutableRequest; + +// Setting the credential is optional; it is used if the connection receives +// an authentication challenge +@property (retain) NSURLCredential *credential; + +// Setting the proxy credential is optional; it is used if the connection +// receives an authentication challenge from a proxy +@property (retain) NSURLCredential *proxyCredential; + +// If post data or stream is not set, then a GET retrieval method is assumed +@property (retain) NSData *postData; +@property (retain) NSInputStream *postStream; + +// The default cookie storage method is kGTMHTTPFetcherCookieStorageMethodStatic +// without a fetch history set, and kGTMHTTPFetcherCookieStorageMethodFetchHistory +// with a fetch history set +// +// Applications needing control of cookies across a sequence of fetches should +// create fetchers from a GTMHTTPFetcherService object (which encapsulates +// fetch history) for a well-defined cookie store +@property (assign) NSInteger cookieStorageMethod; + ++ (id )staticCookieStorage; + +// Object to add authorization to the request, if needed +@property (retain) id authorizer; + +// The service object that created and monitors this fetcher, if any +@property (retain) id service; + +// The host, if any, used to classify this fetcher in the fetcher service +@property (copy) NSString *serviceHost; + +// The priority, if any, used for starting fetchers in the fetcher service +// +// Lower values are higher priority; the default is 0, and values may +// be negative or positive. This priority affects only the start order of +// fetchers that are being delayed by a fetcher service. +@property (assign) NSInteger servicePriority; + +// The thread used to run this fetcher in the fetcher service +@property (retain) NSThread *thread; + +// The delegate is retained during the connection +@property (retain) id delegate; + +// On iOS 4 and later, the fetch may optionally continue while the app is in the +// background until finished or stopped by OS expiration +// +// The default value is NO +// +// For Mac OS X, background fetches are always supported, and this property +// is ignored +@property (assign) BOOL shouldFetchInBackground; + +// The delegate's optional sentData selector may be used to monitor upload +// progress. It should have a signature like: +// - (void)myFetcher:(GTMHTTPFetcher *)fetcher +// didSendBytes:(NSInteger)bytesSent +// totalBytesSent:(NSInteger)totalBytesSent +// totalBytesExpectedToSend:(NSInteger)totalBytesExpectedToSend; +// +// +doesSupportSentDataCallback indicates if this delegate method is supported ++ (BOOL)doesSupportSentDataCallback; + +@property (assign) SEL sentDataSelector; + +// The delegate's optional receivedData selector may be used to monitor download +// progress. It should have a signature like: +// - (void)myFetcher:(GTMHTTPFetcher *)fetcher +// receivedData:(NSData *)dataReceivedSoFar; +// +// The dataReceived argument will be nil when downloading to a path or to a +// file handle. +// +// Applications should not use this method to accumulate the received data; +// the callback method or block supplied to the beginFetch call will have +// the complete NSData received. +@property (assign) SEL receivedDataSelector; + +#if NS_BLOCKS_AVAILABLE +// The full interface to the block is provided rather than just a typedef for +// its parameter list in order to get more useful code completion in the Xcode +// editor +@property (copy) void (^sentDataBlock)(NSInteger bytesSent, NSInteger totalBytesSent, NSInteger bytesExpectedToSend); + +// The dataReceived argument will be nil when downloading to a path or to +// a file handle +@property (copy) void (^receivedDataBlock)(NSData *dataReceivedSoFar); +#endif + +// retrying; see comments at the top of the file. Calling +// setRetryEnabled(YES) resets the min and max retry intervals. +@property (assign, getter=isRetryEnabled) BOOL retryEnabled; + +// Retry selector or block is optional for retries. +// +// If present, it should have the signature: +// -(BOOL)fetcher:(GTMHTTPFetcher *)fetcher willRetry:(BOOL)suggestedWillRetry forError:(NSError *)error +// and return YES to cause a retry. See comments at the top of this file. +@property (assign) SEL retrySelector; + +#if NS_BLOCKS_AVAILABLE +@property (copy) BOOL (^retryBlock)(BOOL suggestedWillRetry, NSError *error); +#endif + +// Retry intervals must be strictly less than maxRetryInterval, else +// they will be limited to maxRetryInterval and no further retries will +// be attempted. Setting maxRetryInterval to 0.0 will reset it to the +// default value, 600 seconds. + +@property (assign) NSTimeInterval maxRetryInterval; + +// Starting retry interval. Setting minRetryInterval to 0.0 will reset it +// to a random value between 1.0 and 2.0 seconds. Clients should normally not +// call this except for unit testing. +@property (assign) NSTimeInterval minRetryInterval; + +// Multiplier used to increase the interval between retries, typically 2.0. +// Clients should not need to call this. +@property (assign) double retryFactor; + +// Number of retries attempted +@property (readonly) NSUInteger retryCount; + +// interval delay to precede next retry +@property (readonly) NSTimeInterval nextRetryInterval; + +// Begin fetching the request +// +// The delegate can optionally implement the finished selectors or pass NULL +// for it. +// +// Returns YES if the fetch is initiated. The delegate is retained between +// the beginFetch call until after the finish callback. +// +// An error is passed to the callback for server statuses 300 or +// higher, with the status stored as the error object's code. +// +// finishedSEL has a signature like: +// - (void)fetcher:(GTMHTTPFetcher *)fetcher finishedWithData:(NSData *)data error:(NSError *)error; +// +// If the application has specified a downloadPath or downloadFileHandle +// for the fetcher, the data parameter passed to the callback will be nil. + +- (BOOL)beginFetchWithDelegate:(id)delegate + didFinishSelector:(SEL)finishedSEL; + +#if NS_BLOCKS_AVAILABLE +- (BOOL)beginFetchWithCompletionHandler:(void (^)(NSData *data, NSError *error))handler; +#endif + + +// Returns YES if this is in the process of fetching a URL +- (BOOL)isFetching; + +// Cancel the fetch of the request that's currently in progress +- (void)stopFetching; + +// Return the status code from the server response +@property (readonly) NSInteger statusCode; + +// Return the http headers from the response +@property (retain, readonly) NSDictionary *responseHeaders; + +// The response, once it's been received +@property (retain) NSURLResponse *response; + +// Bytes downloaded so far +@property (readonly) unsigned long long downloadedLength; + +// Buffer of currently-downloaded data +@property (readonly, retain) NSData *downloadedData; + +// Path in which to non-atomically create a file for storing the downloaded data +// +// The path must be set before fetching begins. The download file handle +// will be created for the path, and can be used to monitor progress. If a file +// already exists at the path, it will be overwritten. +@property (copy) NSString *downloadPath; + +// If downloadFileHandle is set, data received is immediately appended to +// the file handle rather than being accumulated in the downloadedData property +// +// The file handle supplied must allow writing and support seekToFileOffset:, +// and must be set before fetching begins. Setting a download path will +// override the file handle property. +@property (retain) NSFileHandle *downloadFileHandle; + +// The optional fetchHistory object is used for a sequence of fetchers to +// remember ETags, cache ETagged data, and store cookies. Typically, this +// is set by a GTMFetcherService object when it creates a fetcher. +// +// Side effect: setting fetch history implicitly calls setCookieStorageMethod: +@property (retain) id fetchHistory; + +// userData is retained for the convenience of the caller +@property (retain) id userData; + +// Stored property values are retained for the convenience of the caller +@property (copy) NSMutableDictionary *properties; + +- (void)setProperty:(id)obj forKey:(NSString *)key; // pass nil obj to remove property +- (id)propertyForKey:(NSString *)key; + +- (void)addPropertiesFromDictionary:(NSDictionary *)dict; + +// Comments are useful for logging +@property (copy) NSString *comment; + +- (void)setCommentWithFormat:(id)format, ...; + +// Log of request and response, if logging is enabled +@property (copy) NSString *log; + +// Using the fetcher while a modal dialog is displayed requires setting the +// run-loop modes to include NSModalPanelRunLoopMode +@property (retain) NSArray *runLoopModes; + +// Users who wish to replace GTMHTTPFetcher's use of NSURLConnection +// can do so globally here. The replacement should be a subclass of +// NSURLConnection. ++ (Class)connectionClass; ++ (void)setConnectionClass:(Class)theClass; + +// Spin the run loop, discarding events, until the fetch has completed +// +// This is only for use in testing or in tools without a user interface. +// +// Synchronous fetches should never be done by shipping apps; they are +// sufficient reason for rejection from the app store. +- (void)waitForCompletionWithTimeout:(NSTimeInterval)timeoutInSeconds; + +#if STRIP_GTM_FETCH_LOGGING +// if logging is stripped, provide a stub for the main method +// for controlling logging ++ (void)setLoggingEnabled:(BOOL)flag; +#endif // STRIP_GTM_FETCH_LOGGING + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.m b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.m new file mode 100644 index 00000000..3a448c6c --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.m @@ -0,0 +1,1741 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTMHTTPFetcher.m +// + +#define GTMHTTPFETCHER_DEFINE_GLOBALS 1 + +#import "GTMHTTPFetcher.h" + +#if GTM_BACKGROUND_FETCHING +#import +#endif + +static id gGTMFetcherStaticCookieStorage = nil; +static Class gGTMFetcherConnectionClass = nil; + +// the default max retry interview is 10 minutes for uploads (POST/PUT/PATCH), +// 1 minute for downloads +const NSTimeInterval kUnsetMaxRetryInterval = -1; +const NSTimeInterval kDefaultMaxDownloadRetryInterval = 60.0; +const NSTimeInterval kDefaultMaxUploadRetryInterval = 60.0 * 10.; + +// +// GTMHTTPFetcher +// + +@interface GTMHTTPFetcher () + +@property (copy) NSString *temporaryDownloadPath; +@property (retain) id cookieStorage; +@property (readwrite, retain) NSData *downloadedData; +#if NS_BLOCKS_AVAILABLE +@property (copy) void (^completionBlock)(NSData *, NSError *); +#endif + +- (BOOL)beginFetchMayDelay:(BOOL)mayDelay + mayAuthorize:(BOOL)mayAuthorize; +- (void)failToBeginFetchWithError:(NSError *)error; + +#if GTM_BACKGROUND_FETCHING +- (void)endBackgroundTask; +- (void)backgroundFetchExpired; +#endif + +- (BOOL)authorizeRequest; +- (void)authorizer:(id )auth + request:(NSMutableURLRequest *)request + finishedWithError:(NSError *)error; + +- (NSString *)createTempDownloadFilePathForPath:(NSString *)targetPath; +- (NSFileManager *)fileManager; +- (void)stopFetchReleasingCallbacks:(BOOL)shouldReleaseCallbacks; +- (BOOL)shouldReleaseCallbacksUponCompletion; + +- (void)addCookiesToRequest:(NSMutableURLRequest *)request; +- (void)handleCookiesForResponse:(NSURLResponse *)response; + +- (void)logNowWithError:(NSError *)error; + +- (void)invokeFetchCallbacksWithData:(NSData *)data + error:(NSError *)error; +- (void)invokeFetchCallback:(SEL)sel + target:(id)target + data:(NSData *)data + error:(NSError *)error; +- (void)releaseCallbacks; + +- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error; + +- (BOOL)shouldRetryNowForStatus:(NSInteger)status error:(NSError *)error; +- (void)destroyRetryTimer; +- (void)beginRetryTimer; +- (void)primeRetryTimerWithNewTimeInterval:(NSTimeInterval)secs; +- (void)sendStopNotificationIfNeeded; +- (void)retryFetch; +- (void)retryTimerFired:(NSTimer *)timer; +@end + +@interface GTMHTTPFetcher (GTMHTTPFetcherLoggingInternal) +- (void)setupStreamLogging; +- (void)logFetchWithError:(NSError *)error; +@end + +@implementation GTMHTTPFetcher + ++ (GTMHTTPFetcher *)fetcherWithRequest:(NSURLRequest *)request { + return [[[[self class] alloc] initWithRequest:request] autorelease]; +} + ++ (GTMHTTPFetcher *)fetcherWithURL:(NSURL *)requestURL { + return [self fetcherWithRequest:[NSURLRequest requestWithURL:requestURL]]; +} + ++ (GTMHTTPFetcher *)fetcherWithURLString:(NSString *)requestURLString { + return [self fetcherWithURL:[NSURL URLWithString:requestURLString]]; +} + ++ (void)initialize { + // note that initialize is guaranteed by the runtime to be called in a + // thread-safe manner + if (!gGTMFetcherStaticCookieStorage) { + Class cookieStorageClass = NSClassFromString(@"GTMCookieStorage"); + if (cookieStorageClass) { + gGTMFetcherStaticCookieStorage = [[cookieStorageClass alloc] init]; + } + } +} + +- (id)init { + return [self initWithRequest:nil]; +} + +- (id)initWithRequest:(NSURLRequest *)request { + self = [super init]; + if (self) { + request_ = [request mutableCopy]; + + if (gGTMFetcherStaticCookieStorage != nil) { + // the user has compiled with the cookie storage class available; + // default to static cookie storage, so our cookies are independent + // of the cookies of other apps + [self setCookieStorageMethod:kGTMHTTPFetcherCookieStorageMethodStatic]; + } else { + // default to system default cookie storage + [self setCookieStorageMethod:kGTMHTTPFetcherCookieStorageMethodSystemDefault]; + } + } + return self; +} + +- (id)copyWithZone:(NSZone *)zone { + // disallow use of fetchers in a copy property + [self doesNotRecognizeSelector:_cmd]; + return nil; +} + +- (NSString *)description { + return [NSString stringWithFormat:@"%@ %p (%@)", + [self class], self, [self.mutableRequest URL]]; +} + +#if !GTM_IPHONE +- (void)finalize { + [self stopFetchReleasingCallbacks:YES]; // releases connection_, destroys timers + [super finalize]; +} +#endif + +- (void)dealloc { +#if DEBUG + NSAssert(!isStopNotificationNeeded_, + @"unbalanced fetcher notification for %@", [request_ URL]); +#endif + + // Note: if a connection or a retry timer was pending, then this instance + // would be retained by those so it wouldn't be getting dealloc'd, + // hence we don't need to stopFetch here + [request_ release]; + [connection_ release]; + [downloadedData_ release]; + [downloadPath_ release]; + [temporaryDownloadPath_ release]; + [downloadFileHandle_ release]; + [credential_ release]; + [proxyCredential_ release]; + [postData_ release]; + [postStream_ release]; + [loggedStreamData_ release]; + [response_ release]; +#if NS_BLOCKS_AVAILABLE + [completionBlock_ release]; + [receivedDataBlock_ release]; + [sentDataBlock_ release]; + [retryBlock_ release]; +#endif + [userData_ release]; + [properties_ release]; + [runLoopModes_ release]; + [fetchHistory_ release]; + [cookieStorage_ release]; + [authorizer_ release]; + [service_ release]; + [serviceHost_ release]; + [thread_ release]; + [retryTimer_ release]; + [comment_ release]; + [log_ release]; + + [super dealloc]; +} + +#pragma mark - + +// Begin fetching the URL (or begin a retry fetch). The delegate is retained +// for the duration of the fetch connection. + +- (BOOL)beginFetchWithDelegate:(id)delegate + didFinishSelector:(SEL)finishedSelector { + GTMAssertSelectorNilOrImplementedWithArgs(delegate, finishedSelector, @encode(GTMHTTPFetcher *), @encode(NSData *), @encode(NSError *), 0); + GTMAssertSelectorNilOrImplementedWithArgs(delegate, receivedDataSel_, @encode(GTMHTTPFetcher *), @encode(NSData *), 0); + GTMAssertSelectorNilOrImplementedWithArgs(delegate, retrySel_, @encode(GTMHTTPFetcher *), @encode(BOOL), @encode(NSError *), 0); + + // We'll retain the delegate only during the outstanding connection (similar + // to what Cocoa does with performSelectorOnMainThread:) and during + // authorization or delays, since the app would crash + // if the delegate was released before the fetch calls back + [self setDelegate:delegate]; + finishedSel_ = finishedSelector; + + return [self beginFetchMayDelay:YES + mayAuthorize:YES]; +} + +- (BOOL)beginFetchMayDelay:(BOOL)mayDelay + mayAuthorize:(BOOL)mayAuthorize { + // This is the internal entry point for re-starting fetches + NSError *error = nil; + + if (connection_ != nil) { + NSAssert1(connection_ != nil, @"fetch object %@ being reused; this should never happen", self); + goto CannotBeginFetch; + } + + if (request_ == nil) { + NSAssert(request_ != nil, @"beginFetchWithDelegate requires a request"); + goto CannotBeginFetch; + } + + self.downloadedData = nil; + downloadedLength_ = 0; + + if (mayDelay && service_) { + BOOL shouldFetchNow = [service_ fetcherShouldBeginFetching:self]; + if (!shouldFetchNow) { + // the fetch is deferred, but will happen later + return YES; + } + } + + NSString *effectiveHTTPMethod = [request_ valueForHTTPHeaderField:@"X-HTTP-Method-Override"]; + if (effectiveHTTPMethod == nil) { + effectiveHTTPMethod = [request_ HTTPMethod]; + } + BOOL isEffectiveHTTPGet = (effectiveHTTPMethod == nil + || [effectiveHTTPMethod isEqual:@"GET"]); + + if (postData_ || postStream_) { + if (isEffectiveHTTPGet) { + [request_ setHTTPMethod:@"POST"]; + isEffectiveHTTPGet = NO; + } + + if (postData_) { + [request_ setHTTPBody:postData_]; + } else { + if ([self respondsToSelector:@selector(setupStreamLogging)]) { + [self performSelector:@selector(setupStreamLogging)]; + } + + [request_ setHTTPBodyStream:postStream_]; + } + } + + // We authorize after setting up the http method and body in the request + // because OAuth 1 may need to sign the request body + if (mayAuthorize && authorizer_) { + BOOL isAuthorized = [authorizer_ isAuthorizedRequest:request_]; + if (!isAuthorized) { + // authorization needed + return [self authorizeRequest]; + } + } + + [fetchHistory_ updateRequest:request_ isHTTPGet:isEffectiveHTTPGet]; + + // set the default upload or download retry interval, if necessary + if (isRetryEnabled_ + && maxRetryInterval_ <= kUnsetMaxRetryInterval) { + if (isEffectiveHTTPGet || [effectiveHTTPMethod isEqual:@"HEAD"]) { + [self setMaxRetryInterval:kDefaultMaxDownloadRetryInterval]; + } else { + [self setMaxRetryInterval:kDefaultMaxUploadRetryInterval]; + } + } + + [self addCookiesToRequest:request_]; + + if (downloadPath_ != nil) { + // downloading to a path, so create a temporary file and a file handle for + // downloading + NSString *tempPath = [self createTempDownloadFilePathForPath:downloadPath_]; + + BOOL didCreate = [[NSData data] writeToFile:tempPath + options:0 + error:&error]; + if (!didCreate) goto CannotBeginFetch; + + [self setTemporaryDownloadPath:tempPath]; + + NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:tempPath]; + if (fh == nil) goto CannotBeginFetch; + + [self setDownloadFileHandle:fh]; + } + + // finally, start the connection + + Class connectionClass = [[self class] connectionClass]; + + NSArray *runLoopModes = nil; + + // use the connection-specific run loop modes, if they were provided, + // or else use the GTMHTTPFetcher default run loop modes, if any + if (runLoopModes_) { + runLoopModes = runLoopModes_; + } + + if ([runLoopModes count] == 0) { + + // if no run loop modes were specified, then we'll start the connection + // on the current run loop in the current mode + connection_ = [[connectionClass connectionWithRequest:request_ + delegate:self] retain]; + } else { + + // schedule on current run loop in the specified modes + connection_ = [[connectionClass alloc] initWithRequest:request_ + delegate:self + startImmediately:NO]; + for (NSString *mode in runLoopModes) { + [connection_ scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:mode]; + } + [connection_ start]; + } + hasConnectionEnded_ = NO; + + if (!connection_) { + NSAssert(connection_ != nil, @"beginFetchWithDelegate could not create a connection"); + goto CannotBeginFetch; + } + + if (downloadFileHandle_ != nil) { + // downloading to a file, so downloadedData_ remains nil + } else { + self.downloadedData = [NSMutableData data]; + } + +#if GTM_BACKGROUND_FETCHING + backgroundTaskIdentifer_ = 0; // UIBackgroundTaskInvalid is 0 on iOS 4 + if (shouldFetchInBackground_) { + // For iOS 3 compatibility, ensure that UIApp supports backgrounding + UIApplication *app = [UIApplication sharedApplication]; + if ([app respondsToSelector:@selector(beginBackgroundTaskWithExpirationHandler:)]) { + // Tell UIApplication that we want to continue even when the app is in the + // background + NSThread *thread = [NSThread currentThread]; + backgroundTaskIdentifer_ = [app beginBackgroundTaskWithExpirationHandler:^{ + // Callback - this block is always invoked by UIApplication on the main + // thread, but we want to run the user's callbacks on the thread used + // to start the fetch + [self performSelector:@selector(backgroundFetchExpired) + onThread:thread + withObject:nil + waitUntilDone:YES]; + }]; + } + } +#endif + + // once connection_ is non-nil we can send the start notification + isStopNotificationNeeded_ = YES; + NSNotificationCenter *defaultNC = [NSNotificationCenter defaultCenter]; + [defaultNC postNotificationName:kGTMHTTPFetcherStartedNotification + object:self]; + return YES; + +CannotBeginFetch: + [self failToBeginFetchWithError:error]; + return NO; +} + +- (void)failToBeginFetchWithError:(NSError *)error { + if (error == nil) { + error = [NSError errorWithDomain:kGTMHTTPFetcherErrorDomain + code:kGTMHTTPFetcherErrorDownloadFailed + userInfo:nil]; + } + + [[self retain] autorelease]; // In case the callback releases us + + [self invokeFetchCallbacksWithData:nil + error:error]; + + [self releaseCallbacks]; + + [service_ fetcherDidStop:self]; + + self.authorizer = nil; + + if (temporaryDownloadPath_) { + [[self fileManager] removeItemAtPath:temporaryDownloadPath_ + error:NULL]; + self.temporaryDownloadPath = nil; + } +} + +#if GTM_BACKGROUND_FETCHING +- (void)backgroundFetchExpired { + // On background expiration, we stop the fetch and invoke the callbacks + NSError *error = [NSError errorWithDomain:kGTMHTTPFetcherErrorDomain + code:kGTMHTTPFetcherErrorBackgroundExpiration + userInfo:nil]; + [self invokeFetchCallbacksWithData:nil + error:error]; + + // Stopping the fetch here will indirectly call endBackgroundTask + [self stopFetchReleasingCallbacks:NO]; + + [self releaseCallbacks]; + self.authorizer = nil; +} + +- (void)endBackgroundTask { + // Whenever the connection stops or background execution expires, + // we need to tell UIApplication we're done + if (backgroundTaskIdentifer_) { + // If backgroundTaskIdentifer_ is non-zero, we know we're on iOS 4 + UIApplication *app = [UIApplication sharedApplication]; + [app endBackgroundTask:backgroundTaskIdentifer_]; + + backgroundTaskIdentifer_ = 0; + } +} +#endif + +- (BOOL)authorizeRequest { + id authorizer = self.authorizer; + SEL asyncAuthSel = @selector(authorizeRequest:delegate:didFinishSelector:); + if ([authorizer respondsToSelector:asyncAuthSel]) { + SEL callbackSel = @selector(authorizer:request:finishedWithError:); + [authorizer authorizeRequest:request_ + delegate:self + didFinishSelector:callbackSel]; + return YES; + } else { + NSAssert(authorizer == nil, @"invalid authorizer for fetch"); + + // no authorizing possible, and authorizing happens only after any delay; + // just begin fetching + return [self beginFetchMayDelay:NO + mayAuthorize:NO]; + } +} + +- (void)authorizer:(id )auth + request:(NSMutableURLRequest *)request + finishedWithError:(NSError *)error { + if (error != nil) { + // we can't fetch without authorization + [self failToBeginFetchWithError:error]; + } else { + [self beginFetchMayDelay:NO + mayAuthorize:NO]; + } +} + +#if NS_BLOCKS_AVAILABLE +- (BOOL)beginFetchWithCompletionHandler:(void (^)(NSData *data, NSError *error))handler { + self.completionBlock = handler; + + // the user may have called setDelegate: earlier if they want to use other + // delegate-style callbacks during the fetch; otherwise, the delegate is nil, + // which is fine + return [self beginFetchWithDelegate:[self delegate] + didFinishSelector:nil]; +} +#endif + +- (NSString *)createTempDownloadFilePathForPath:(NSString *)targetPath { + NSString *tempDir = nil; + +#if (!TARGET_OS_IPHONE && (MAC_OS_X_VERSION_MAX_ALLOWED >= 1060)) + // find an appropriate directory for the download, ideally on the same disk + // as the final target location so the temporary file won't have to be moved + // to a different disk + // + // available in SDKs for 10.6 and iOS 4 + // + // Oct 2011: We previously also used URLForDirectory for + // (TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MAX_ALLOWED >= 40000)) + // but that is returning a non-temporary directory for iOS, unfortunately + + SEL sel = @selector(URLForDirectory:inDomain:appropriateForURL:create:error:); + if ([NSFileManager instancesRespondToSelector:sel]) { + NSError *error = nil; + NSURL *targetURL = [NSURL fileURLWithPath:targetPath]; + NSFileManager *fileMgr = [self fileManager]; + + NSURL *tempDirURL = [fileMgr URLForDirectory:NSItemReplacementDirectory + inDomain:NSUserDomainMask + appropriateForURL:targetURL + create:YES + error:&error]; + tempDir = [tempDirURL path]; + } +#endif + + if (tempDir == nil) { + tempDir = NSTemporaryDirectory(); + } + + static unsigned int counter = 0; + NSString *name = [NSString stringWithFormat:@"gtmhttpfetcher_%u_%u", + ++counter, (unsigned int) arc4random()]; + NSString *result = [tempDir stringByAppendingPathComponent:name]; + return result; +} + +- (void)addCookiesToRequest:(NSMutableURLRequest *)request { + // get cookies for this URL from our storage array, if + // we have a storage array + if (cookieStorageMethod_ != kGTMHTTPFetcherCookieStorageMethodSystemDefault + && cookieStorageMethod_ != kGTMHTTPFetcherCookieStorageMethodNone) { + + NSArray *cookies = [cookieStorage_ cookiesForURL:[request URL]]; + if ([cookies count] > 0) { + + NSDictionary *headerFields = [NSHTTPCookie requestHeaderFieldsWithCookies:cookies]; + NSString *cookieHeader = [headerFields objectForKey:@"Cookie"]; // key used in header dictionary + if (cookieHeader) { + [request addValue:cookieHeader forHTTPHeaderField:@"Cookie"]; // header name + } + } + } +} + +// Returns YES if this is in the process of fetching a URL, or waiting to +// retry, or waiting for authorization, or waiting to be issued by the +// service object +- (BOOL)isFetching { + if (connection_ != nil || retryTimer_ != nil) return YES; + + BOOL isAuthorizing = [authorizer_ isAuthorizingRequest:request_]; + if (isAuthorizing) return YES; + + BOOL isDelayed = [service_ isDelayingFetcher:self]; + return isDelayed; +} + +// Returns the status code set in connection:didReceiveResponse: +- (NSInteger)statusCode { + + NSInteger statusCode; + + if (response_ != nil + && [response_ respondsToSelector:@selector(statusCode)]) { + + statusCode = [(NSHTTPURLResponse *)response_ statusCode]; + } else { + // Default to zero, in hopes of hinting "Unknown" (we can't be + // sure that things are OK enough to use 200). + statusCode = 0; + } + return statusCode; +} + +- (NSDictionary *)responseHeaders { + if (response_ != nil + && [response_ respondsToSelector:@selector(allHeaderFields)]) { + + NSDictionary *headers = [(NSHTTPURLResponse *)response_ allHeaderFields]; + return headers; + } + return nil; +} + +- (void)releaseCallbacks { + [delegate_ autorelease]; + delegate_ = nil; + +#if NS_BLOCKS_AVAILABLE + self.completionBlock = nil; + self.sentDataBlock = nil; + self.receivedDataBlock = nil; + self.retryBlock = nil; +#endif +} + +// Cancel the fetch of the URL that's currently in progress. +- (void)stopFetchReleasingCallbacks:(BOOL)shouldReleaseCallbacks { + // if the connection or the retry timer is all that's retaining the fetcher, + // we want to be sure this instance survives stopping at least long enough for + // the stack to unwind + [[self retain] autorelease]; + + [self destroyRetryTimer]; + + if (connection_) { + // in case cancelling the connection calls this recursively, we want + // to ensure that we'll only release the connection and delegate once, + // so first set connection_ to nil + NSURLConnection* oldConnection = connection_; + connection_ = nil; + + if (!hasConnectionEnded_) { + [oldConnection cancel]; + } + + // this may be called in a callback from the connection, so use autorelease + [oldConnection autorelease]; + } + + // send the stopped notification + [self sendStopNotificationIfNeeded]; + + [authorizer_ stopAuthorization]; + + if (shouldReleaseCallbacks) { + [self releaseCallbacks]; + + self.authorizer = nil; + } + + [service_ fetcherDidStop:self]; + + if (temporaryDownloadPath_) { + [[NSFileManager defaultManager] removeItemAtPath:temporaryDownloadPath_ + error:NULL]; + self.temporaryDownloadPath = nil; + } + +#if GTM_BACKGROUND_FETCHING + [self endBackgroundTask]; +#endif +} + +// external stop method +- (void)stopFetching { + [self stopFetchReleasingCallbacks:YES]; +} + +- (void)sendStopNotificationIfNeeded { + if (isStopNotificationNeeded_) { + isStopNotificationNeeded_ = NO; + + NSNotificationCenter *defaultNC = [NSNotificationCenter defaultCenter]; + [defaultNC postNotificationName:kGTMHTTPFetcherStoppedNotification + object:self]; + } +} + +- (void)retryFetch { + + [self stopFetchReleasingCallbacks:NO]; + + [self beginFetchWithDelegate:delegate_ + didFinishSelector:finishedSel_]; +} + +- (void)waitForCompletionWithTimeout:(NSTimeInterval)timeoutInSeconds { + NSDate* giveUpDate = [NSDate dateWithTimeIntervalSinceNow:timeoutInSeconds]; + + // loop until the callbacks have been called and released, and until + // the connection is no longer pending, or until the timeout has expired + while ((!hasConnectionEnded_ +#if NS_BLOCKS_AVAILABLE + || completionBlock_ != nil +#endif + || delegate_ != nil) + && [giveUpDate timeIntervalSinceNow] > 0) { + + // run the current run loop 1/1000 of a second to give the networking + // code a chance to work + NSDate *stopDate = [NSDate dateWithTimeIntervalSinceNow:0.001]; + [[NSRunLoop currentRunLoop] runUntilDate:stopDate]; + } +} + +- (NSFileManager *)fileManager { + // use a temporary instance of NSFileManager for thread-safety + return [[[NSFileManager alloc] init] autorelease]; +} + +#pragma mark NSURLConnection Delegate Methods + +// +// NSURLConnection Delegate Methods +// + +// This method just says "follow all redirects", which _should_ be the default behavior, +// According to file:///Developer/ADC%20Reference%20Library/documentation/Cocoa/Conceptual/URLLoadingSystem +// but the redirects were not being followed until I added this method. May be +// a bug in the NSURLConnection code, or the documentation. +// +// In OS X 10.4.8 and earlier, the redirect request doesn't +// get the original's headers and body. This causes POSTs to fail. +// So we construct a new request, a copy of the original, with overrides from the +// redirect. +// +// Docs say that if redirectResponse is nil, just return the redirectRequest. + +- (NSURLRequest *)connection:(NSURLConnection *)connection + willSendRequest:(NSURLRequest *)redirectRequest + redirectResponse:(NSURLResponse *)redirectResponse { + + if (redirectRequest && redirectResponse) { + // save cookies from the response + [self handleCookiesForResponse:redirectResponse]; + + NSMutableURLRequest *newRequest = [[request_ mutableCopy] autorelease]; + // copy the URL + NSURL *redirectURL = [redirectRequest URL]; + NSURL *url = [newRequest URL]; + + // disallow scheme changes (say, from https to http) + NSString *redirectScheme = [url scheme]; + NSString *newScheme = [redirectURL scheme]; + NSString *newResourceSpecifier = [redirectURL resourceSpecifier]; + + if ([redirectScheme caseInsensitiveCompare:@"http"] == NSOrderedSame + && newScheme != nil + && [newScheme caseInsensitiveCompare:@"https"] == NSOrderedSame) { + + // allow the change from http to https + redirectScheme = newScheme; + } + + NSString *newUrlString = [NSString stringWithFormat:@"%@:%@", + redirectScheme, newResourceSpecifier]; + + NSURL *newURL = [NSURL URLWithString:newUrlString]; + [newRequest setURL:newURL]; + + // any headers in the redirect override headers in the original. + NSDictionary *redirectHeaders = [redirectRequest allHTTPHeaderFields]; + for (NSString *key in redirectHeaders) { + NSString *value = [redirectHeaders objectForKey:key]; + [newRequest setValue:value forHTTPHeaderField:key]; + } + + [self addCookiesToRequest:newRequest]; + + redirectRequest = newRequest; + + // log the response we just received + [self setResponse:redirectResponse]; + [self logNowWithError:nil]; + + // update the request for future logging + NSMutableURLRequest *mutable = [[redirectRequest mutableCopy] autorelease]; + [self setMutableRequest:mutable]; +} + return redirectRequest; +} + +- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { + // this method is called when the server has determined that it + // has enough information to create the NSURLResponse + // it can be called multiple times, for example in the case of a + // redirect, so each time we reset the data. + [downloadedData_ setLength:0]; + [downloadFileHandle_ truncateFileAtOffset:0]; + downloadedLength_ = 0; + + [self setResponse:response]; + + // save cookies from the response + [self handleCookiesForResponse:response]; +} + + +// handleCookiesForResponse: handles storage of cookies for responses passed to +// connection:willSendRequest:redirectResponse: and connection:didReceiveResponse: +- (void)handleCookiesForResponse:(NSURLResponse *)response { + + if (cookieStorageMethod_ == kGTMHTTPFetcherCookieStorageMethodSystemDefault + || cookieStorageMethod_ == kGTMHTTPFetcherCookieStorageMethodNone) { + + // do nothing special for NSURLConnection's default storage mechanism + // or when we're ignoring cookies + + } else if ([response respondsToSelector:@selector(allHeaderFields)]) { + + // grab the cookies from the header as NSHTTPCookies and store them either + // into our static array or into the fetchHistory + + NSDictionary *responseHeaderFields = [(NSHTTPURLResponse *)response allHeaderFields]; + if (responseHeaderFields) { + + NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:responseHeaderFields + forURL:[response URL]]; + if ([cookies count] > 0) { + [cookieStorage_ setCookies:cookies]; + } + } + } +} + +-(void)connection:(NSURLConnection *)connection + didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge { + + if ([challenge previousFailureCount] <= 2) { + + NSURLCredential *credential = credential_; + + if ([[challenge protectionSpace] isProxy] && proxyCredential_ != nil) { + credential = proxyCredential_; + } + + // Here, if credential is still nil, then we *could* try to get it from + // NSURLCredentialStorage's defaultCredentialForProtectionSpace:. + // We don't, because we're assuming: + // + // - for server credentials, we only want ones supplied by the program + // calling http fetcher + // - for proxy credentials, if one were necessary and available in the + // keychain, it would've been found automatically by NSURLConnection + // and this challenge delegate method never would've been called + // anyway + + if (credential) { + // try the credential + [[challenge sender] useCredential:credential + forAuthenticationChallenge:challenge]; + return; + } + } + + // If we don't have credentials, or we've already failed auth 3x, + // report the error, putting the challenge as a value in the userInfo + // dictionary +#if DEBUG + NSAssert(!isCancellingChallenge_, @"isCancellingChallenge_ unexpected"); +#endif + NSDictionary *userInfo = [NSDictionary dictionaryWithObject:challenge + forKey:kGTMHTTPFetcherErrorChallengeKey]; + NSError *error = [NSError errorWithDomain:kGTMHTTPFetcherErrorDomain + code:kGTMHTTPFetcherErrorAuthenticationChallengeFailed + userInfo:userInfo]; + + // cancelAuthenticationChallenge seems to indirectly call + // connection:didFailWithError: now, though that isn't documented + // + // we'll use an ivar to make the indirect invocation of the + // delegate method do nothing + isCancellingChallenge_ = YES; + [[challenge sender] cancelAuthenticationChallenge:challenge]; + isCancellingChallenge_ = NO; + + [self connection:connection didFailWithError:error]; +} + +- (void)invokeFetchCallbacksWithData:(NSData *)data + error:(NSError *)error { + [[self retain] autorelease]; // In case the callback releases us + + [self invokeFetchCallback:finishedSel_ + target:delegate_ + data:data + error:error]; + +#if NS_BLOCKS_AVAILABLE + if (completionBlock_) { + completionBlock_(data, error); + } +#endif +} + +- (void)invokeFetchCallback:(SEL)sel + target:(id)target + data:(NSData *)data + error:(NSError *)error { + // This method is available to subclasses which may provide a customized + // target pointer + if (target && sel) { + NSMethodSignature *sig = [target methodSignatureForSelector:sel]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig]; + [invocation setSelector:sel]; + [invocation setTarget:target]; + [invocation setArgument:&self atIndex:2]; + [invocation setArgument:&data atIndex:3]; + [invocation setArgument:&error atIndex:4]; + [invocation invoke]; + } +} + +- (void)invokeSentDataCallback:(SEL)sel + target:(id)target + didSendBodyData:(NSInteger)bytesWritten + totalBytesWritten:(NSInteger)totalBytesWritten + totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite { + if (target && sel) { + NSMethodSignature *sig = [target methodSignatureForSelector:sel]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig]; + [invocation setSelector:sel]; + [invocation setTarget:target]; + [invocation setArgument:&self atIndex:2]; + [invocation setArgument:&bytesWritten atIndex:3]; + [invocation setArgument:&totalBytesWritten atIndex:4]; + [invocation setArgument:&totalBytesExpectedToWrite atIndex:5]; + [invocation invoke]; + } +} + +- (BOOL)invokeRetryCallback:(SEL)sel + target:(id)target + willRetry:(BOOL)willRetry + error:(NSError *)error { + if (target && sel) { + NSMethodSignature *sig = [target methodSignatureForSelector:sel]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig]; + [invocation setSelector:sel]; + [invocation setTarget:target]; + [invocation setArgument:&self atIndex:2]; + [invocation setArgument:&willRetry atIndex:3]; + [invocation setArgument:&error atIndex:4]; + [invocation invoke]; + + [invocation getReturnValue:&willRetry]; + } + return willRetry; +} + +- (void)connection:(NSURLConnection *)connection + didSendBodyData:(NSInteger)bytesWritten + totalBytesWritten:(NSInteger)totalBytesWritten +totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite { + + SEL sel = [self sentDataSelector]; + [self invokeSentDataCallback:sel + target:delegate_ + didSendBodyData:bytesWritten + totalBytesWritten:totalBytesWritten + totalBytesExpectedToWrite:totalBytesExpectedToWrite]; + +#if NS_BLOCKS_AVAILABLE + if (sentDataBlock_) { + sentDataBlock_(bytesWritten, totalBytesWritten, totalBytesExpectedToWrite); + } +#endif +} + +- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { +#if DEBUG + // the download file handle should be set before the fetch is started, not + // after + NSAssert((downloadFileHandle_ == nil) != (downloadedData_ == nil), + @"received data accumulates as NSData or NSFileHandle, not both"); +#endif + + if (downloadFileHandle_ != nil) { + // append to file + @try { + [downloadFileHandle_ writeData:data]; + + downloadedLength_ = [downloadFileHandle_ offsetInFile]; + } + @catch (NSException *exc) { + // couldn't write to file, probably due to a full disk + NSDictionary *userInfo = [NSDictionary dictionaryWithObject:[exc reason] + forKey:NSLocalizedDescriptionKey]; + NSError *error = [NSError errorWithDomain:kGTMHTTPFetcherStatusDomain + code:kGTMHTTPFetcherErrorFileHandleException + userInfo:userInfo]; + [self connection:connection didFailWithError:error]; + return; + } + } else { + // append to mutable data + [downloadedData_ appendData:data]; + + downloadedLength_ = [downloadedData_ length]; + } + + if (receivedDataSel_) { + [delegate_ performSelector:receivedDataSel_ + withObject:self + withObject:downloadedData_]; + } + +#if NS_BLOCKS_AVAILABLE + if (receivedDataBlock_) { + receivedDataBlock_(downloadedData_); + } +#endif +} + + +// For error 304's ("Not Modified") where we've cached the data, return +// status 200 ("OK") to the caller (but leave the fetcher status as 304) +// and copy the cached data. +// +// For other errors or if there's no cached data, just return the actual status. +- (NSInteger)statusAfterHandlingNotModifiedError { + + NSInteger status = [self statusCode]; + if (status == kGTMHTTPFetcherStatusNotModified + && [fetchHistory_ shouldCacheETaggedData]) { + + NSData *cachedData = [fetchHistory_ cachedDataForRequest:request_]; + if (cachedData) { + // forge the status to pass on to the delegate + status = 200; + + // copy our stored data + if (downloadFileHandle_ != nil) { + @try { + // Downloading to a file handle won't save to the cache (the data is + // likely inappropriately large for caching), but will still read from + // the cache, on the unlikely chance that the response was Not Modified + // and the URL response was indeed present in the cache. + [downloadFileHandle_ truncateFileAtOffset:0]; + [downloadFileHandle_ writeData:cachedData]; + downloadedLength_ = [downloadFileHandle_ offsetInFile]; + } + @catch (NSException *) { + // Failed to write data, likely due to lack of disk space + status = kGTMHTTPFetcherErrorFileHandleException; + } + } else { + [downloadedData_ setData:cachedData]; + downloadedLength_ = [cachedData length]; + } + } + } + return status; +} + +- (void)connectionDidFinishLoading:(NSURLConnection *)connection { + // we no longer need to cancel the connection + hasConnectionEnded_ = YES; + + // skip caching ETagged results when the data is being saved to a file + if (downloadFileHandle_ == nil) { + [fetchHistory_ updateFetchHistoryWithRequest:request_ + response:response_ + downloadedData:downloadedData_]; + } else { + [fetchHistory_ removeCachedDataForRequest:request_]; + } + + [[self retain] autorelease]; // in case the callback releases us + + [self logNowWithError:nil]; + + NSInteger status = [self statusAfterHandlingNotModifiedError]; + + // we want to send the stop notification before calling the delegate's + // callback selector, since the callback selector may release all of + // the fetcher properties that the client is using to track the fetches + // + // We'll also stop now so that, to any observers watching the notifications, + // it doesn't look like our wait for a retry (which may be long, + // 30 seconds or more) is part of the network activity + [self sendStopNotificationIfNeeded]; + + BOOL shouldStopFetching = YES; + NSError *error = nil; + + if (status >= 0 && status < 300) { + // success + if (downloadPath_) { + // avoid deleting the downloaded file when the fetch stops + [downloadFileHandle_ closeFile]; + self.downloadFileHandle = nil; + + NSFileManager *fileMgr = [self fileManager]; + [fileMgr removeItemAtPath:downloadPath_ + error:NULL]; + + if ([fileMgr moveItemAtPath:temporaryDownloadPath_ + toPath:downloadPath_ + error:&error]) { + self.temporaryDownloadPath = nil; + } + } + } else { + // status over 300; retry or notify the delegate of failure + if ([self shouldRetryNowForStatus:status error:nil]) { + // retrying + [self beginRetryTimer]; + shouldStopFetching = NO; + } else { + NSDictionary *userInfo = nil; + if ([downloadedData_ length] > 0) { + userInfo = [NSDictionary dictionaryWithObject:downloadedData_ + forKey:kGTMHTTPFetcherStatusDataKey]; + } + error = [NSError errorWithDomain:kGTMHTTPFetcherStatusDomain + code:status + userInfo:userInfo]; + } + } + + if (shouldStopFetching) { + // call the callbacks + [self invokeFetchCallbacksWithData:downloadedData_ + error:error]; + + BOOL shouldRelease = [self shouldReleaseCallbacksUponCompletion]; + [self stopFetchReleasingCallbacks:shouldRelease]; + } +} + +- (BOOL)shouldReleaseCallbacksUponCompletion { + // a subclass can override this to keep callbacks around after the + // connection has finished successfully + return YES; +} + +- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { + // prevent the failure callback from being called twice, since the stopFetch + // call below (either the explicit one at the end of this method, or the + // implicit one when the retry occurs) will release the delegate + if (connection_ == nil) return; + + // if this method was invoked indirectly by cancellation of an authentication + // challenge, defer this until it is called again with the proper error object + if (isCancellingChallenge_) return; + + // we no longer need to cancel the connection + hasConnectionEnded_ = YES; + + [self logNowWithError:error]; + + // see comment about sendStopNotificationIfNeeded + // in connectionDidFinishLoading: + [self sendStopNotificationIfNeeded]; + + if ([self shouldRetryNowForStatus:0 error:error]) { + + [self beginRetryTimer]; + + } else { + + [[self retain] autorelease]; // in case the callback releases us + + [self invokeFetchCallbacksWithData:nil + error:error]; + + [self stopFetchReleasingCallbacks:YES]; + } +} + +- (void)logNowWithError:(NSError *)error { + // if the logging category is available, then log the current request, + // response, data, and error + if ([self respondsToSelector:@selector(logFetchWithError:)]) { + [self performSelector:@selector(logFetchWithError:) withObject:error]; + } +} + +#pragma mark Retries + +- (BOOL)isRetryError:(NSError *)error { + + struct retryRecord { + NSString *const domain; + int code; + }; + + struct retryRecord retries[] = { + { kGTMHTTPFetcherStatusDomain, 408 }, // request timeout + { kGTMHTTPFetcherStatusDomain, 503 }, // service unavailable + { kGTMHTTPFetcherStatusDomain, 504 }, // request timeout + { NSURLErrorDomain, NSURLErrorTimedOut }, + { NSURLErrorDomain, NSURLErrorNetworkConnectionLost }, + { nil, 0 } + }; + + // NSError's isEqual always returns false for equal but distinct instances + // of NSError, so we have to compare the domain and code values explicitly + + for (int idx = 0; retries[idx].domain != nil; idx++) { + + if ([[error domain] isEqual:retries[idx].domain] + && [error code] == retries[idx].code) { + + return YES; + } + } + return NO; +} + + +// shouldRetryNowForStatus:error: returns YES if the user has enabled retries +// and the status or error is one that is suitable for retrying. "Suitable" +// means either the isRetryError:'s list contains the status or error, or the +// user's retrySelector: is present and returns YES when called, or the +// authorizer may be able to fix. +- (BOOL)shouldRetryNowForStatus:(NSInteger)status + error:(NSError *)error { + // Determine if a refreshed authorizer may avoid an authorization error + BOOL shouldRetryForAuthRefresh = NO; + BOOL isFirstAuthError = (authorizer_ != nil) + && !hasAttemptedAuthRefresh_ + && (status == kGTMHTTPFetcherStatusUnauthorized); // 401 + + if (isFirstAuthError) { + if ([authorizer_ respondsToSelector:@selector(primeForRefresh)]) { + BOOL hasPrimed = [authorizer_ primeForRefresh]; + if (hasPrimed) { + shouldRetryForAuthRefresh = YES; + hasAttemptedAuthRefresh_ = YES; + [request_ setValue:nil forHTTPHeaderField:@"Authorization"]; + } + } + } + + // Determine if we're doing exponential backoff retries + BOOL shouldDoIntervalRetry = [self isRetryEnabled] + && ([self nextRetryInterval] < [self maxRetryInterval]); + + BOOL willRetry = NO; + BOOL canRetry = shouldRetryForAuthRefresh || shouldDoIntervalRetry; + if (canRetry) { + // Check if this is a retryable error + if (error == nil) { + // Make an error for the status + NSDictionary *userInfo = nil; + if ([downloadedData_ length] > 0) { + userInfo = [NSDictionary dictionaryWithObject:downloadedData_ + forKey:kGTMHTTPFetcherStatusDataKey]; + } + error = [NSError errorWithDomain:kGTMHTTPFetcherStatusDomain + code:status + userInfo:userInfo]; + } + + willRetry = shouldRetryForAuthRefresh || [self isRetryError:error]; + + // If the user has installed a retry callback, consult that + willRetry = [self invokeRetryCallback:retrySel_ + target:delegate_ + willRetry:willRetry + error:error]; +#if NS_BLOCKS_AVAILABLE + if (retryBlock_) { + willRetry = retryBlock_(willRetry, error); + } +#endif + } + return willRetry; +} + +- (void)beginRetryTimer { + + NSTimeInterval nextInterval = [self nextRetryInterval]; + NSTimeInterval maxInterval = [self maxRetryInterval]; + + NSTimeInterval newInterval = MIN(nextInterval, maxInterval); + + [self primeRetryTimerWithNewTimeInterval:newInterval]; +} + +- (void)primeRetryTimerWithNewTimeInterval:(NSTimeInterval)secs { + + [self destroyRetryTimer]; + + lastRetryInterval_ = secs; + + retryTimer_ = [NSTimer scheduledTimerWithTimeInterval:secs + target:self + selector:@selector(retryTimerFired:) + userInfo:nil + repeats:NO]; + [retryTimer_ retain]; + + NSNotificationCenter *defaultNC = [NSNotificationCenter defaultCenter]; + [defaultNC postNotificationName:kGTMHTTPFetcherRetryDelayStartedNotification + object:self]; +} + +- (void)retryTimerFired:(NSTimer *)timer { + + [self destroyRetryTimer]; + + retryCount_++; + + [self retryFetch]; +} + +- (void)destroyRetryTimer { + if (retryTimer_) { + [retryTimer_ invalidate]; + [retryTimer_ autorelease]; + retryTimer_ = nil; + + NSNotificationCenter *defaultNC = [NSNotificationCenter defaultCenter]; + [defaultNC postNotificationName:kGTMHTTPFetcherRetryDelayStoppedNotification + object:self]; + } +} + +- (NSUInteger)retryCount { + return retryCount_; +} + +- (NSTimeInterval)nextRetryInterval { + // the next wait interval is the factor (2.0) times the last interval, + // but never less than the minimum interval + NSTimeInterval secs = lastRetryInterval_ * retryFactor_; + secs = MIN(secs, maxRetryInterval_); + secs = MAX(secs, minRetryInterval_); + + return secs; +} + +- (BOOL)isRetryEnabled { + return isRetryEnabled_; +} + +- (void)setRetryEnabled:(BOOL)flag { + + if (flag && !isRetryEnabled_) { + // We defer initializing these until the user calls setRetryEnabled + // to avoid using the random number generator if it's not needed. + // However, this means min and max intervals for this fetcher are reset + // as a side effect of calling setRetryEnabled. + // + // make an initial retry interval random between 1.0 and 2.0 seconds + [self setMinRetryInterval:0.0]; + [self setMaxRetryInterval:kUnsetMaxRetryInterval]; + [self setRetryFactor:2.0]; + lastRetryInterval_ = 0.0; + } + isRetryEnabled_ = flag; +}; + +- (NSTimeInterval)maxRetryInterval { + return maxRetryInterval_; +} + +- (void)setMaxRetryInterval:(NSTimeInterval)secs { + if (secs > 0) { + maxRetryInterval_ = secs; + } else { + maxRetryInterval_ = kUnsetMaxRetryInterval; + } +} + +- (double)minRetryInterval { + return minRetryInterval_; +} + +- (void)setMinRetryInterval:(NSTimeInterval)secs { + if (secs > 0) { + minRetryInterval_ = secs; + } else { + // set min interval to a random value between 1.0 and 2.0 seconds + // so that if multiple clients start retrying at the same time, they'll + // repeat at different times and avoid overloading the server + minRetryInterval_ = 1.0 + ((double)(arc4random() & 0x0FFFF) / (double) 0x0FFFF); + } +} + +#pragma mark Getters and Setters + +@dynamic cookieStorageMethod, + retryEnabled, + maxRetryInterval, + minRetryInterval, + retryCount, + nextRetryInterval, + statusCode, + responseHeaders, + fetchHistory, + userData, + properties; + +@synthesize mutableRequest = request_, + credential = credential_, + proxyCredential = proxyCredential_, + postData = postData_, + postStream = postStream_, + delegate = delegate_, + authorizer = authorizer_, + service = service_, + serviceHost = serviceHost_, + servicePriority = servicePriority_, + thread = thread_, + sentDataSelector = sentDataSel_, + receivedDataSelector = receivedDataSel_, + retrySelector = retrySel_, + retryFactor = retryFactor_, + response = response_, + downloadedLength = downloadedLength_, + downloadedData = downloadedData_, + downloadPath = downloadPath_, + temporaryDownloadPath = temporaryDownloadPath_, + downloadFileHandle = downloadFileHandle_, + runLoopModes = runLoopModes_, + comment = comment_, + log = log_, + cookieStorage = cookieStorage_; + +#if NS_BLOCKS_AVAILABLE +@synthesize completionBlock = completionBlock_, + sentDataBlock = sentDataBlock_, + receivedDataBlock = receivedDataBlock_, + retryBlock = retryBlock_; +#endif + +@synthesize shouldFetchInBackground = shouldFetchInBackground_; + +- (NSInteger)cookieStorageMethod { + return cookieStorageMethod_; +} + +- (void)setCookieStorageMethod:(NSInteger)method { + + cookieStorageMethod_ = method; + + if (method == kGTMHTTPFetcherCookieStorageMethodSystemDefault) { + // system default + [request_ setHTTPShouldHandleCookies:YES]; + + // no need for a cookie storage object + self.cookieStorage = nil; + + } else { + // not system default + [request_ setHTTPShouldHandleCookies:NO]; + + if (method == kGTMHTTPFetcherCookieStorageMethodStatic) { + // store cookies in the static array + NSAssert(gGTMFetcherStaticCookieStorage != nil, + @"cookie storage requires GTMHTTPFetchHistory"); + + self.cookieStorage = gGTMFetcherStaticCookieStorage; + } else if (method == kGTMHTTPFetcherCookieStorageMethodFetchHistory) { + // store cookies in the fetch history + self.cookieStorage = [fetchHistory_ cookieStorage]; + } else { + // kGTMHTTPFetcherCookieStorageMethodNone - ignore cookies + self.cookieStorage = nil; + } + } +} + ++ (id )staticCookieStorage { + return gGTMFetcherStaticCookieStorage; +} + ++ (BOOL)doesSupportSentDataCallback { +#if GTM_IPHONE + // NSURLConnection's didSendBodyData: delegate support appears to be + // available starting in iPhone OS 3.0 + return (NSFoundationVersionNumber >= 678.47); +#else + // per WebKit's MaxFoundationVersionWithoutdidSendBodyDataDelegate + // + // indicates if NSURLConnection will invoke the didSendBodyData: delegate + // method + return (NSFoundationVersionNumber > 677.21); +#endif +} + +- (id )fetchHistory { + return fetchHistory_; +} + +- (void)setFetchHistory:(id )fetchHistory { + [fetchHistory_ autorelease]; + fetchHistory_ = [fetchHistory retain]; + + if (fetchHistory_ != nil) { + // set the fetch history's cookie array to be the cookie store + [self setCookieStorageMethod:kGTMHTTPFetcherCookieStorageMethodFetchHistory]; + + } else { + // the fetch history was removed + if (cookieStorageMethod_ == kGTMHTTPFetcherCookieStorageMethodFetchHistory) { + // fall back to static storage + [self setCookieStorageMethod:kGTMHTTPFetcherCookieStorageMethodStatic]; + } + } +} + +- (id)userData { + return userData_; +} + +- (void)setUserData:(id)theObj { + [userData_ autorelease]; + userData_ = [theObj retain]; +} + +- (void)setProperties:(NSMutableDictionary *)dict { + [properties_ autorelease]; + + // This copies rather than retains the parameter for compatiblity with + // an earlier version that took an immutable parameter and copied it. + properties_ = [dict mutableCopy]; +} + +- (NSMutableDictionary *)properties { + return properties_; +} + +- (void)setProperty:(id)obj forKey:(NSString *)key { + if (properties_ == nil && obj != nil) { + [self setProperties:[NSMutableDictionary dictionary]]; + } + [properties_ setValue:obj forKey:key]; +} + +- (id)propertyForKey:(NSString *)key { + return [properties_ objectForKey:key]; +} + +- (void)addPropertiesFromDictionary:(NSDictionary *)dict { + if (properties_ == nil && dict != nil) { + [self setProperties:[[dict mutableCopy] autorelease]]; + } else { + [properties_ addEntriesFromDictionary:dict]; + } +} + +- (void)setCommentWithFormat:(id)format, ... { +#if !STRIP_GTM_FETCH_LOGGING + NSString *result = format; + if (format) { + va_list argList; + va_start(argList, format); + result = [[[NSString alloc] initWithFormat:format + arguments:argList] autorelease]; + va_end(argList); + } + [self setComment:result]; +#endif +} + ++ (Class)connectionClass { + if (gGTMFetcherConnectionClass == nil) { + gGTMFetcherConnectionClass = [NSURLConnection class]; + } + return gGTMFetcherConnectionClass; +} + ++ (void)setConnectionClass:(Class)theClass { + gGTMFetcherConnectionClass = theClass; +} + +#if STRIP_GTM_FETCH_LOGGING ++ (void)setLoggingEnabled:(BOOL)flag { +} +#endif // STRIP_GTM_FETCH_LOGGING + +@end + +void GTMAssertSelectorNilOrImplementedWithArgs(id obj, SEL sel, ...) { + + // verify that the object's selector is implemented with the proper + // number and type of arguments +#if DEBUG + va_list argList; + va_start(argList, sel); + + if (obj && sel) { + // check that the selector is implemented + if (![obj respondsToSelector:sel]) { + NSLog(@"\"%@\" selector \"%@\" is unimplemented or misnamed", + NSStringFromClass([obj class]), + NSStringFromSelector(sel)); + NSCAssert(0, @"callback selector unimplemented or misnamed"); + } else { + const char *expectedArgType; + unsigned int argCount = 2; // skip self and _cmd + NSMethodSignature *sig = [obj methodSignatureForSelector:sel]; + + // check that each expected argument is present and of the correct type + while ((expectedArgType = va_arg(argList, const char*)) != 0) { + + if ([sig numberOfArguments] > argCount) { + const char *foundArgType = [sig getArgumentTypeAtIndex:argCount]; + + if(0 != strncmp(foundArgType, expectedArgType, strlen(expectedArgType))) { + NSLog(@"\"%@\" selector \"%@\" argument %d should be type %s", + NSStringFromClass([obj class]), + NSStringFromSelector(sel), (argCount - 2), expectedArgType); + NSCAssert(0, @"callback selector argument type mistake"); + } + } + argCount++; + } + + // check that the proper number of arguments are present in the selector + if (argCount != [sig numberOfArguments]) { + NSLog( @"\"%@\" selector \"%@\" should have %d arguments", + NSStringFromClass([obj class]), + NSStringFromSelector(sel), (argCount - 2)); + NSCAssert(0, @"callback selector arguments incorrect"); + } + } + } + + va_end(argList); +#endif +} + +NSString *GTMCleanedUserAgentString(NSString *str) { + // Reference http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html + // and http://www-archive.mozilla.org/build/user-agent-strings.html + + if (str == nil) return nil; + + NSMutableString *result = [NSMutableString stringWithString:str]; + + // Replace spaces with underscores + [result replaceOccurrencesOfString:@" " + withString:@"_" + options:0 + range:NSMakeRange(0, [result length])]; + + // Delete http token separators and remaining whitespace + static NSCharacterSet *charsToDelete = nil; + if (charsToDelete == nil) { + // Make a set of unwanted characters + NSString *const kSeparators = @"()<>@,;:\\\"/[]?={}"; + + NSMutableCharacterSet *mutableChars; + mutableChars = [[[NSCharacterSet whitespaceAndNewlineCharacterSet] mutableCopy] autorelease]; + [mutableChars addCharactersInString:kSeparators]; + charsToDelete = [mutableChars copy]; // hang on to an immutable copy + } + + while (1) { + NSRange separatorRange = [result rangeOfCharacterFromSet:charsToDelete]; + if (separatorRange.location == NSNotFound) break; + + [result deleteCharactersInRange:separatorRange]; + }; + + return result; +} + +NSString *GTMSystemVersionString(void) { + NSString *systemString = @""; + +#if TARGET_OS_MAC && !TARGET_OS_IPHONE + // Mac build + SInt32 systemMajor = 0, systemMinor = 0, systemRelease = 0; + (void) Gestalt(gestaltSystemVersionMajor, &systemMajor); + (void) Gestalt(gestaltSystemVersionMinor, &systemMinor); + (void) Gestalt(gestaltSystemVersionBugFix, &systemRelease); + + systemString = [NSString stringWithFormat:@"MacOSX/%d.%d.%d", + (int)systemMajor, (int)systemMinor, (int)systemRelease]; + +#elif TARGET_OS_IPHONE + // Compiling against the iPhone SDK + + static NSString *savedSystemString = nil; + if (savedSystemString == nil) { + // Avoid the slowness of calling currentDevice repeatedly on the iPhone + UIDevice* currentDevice = [UIDevice currentDevice]; + + NSString *rawModel = [currentDevice model]; + NSString *model = GTMCleanedUserAgentString(rawModel); + + NSString *systemVersion = [currentDevice systemVersion]; + + savedSystemString = [[NSString alloc] initWithFormat:@"%@/%@", + model, systemVersion]; // "iPod_Touch/2.2" + } + systemString = savedSystemString; + +#elif (GTL_IPHONE || GDATA_IPHONE) + // Compiling iOS libraries against the Mac SDK + systemString = @"iPhone/x.x"; + +#elif defined(_SYS_UTSNAME_H) + // Foundation-only build + struct utsname unameRecord; + uname(&unameRecord); + + systemString = [NSString stringWithFormat:@"%s/%s", + unameRecord.sysname, unameRecord.release]; // "Darwin/8.11.1" +#endif + + return systemString; +} + +// Return a generic name and version for the current application; this avoids +// anonymous server transactions. +NSString *GTMApplicationIdentifier(NSBundle *bundle) { + static NSString *sAppID = nil; + if (sAppID != nil) return sAppID; + + // If there's a bundle ID, use that; otherwise, use the process name + if (bundle == nil) { + bundle = [NSBundle mainBundle]; + } + + NSString *identifier; + NSString *bundleID = [bundle bundleIdentifier]; + if ([bundleID length] > 0) { + identifier = bundleID; + } else { + // Fall back on the procname, prefixed by "proc" to flag that it's + // autogenerated and perhaps unreliable + NSString *procName = [[NSProcessInfo processInfo] processName]; + identifier = [NSString stringWithFormat:@"proc_%@", procName]; + } + + // Clean up whitespace and special characters + identifier = GTMCleanedUserAgentString(identifier); + + // If there's a version number, append that + NSString *version = [bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + if ([version length] == 0) { + version = [bundle objectForInfoDictionaryKey:@"CFBundleVersion"]; + } + + // Clean up whitespace and special characters + version = GTMCleanedUserAgentString(version); + + // Glue the two together (cleanup done above or else cleanup would strip the + // slash) + if ([version length] > 0) { + identifier = [identifier stringByAppendingFormat:@"/%@", version]; + } + + sAppID = [identifier copy]; + return sAppID; +} diff --git a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherLogging.h b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherLogging.h new file mode 100644 index 00000000..eb259751 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherLogging.h @@ -0,0 +1,85 @@ +/* Copyright (c) 2010 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#import "GTMHTTPFetcher.h" + +// GTM HTTP Logging +// +// All traffic using GTMHTTPFetcher can be easily logged. Call +// +// [GTMHTTPFetcher setLoggingEnabled:YES]; +// +// to begin generating log files. +// +// Log files are put into a folder on the desktop called "GTMHTTPDebugLogs" +// unless another directory is specified with +setLoggingDirectory. +// +// In the iPhone simulator, the default logs location is the user's home +// directory in ~/Library/Application Support. On the iPhone device, the +// default logs location is the application's documents directory on the device. +// +// Tip: use the Finder's "Sort By Date" to find the most recent logs. +// +// Each run of an application gets a separate set of log files. An html +// file is generated to simplify browsing the run's http transactions. +// The html file includes javascript links for inline viewing of uploaded +// and downloaded data. +// +// A symlink is created in the logs folder to simplify finding the html file +// for the latest run of the application; the symlink is called +// +// AppName_http_log_newest.html +// +// For better viewing of XML logs, use Camino or Firefox rather than Safari. +// +// Each fetcher may be given a comment to be inserted as a label in the logs, +// such as +// [fetcher setCommentWithFormat:@"retrieve item %@", itemName]; +// +// Projects may define STRIP_GTM_FETCH_LOGGING to remove logging code. + +#if !STRIP_GTM_FETCH_LOGGING + +@interface GTMHTTPFetcher (GTMHTTPFetcherLogging) + +// Note: the default logs directory is ~/Desktop/GTMHTTPDebugLogs; it will be +// created as needed. If a custom directory is set, the directory should +// already exist. ++ (void)setLoggingDirectory:(NSString *)path; ++ (NSString *)loggingDirectory; + +// client apps can turn logging on and off ++ (void)setLoggingEnabled:(BOOL)flag; ++ (BOOL)isLoggingEnabled; + +// client apps can turn off logging to a file if they want to only check +// the fetcher's log property ++ (void)setLoggingToFileEnabled:(BOOL)flag; ++ (BOOL)isLoggingToFileEnabled; + +// client apps can optionally specify process name and date string used in +// log file names ++ (void)setLoggingProcessName:(NSString *)str; ++ (NSString *)loggingProcessName; + ++ (void)setLoggingDateStamp:(NSString *)str; ++ (NSString *)loggingDateStamp; + +// internal; called by fetcher +- (void)logFetchWithError:(NSError *)error; +- (BOOL)logCapturePostStream; +@end + +#endif diff --git a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherLogging.m b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherLogging.m new file mode 100644 index 00000000..2b959830 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherLogging.m @@ -0,0 +1,1042 @@ +/* Copyright (c) 2010 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if !STRIP_GTM_FETCH_LOGGING + +#include +#include + +#import "GTMHTTPFetcherLogging.h" + +// Sensitive credential strings are replaced in logs with _snip_ +// +// Apps that must see the contents of sensitive tokens can set this to 1 +#ifndef SKIP_GTM_FETCH_LOGGING_SNIPPING +#define SKIP_GTM_FETCH_LOGGING_SNIPPING 0 +#endif + +// If GTMReadMonitorInputStream is available, it can be used for +// capturing uploaded streams of data +// +// We locally declare methods of GTMReadMonitorInputStream so we +// do not need to import the header, as some projects may not have it available +@interface GTMReadMonitorInputStream : NSInputStream ++ (id)inputStreamWithStream:(NSInputStream *)input; +@property (assign) id readDelegate; +@property (assign) SEL readSelector; +@property (retain) NSArray *runLoopModes; +@end + +// If GTMNSJSONSerialization is available, it is used for formatting JSON +@interface GTMNSJSONSerialization : NSObject ++ (NSData *)dataWithJSONObject:(id)obj options:(NSUInteger)opt error:(NSError **)error; ++ (id)JSONObjectWithData:(NSData *)data options:(NSUInteger)opt error:(NSError **)error; +@end + +// Otherwise, if SBJSON is available, it is used for formatting JSON +@interface GTMFetcherSBJSON +- (void)setHumanReadable:(BOOL)flag; +- (NSString*)stringWithObject:(id)value error:(NSError**)error; +- (id)objectWithString:(NSString*)jsonrep error:(NSError**)error; +@end + +@interface GTMHTTPFetcher (GTMHTTPFetcherLoggingUtilities) ++ (NSString *)headersStringForDictionary:(NSDictionary *)dict; + +- (void)inputStream:(GTMReadMonitorInputStream *)stream + readIntoBuffer:(void *)buffer + length:(NSUInteger)length; + +// internal file utilities for logging ++ (BOOL)fileOrDirExistsAtPath:(NSString *)path; ++ (BOOL)makeDirectoryUpToPath:(NSString *)path; ++ (BOOL)removeItemAtPath:(NSString *)path; ++ (BOOL)createSymbolicLinkAtPath:(NSString *)newPath + withDestinationPath:(NSString *)targetPath; + ++ (NSString *)snipSubstringOfString:(NSString *)originalStr + betweenStartString:(NSString *)startStr + endString:(NSString *)endStr; + ++ (id)JSONObjectWithData:(NSData *)data; ++ (id)stringWithJSONObject:(id)obj; +@end + +@implementation GTMHTTPFetcher (GTMHTTPFetcherLogging) + +// fetchers come and fetchers go, but statics are forever +static BOOL gIsLoggingEnabled = NO; +static BOOL gIsLoggingToFile = YES; +static NSString *gLoggingDirectoryPath = nil; +static NSString *gLoggingDateStamp = nil; +static NSString* gLoggingProcessName = nil; + ++ (void)setLoggingDirectory:(NSString *)path { + [gLoggingDirectoryPath autorelease]; + gLoggingDirectoryPath = [path copy]; +} + ++ (NSString *)loggingDirectory { + + if (!gLoggingDirectoryPath) { + NSArray *arr = nil; +#if GTM_IPHONE && TARGET_IPHONE_SIMULATOR + // default to a directory called GTMHTTPDebugLogs into a sandbox-safe + // directory that a developer can find easily, the application home + arr = [NSArray arrayWithObject:NSHomeDirectory()]; +#elif GTM_IPHONE + // Neither ~/Desktop nor ~/Home is writable on an actual iPhone device. + // Put it in ~/Documents. + arr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, + NSUserDomainMask, YES); +#else + // default to a directory called GTMHTTPDebugLogs in the desktop folder + arr = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, + NSUserDomainMask, YES); +#endif + + if ([arr count] > 0) { + NSString *const kGTMLogFolderName = @"GTMHTTPDebugLogs"; + + NSString *desktopPath = [arr objectAtIndex:0]; + NSString *logsFolderPath = [desktopPath stringByAppendingPathComponent:kGTMLogFolderName]; + + BOOL doesFolderExist = [[self class] fileOrDirExistsAtPath:logsFolderPath]; + + if (!doesFolderExist) { + // make the directory + doesFolderExist = [self makeDirectoryUpToPath:logsFolderPath]; + } + + if (doesFolderExist) { + // it's there; store it in the global + gLoggingDirectoryPath = [logsFolderPath copy]; + } + } + } + return gLoggingDirectoryPath; +} + ++ (void)setLoggingEnabled:(BOOL)flag { + gIsLoggingEnabled = flag; +} + ++ (BOOL)isLoggingEnabled { + return gIsLoggingEnabled; +} + ++ (void)setLoggingToFileEnabled:(BOOL)flag { + gIsLoggingToFile = flag; +} + ++ (BOOL)isLoggingToFileEnabled { + return gIsLoggingToFile; +} + ++ (void)setLoggingProcessName:(NSString *)str { + [gLoggingProcessName release]; + gLoggingProcessName = [str copy]; +} + ++ (NSString *)loggingProcessName { + + // get the process name (once per run) replacing spaces with underscores + if (!gLoggingProcessName) { + + NSString *procName = [[NSProcessInfo processInfo] processName]; + NSMutableString *loggingProcessName; + loggingProcessName = [[NSMutableString alloc] initWithString:procName]; + + [loggingProcessName replaceOccurrencesOfString:@" " + withString:@"_" + options:0 + range:NSMakeRange(0, [gLoggingProcessName length])]; + gLoggingProcessName = loggingProcessName; + } + return gLoggingProcessName; +} + ++ (void)setLoggingDateStamp:(NSString *)str { + [gLoggingDateStamp release]; + gLoggingDateStamp = [str copy]; +} + ++ (NSString *)loggingDateStamp { + // we'll pick one date stamp per run, so a run that starts at a later second + // will get a unique results html file + if (!gLoggingDateStamp) { + // produce a string like 08-21_01-41-23PM + + NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; + [formatter setFormatterBehavior:NSDateFormatterBehavior10_4]; + [formatter setDateFormat:@"M-dd_hh-mm-ssa"]; + + gLoggingDateStamp = [[formatter stringFromDate:[NSDate date]] retain] ; + } + return gLoggingDateStamp; +} + +// formattedStringFromData returns a prettyprinted string for XML or JSON input, +// and a plain string for other input data +- (NSString *)formattedStringFromData:(NSData *)inputData + contentType:(NSString *)contentType + JSON:(NSDictionary **)outJSON { + if (inputData == nil) return nil; + + // if the content type is JSON and we have the parsing class available, + // use that + if ([contentType hasPrefix:@"application/json"] + && [inputData length] > 5) { + // convert from JSON string to NSObjects and back to a formatted string + NSMutableDictionary *obj = [[self class] JSONObjectWithData:inputData]; + if (obj) { + if (outJSON) *outJSON = obj; + if ([obj isKindOfClass:[NSMutableDictionary class]]) { + // for security and privacy, omit OAuth 2 response access and refresh + // tokens + if ([obj valueForKey:@"refresh_token"] != nil) { + [obj setObject:@"_snip_" forKey:@"refresh_token"]; + } + if ([obj valueForKey:@"access_token"] != nil) { + [obj setObject:@"_snip_" forKey:@"access_token"]; + } + } + NSString *formatted = [[self class] stringWithJSONObject:obj]; + if (formatted) return formatted; + } + } + +#if !GTM_FOUNDATION_ONLY && !GTM_SKIP_LOG_XMLFORMAT + // verify that this data starts with the bytes indicating XML + + NSString *const kXMLLintPath = @"/usr/bin/xmllint"; + static BOOL hasCheckedAvailability = NO; + static BOOL isXMLLintAvailable; + + if (!hasCheckedAvailability) { + isXMLLintAvailable = [[self class] fileOrDirExistsAtPath:kXMLLintPath]; + hasCheckedAvailability = YES; + } + + if (isXMLLintAvailable + && [inputData length] > 5 + && strncmp([inputData bytes], " 0) { + // success + inputData = formattedData; + } + } +#else + // we can't call external tasks on the iPhone; leave the XML unformatted +#endif + + NSString *dataStr = [[[NSString alloc] initWithData:inputData + encoding:NSUTF8StringEncoding] autorelease]; + return dataStr; +} + +- (void)setupStreamLogging { + // if logging is enabled, it needs a buffer to accumulate data from any + // NSInputStream used for uploading. Logging will wrap the input + // stream with a stream that lets us keep a copy the data being read. + if ([GTMHTTPFetcher isLoggingEnabled] + && loggedStreamData_ == nil + && postStream_ != nil) { + loggedStreamData_ = [[NSMutableData alloc] init]; + + BOOL didCapture = [self logCapturePostStream]; + if (!didCapture) { + // upload stream logging requires the class + // GTMReadMonitorInputStream be available + NSString const *str = @"<>"; + [loggedStreamData_ setData:[str dataUsingEncoding:NSUTF8StringEncoding]]; + } + } +} + +// stringFromStreamData creates a string given the supplied data +// +// If NSString can create a UTF-8 string from the data, then that is returned. +// +// Otherwise, this routine tries to find a MIME boundary at the beginning of +// the data block, and uses that to break up the data into parts. Each part +// will be used to try to make a UTF-8 string. For parts that fail, a +// replacement string showing the part header and <> is supplied +// in place of the binary data. + +- (NSString *)stringFromStreamData:(NSData *)data + contentType:(NSString *)contentType { + + if (data == nil) return nil; + + // optimistically, see if the whole data block is UTF-8 + NSString *streamDataStr = [self formattedStringFromData:data + contentType:contentType + JSON:NULL]; + if (streamDataStr) return streamDataStr; + + // Munge a buffer by replacing non-ASCII bytes with underscores, + // and turn that munged buffer an NSString. That gives us a string + // we can use with NSScanner. + NSMutableData *mutableData = [NSMutableData dataWithData:data]; + unsigned char *bytes = [mutableData mutableBytes]; + + for (unsigned int idx = 0; idx < [mutableData length]; idx++) { + if (bytes[idx] > 0x7F || bytes[idx] == 0) { + bytes[idx] = '_'; + } + } + + NSString *mungedStr = [[[NSString alloc] initWithData:mutableData + encoding:NSUTF8StringEncoding] autorelease]; + if (mungedStr != nil) { + + // scan for the boundary string + NSString *boundary = nil; + NSScanner *scanner = [NSScanner scannerWithString:mungedStr]; + + if ([scanner scanUpToString:@"\r\n" intoString:&boundary] + && [boundary hasPrefix:@"--"]) { + + // we found a boundary string; use it to divide the string into parts + NSArray *mungedParts = [mungedStr componentsSeparatedByString:boundary]; + + // look at each of the munged parts in the original string, and try to + // convert those into UTF-8 + NSMutableArray *origParts = [NSMutableArray array]; + NSUInteger offset = 0; + for (NSString *mungedPart in mungedParts) { + NSUInteger partSize = [mungedPart length]; + + NSRange range = NSMakeRange(offset, partSize); + NSData *origPartData = [data subdataWithRange:range]; + + NSString *origPartStr = [[[NSString alloc] initWithData:origPartData + encoding:NSUTF8StringEncoding] autorelease]; + if (origPartStr) { + // we could make this original part into UTF-8; use the string + [origParts addObject:origPartStr]; + } else { + // this part can't be made into UTF-8; scan the header, if we can + NSString *header = nil; + NSScanner *headerScanner = [NSScanner scannerWithString:mungedPart]; + if (![headerScanner scanUpToString:@"\r\n\r\n" intoString:&header]) { + // we couldn't find a header + header = @""; + } + + // make a part string with the header and <> + NSString *binStr = [NSString stringWithFormat:@"\r%@\r<<%lu bytes>>\r", + header, (long)(partSize - [header length])]; + [origParts addObject:binStr]; + } + offset += partSize + [boundary length]; + } + + // rejoin the original parts + streamDataStr = [origParts componentsJoinedByString:boundary]; + } + } + + if (!streamDataStr) { + // give up; just make a string showing the uploaded bytes + streamDataStr = [NSString stringWithFormat:@"<<%u bytes>>", + (unsigned int)[data length]]; + } + return streamDataStr; +} + +// logFetchWithError is called following a successful or failed fetch attempt +// +// This method does all the work for appending to and creating log files + +- (void)logFetchWithError:(NSError *)error { + + if (![[self class] isLoggingEnabled]) return; + + // TODO: (grobbins) add Javascript to display response data formatted in hex + + NSString *parentDir = [[self class] loggingDirectory]; + NSString *processName = [[self class] loggingProcessName]; + NSString *dateStamp = [[self class] loggingDateStamp]; + + // make a directory for this run's logs, like + // SyncProto_logs_10-16_01-56-58PM + NSString *dirName = [NSString stringWithFormat:@"%@_log_%@", + processName, dateStamp]; + NSString *logDirectory = [parentDir stringByAppendingPathComponent:dirName]; + + if (gIsLoggingToFile) { + // be sure that the first time this app runs, it's not writing to + // a preexisting folder + static BOOL shouldReuseFolder = NO; + if (!shouldReuseFolder) { + shouldReuseFolder = YES; + NSString *origLogDir = logDirectory; + for (int ctr = 2; ctr < 20; ctr++) { + if (![[self class] fileOrDirExistsAtPath:logDirectory]) break; + + // append a digit + logDirectory = [origLogDir stringByAppendingFormat:@"_%d", ctr]; + } + } + if (![[self class] makeDirectoryUpToPath:logDirectory]) return; + } + // each response's NSData goes into its own xml or txt file, though all + // responses for this run of the app share a main html file. This + // counter tracks all fetch responses for this run of the app. + // + // we'll use a local variable since this routine may be reentered while + // waiting for XML formatting to be completed by an external task + static int zResponseCounter = 0; + int responseCounter = ++zResponseCounter; + + // file name for an image data file + NSString *responseDataFileName = nil; + NSUInteger responseDataLength; + if (downloadFileHandle_) { + responseDataLength = (NSUInteger) [downloadFileHandle_ offsetInFile]; + } else { + responseDataLength = [downloadedData_ length]; + } + + NSURLResponse *response = [self response]; + NSDictionary *responseHeaders = [self responseHeaders]; + + NSString *responseBaseName = nil; + NSString *responseDataStr = nil; + NSDictionary *responseJSON = nil; + + // if there's response data, decide what kind of file to put it in based + // on the first bytes of the file or on the mime type supplied by the server + NSString *responseMIMEType = [response MIMEType]; + BOOL isResponseImage = NO; + NSData *dataToWrite = nil; + + if (responseDataLength > 0) { + NSString *responseDataExtn = nil; + + // generate a response file base name like + responseBaseName = [NSString stringWithFormat:@"fetch_%d_response", + responseCounter]; + + NSString *responseType = [responseHeaders valueForKey:@"Content-Type"]; + responseDataStr = [self formattedStringFromData:downloadedData_ + contentType:responseType + JSON:&responseJSON]; + if (responseDataStr) { + // we were able to make a UTF-8 string from the response data + if ([responseMIMEType isEqual:@"application/atom+xml"] + || [responseMIMEType hasSuffix:@"/xml"]) { + responseDataExtn = @"xml"; + dataToWrite = [responseDataStr dataUsingEncoding:NSUTF8StringEncoding]; + } + } else if ([responseMIMEType isEqual:@"image/jpeg"]) { + responseDataExtn = @"jpg"; + dataToWrite = downloadedData_; + isResponseImage = YES; + } else if ([responseMIMEType isEqual:@"image/gif"]) { + responseDataExtn = @"gif"; + dataToWrite = downloadedData_; + isResponseImage = YES; + } else if ([responseMIMEType isEqual:@"image/png"]) { + responseDataExtn = @"png"; + dataToWrite = downloadedData_; + isResponseImage = YES; + } else { + // add more non-text types here + } + + // if we have an extension, save the raw data in a file with that + // extension + if (responseDataExtn && dataToWrite) { + responseDataFileName = [responseBaseName stringByAppendingPathExtension:responseDataExtn]; + NSString *responseDataFilePath = [logDirectory stringByAppendingPathComponent:responseDataFileName]; + + NSError *downloadedError = nil; + if (gIsLoggingToFile + && ![dataToWrite writeToFile:responseDataFilePath + options:0 + error:&downloadedError]) { + NSLog(@"%@ logging write error:%@ (%@)", + [self class], downloadedError, responseDataFileName); + } + } + } + + // we'll have one main html file per run of the app + NSString *htmlName = @"aperçu_http_log.html"; + NSString *htmlPath =[logDirectory stringByAppendingPathComponent:htmlName]; + + // if the html file exists (from logging previous fetches) we don't need + // to re-write the header or the scripts + BOOL didFileExist = [[self class] fileOrDirExistsAtPath:htmlPath]; + + NSMutableString* outputHTML = [NSMutableString string]; + NSURLRequest *request = [self mutableRequest]; + + // we need a header to say we'll have UTF-8 text + if (!didFileExist) { + [outputHTML appendFormat:@"%@ HTTP fetch log %@", + processName, dateStamp]; + } + + // now write the visible html elements + NSString *copyableFileName = [NSString stringWithFormat:@"fetch_%d.txt", + responseCounter]; + + // write the date & time, the comment, and the link to the plain-text + // (copyable) log + NSString *dateLineFormat = @"%@      "; + [outputHTML appendFormat:dateLineFormat, [NSDate date]]; + + NSString *comment = [self comment]; + if (comment) { + NSString *commentFormat = @"%@      "; + [outputHTML appendFormat:commentFormat, comment]; + } + + NSString *reqRespFormat = @"request/response log
"; + [outputHTML appendFormat:reqRespFormat, copyableFileName]; + + // write the request URL + NSString *requestMethod = [request HTTPMethod]; + NSURL *requestURL = [request URL]; + [outputHTML appendFormat:@"request: %@ %@
\n", + requestMethod, requestURL]; + + // write the request headers + NSDictionary *requestHeaders = [request allHTTPHeaderFields]; + NSUInteger numberOfRequestHeaders = [requestHeaders count]; + if (numberOfRequestHeaders > 0) { + // Indicate if the request is authorized; warn if the request is + // authorized but non-SSL + NSString *auth = [requestHeaders objectForKey:@"Authorization"]; + NSString *headerDetails = @""; + if (auth) { + headerDetails = @"   authorized"; + BOOL isInsecure = [[requestURL scheme] isEqual:@"http"]; + if (isInsecure) { + headerDetails = @"   authorized, non-SSL" + " "; // 26A0 = âš  + } + } + NSString *cookiesHdr = [requestHeaders objectForKey:@"Cookie"]; + if (cookiesHdr) { + headerDetails = [headerDetails stringByAppendingString: + @"   cookies"]; + } + NSString *matchHdr = [requestHeaders objectForKey:@"If-Match"]; + if (matchHdr) { + headerDetails = [headerDetails stringByAppendingString: + @"   if-match"]; + } + matchHdr = [requestHeaders objectForKey:@"If-None-Match"]; + if (matchHdr) { + headerDetails = [headerDetails stringByAppendingString: + @"   if-none-match"]; + } + [outputHTML appendFormat:@"   headers: %d %@
", + (int)numberOfRequestHeaders, headerDetails]; + } else { + [outputHTML appendFormat:@"   headers: none
"]; + } + + // write the request post data, toggleable + NSData *postData; + if (loggedStreamData_) { + postData = loggedStreamData_; + } else if (postData_) { + postData = postData_; + } else { + postData = [request_ HTTPBody]; + } + + NSString *postDataStr = nil; + NSUInteger postDataLength = [postData length]; + NSString *postType = [requestHeaders valueForKey:@"Content-Type"]; + + if (postDataLength > 0) { + [outputHTML appendFormat:@"   data: %d bytes, %@
\n", + (int)postDataLength, postType ? postType : @""]; + + postDataStr = [self stringFromStreamData:postData + contentType:postType]; + if (postDataStr) { + // remove OAuth 2 client secret and refresh token + postDataStr = [[self class] snipSubstringOfString:postDataStr + betweenStartString:@"client_secret=" + endString:@"&"]; + + postDataStr = [[self class] snipSubstringOfString:postDataStr + betweenStartString:@"refresh_token=" + endString:@"&"]; + + // remove ClientLogin password + postDataStr = [[self class] snipSubstringOfString:postDataStr + betweenStartString:@"&Passwd=" + endString:@"&"]; + } + } else { + // no post data + } + + // write the response status, MIME type, URL + NSInteger status = [self statusCode]; + if (response) { + NSString *statusString = @""; + if (status != 0) { + if (status == 200 || status == 201) { + statusString = [NSString stringWithFormat:@"%ld", (long)status]; + + // report any JSON-RPC error + if ([responseJSON isKindOfClass:[NSDictionary class]]) { + NSDictionary *jsonError = [responseJSON objectForKey:@"error"]; + if ([jsonError isKindOfClass:[NSDictionary class]]) { + NSString *jsonCode = [[jsonError valueForKey:@"code"] description]; + NSString *jsonMessage = [jsonError valueForKey:@"message"]; + if (jsonCode || jsonMessage) { + NSString *jsonErrFmt = @"   JSON error: %@ %@  ⚑"; // 2691 = âš‘ + statusString = [statusString stringByAppendingFormat:jsonErrFmt, + jsonCode ? jsonCode : @"", + jsonMessage ? jsonMessage : @""]; + } + } + } + } else { + // purple for anything other than 200 or 201 + NSString *flag = (status >= 400 ? @" ⚑" : @""); // 2691 = âš‘ + NSString *statusFormat = @"%ld %@"; + statusString = [NSString stringWithFormat:statusFormat, + (long)status, flag]; + } + } + + // show the response URL only if it's different from the request URL + NSString *responseURLStr = @""; + NSURL *responseURL = [response URL]; + + if (responseURL && ![responseURL isEqual:[request URL]]) { + NSString *responseURLFormat = @"response URL:" + " %@
\n"; + responseURLStr = [NSString stringWithFormat:responseURLFormat, + [responseURL absoluteString]]; + } + + [outputHTML appendFormat:@"response:  status %@
\n%@", + statusString, responseURLStr]; + + // Write the response headers + NSUInteger numberOfResponseHeaders = [responseHeaders count]; + if (numberOfResponseHeaders > 0) { + // Indicate if the server is setting cookies + NSString *cookiesSet = [responseHeaders valueForKey:@"Set-Cookie"]; + NSString *cookiesStr = (cookiesSet ? @"  " + "sets cookies" : @""); + // Indicate if the server is redirecting + NSString *location = [responseHeaders valueForKey:@"Location"]; + BOOL isRedirect = (status >= 300 && status <= 399 && location != nil); + NSString *redirectsStr = (isRedirect ? @"  " + "redirects" : @""); + + [outputHTML appendFormat:@"   headers: %d %@ %@
\n", + (int)numberOfResponseHeaders, cookiesStr, redirectsStr]; + } else { + [outputHTML appendString:@"   headers: none
\n"]; + } + } + + // error + if (error) { + [outputHTML appendFormat:@"Error: %@
\n", [error description]]; + } + + // Write the response data + if (responseDataFileName) { + NSString *escapedResponseFile = [responseDataFileName stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + if (isResponseImage) { + // Make a small inline image that links to the full image file + [outputHTML appendFormat:@"   data: %d bytes, %@
", + (int)responseDataLength, responseMIMEType]; + NSString *fmt = @"image\n"; + [outputHTML appendFormat:fmt, + escapedResponseFile, escapedResponseFile]; + } else { + // The response data was XML; link to the xml file + NSString *fmt = @"   data: %d bytes, " + "%@   %@\n"; + [outputHTML appendFormat:fmt, + (int)responseDataLength, responseMIMEType, + escapedResponseFile, [escapedResponseFile pathExtension]]; + } + } else { + // The response data was not an image; just show the length and MIME type + [outputHTML appendFormat:@"   data: %d bytes, %@\n", + (int)responseDataLength, responseMIMEType]; + } + + // Make a single string of the request and response, suitable for copying + // to the clipboard and pasting into a bug report + NSMutableString *copyable = [NSMutableString string]; + if (comment) { + [copyable appendFormat:@"%@\n\n", comment]; + } + [copyable appendFormat:@"%@\n", [NSDate date]]; + [copyable appendFormat:@"Request: %@ %@\n", requestMethod, requestURL]; + if ([requestHeaders count] > 0) { + [copyable appendFormat:@"Request headers:\n%@\n", + [[self class] headersStringForDictionary:requestHeaders]]; + } + + if (postDataLength > 0) { + [copyable appendFormat:@"Request body: (%u bytes)\n", + (unsigned int) postDataLength]; + if (postDataStr) { + [copyable appendFormat:@"%@\n", postDataStr]; + } + [copyable appendString:@"\n"]; + } + + if (response) { + [copyable appendFormat:@"Response: status %d\n", (int) status]; + [copyable appendFormat:@"Response headers:\n%@\n", + [[self class] headersStringForDictionary:responseHeaders]]; + [copyable appendFormat:@"Response body: (%u bytes)\n", + (unsigned int) responseDataLength]; + if (responseDataLength > 0) { + if (responseDataStr != nil) { + [copyable appendFormat:@"%@\n", responseDataStr]; + } else if (status >= 400 && [temporaryDownloadPath_ length] > 0) { + // Try to read in the saved data, which is probably a server error + // message + NSStringEncoding enc; + responseDataStr = [NSString stringWithContentsOfFile:temporaryDownloadPath_ + usedEncoding:&enc + error:NULL]; + if ([responseDataStr length] > 0) { + [copyable appendFormat:@"%@\n", responseDataStr]; + } else { + [copyable appendFormat:@"<<%u bytes to file>>\n", + (unsigned int) responseDataLength]; + } + } else { + // Even though it's redundant, we'll put in text to indicate that all + // the bytes are binary + [copyable appendFormat:@"<<%u bytes>>\n", + (unsigned int) responseDataLength]; + } + } + } + + if (error) { + [copyable appendFormat:@"Error: %@\n", error]; + } + + // Save to log property before adding the separator + self.log = copyable; + + [copyable appendString:@"-----------------------------------------------------------\n"]; + + + // Write the copyable version to another file (linked to at the top of the + // html file, above) + // + // Ideally, something to just copy this to the clipboard like + // Copy here." + // would work everywhere, but it only works in Safari as of 8/2010 + if (gIsLoggingToFile) { + NSString *copyablePath = [logDirectory stringByAppendingPathComponent:copyableFileName]; + NSError *copyableError = nil; + if (![copyable writeToFile:copyablePath + atomically:NO + encoding:NSUTF8StringEncoding + error:©ableError]) { + // Error writing to file + NSLog(@"%@ logging write error:%@ (%@)", + [self class], copyableError, copyablePath); + } + + [outputHTML appendString:@"

"]; + + // Append the HTML to the main output file + const char* htmlBytes = [outputHTML UTF8String]; + NSOutputStream *stream = [NSOutputStream outputStreamToFileAtPath:htmlPath + append:YES]; + [stream open]; + [stream write:(const uint8_t *) htmlBytes maxLength:strlen(htmlBytes)]; + [stream close]; + + // Make a symlink to the latest html + NSString *symlinkName = [NSString stringWithFormat:@"%@_log_newest.html", + processName]; + NSString *symlinkPath = [parentDir stringByAppendingPathComponent:symlinkName]; + + [[self class] removeItemAtPath:symlinkPath]; + [[self class] createSymbolicLinkAtPath:symlinkPath + withDestinationPath:htmlPath]; + +#if GTM_IPHONE + static BOOL gReportedLoggingPath = NO; + if (!gReportedLoggingPath) { + gReportedLoggingPath = YES; + NSLog(@"GTMHTTPFetcher logging to \"%@\"", parentDir); + } +#endif + } +} + +- (BOOL)logCapturePostStream { + // This is called when beginning a fetch. The caller should have already + // verified that logging is enabled, and should have allocated + // loggedStreamData_ as a mutable object. + + // If the class GTMReadMonitorInputStream is not available, bail now, since + // we cannot capture this upload stream + Class monitorClass = NSClassFromString(@"GTMReadMonitorInputStream"); + if (!monitorClass) return NO; + + // If we're logging, we need to wrap the upload stream with our monitor + // stream that will call us back with the bytes being read from the stream + + // Our wrapper will retain the old post stream + [postStream_ autorelease]; + + postStream_ = [monitorClass inputStreamWithStream:postStream_]; + [postStream_ retain]; + + [(GTMReadMonitorInputStream *)postStream_ setReadDelegate:self]; + [(GTMReadMonitorInputStream *)postStream_ setRunLoopModes:[self runLoopModes]]; + + SEL readSel = @selector(inputStream:readIntoBuffer:length:); + [(GTMReadMonitorInputStream *)postStream_ setReadSelector:readSel]; + + return YES; +} + +@end + +@implementation GTMHTTPFetcher (GTMHTTPFetcherLoggingUtilities) + +- (void)inputStream:(GTMReadMonitorInputStream *)stream + readIntoBuffer:(void *)buffer + length:(NSUInteger)length { + // append the captured data + [loggedStreamData_ appendBytes:buffer length:length]; +} + +#pragma mark Internal file routines + +// We implement plain Unix versions of NSFileManager methods to avoid +// NSFileManager's issues with being used from multiple threads + ++ (BOOL)fileOrDirExistsAtPath:(NSString *)path { + struct stat buffer; + int result = stat([path fileSystemRepresentation], &buffer); + return (result == 0); +} + ++ (BOOL)makeDirectoryUpToPath:(NSString *)path { + int result = 0; + + // Recursively create the parent directory of the requested path + NSString *parent = [path stringByDeletingLastPathComponent]; + if (![self fileOrDirExistsAtPath:parent]) { + result = [self makeDirectoryUpToPath:parent]; + } + + // Make the leaf directory + if (result == 0 && ![self fileOrDirExistsAtPath:path]) { + result = mkdir([path fileSystemRepresentation], S_IRWXU); // RWX for owner + } + return (result == 0); +} + ++ (BOOL)removeItemAtPath:(NSString *)path { + int result = unlink([path fileSystemRepresentation]); + return (result == 0); +} + ++ (BOOL)createSymbolicLinkAtPath:(NSString *)newPath + withDestinationPath:(NSString *)targetPath { + int result = symlink([targetPath fileSystemRepresentation], + [newPath fileSystemRepresentation]); + return (result == 0); +} + +#pragma mark Fomatting Utilities + ++ (NSString *)snipSubstringOfString:(NSString *)originalStr + betweenStartString:(NSString *)startStr + endString:(NSString *)endStr { +#if SKIP_GTM_FETCH_LOGGING_SNIPPING + return originalStr; +#else + if (originalStr == nil) return nil; + + // Find the start string, and replace everything between it + // and the end string (or the end of the original string) with "_snip_" + NSRange startRange = [originalStr rangeOfString:startStr]; + if (startRange.location == NSNotFound) return originalStr; + + // We found the start string + NSUInteger originalLength = [originalStr length]; + NSUInteger startOfTarget = NSMaxRange(startRange); + NSRange targetAndRest = NSMakeRange(startOfTarget, + originalLength - startOfTarget); + NSRange endRange = [originalStr rangeOfString:endStr + options:0 + range:targetAndRest]; + NSRange replaceRange; + if (endRange.location == NSNotFound) { + // Found no end marker so replace to end of string + replaceRange = targetAndRest; + } else { + // Replace up to the endStr + replaceRange = NSMakeRange(startOfTarget, + endRange.location - startOfTarget); + } + + NSString *result = [originalStr stringByReplacingCharactersInRange:replaceRange + withString:@"_snip_"]; + return result; +#endif // SKIP_GTM_FETCH_LOGGING_SNIPPING +} + ++ (NSString *)headersStringForDictionary:(NSDictionary *)dict { + // Format the dictionary in http header style, like + // Accept: application/json + // Cache-Control: no-cache + // Content-Type: application/json; charset=utf-8 + // + // Pad the key names, but not beyond 16 chars, since long custom header + // keys just create too much whitespace + NSArray *keys = [[dict allKeys] sortedArrayUsingSelector:@selector(compare:)]; + + NSMutableString *str = [NSMutableString string]; + for (NSString *key in keys) { + NSString *value = [dict valueForKey:key]; + if ([key isEqual:@"Authorization"]) { + // Remove OAuth 1 token + value = [[self class] snipSubstringOfString:value + betweenStartString:@"oauth_token=\"" + endString:@"\""]; + + // Remove OAuth 2 bearer token (draft 16, and older form) + value = [[self class] snipSubstringOfString:value + betweenStartString:@"Bearer " + endString:@"\n"]; + value = [[self class] snipSubstringOfString:value + betweenStartString:@"OAuth " + endString:@"\n"]; + + // Remove Google ClientLogin + value = [[self class] snipSubstringOfString:value + betweenStartString:@"GoogleLogin auth=" + endString:@"\n"]; + } + [str appendFormat:@" %@: %@\n", key, value]; + } + return str; +} + ++ (id)JSONObjectWithData:(NSData *)data { + Class serializer = NSClassFromString(@"NSJSONSerialization"); + if (serializer) { + const NSUInteger kOpts = (1UL << 0); // NSJSONReadingMutableContainers + NSMutableDictionary *obj; + obj = [serializer JSONObjectWithData:data + options:kOpts + error:NULL]; + return obj; + } else { + // Try SBJsonParser or SBJSON + Class jsonParseClass = NSClassFromString(@"SBJsonParser"); + if (!jsonParseClass) { + jsonParseClass = NSClassFromString(@"SBJSON"); + } + if (jsonParseClass) { + GTMFetcherSBJSON *parser = [[[jsonParseClass alloc] init] autorelease]; + NSString *jsonStr = [[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding] autorelease]; + if (jsonStr) { + NSMutableDictionary *obj = [parser objectWithString:jsonStr error:NULL]; + return obj; + } + } + } + return nil; +} + ++ (id)stringWithJSONObject:(id)obj { + Class serializer = NSClassFromString(@"NSJSONSerialization"); + if (serializer) { + const NSUInteger kOpts = (1UL << 0); // NSJSONWritingPrettyPrinted + NSData *data; + data = [serializer dataWithJSONObject:obj + options:kOpts + error:NULL]; + if (data) { + NSString *jsonStr = [[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding] autorelease]; + return jsonStr; + } + } else { + // Try SBJsonParser or SBJSON + Class jsonWriterClass = NSClassFromString(@"SBJsonWriter"); + if (!jsonWriterClass) { + jsonWriterClass = NSClassFromString(@"SBJSON"); + } + if (jsonWriterClass) { + GTMFetcherSBJSON *writer = [[[jsonWriterClass alloc] init] autorelease]; + [writer setHumanReadable:YES]; + NSString *jsonStr = [writer stringWithObject:obj error:NULL]; + return jsonStr; + } + } + return nil; +} + +@end + +#endif // !STRIP_GTM_FETCH_LOGGING diff --git a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.h b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.h new file mode 100644 index 00000000..e3837933 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.h @@ -0,0 +1,118 @@ +/* Copyright (c) 2010 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTMHTTPFetcherService.h +// + +// The fetcher service class maintains a history to be used by a sequence +// of fetchers objects generated by the service. +// +// Fetchers that do not need to share a history may be generated independently, +// like +// +// GTMHTTPFetcher* myFetcher = [GTMHTTPFetcher fetcherWithRequest:request]; +// +// Fetchers that should share cookies or an ETagged data cache should be +// generated by a common GTMHTTPFetcherService instance, like +// +// GTMHTTPFetcherService *myFetcherService = [[GTMHTTPFetcherService alloc] init]; +// GTMHTTPFetcher* myFirstFetcher = [myFetcherService fetcherWithRequest:request1]; +// GTMHTTPFetcher* mySecondFetcher = [myFetcherService fetcherWithRequest:request2]; + +#import "GTMHTTPFetcher.h" +#import "GTMHTTPFetchHistory.h" + +@interface GTMHTTPFetcherService : NSObject { + @private + NSMutableDictionary *delayedHosts_; + NSMutableDictionary *runningHosts_; + NSUInteger maxRunningFetchersPerHost_; + + GTMHTTPFetchHistory *fetchHistory_; + NSArray *runLoopModes_; + NSString *userAgent_; + NSTimeInterval timeout_; + NSURLCredential *credential_; // username & password + NSURLCredential *proxyCredential_; // credential supplied to proxy servers + NSInteger cookieStorageMethod_; + + BOOL shouldFetchInBackground_; + + id authorizer_; +} + +// Create a fetcher +// +// These methods will return an autoreleased fetcher, but if +// the fetcher is successfully created, the connection will retain the +// fetcher for the life of the connection as well. So the caller doesn't have +// to retain the fetcher explicitly unless they want to be able to monitor +// or cancel it. +- (GTMHTTPFetcher *)fetcherWithRequest:(NSURLRequest *)request; +- (GTMHTTPFetcher *)fetcherWithURL:(NSURL *)requestURL; +- (GTMHTTPFetcher *)fetcherWithURLString:(NSString *)requestURLString; +- (id)fetcherWithRequest:(NSURLRequest *)request + fetcherClass:(Class)fetcherClass; + +// Queues of delayed and running fetchers. Each dictionary contains arrays +// of fetchers, keyed by host +// +// A max value of 0 means no fetchers should be delayed. +// +// The default limit is 10 simultaneous fetchers targeting each host. +@property (assign) NSUInteger maxRunningFetchersPerHost; +@property (retain, readonly) NSDictionary *delayedHosts; +@property (retain, readonly) NSDictionary *runningHosts; + +- (BOOL)isDelayingFetcher:(GTMHTTPFetcher *)fetcher; + +- (NSUInteger)numberOfFetchers; // running + delayed fetchers +- (NSUInteger)numberOfRunningFetchers; +- (NSUInteger)numberOfDelayedFetchers; + +- (void)stopAllFetchers; + +// Properties to be applied to each fetcher; +// see GTMHTTPFetcher.h for descriptions +@property (copy) NSString *userAgent; +@property (assign) NSTimeInterval timeout; +@property (retain) NSArray *runLoopModes; +@property (retain) NSURLCredential *credential; +@property (retain) NSURLCredential *proxyCredential; +@property (assign) BOOL shouldFetchInBackground; + +// Fetch history +@property (retain) GTMHTTPFetchHistory *fetchHistory; + +@property (assign) NSInteger cookieStorageMethod; +@property (assign) BOOL shouldRememberETags; // default: NO +@property (assign) BOOL shouldCacheETaggedData; // default: NO + +- (void)clearETaggedDataCache; +- (void)clearHistory; + +@property (nonatomic, retain) id authorizer; + +// Spin the run loop, discarding events, until all running and delayed fetchers +// have completed +// +// This is only for use in testing or in tools without a user interface. +// +// Synchronous fetches should never be done by shipping apps; they are +// sufficient reason for rejection from the app store. +- (void)waitForCompletionOfAllFetchersWithTimeout:(NSTimeInterval)timeoutInSeconds; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.m b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.m new file mode 100644 index 00000000..78c5f6f5 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.m @@ -0,0 +1,441 @@ +/* Copyright (c) 2010 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTMHTTPFetcherService.m +// + +#import "GTMHTTPFetcherService.h" + +@interface GTMHTTPFetcher (ServiceMethods) +- (BOOL)beginFetchMayDelay:(BOOL)mayDelay + mayAuthorize:(BOOL)mayAuthorize; +@end + +@interface GTMHTTPFetcherService () +@property (retain, readwrite) NSDictionary *delayedHosts; +@property (retain, readwrite) NSDictionary *runningHosts; + +- (void)detachAuthorizer; +@end + +@implementation GTMHTTPFetcherService + +@synthesize maxRunningFetchersPerHost = maxRunningFetchersPerHost_, + userAgent = userAgent_, + timeout = timeout_, + runLoopModes = runLoopModes_, + credential = credential_, + proxyCredential = proxyCredential_, + cookieStorageMethod = cookieStorageMethod_, + shouldFetchInBackground = shouldFetchInBackground_, + fetchHistory = fetchHistory_; + +- (id)init { + self = [super init]; + if (self) { + fetchHistory_ = [[GTMHTTPFetchHistory alloc] init]; + delayedHosts_ = [[NSMutableDictionary alloc] init]; + runningHosts_ = [[NSMutableDictionary alloc] init]; + cookieStorageMethod_ = kGTMHTTPFetcherCookieStorageMethodFetchHistory; + + maxRunningFetchersPerHost_ = 10; +} + return self; +} + +- (void)dealloc { + [self detachAuthorizer]; + + [delayedHosts_ release]; + [runningHosts_ release]; + [fetchHistory_ release]; + [userAgent_ release]; + [runLoopModes_ release]; + [credential_ release]; + [proxyCredential_ release]; + [authorizer_ release]; + + [super dealloc]; +} + +#pragma mark Generate a new fetcher + +- (id)fetcherWithRequest:(NSURLRequest *)request + fetcherClass:(Class)fetcherClass { + GTMHTTPFetcher *fetcher = [fetcherClass fetcherWithRequest:request]; + + fetcher.fetchHistory = self.fetchHistory; + fetcher.runLoopModes = self.runLoopModes; + fetcher.cookieStorageMethod = self.cookieStorageMethod; + fetcher.credential = self.credential; + fetcher.proxyCredential = self.proxyCredential; + fetcher.shouldFetchInBackground = self.shouldFetchInBackground; + fetcher.authorizer = self.authorizer; + fetcher.service = self; + + NSString *userAgent = self.userAgent; + if ([userAgent length] > 0 + && [request valueForHTTPHeaderField:@"User-Agent"] == nil) { + [fetcher.mutableRequest setValue:userAgent + forHTTPHeaderField:@"User-Agent"]; + } + + NSTimeInterval timeout = self.timeout; + if (timeout > 0.0) { + [fetcher.mutableRequest setTimeoutInterval:timeout]; + } + + return fetcher; +} + +- (GTMHTTPFetcher *)fetcherWithRequest:(NSURLRequest *)request { + return [self fetcherWithRequest:request + fetcherClass:[GTMHTTPFetcher class]]; +} + +- (GTMHTTPFetcher *)fetcherWithURL:(NSURL *)requestURL { + return [self fetcherWithRequest:[NSURLRequest requestWithURL:requestURL]]; +} + +- (GTMHTTPFetcher *)fetcherWithURLString:(NSString *)requestURLString { + return [self fetcherWithURL:[NSURL URLWithString:requestURLString]]; +} + +#pragma mark Queue Management + +- (void)addRunningFetcher:(GTMHTTPFetcher *)fetcher + forHost:(NSString *)host { + // Add to the array of running fetchers for this host, creating the array + // if needed + NSMutableArray *runningForHost = [runningHosts_ objectForKey:host]; + if (runningForHost == nil) { + runningForHost = [NSMutableArray arrayWithObject:fetcher]; + [runningHosts_ setObject:runningForHost forKey:host]; + } else { + [runningForHost addObject:fetcher]; + } +} + +- (void)addDelayedFetcher:(GTMHTTPFetcher *)fetcher + forHost:(NSString *)host { + // Add to the array of delayed fetchers for this host, creating the array + // if needed + NSMutableArray *delayedForHost = [delayedHosts_ objectForKey:host]; + if (delayedForHost == nil) { + delayedForHost = [NSMutableArray arrayWithObject:fetcher]; + [delayedHosts_ setObject:delayedForHost forKey:host]; + } else { + [delayedForHost addObject:fetcher]; + } +} + +- (BOOL)isDelayingFetcher:(GTMHTTPFetcher *)fetcher { + BOOL isDelayed; + @synchronized(self) { + NSString *host = [[[fetcher mutableRequest] URL] host]; + NSArray *delayedForHost = [delayedHosts_ objectForKey:host]; + NSUInteger idx = [delayedForHost indexOfObjectIdenticalTo:fetcher]; + isDelayed = (delayedForHost != nil) && (idx != NSNotFound); + } + return isDelayed; +} + +- (BOOL)fetcherShouldBeginFetching:(GTMHTTPFetcher *)fetcher { + // Entry point from the fetcher + @synchronized(self) { + NSString *host = [[[fetcher mutableRequest] URL] host]; + + if ([host length] == 0) { +#if DEBUG + NSAssert1(0, @"%@ lacks host", fetcher); +#endif + return YES; + } + + NSMutableArray *runningForHost = [runningHosts_ objectForKey:host]; + if (runningForHost != nil + && [runningForHost indexOfObjectIdenticalTo:fetcher] != NSNotFound) { +#if DEBUG + NSAssert1(0, @"%@ was already running", fetcher); +#endif + return YES; + } + + // We'll save the host that serves as the key for this fetcher's array + // to avoid any chance of the underlying request changing, stranding + // the fetcher in the wrong array + fetcher.serviceHost = host; + fetcher.thread = [NSThread currentThread]; + + if (maxRunningFetchersPerHost_ == 0 + || maxRunningFetchersPerHost_ > [runningForHost count]) { + [self addRunningFetcher:fetcher forHost:host]; + return YES; + } else { + [self addDelayedFetcher:fetcher forHost:host]; + return NO; + } + } + return YES; +} + +// Fetcher start and stop methods, invoked on the appropriate thread for +// the fetcher +- (void)startFetcherOnCurrentThread:(GTMHTTPFetcher *)fetcher { + [fetcher beginFetchMayDelay:NO + mayAuthorize:YES]; +} + +- (void)startFetcher:(GTMHTTPFetcher *)fetcher { + NSThread *thread = [fetcher thread]; + if ([thread isEqual:[NSThread currentThread]]) { + // Same thread + [self startFetcherOnCurrentThread:fetcher]; + } else { + // Different thread + [self performSelector:@selector(startFetcherOnCurrentThread:) + onThread:thread + withObject:fetcher + waitUntilDone:NO]; + } +} + +- (void)stopFetcherOnCurrentThread:(GTMHTTPFetcher *)fetcher { + [fetcher stopFetching]; +} + +- (void)stopFetcher:(GTMHTTPFetcher *)fetcher { + NSThread *thread = [fetcher thread]; + if ([thread isEqual:[NSThread currentThread]]) { + // Same thread + [self stopFetcherOnCurrentThread:fetcher]; + } else { + // Different thread + [self performSelector:@selector(stopFetcherOnCurrentThread:) + onThread:thread + withObject:fetcher + waitUntilDone:NO]; + } +} + +- (void)fetcherDidStop:(GTMHTTPFetcher *)fetcher { + // Entry point from the fetcher + @synchronized(self) { + NSString *host = fetcher.serviceHost; + if (!host) { + // fetcher has been stopped previously + return; + } + + NSMutableArray *runningForHost = [runningHosts_ objectForKey:host]; + [runningForHost removeObject:fetcher]; + + NSMutableArray *delayedForHost = [delayedHosts_ objectForKey:host]; + [delayedForHost removeObject:fetcher]; + + while ([delayedForHost count] > 0 + && [runningForHost count] < maxRunningFetchersPerHost_) { + // Start another delayed fetcher running, scanning for the minimum + // priority value, defaulting to FIFO for equal priorities + GTMHTTPFetcher *nextFetcher = nil; + for (GTMHTTPFetcher *delayedFetcher in delayedForHost) { + if (nextFetcher == nil + || delayedFetcher.servicePriority < nextFetcher.servicePriority) { + nextFetcher = delayedFetcher; + } + } + + [self addRunningFetcher:nextFetcher forHost:host]; + runningForHost = [runningHosts_ objectForKey:host]; + + [delayedForHost removeObjectIdenticalTo:nextFetcher]; + [self startFetcher:nextFetcher]; + } + + if ([runningForHost count] == 0) { + // None left; remove the empty array + [runningHosts_ removeObjectForKey:host]; + } + + if ([delayedForHost count] == 0) { + [delayedHosts_ removeObjectForKey:host]; + } + + // The fetcher is no longer in the running or the delayed array, + // so remove its host and thread properties + fetcher.serviceHost = nil; + fetcher.thread = nil; + } +} + +- (NSUInteger)numberOfFetchers { + NSUInteger running = [self numberOfRunningFetchers]; + NSUInteger delayed = [self numberOfDelayedFetchers]; + return running + delayed; +} + +- (NSUInteger)numberOfRunningFetchers { + NSUInteger sum = 0; + for (NSString *host in runningHosts_) { + NSArray *fetchers = [runningHosts_ objectForKey:host]; + sum += [fetchers count]; + } + return sum; +} + +- (NSUInteger)numberOfDelayedFetchers { + NSUInteger sum = 0; + for (NSString *host in delayedHosts_) { + NSArray *fetchers = [delayedHosts_ objectForKey:host]; + sum += [fetchers count]; + } + return sum; +} + +- (void)stopAllFetchers { + // Remove fetchers from the delayed list to avoid fetcherDidStop: from + // starting more fetchers running as a side effect of stopping one + NSArray *delayedForHosts = [delayedHosts_ allValues]; + [delayedHosts_ removeAllObjects]; + + for (NSArray *delayedForHost in delayedForHosts) { + for (GTMHTTPFetcher *fetcher in delayedForHost) { + [self stopFetcher:fetcher]; + } + } + + NSArray *runningForHosts = [runningHosts_ allValues]; + [runningHosts_ removeAllObjects]; + + for (NSArray *runningForHost in runningForHosts) { + for (GTMHTTPFetcher *fetcher in runningForHost) { + [self stopFetcher:fetcher]; + } + } +} + +#pragma mark Fetch History Settings + +// Turn on data caching to receive a copy of previously-retrieved objects. +// Otherwise, fetches may return status 304 (No Change) rather than actual data +- (void)setShouldCacheETaggedData:(BOOL)flag { + self.fetchHistory.shouldCacheETaggedData = flag; +} + +- (BOOL)shouldCacheETaggedData { + return self.fetchHistory.shouldCacheETaggedData; +} + +- (void)setETaggedDataCacheCapacity:(NSUInteger)totalBytes { + self.fetchHistory.memoryCapacity = totalBytes; +} + +- (NSUInteger)ETaggedDataCacheCapacity { + return self.fetchHistory.memoryCapacity; +} + +- (void)setShouldRememberETags:(BOOL)flag { + self.fetchHistory.shouldRememberETags = flag; +} + +- (BOOL)shouldRememberETags { + return self.fetchHistory.shouldRememberETags; +} + +// reset the ETag cache to avoid getting a Not Modified status +// based on prior queries +- (void)clearETaggedDataCache { + [self.fetchHistory clearETaggedDataCache]; +} + +- (void)clearHistory { + [self clearETaggedDataCache]; + [self.fetchHistory removeAllCookies]; +} + +#pragma mark Synchronous Wait for Unit Testing + +- (void)waitForCompletionOfAllFetchersWithTimeout:(NSTimeInterval)timeoutInSeconds { + NSDate* giveUpDate = [NSDate dateWithTimeIntervalSinceNow:timeoutInSeconds]; + + while ([self numberOfFetchers] > 0 + && [giveUpDate timeIntervalSinceNow] > 0) { + // Run the current run loop 1/1000 of a second to give the networking + // code a chance to work + NSDate *stopDate = [NSDate dateWithTimeIntervalSinceNow:0.001]; + [[NSRunLoop currentRunLoop] runUntilDate:stopDate]; + } +} + +#pragma mark Accessors + +- (NSDictionary *)runningHosts { + return runningHosts_; +} + +- (void)setRunningHosts:(NSDictionary *)dict { + [runningHosts_ autorelease]; + runningHosts_ = [dict mutableCopy]; +} + +- (NSDictionary *)delayedHosts { + return delayedHosts_; +} + +- (void)setDelayedHosts:(NSDictionary *)dict { + [delayedHosts_ autorelease]; + delayedHosts_ = [dict mutableCopy]; +} + +- (id )authorizer { + return authorizer_; +} + +- (void)setAuthorizer:(id )obj { + if (obj != authorizer_) { + [self detachAuthorizer]; + } + + [authorizer_ autorelease]; + authorizer_ = [obj retain]; + + // Use the fetcher service for the authorization fetches if the auth + // object supports fetcher services + if ([authorizer_ respondsToSelector:@selector(setFetcherService:)]) { + [authorizer_ setFetcherService:self]; + } +} + +- (void)detachAuthorizer { + // This method is called by the fetcher service's dealloc and setAuthorizer: + // methods; do not override. + // + // The fetcher service retains the authorizer, and the authorizer has a + // weak pointer to the fetcher service (a non-zeroing pointer for + // compatibility with iOS 4 and Mac OS X 10.5/10.6.) + // + // When this fetcher service no longer uses the authorizer, we want to remove + // the authorizer's dependence on the fetcher service. Authorizers can still + // function without a fetcher service. + if ([authorizer_ respondsToSelector:@selector(fetcherService)]) { + GTMHTTPFetcherService *authFS = [authorizer_ fetcherService]; + if (authFS == self) { + [authorizer_ setFetcherService:nil]; + } + } +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTMLogger.h b/External/google-plus-ios-sdk/OpenSource/GTMLogger.h new file mode 100644 index 00000000..c4fd1402 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMLogger.h @@ -0,0 +1,504 @@ +// +// GTMLogger.h +// +// Copyright 2007-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +// Key Abstractions +// ---------------- +// +// This file declares multiple classes and protocols that are used by the +// GTMLogger logging system. The 4 main abstractions used in this file are the +// following: +// +// * logger (GTMLogger) - The main logging class that users interact with. It +// has methods for logging at different levels and uses a log writer, a log +// formatter, and a log filter to get the job done. +// +// * log writer (GTMLogWriter) - Writes a given string to some log file, where +// a "log file" can be a physical file on disk, a POST over HTTP to some URL, +// or even some in-memory structure (e.g., a ring buffer). +// +// * log formatter (GTMLogFormatter) - Given a format string and arguments as +// a va_list, returns a single formatted NSString. A "formatted string" could +// be a string with the date prepended, a string with values in a CSV format, +// or even a string of XML. +// +// * log filter (GTMLogFilter) - Given a formatted log message as an NSString +// and the level at which the message is to be logged, this class will decide +// whether the given message should be logged or not. This is a flexible way +// to filter out messages logged at a certain level, messages that contain +// certain text, or filter nothing out at all. This gives the caller the +// flexibility to dynamically enable debug logging in Release builds. +// +// This file also declares some classes to handle the common log writer, log +// formatter, and log filter cases. Callers can also create their own writers, +// formatters, and filters and they can even build them on top of the ones +// declared here. Keep in mind that your custom writer/formatter/filter may be +// called from multiple threads, so it must be thread-safe. + +#import +#import "GTMDefines.h" + +// Predeclaration of used protocols that are declared later in this file. +@protocol GTMLogWriter, GTMLogFormatter, GTMLogFilter; + +// GTMLogger +// +// GTMLogger is the primary user-facing class for an object-oriented logging +// system. It is built on the concept of log formatters (GTMLogFormatter), log +// writers (GTMLogWriter), and log filters (GTMLogFilter). When a message is +// sent to a GTMLogger to log a message, the message is formatted using the log +// formatter, then the log filter is consulted to see if the message should be +// logged, and if so, the message is sent to the log writer to be written out. +// +// GTMLogger is intended to be a flexible and thread-safe logging solution. Its +// flexibility comes from the fact that GTMLogger instances can be customized +// with user defined formatters, filters, and writers. And these writers, +// filters, and formatters can be combined, stacked, and customized in arbitrary +// ways to suit the needs at hand. For example, multiple writers can be used at +// the same time, and a GTMLogger instance can even be used as another +// GTMLogger's writer. This allows for arbitrarily deep logging trees. +// +// A standard GTMLogger uses a writer that sends messages to standard out, a +// formatter that smacks a timestamp and a few other bits of interesting +// information on the message, and a filter that filters out debug messages from +// release builds. Using the standard log settings, a log message will look like +// the following: +// +// 2007-12-30 10:29:24.177 myapp[4588/0xa07d0f60] [lvl=1] foo= +// +// The output contains the date and time of the log message, the name of the +// process followed by its process ID/thread ID, the log level at which the +// message was logged (in the previous example the level was 1: +// kGTMLoggerLevelDebug), and finally, the user-specified log message itself (in +// this case, the log message was @"foo=%@", foo). +// +// Multiple instances of GTMLogger can be created, each configured their own +// way. Though GTMLogger is not a singleton (in the GoF sense), it does provide +// access to a shared (i.e., globally accessible) GTMLogger instance. This makes +// it convenient for all code in a process to use the same GTMLogger instance. +// The shared GTMLogger instance can also be configured in an arbitrary, and +// these configuration changes will affect all code that logs through the shared +// instance. + +// +// Log Levels +// ---------- +// GTMLogger has 3 different log levels: Debug, Info, and Error. GTMLogger +// doesn't take any special action based on the log level; it simply forwards +// this information on to formatters, filters, and writers, each of which may +// optionally take action based on the level. Since log level filtering is +// performed at runtime, log messages are typically not filtered out at compile +// time. The exception to this rule is that calls to the GTMLoggerDebug() macro +// *ARE* filtered out of non-DEBUG builds. This is to be backwards compatible +// with behavior that many developers are currently used to. Note that this +// means that GTMLoggerDebug(@"hi") will be compiled out of Release builds, but +// [[GTMLogger sharedLogger] logDebug:@"hi"] will NOT be compiled out. +// +// Standard loggers are created with the GTMLogLevelFilter log filter, which +// filters out certain log messages based on log level, and some other settings. +// +// In addition to the -logDebug:, -logInfo:, and -logError: methods defined on +// GTMLogger itself, there are also C macros that make usage of the shared +// GTMLogger instance very convenient. These macros are: +// +// GTMLoggerDebug(...) +// GTMLoggerInfo(...) +// GTMLoggerError(...) +// +// Again, a notable feature of these macros is that GTMLogDebug() calls *will be +// compiled out of non-DEBUG builds*. +// +// Standard Loggers +// ---------------- +// GTMLogger has the concept of "standard loggers". A standard logger is simply +// a logger that is pre-configured with some standard/common writer, formatter, +// and filter combination. Standard loggers are created using the creation +// methods beginning with "standard". The alternative to a standard logger is a +// regular logger, which will send messages to stdout, with no special +// formatting, and no filtering. +// +// How do I use GTMLogger? +// ---------------------- +// The typical way you will want to use GTMLogger is to simply use the +// GTMLogger*() macros for logging from code. That way we can easily make +// changes to the GTMLogger class and simply update the macros accordingly. Only +// your application startup code (perhaps, somewhere in main()) should use the +// GTMLogger class directly in order to configure the shared logger, which all +// of the code using the macros will be using. Again, this is just the typical +// situation. +// +// To be complete, there are cases where you may want to use GTMLogger directly, +// or even create separate GTMLogger instances for some reason. That's fine, +// too. +// +// Examples +// -------- +// The following show some common GTMLogger use cases. +// +// 1. You want to log something as simply as possible. Also, this call will only +// appear in debug builds. In non-DEBUG builds it will be completely removed. +// +// GTMLoggerDebug(@"foo = %@", foo); +// +// 2. The previous example is similar to the following. The major difference is +// that the previous call (example 1) will be compiled out of Release builds +// but this statement will not be compiled out. +// +// [[GTMLogger sharedLogger] logDebug:@"foo = %@", foo]; +// +// 3. Send all logging output from the shared logger to a file. We do this by +// creating an NSFileHandle for writing associated with a file, and setting +// that file handle as the logger's writer. +// +// NSFileHandle *f = [NSFileHandle fileHandleForWritingAtPath:@"/tmp/f.log" +// create:YES]; +// [[GTMLogger sharedLogger] setWriter:f]; +// GTMLoggerError(@"hi"); // This will be sent to /tmp/f.log +// +// 4. Create a new GTMLogger that will log to a file. This example differs from +// the previous one because here we create a new GTMLogger that is different +// from the shared logger. +// +// GTMLogger *logger = [GTMLogger standardLoggerWithPath:@"/tmp/temp.log"]; +// [logger logInfo:@"hi temp log file"]; +// +// 5. Create a logger that writes to stdout and does NOT do any formatting to +// the log message. This might be useful, for example, when writing a help +// screen for a command-line tool to standard output. +// +// GTMLogger *logger = [GTMLogger logger]; +// [logger logInfo:@"%@ version 0.1 usage", progName]; +// +// 6. Send log output to stdout AND to a log file. The trick here is that +// NSArrays function as composite log writers, which means when an array is +// set as the log writer, it forwards all logging messages to all of its +// contained GTMLogWriters. +// +// // Create array of GTMLogWriters +// NSArray *writers = [NSArray arrayWithObjects: +// [NSFileHandle fileHandleForWritingAtPath:@"/tmp/f.log" create:YES], +// [NSFileHandle fileHandleWithStandardOutput], nil]; +// +// GTMLogger *logger = [GTMLogger standardLogger]; +// [logger setWriter:writers]; +// [logger logInfo:@"hi"]; // Output goes to stdout and /tmp/f.log +// +// For futher details on log writers, formatters, and filters, see the +// documentation below. +// +// NOTE: GTMLogger is application level logging. By default it does nothing +// with _GTMDevLog/_GTMDevAssert (see GTMDefines.h). An application can choose +// to bridge _GTMDevLog/_GTMDevAssert to GTMLogger by providing macro +// definitions in its prefix header (see GTMDefines.h for how one would do +// that). +// +@interface GTMLogger : NSObject { + @private + id writer_; + id formatter_; + id filter_; +} + +// +// Accessors for the shared logger instance +// + +// Returns a shared/global standard GTMLogger instance. Callers should typically +// use this method to get a GTMLogger instance, unless they explicitly want +// their own instance to configure for their own needs. This is the only method +// that returns a shared instance; all the rest return new GTMLogger instances. ++ (id)sharedLogger; + +// Sets the shared logger instance to |logger|. Future calls to +sharedLogger +// will return |logger| instead. ++ (void)setSharedLogger:(GTMLogger *)logger; + +// +// Creation methods +// + +// Returns a new autoreleased GTMLogger instance that will log to stdout, using +// the GTMLogStandardFormatter, and the GTMLogLevelFilter filter. ++ (id)standardLogger; + +// Same as +standardLogger, but logs to stderr. ++ (id)standardLoggerWithStderr; + +// Same as +standardLogger but levels >= kGTMLoggerLevelError are routed to +// stderr, everything else goes to stdout. ++ (id)standardLoggerWithStdoutAndStderr; + +// Returns a new standard GTMLogger instance with a log writer that will +// write to the file at |path|, and will use the GTMLogStandardFormatter and +// GTMLogLevelFilter classes. If |path| does not exist, it will be created. ++ (id)standardLoggerWithPath:(NSString *)path; + +// Returns an autoreleased GTMLogger instance that will use the specified +// |writer|, |formatter|, and |filter|. ++ (id)loggerWithWriter:(id)writer + formatter:(id)formatter + filter:(id)filter; + +// Returns an autoreleased GTMLogger instance that logs to stdout, with the +// basic formatter, and no filter. The returned logger differs from the logger +// returned by +standardLogger because this one does not do any filtering and +// does not do any special log formatting; this is the difference between a +// "regular" logger and a "standard" logger. ++ (id)logger; + +// Designated initializer. This method returns a GTMLogger initialized with the +// specified |writer|, |formatter|, and |filter|. See the setter methods below +// for what values will be used if nil is passed for a parameter. +- (id)initWithWriter:(id)writer + formatter:(id)formatter + filter:(id)filter; + +// +// Logging methods +// + +// Logs a message at the debug level (kGTMLoggerLevelDebug). +- (void)logDebug:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); +// Logs a message at the info level (kGTMLoggerLevelInfo). +- (void)logInfo:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); +// Logs a message at the error level (kGTMLoggerLevelError). +- (void)logError:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); +// Logs a message at the assert level (kGTMLoggerLevelAssert). +- (void)logAssert:(NSString *)fmt, ... NS_FORMAT_FUNCTION(1, 2); + + +// +// Accessors +// + +// Accessor methods for the log writer. If the log writer is set to nil, +// [NSFileHandle fileHandleWithStandardOutput] is used. +- (id)writer; +- (void)setWriter:(id)writer; + +// Accessor methods for the log formatter. If the log formatter is set to nil, +// GTMLogBasicFormatter is used. This formatter will format log messages in a +// plain printf style. +- (id)formatter; +- (void)setFormatter:(id)formatter; + +// Accessor methods for the log filter. If the log filter is set to nil, +// GTMLogNoFilter is used, which allows all log messages through. +- (id)filter; +- (void)setFilter:(id)filter; + +@end // GTMLogger + + +// Helper functions that are used by the convenience GTMLogger*() macros that +// enable the logging of function names. +@interface GTMLogger (GTMLoggerMacroHelpers) +- (void)logFuncDebug:(const char *)func msg:(NSString *)fmt, ... + NS_FORMAT_FUNCTION(2, 3); +- (void)logFuncInfo:(const char *)func msg:(NSString *)fmt, ... + NS_FORMAT_FUNCTION(2, 3); +- (void)logFuncError:(const char *)func msg:(NSString *)fmt, ... + NS_FORMAT_FUNCTION(2, 3); +- (void)logFuncAssert:(const char *)func msg:(NSString *)fmt, ... + NS_FORMAT_FUNCTION(2, 3); +@end // GTMLoggerMacroHelpers + + +// The convenience macros are only defined if they haven't already been defined. +#ifndef GTMLoggerInfo + +// Convenience macros that log to the shared GTMLogger instance. These macros +// are how users should typically log to GTMLogger. Notice that GTMLoggerDebug() +// calls will be compiled out of non-Debug builds. +#define GTMLoggerDebug(...) \ + [[GTMLogger sharedLogger] logFuncDebug:__func__ msg:__VA_ARGS__] +#define GTMLoggerInfo(...) \ + [[GTMLogger sharedLogger] logFuncInfo:__func__ msg:__VA_ARGS__] +#define GTMLoggerError(...) \ + [[GTMLogger sharedLogger] logFuncError:__func__ msg:__VA_ARGS__] +#define GTMLoggerAssert(...) \ + [[GTMLogger sharedLogger] logFuncAssert:__func__ msg:__VA_ARGS__] + +// If we're not in a debug build, remove the GTMLoggerDebug statements. This +// makes calls to GTMLoggerDebug "compile out" of Release builds +#ifndef DEBUG +#undef GTMLoggerDebug +#define GTMLoggerDebug(...) do {} while(0) +#endif + +#endif // !defined(GTMLoggerInfo) + +// Log levels. +typedef enum { + kGTMLoggerLevelUnknown, + kGTMLoggerLevelDebug, + kGTMLoggerLevelInfo, + kGTMLoggerLevelError, + kGTMLoggerLevelAssert, +} GTMLoggerLevel; + + +// +// Log Writers +// + +// Protocol to be implemented by a GTMLogWriter instance. +@protocol GTMLogWriter +// Writes the given log message to where the log writer is configured to write. +- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level; +@end // GTMLogWriter + + +// Simple category on NSFileHandle that makes NSFileHandles valid log writers. +// This is convenient because something like, say, +fileHandleWithStandardError +// now becomes a valid log writer. Log messages are written to the file handle +// with a newline appended. +@interface NSFileHandle (GTMFileHandleLogWriter) +// Opens the file at |path| in append mode, and creates the file with |mode| +// if it didn't previously exist. ++ (id)fileHandleForLoggingAtPath:(NSString *)path mode:(mode_t)mode; +@end // NSFileHandle + + +// This category makes NSArray a GTMLogWriter that can be composed of other +// GTMLogWriters. This is the classic Composite GoF design pattern. When the +// GTMLogWriter -logMessage:level: message is sent to the array, the array +// forwards the message to all of its elements that implement the GTMLogWriter +// protocol. +// +// This is useful in situations where you would like to send log output to +// multiple log writers at the same time. Simply create an NSArray of the log +// writers you wish to use, then set the array as the "writer" for your +// GTMLogger instance. +@interface NSArray (GTMArrayCompositeLogWriter) +@end // GTMArrayCompositeLogWriter + + +// This category adapts the GTMLogger interface so that it can be used as a log +// writer; it's an "adapter" in the GoF Adapter pattern sense. +// +// This is useful when you want to configure a logger to log to a specific +// writer with a specific formatter and/or filter. But you want to also compose +// that with a different log writer that may have its own formatter and/or +// filter. +@interface GTMLogger (GTMLoggerLogWriter) +@end // GTMLoggerLogWriter + + +// +// Log Formatters +// + +// Protocol to be implemented by a GTMLogFormatter instance. +@protocol GTMLogFormatter +// Returns a formatted string using the format specified in |fmt| and the va +// args specified in |args|. +- (NSString *)stringForFunc:(NSString *)func + withFormat:(NSString *)fmt + valist:(va_list)args + level:(GTMLoggerLevel)level NS_FORMAT_FUNCTION(2, 0); +@end // GTMLogFormatter + + +// A basic log formatter that formats a string the same way that NSLog (or +// printf) would. It does not do anything fancy, nor does it add any data of its +// own. +@interface GTMLogBasicFormatter : NSObject + +// Helper method for prettying C99 __func__ and GCC __PRETTY_FUNCTION__ +- (NSString *)prettyNameForFunc:(NSString *)func; + +@end // GTMLogBasicFormatter + + +// A log formatter that formats the log string like the basic formatter, but +// also prepends a timestamp and some basic process info to the message, as +// shown in the following sample output. +// 2007-12-30 10:29:24.177 myapp[4588/0xa07d0f60] [lvl=1] log mesage here +@interface GTMLogStandardFormatter : GTMLogBasicFormatter { + @private + NSDateFormatter *dateFormatter_; // yyyy-MM-dd HH:mm:ss.SSS + NSString *pname_; + pid_t pid_; +} +@end // GTMLogStandardFormatter + + +// +// Log Filters +// + +// Protocol to be imlemented by a GTMLogFilter instance. +@protocol GTMLogFilter +// Returns YES if |msg| at |level| should be filtered out; NO otherwise. +- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level; +@end // GTMLogFilter + + +// A log filter that filters messages at the kGTMLoggerLevelDebug level out of +// non-debug builds. Messages at the kGTMLoggerLevelInfo level are also filtered +// out of non-debug builds unless GTMVerboseLogging is set in the environment or +// the processes's defaults. Messages at the kGTMLoggerLevelError level are +// never filtered. +@interface GTMLogLevelFilter : NSObject +@end // GTMLogLevelFilter + +// A simple log filter that does NOT filter anything out; +// -filterAllowsMessage:level will always return YES. This can be a convenient +// way to enable debug-level logging in release builds (if you so desire). +@interface GTMLogNoFilter : NSObject +@end // GTMLogNoFilter + + +// Base class for custom level filters. Not for direct use, use the minimum +// or maximum level subclasses below. +@interface GTMLogAllowedLevelFilter : NSObject { + @private + NSIndexSet *allowedLevels_; +} +@end + +// A log filter that allows you to set a minimum log level. Messages below this +// level will be filtered. +@interface GTMLogMininumLevelFilter : GTMLogAllowedLevelFilter + +// Designated initializer, logs at levels < |level| will be filtered. +- (id)initWithMinimumLevel:(GTMLoggerLevel)level; + +@end + +// A log filter that allows you to set a maximum log level. Messages whose level +// exceeds this level will be filtered. This is really only useful if you have +// a composite GTMLogger that is sending the other messages elsewhere. +@interface GTMLogMaximumLevelFilter : GTMLogAllowedLevelFilter + +// Designated initializer, logs at levels > |level| will be filtered. +- (id)initWithMaximumLevel:(GTMLoggerLevel)level; + +@end + + +// For subclasses only +@interface GTMLogger (PrivateMethods) + +- (void)logInternalFunc:(const char *)func + format:(NSString *)fmt + valist:(va_list)args + level:(GTMLoggerLevel)level NS_FORMAT_FUNCTION(2, 0); + +@end + diff --git a/External/google-plus-ios-sdk/OpenSource/GTMLogger.m b/External/google-plus-ios-sdk/OpenSource/GTMLogger.m new file mode 100644 index 00000000..0263aa1f --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMLogger.m @@ -0,0 +1,598 @@ +// +// GTMLogger.m +// +// Copyright 2007-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import "GTMLogger.h" +#import "GTMGarbageCollection.h" +#import +#import +#import +#import + + +// Reference to the shared GTMLogger instance. This is not a singleton, it's +// just an easy reference to one shared instance. +static GTMLogger *gSharedLogger = nil; + + +@implementation GTMLogger + +// Returns a pointer to the shared logger instance. If none exists, a standard +// logger is created and returned. ++ (id)sharedLogger { + @synchronized(self) { + if (gSharedLogger == nil) { + gSharedLogger = [[self standardLogger] retain]; + } + } + return [[gSharedLogger retain] autorelease]; +} + ++ (void)setSharedLogger:(GTMLogger *)logger { + @synchronized(self) { + [gSharedLogger autorelease]; + gSharedLogger = [logger retain]; + } +} + ++ (id)standardLogger { + // Don't trust NSFileHandle not to throw + @try { + id writer = [NSFileHandle fileHandleWithStandardOutput]; + id fr = [[[GTMLogStandardFormatter alloc] init] + autorelease]; + id filter = [[[GTMLogLevelFilter alloc] init] autorelease]; + return [[[self alloc] initWithWriter:writer + formatter:fr + filter:filter] autorelease]; + } + @catch (id e) { + // Ignored + } + return nil; +} + ++ (id)standardLoggerWithStderr { + // Don't trust NSFileHandle not to throw + @try { + id me = [self standardLogger]; + [me setWriter:[NSFileHandle fileHandleWithStandardError]]; + return me; + } + @catch (id e) { + // Ignored + } + return nil; +} + ++ (id)standardLoggerWithStdoutAndStderr { + // We're going to take advantage of the GTMLogger to GTMLogWriter adaptor + // and create a composite logger that an outer "standard" logger can use + // as a writer. Our inner loggers should apply no formatting since the main + // logger does that and we want the caller to be able to change formatters + // or add writers without knowing the inner structure of our composite. + + // Don't trust NSFileHandle not to throw + @try { + GTMLogBasicFormatter *formatter = [[[GTMLogBasicFormatter alloc] init] + autorelease]; + GTMLogger *stdoutLogger = + [self loggerWithWriter:[NSFileHandle fileHandleWithStandardOutput] + formatter:formatter + filter:[[[GTMLogMaximumLevelFilter alloc] + initWithMaximumLevel:kGTMLoggerLevelInfo] + autorelease]]; + GTMLogger *stderrLogger = + [self loggerWithWriter:[NSFileHandle fileHandleWithStandardError] + formatter:formatter + filter:[[[GTMLogMininumLevelFilter alloc] + initWithMinimumLevel:kGTMLoggerLevelError] + autorelease]]; + GTMLogger *compositeWriter = + [self loggerWithWriter:[NSArray arrayWithObjects: + stdoutLogger, stderrLogger, nil] + formatter:formatter + filter:[[[GTMLogNoFilter alloc] init] autorelease]]; + GTMLogger *outerLogger = [self standardLogger]; + [outerLogger setWriter:compositeWriter]; + return outerLogger; + } + @catch (id e) { + // Ignored + } + return nil; +} + ++ (id)standardLoggerWithPath:(NSString *)path { + @try { + NSFileHandle *fh = [NSFileHandle fileHandleForLoggingAtPath:path mode:0644]; + if (fh == nil) return nil; + id me = [self standardLogger]; + [me setWriter:fh]; + return me; + } + @catch (id e) { + // Ignored + } + return nil; +} + ++ (id)loggerWithWriter:(id)writer + formatter:(id)formatter + filter:(id)filter { + return [[[self alloc] initWithWriter:writer + formatter:formatter + filter:filter] autorelease]; +} + ++ (id)logger { + return [[[self alloc] init] autorelease]; +} + +- (id)init { + return [self initWithWriter:nil formatter:nil filter:nil]; +} + +- (id)initWithWriter:(id)writer + formatter:(id)formatter + filter:(id)filter { + if ((self = [super init])) { + [self setWriter:writer]; + [self setFormatter:formatter]; + [self setFilter:filter]; + } + return self; +} + +- (void)dealloc { + // Unlikely, but |writer_| may be an NSFileHandle, which can throw + @try { + [formatter_ release]; + [filter_ release]; + [writer_ release]; + } + @catch (id e) { + // Ignored + } + [super dealloc]; +} + +- (id)writer { + return [[writer_ retain] autorelease]; +} + +- (void)setWriter:(id)writer { + @synchronized(self) { + [writer_ autorelease]; + writer_ = nil; + if (writer == nil) { + // Try to use stdout, but don't trust NSFileHandle + @try { + writer_ = [[NSFileHandle fileHandleWithStandardOutput] retain]; + } + @catch (id e) { + // Leave |writer_| nil + } + } else { + writer_ = [writer retain]; + } + } +} + +- (id)formatter { + return [[formatter_ retain] autorelease]; +} + +- (void)setFormatter:(id)formatter { + @synchronized(self) { + [formatter_ autorelease]; + formatter_ = nil; + if (formatter == nil) { + @try { + formatter_ = [[GTMLogBasicFormatter alloc] init]; + } + @catch (id e) { + // Leave |formatter_| nil + } + } else { + formatter_ = [formatter retain]; + } + } +} + +- (id)filter { + return [[filter_ retain] autorelease]; +} + +- (void)setFilter:(id)filter { + @synchronized(self) { + [filter_ autorelease]; + filter_ = nil; + if (filter == nil) { + @try { + filter_ = [[GTMLogNoFilter alloc] init]; + } + @catch (id e) { + // Leave |filter_| nil + } + } else { + filter_ = [filter retain]; + } + } +} + +- (void)logDebug:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelDebug]; + va_end(args); +} + +- (void)logInfo:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelInfo]; + va_end(args); +} + +- (void)logError:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelError]; + va_end(args); +} + +- (void)logAssert:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + [self logInternalFunc:NULL format:fmt valist:args level:kGTMLoggerLevelAssert]; + va_end(args); +} + +@end // GTMLogger + + +@implementation GTMLogger (GTMLoggerMacroHelpers) + +- (void)logFuncDebug:(const char *)func msg:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelDebug]; + va_end(args); +} + +- (void)logFuncInfo:(const char *)func msg:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelInfo]; + va_end(args); +} + +- (void)logFuncError:(const char *)func msg:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelError]; + va_end(args); +} + +- (void)logFuncAssert:(const char *)func msg:(NSString *)fmt, ... { + va_list args; + va_start(args, fmt); + [self logInternalFunc:func format:fmt valist:args level:kGTMLoggerLevelAssert]; + va_end(args); +} + +@end // GTMLoggerMacroHelpers + + +@implementation GTMLogger (PrivateMethods) + +- (void)logInternalFunc:(const char *)func + format:(NSString *)fmt + valist:(va_list)args + level:(GTMLoggerLevel)level { + // Primary point where logging happens, logging should never throw, catch + // everything. + @try { + NSString *fname = func ? [NSString stringWithUTF8String:func] : nil; + NSString *msg = [formatter_ stringForFunc:fname + withFormat:fmt + valist:args + level:level]; + if (msg && [filter_ filterAllowsMessage:msg level:level]) + [writer_ logMessage:msg level:level]; + } + @catch (id e) { + // Ignored + } +} + +@end // PrivateMethods + + +@implementation NSFileHandle (GTMFileHandleLogWriter) + ++ (id)fileHandleForLoggingAtPath:(NSString *)path mode:(mode_t)mode { + int fd = -1; + if (path) { + int flags = O_WRONLY | O_APPEND | O_CREAT; + fd = open([path fileSystemRepresentation], flags, mode); + } + if (fd == -1) return nil; + return [[[self alloc] initWithFileDescriptor:fd + closeOnDealloc:YES] autorelease]; +} + +- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level { + @synchronized(self) { + // Closed pipes should not generate exceptions in our caller. Catch here + // as well [GTMLogger logInternalFunc:...] so that an exception in this + // writer does not prevent other writers from having a chance. + @try { + NSString *line = [NSString stringWithFormat:@"%@\n", msg]; + [self writeData:[line dataUsingEncoding:NSUTF8StringEncoding]]; + } + @catch (id e) { + // Ignored + } + } +} + +@end // GTMFileHandleLogWriter + + +@implementation NSArray (GTMArrayCompositeLogWriter) + +- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level { + @synchronized(self) { + id child = nil; + GTM_FOREACH_OBJECT(child, self) { + if ([child conformsToProtocol:@protocol(GTMLogWriter)]) + [child logMessage:msg level:level]; + } + } +} + +@end // GTMArrayCompositeLogWriter + + +@implementation GTMLogger (GTMLoggerLogWriter) + +- (void)logMessage:(NSString *)msg level:(GTMLoggerLevel)level { + switch (level) { + case kGTMLoggerLevelDebug: + [self logDebug:@"%@", msg]; + break; + case kGTMLoggerLevelInfo: + [self logInfo:@"%@", msg]; + break; + case kGTMLoggerLevelError: + [self logError:@"%@", msg]; + break; + case kGTMLoggerLevelAssert: + [self logAssert:@"%@", msg]; + break; + default: + // Ignore the message. + break; + } +} + +@end // GTMLoggerLogWriter + + +@implementation GTMLogBasicFormatter + +- (NSString *)prettyNameForFunc:(NSString *)func { + NSString *name = [func stringByTrimmingCharactersInSet: + [NSCharacterSet whitespaceAndNewlineCharacterSet]]; + NSString *function = @"(unknown)"; + if ([name length]) { + if (// Objective C __func__ and __PRETTY_FUNCTION__ + [name hasPrefix:@"-["] || [name hasPrefix:@"+["] || + // C++ __PRETTY_FUNCTION__ and other preadorned formats + [name hasSuffix:@")"]) { + function = name; + } else { + // Assume C99 __func__ + function = [NSString stringWithFormat:@"%@()", name]; + } + } + return function; +} + +- (NSString *)stringForFunc:(NSString *)func + withFormat:(NSString *)fmt + valist:(va_list)args + level:(GTMLoggerLevel)level { + // Performance note: We may want to do a quick check here to see if |fmt| + // contains a '%', and if not, simply return 'fmt'. + if (!(fmt && args)) return nil; + return [[[NSString alloc] initWithFormat:fmt arguments:args] autorelease]; +} + +@end // GTMLogBasicFormatter + + +@implementation GTMLogStandardFormatter + +- (id)init { + if ((self = [super init])) { + dateFormatter_ = [[NSDateFormatter alloc] init]; + [dateFormatter_ setFormatterBehavior:NSDateFormatterBehavior10_4]; + [dateFormatter_ setDateFormat:@"yyyy-MM-dd HH:mm:ss.SSS"]; + pname_ = [[[NSProcessInfo processInfo] processName] copy]; + pid_ = [[NSProcessInfo processInfo] processIdentifier]; + if (!(dateFormatter_ && pname_)) { + [self release]; + return nil; + } + } + return self; +} + +- (void)dealloc { + [dateFormatter_ release]; + [pname_ release]; + [super dealloc]; +} + +- (NSString *)stringForFunc:(NSString *)func + withFormat:(NSString *)fmt + valist:(va_list)args + level:(GTMLoggerLevel)level { + NSString *tstamp = nil; + @synchronized (dateFormatter_) { + tstamp = [dateFormatter_ stringFromDate:[NSDate date]]; + } + return [NSString stringWithFormat:@"%@ %@[%d/%p] [lvl=%d] %@ %@", + tstamp, pname_, pid_, pthread_self(), + level, [self prettyNameForFunc:func], + // |super| has guard for nil |fmt| and |args| + [super stringForFunc:func withFormat:fmt valist:args level:level]]; +} + +@end // GTMLogStandardFormatter + + +@implementation GTMLogLevelFilter + +// Check the environment and the user preferences for the GTMVerboseLogging key +// to see if verbose logging has been enabled. The environment variable will +// override the defaults setting, so check the environment first. +// COV_NF_START +static BOOL IsVerboseLoggingEnabled(void) { + static NSString *const kVerboseLoggingKey = @"GTMVerboseLogging"; + NSString *value = [[[NSProcessInfo processInfo] environment] + objectForKey:kVerboseLoggingKey]; + if (value) { + // Emulate [NSString boolValue] for pre-10.5 + value = [value stringByTrimmingCharactersInSet: + [NSCharacterSet whitespaceAndNewlineCharacterSet]]; + if ([[value uppercaseString] hasPrefix:@"Y"] || + [[value uppercaseString] hasPrefix:@"T"] || + [value intValue]) { + return YES; + } else { + return NO; + } + } + return [[NSUserDefaults standardUserDefaults] boolForKey:kVerboseLoggingKey]; +} +// COV_NF_END + +// In DEBUG builds, log everything. If we're not in a debug build we'll assume +// that we're in a Release build. +- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level { +#if DEBUG + return YES; +#endif + + BOOL allow = YES; + + switch (level) { + case kGTMLoggerLevelDebug: + allow = NO; + break; + case kGTMLoggerLevelInfo: + allow = IsVerboseLoggingEnabled(); + break; + case kGTMLoggerLevelError: + allow = YES; + break; + case kGTMLoggerLevelAssert: + allow = YES; + break; + default: + allow = YES; + break; + } + + return allow; +} + +@end // GTMLogLevelFilter + + +@implementation GTMLogNoFilter + +- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level { + return YES; // Allow everything through +} + +@end // GTMLogNoFilter + + +@implementation GTMLogAllowedLevelFilter + +// Private designated initializer +- (id)initWithAllowedLevels:(NSIndexSet *)levels { + self = [super init]; + if (self != nil) { + allowedLevels_ = [levels retain]; + // Cap min/max level + if (!allowedLevels_ || + // NSIndexSet is unsigned so only check the high bound, but need to + // check both first and last index because NSIndexSet appears to allow + // wraparound. + ([allowedLevels_ firstIndex] > kGTMLoggerLevelAssert) || + ([allowedLevels_ lastIndex] > kGTMLoggerLevelAssert)) { + [self release]; + return nil; + } + } + return self; +} + +- (id)init { + // Allow all levels in default init + return [self initWithAllowedLevels:[NSIndexSet indexSetWithIndexesInRange: + NSMakeRange(kGTMLoggerLevelUnknown, + (kGTMLoggerLevelAssert - kGTMLoggerLevelUnknown + 1))]]; +} + +- (void)dealloc { + [allowedLevels_ release]; + [super dealloc]; +} + +- (BOOL)filterAllowsMessage:(NSString *)msg level:(GTMLoggerLevel)level { + return [allowedLevels_ containsIndex:level]; +} + +@end // GTMLogAllowedLevelFilter + + +@implementation GTMLogMininumLevelFilter + +- (id)initWithMinimumLevel:(GTMLoggerLevel)level { + return [super initWithAllowedLevels:[NSIndexSet indexSetWithIndexesInRange: + NSMakeRange(level, + (kGTMLoggerLevelAssert - level + 1))]]; +} + +@end // GTMLogMininumLevelFilter + + +@implementation GTMLogMaximumLevelFilter + +- (id)initWithMaximumLevel:(GTMLoggerLevel)level { + return [super initWithAllowedLevels:[NSIndexSet indexSetWithIndexesInRange: + NSMakeRange(kGTMLoggerLevelUnknown, level + 1)]]; +} + +@end // GTMLogMaximumLevelFilter diff --git a/External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.h b/External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.h new file mode 100644 index 00000000..7b0919b0 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.h @@ -0,0 +1,88 @@ +// +// GTMMethodCheck.h +// +// Copyright 2006-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import +#import +#import + +/// A macro for enforcing debug time checks to make sure all required methods are linked in +// +// When using categories, it can be very easy to forget to include the +// implementation of a category. +// Let's say you had a class foo that depended on method bar of class baz, and +// method bar was implemented as a member of a category. +// You could add the following code: +// @implementation foo +// GTM_METHOD_CHECK(baz, bar) +// @end +// and the code would check to make sure baz was implemented just before main +// was called. This works for both dynamic libraries, and executables. +// +// Classes (or one of their superclasses) being checked must conform to the +// NSObject protocol. We will check this, and spit out a warning if a class does +// not conform to NSObject. +// +// This is not compiled into release builds. + +#ifdef DEBUG + +#ifdef __cplusplus +extern "C" { +#endif + +// If you get an error for GTMMethodCheckMethodChecker not being defined, +// you need to link in GTMMethodCheck.m. We keep it hidden so that we can have +// it living in several separate images without conflict. +// Functions with the ((constructor)) attribute are called after all +loads +// have been called. See "Initializing Objective-C Classes" in +// http://developer.apple.com/documentation/DeveloperTools/Conceptual/DynamicLibraries/Articles/DynamicLibraryDesignGuidelines.html#//apple_ref/doc/uid/TP40002013-DontLinkElementID_20 + +__attribute__ ((constructor, visibility("hidden"))) void GTMMethodCheckMethodChecker(void); + +#ifdef __cplusplus +}; +#endif + +// This is the "magic". +// A) we need a multi layer define here so that the stupid preprocessor +// expands __LINE__ out the way we want it. We need LINE so that each of +// out GTM_METHOD_CHECKs generates a unique class method for the class. +#define GTM_METHOD_CHECK(class, method) GTM_METHOD_CHECK_INNER(class, method, __LINE__) +#define GTM_METHOD_CHECK_INNER(class, method, line) GTM_METHOD_CHECK_INNER_INNER(class, method, line) + +// B) Create up a class method called xxGMethodCheckMethod+class+line that the +// GTMMethodCheckMethodChecker function can look for and call. We +// look for GTMMethodCheckMethodChecker to enforce linkage of +// GTMMethodCheck.m. +#define GTM_METHOD_CHECK_INNER_INNER(class, method, line) \ ++ (void)xxGTMMethodCheckMethod ## class ## line { \ + void (*addr)() = GTMMethodCheckMethodChecker; \ + if (addr && ![class instancesRespondToSelector:@selector(method)] \ + && ![class respondsToSelector:@selector(method)]) { \ + fprintf(stderr, "%s:%d: error: We need method '%s' to be linked in for class '%s'\n", \ + __FILE__, line, #method, #class); \ + exit(EX_SOFTWARE); \ + } \ +} + +#else // !DEBUG + +// Do nothing in release. +#define GTM_METHOD_CHECK(class, method) + +#endif // DEBUG diff --git a/External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.m b/External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.m new file mode 100644 index 00000000..801278cb --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.m @@ -0,0 +1,161 @@ +// +// GTMMethodCheck.m +// +// Copyright 2006-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +// Don't want any of this in release builds +#ifdef DEBUG +#import "GTMDefines.h" +#import "GTMMethodCheck.h" +#import "GTMObjC2Runtime.h" +#import + +// Checks to see if the cls passed in (or one of it's superclasses) conforms +// to NSObject protocol. Inheriting from NSObject is the easiest way to do this +// but not all classes (i.e. NSProxy) inherit from NSObject. Also, some classes +// inherit from Object instead of NSObject which is fine, and we'll count as +// conforming to NSObject for our needs. +static BOOL ConformsToNSObjectProtocol(Class cls) { + // If we get nil, obviously doesn't conform. + if (!cls) return NO; + const char *className = class_getName(cls); + if (!className) return NO; + + // We're going to assume that all Apple classes will work + // (and aren't being checked) + // Note to apple: why doesn't obj-c have real namespaces instead of two + // letter hacks? If you name your own classes starting with NS this won't + // work for you. + // Some classes (like _NSZombie) start with _NS. + // On Leopard we have to look for CFObject as well. + // On iPhone we check Object as well + if ((strncmp(className, "NS", 2) == 0) + || (strncmp(className, "_NS", 3) == 0) + || (strncmp(className, "__NS", 4) == 0) + || (strcmp(className, "CFObject") == 0) + || (strcmp(className, "__IncompleteProtocol") == 0) +#if GTM_IPHONE_SDK + || (strcmp(className, "Object") == 0) +#endif + ) { + return YES; + } + +// iPhone SDK does not define the |Object| class, so we instead test for the +// |NSObject| class. +#if GTM_IPHONE_SDK + // Iterate through all the protocols |cls| supports looking for NSObject. + if (cls == [NSObject class] + || class_conformsToProtocol(cls, @protocol(NSObject))) { + return YES; + } +#else + // Iterate through all the protocols |cls| supports looking for NSObject. + if (cls == [Object class] + || class_conformsToProtocol(cls, @protocol(NSObject))) { + return YES; + } +#endif + + // Recursively check the superclasses. + return ConformsToNSObjectProtocol(class_getSuperclass(cls)); +} + +void GTMMethodCheckMethodChecker(void) { + // Run through all the classes looking for class methods that are + // prefixed with xxGMMethodCheckMethod. If it finds one, it calls it. + // See GTMMethodCheck.h to see what it does. + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + int numClasses = 0; + int newNumClasses = objc_getClassList(NULL, 0); + int i; + Class *classes = NULL; + while (numClasses < newNumClasses) { + numClasses = newNumClasses; + classes = realloc(classes, sizeof(Class) * numClasses); + _GTMDevAssert(classes, @"Unable to allocate memory for classes"); + newNumClasses = objc_getClassList(classes, numClasses); + } + for (i = 0; i < numClasses && classes; ++i) { + Class cls = classes[i]; + + // Since we are directly calling objc_msgSend, we need to conform to + // @protocol(NSObject), or else we will tumble into a _objc_msgForward + // recursive loop when we try and call a function by name. + if (!ConformsToNSObjectProtocol(cls)) { + // COV_NF_START + _GTMDevLog(@"GTMMethodCheckMethodChecker: Class %s does not conform to " + "@protocol(NSObject), so won't be checked", + class_getName(cls)); + continue; + // COV_NF_END + } + // Since we are looking for a class method (+xxGMMethodCheckMethod...) + // we need to query the isa pointer to see what methods it support, but + // send the method (if it's supported) to the class itself. + unsigned int count; + Class metaClass = objc_getMetaClass(class_getName(cls)); + Method *methods = class_copyMethodList(metaClass, &count); + unsigned int j; + for (j = 0; j < count; ++j) { + SEL selector = method_getName(methods[j]); + const char *name = sel_getName(selector); + if (strstr(name, "xxGTMMethodCheckMethod") == name) { + // Check to make sure that the method we are checking comes + // from the same image that we are in. Since GTMMethodCheckMethodChecker + // is not exported, we should always find the copy in our local + // image. We compare the address of it's image with the address of + // the image which implements the method we want to check. If + // they match we continue. This does two things: + // a) minimizes the amount of calls we make to the xxxGTMMethodCheck + // methods. They should only be called once. + // b) prevents initializers for various classes being called too early + Dl_info methodCheckerInfo; + if (!dladdr(GTMMethodCheckMethodChecker, + &methodCheckerInfo)) { + // COV_NF_START + // Don't know how to force this case in a unittest. + // Certainly hope we never see it. + _GTMDevLog(@"GTMMethodCheckMethodChecker: Unable to get dladdr info " + "for GTMMethodCheckMethodChecker while introspecting +[%s %s]]", + class_getName(cls), name); + continue; + // COV_NF_END + } + Dl_info methodInfo; + if (!dladdr(method_getImplementation(methods[j]), + &methodInfo)) { + // COV_NF_START + // Don't know how to force this case in a unittest + // Certainly hope we never see it. + _GTMDevLog(@"GTMMethodCheckMethodChecker: Unable to get dladdr info " + "for %s while introspecting +[%s %s]]", name, + class_getName(cls), name); + continue; + // COV_NF_END + } + if (methodCheckerInfo.dli_fbase == methodInfo.dli_fbase) { + objc_msgSend(cls, selector); + } + } + } + free(methods); + } + free(classes); + [pool drain]; +} + +#endif // DEBUG diff --git a/External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.h b/External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.h new file mode 100644 index 00000000..b0944111 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.h @@ -0,0 +1,36 @@ +// +// GTMNSDictionary+URLArguments.h +// +// Copyright 2006-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import + +/// Utility for building a URL or POST argument string. +@interface NSDictionary (GTMNSDictionaryURLArgumentsAdditions) + +/// Returns a dictionary of the decoded key-value pairs in a http arguments +/// string of the form key1=value1&key2=value2&...&keyN=valueN. +/// Keys and values will be unescaped automatically. +/// Only the first value for a repeated key is returned. ++ (NSDictionary *)gtm_dictionaryWithHttpArgumentsString:(NSString *)argString; + +/// Gets a string representation of the dictionary in the form +/// key1=value1&key2=value2&...&keyN=valueN, suitable for use as either +/// URL arguments (after a '?') or POST body. Keys and values will be escaped +/// automatically, so should be unescaped in the dictionary. +- (NSString *)gtm_httpArgumentsString; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.m b/External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.m new file mode 100644 index 00000000..4799b2de --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.m @@ -0,0 +1,71 @@ +// +// GTMNSDictionary+URLArguments.m +// +// Copyright 2006-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import "GTMNSDictionary+URLArguments.h" +#import "GTMNSString+URLArguments.h" +#import "GTMMethodCheck.h" +#import "GTMDefines.h" + +@implementation NSDictionary (GTMNSDictionaryURLArgumentsAdditions) + +GTM_METHOD_CHECK(NSString, gtm_stringByEscapingForURLArgument); +GTM_METHOD_CHECK(NSString, gtm_stringByUnescapingFromURLArgument); + ++ (NSDictionary *)gtm_dictionaryWithHttpArgumentsString:(NSString *)argString { + NSMutableDictionary* ret = [NSMutableDictionary dictionary]; + NSArray* components = [argString componentsSeparatedByString:@"&"]; + NSString* component; + // Use reverse order so that the first occurrence of a key replaces + // those subsequent. + GTM_FOREACH_ENUMEREE(component, [components reverseObjectEnumerator]) { + if ([component length] == 0) + continue; + NSRange pos = [component rangeOfString:@"="]; + NSString *key; + NSString *val; + if (pos.location == NSNotFound) { + key = [component gtm_stringByUnescapingFromURLArgument]; + val = @""; + } else { + key = [[component substringToIndex:pos.location] + gtm_stringByUnescapingFromURLArgument]; + val = [[component substringFromIndex:pos.location + pos.length] + gtm_stringByUnescapingFromURLArgument]; + } + // gtm_stringByUnescapingFromURLArgument returns nil on invalid UTF8 + // and NSMutableDictionary raises an exception when passed nil values. + if (!key) key = @""; + if (!val) val = @""; + [ret setObject:val forKey:key]; + } + return ret; +} + +- (NSString *)gtm_httpArgumentsString { + NSMutableArray* arguments = [NSMutableArray arrayWithCapacity:[self count]]; + NSString* key; + GTM_FOREACH_KEY(key, self) { + [arguments addObject:[NSString stringWithFormat:@"%@=%@", + [key gtm_stringByEscapingForURLArgument], + [[[self objectForKey:key] description] gtm_stringByEscapingForURLArgument]]]; + } + + return [arguments componentsJoinedByString:@"&"]; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.h b/External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.h new file mode 100644 index 00000000..d4c7e09a --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.h @@ -0,0 +1,41 @@ +// +// GTMNSString+URLArguments.h +// +// Copyright 2006-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import + +/// Utilities for encoding and decoding URL arguments. +@interface NSString (GTMNSStringURLArgumentsAdditions) + +/// Returns a string that is escaped properly to be a URL argument. +// +/// This differs from stringByAddingPercentEscapesUsingEncoding: in that it +/// will escape all the reserved characters (per RFC 3986 +/// ) which +/// stringByAddingPercentEscapesUsingEncoding would leave. +/// +/// This will also escape '%', so this should not be used on a string that has +/// already been escaped unless double-escaping is the desired result. +- (NSString*)gtm_stringByEscapingForURLArgument; + +/// Returns the unescaped version of a URL argument +// +/// This has the same behavior as stringByReplacingPercentEscapesUsingEncoding:, +/// except that it will also convert '+' to space. +- (NSString*)gtm_stringByUnescapingFromURLArgument; + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.m b/External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.m new file mode 100644 index 00000000..46d2c99e --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.m @@ -0,0 +1,45 @@ +// +// GTMNSString+URLArguments.m +// +// Copyright 2006-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import "GTMNSString+URLArguments.h" +#import "GTMGarbageCollection.h" + +@implementation NSString (GTMNSStringURLArgumentsAdditions) + +- (NSString*)gtm_stringByEscapingForURLArgument { + // Encode all the reserved characters, per RFC 3986 + // () + CFStringRef escaped = + CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, + (CFStringRef)self, + NULL, + (CFStringRef)@"!*'();:@&=+$,/?%#[]", + kCFStringEncodingUTF8); + return GTMCFAutorelease(escaped); +} + +- (NSString*)gtm_stringByUnescapingFromURLArgument { + NSMutableString *resultString = [NSMutableString stringWithString:self]; + [resultString replaceOccurrencesOfString:@"+" + withString:@" " + options:NSLiteralSearch + range:NSMakeRange(0, [resultString length])]; + return [resultString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; +} + +@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.h b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.h new file mode 100644 index 00000000..50fd188d --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.h @@ -0,0 +1,325 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES + +// This class implements the OAuth 2 protocol for authorizing requests. +// http://tools.ietf.org/html/draft-ietf-oauth-v2 + +#import + +// GTMHTTPFetcher.h brings in GTLDefines/GDataDefines +#import "GTMHTTPFetcher.h" + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTMOAUTH2AUTHENTICATION_DEFINE_GLOBALS + #define _EXTERN + #define _INITIALIZE_AS(x) =x +#else + #if defined(__cplusplus) + #define _EXTERN extern "C" + #else + #define _EXTERN extern + #endif + #define _INITIALIZE_AS(x) +#endif + +// Until all OAuth 2 providers are up to the same spec, we'll provide a crude +// way here to override the "Bearer" string in the Authorization header +#ifndef GTM_OAUTH2_BEARER +#define GTM_OAUTH2_BEARER "Bearer" +#endif + +// Service provider name allows stored authorization to be associated with +// the authorizing service +_EXTERN NSString* const kGTMOAuth2ServiceProviderGoogle _INITIALIZE_AS(@"Google"); + +// +// GTMOAuth2SignIn constants, included here for use by clients +// +_EXTERN NSString* const kGTMOAuth2ErrorDomain _INITIALIZE_AS(@"com.google.GTMOAuth2"); + +// Error userInfo keys +_EXTERN NSString* const kGTMOAuth2ErrorMessageKey _INITIALIZE_AS(@"error"); +_EXTERN NSString* const kGTMOAuth2ErrorRequestKey _INITIALIZE_AS(@"request"); +_EXTERN NSString* const kGTMOAuth2ErrorJSONKey _INITIALIZE_AS(@"json"); + +enum { + // Error code indicating that the window was prematurely closed + kGTMOAuth2ErrorWindowClosed = -1000, + kGTMOAuth2ErrorAuthorizationFailed = -1001, + kGTMOAuth2ErrorTokenExpired = -1002, + kGTMOAuth2ErrorTokenUnavailable = -1003, + kGTMOAuth2ErrorUnauthorizableRequest = -1004 +}; + + +// Notifications for token fetches +_EXTERN NSString* const kGTMOAuth2FetchStarted _INITIALIZE_AS(@"kGTMOAuth2FetchStarted"); +_EXTERN NSString* const kGTMOAuth2FetchStopped _INITIALIZE_AS(@"kGTMOAuth2FetchStopped"); + +_EXTERN NSString* const kGTMOAuth2FetcherKey _INITIALIZE_AS(@"fetcher"); +_EXTERN NSString* const kGTMOAuth2FetchTypeKey _INITIALIZE_AS(@"FetchType"); +_EXTERN NSString* const kGTMOAuth2FetchTypeToken _INITIALIZE_AS(@"token"); +_EXTERN NSString* const kGTMOAuth2FetchTypeRefresh _INITIALIZE_AS(@"refresh"); +_EXTERN NSString* const kGTMOAuth2FetchTypeAssertion _INITIALIZE_AS(@"assertion"); +_EXTERN NSString* const kGTMOAuth2FetchTypeUserInfo _INITIALIZE_AS(@"userInfo"); + +// Token-issuance errors +_EXTERN NSString* const kGTMOAuth2ErrorKey _INITIALIZE_AS(@"error"); + +_EXTERN NSString* const kGTMOAuth2ErrorInvalidRequest _INITIALIZE_AS(@"invalid_request"); +_EXTERN NSString* const kGTMOAuth2ErrorInvalidClient _INITIALIZE_AS(@"invalid_client"); +_EXTERN NSString* const kGTMOAuth2ErrorInvalidGrant _INITIALIZE_AS(@"invalid_grant"); +_EXTERN NSString* const kGTMOAuth2ErrorUnauthorizedClient _INITIALIZE_AS(@"unauthorized_client"); +_EXTERN NSString* const kGTMOAuth2ErrorUnsupportedGrantType _INITIALIZE_AS(@"unsupported_grant_type"); +_EXTERN NSString* const kGTMOAuth2ErrorInvalidScope _INITIALIZE_AS(@"invalid_scope"); + +// Notification that sign-in has completed, and token fetches will begin (useful +// for displaying interstitial messages after the window has closed) +_EXTERN NSString* const kGTMOAuth2UserSignedIn _INITIALIZE_AS(@"kGTMOAuth2UserSignedIn"); + +// Notification for token changes +_EXTERN NSString* const kGTMOAuth2AccessTokenRefreshed _INITIALIZE_AS(@"kGTMOAuth2AccessTokenRefreshed"); +_EXTERN NSString* const kGTMOAuth2RefreshTokenChanged _INITIALIZE_AS(@"kGTMOAuth2RefreshTokenChanged"); + +// Notification for WebView loading +_EXTERN NSString* const kGTMOAuth2WebViewStartedLoading _INITIALIZE_AS(@"kGTMOAuth2WebViewStartedLoading"); +_EXTERN NSString* const kGTMOAuth2WebViewStoppedLoading _INITIALIZE_AS(@"kGTMOAuth2WebViewStoppedLoading"); +_EXTERN NSString* const kGTMOAuth2WebViewKey _INITIALIZE_AS(@"kGTMOAuth2WebViewKey"); +_EXTERN NSString* const kGTMOAuth2WebViewStopKindKey _INITIALIZE_AS(@"kGTMOAuth2WebViewStopKindKey"); +_EXTERN NSString* const kGTMOAuth2WebViewFinished _INITIALIZE_AS(@"finished"); +_EXTERN NSString* const kGTMOAuth2WebViewFailed _INITIALIZE_AS(@"failed"); +_EXTERN NSString* const kGTMOAuth2WebViewCancelled _INITIALIZE_AS(@"cancelled"); + +// Notification for network loss during html sign-in display +_EXTERN NSString* const kGTMOAuth2NetworkLost _INITIALIZE_AS(@"kGTMOAuthNetworkLost"); +_EXTERN NSString* const kGTMOAuth2NetworkFound _INITIALIZE_AS(@"kGTMOAuthNetworkFound"); + +@interface GTMOAuth2Authentication : NSObject { + @private + NSString *clientID_; + NSString *clientSecret_; + NSString *redirectURI_; + NSMutableDictionary *parameters_; + + // authorization parameters + NSURL *tokenURL_; + NSDate *expirationDate_; + + NSDictionary *additionalTokenRequestParameters_; + + // queue of requests for authorization waiting for a valid access token + GTMHTTPFetcher *refreshFetcher_; + NSMutableArray *authorizationQueue_; + + id fetcherService_; // WEAK + + Class parserClass_; + + BOOL shouldAuthorizeAllRequests_; + + // arbitrary data retained for the user + id userData_; + NSMutableDictionary *properties_; +} + +// OAuth2 standard protocol parameters +// +// These should be the plain strings; any needed escaping will be provided by +// the library. + +// Request properties +@property (copy) NSString *clientID; +@property (copy) NSString *clientSecret; +@property (copy) NSString *redirectURI; +@property (retain) NSString *scope; +@property (retain) NSString *tokenType; +@property (retain) NSString *assertion; + +// Apps may optionally add parameters here to be provided to the token +// endpoint on token requests and refreshes +@property (retain) NSDictionary *additionalTokenRequestParameters; + +// Response properties +@property (retain) NSMutableDictionary *parameters; + +@property (retain) NSString *accessToken; +@property (retain) NSString *refreshToken; +@property (retain) NSNumber *expiresIn; +@property (retain) NSString *code; +@property (retain) NSString *errorString; + +// URL for obtaining access tokens +@property (copy) NSURL *tokenURL; + +// Calculated expiration date (expiresIn seconds added to the +// time the access token was received.) +@property (copy) NSDate *expirationDate; + +// Service identifier, like "Google"; not used for authentication +// +// The provider name is just for allowing stored authorization to be associated +// with the authorizing service. +@property (copy) NSString *serviceProvider; + +// User email and verified status; not used for authentication +// +// The verified string can be checked with -boolValue. If the result is false, +// then the email address is listed with the account on the server, but the +// address has not been confirmed as belonging to the owner of the account. +@property (retain) NSString *userEmail; +@property (retain) NSString *userEmailIsVerified; + +// Property indicating if this auth has a refresh token so is suitable for +// authorizing a request. This does not guarantee that the token is valid. +@property (readonly) BOOL canAuthorize; + +// Property indicating if this object will authorize plain http request +// (as well as any non-https requests.) Default is NO, only requests with the +// scheme https are authorized, since security may be compromised if tokens +// are sent over the wire using an unencrypted protocol like http. +@property (assign) BOOL shouldAuthorizeAllRequests; + +// userData is retained for the convenience of the caller +@property (retain) id userData; + +// Stored property values are retained for the convenience of the caller +@property (retain) NSDictionary *properties; + +// Property for the optional fetcher service instance to be used to create +// fetchers +// +// Fetcher service objects retain authorizations, so this is weak to avoid +// circular retains. +@property (assign) id fetcherService; // WEAK + +// Alternative JSON parsing class; this should implement the +// GTMOAuth2ParserClass informal protocol. If this property is +// not set, the class SBJSON must be available in the runtime. +@property (assign) Class parserClass; + +// Convenience method for creating an authentication object ++ (id)authenticationWithServiceProvider:(NSString *)serviceProvider + tokenURL:(NSURL *)tokenURL + redirectURI:(NSString *)redirectURI + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret; + +// Clear out any authentication values, prepare for a new request fetch +- (void)reset; + +// Main authorization entry points +// +// These will refresh the access token, if necessary, add the access token to +// the request, then invoke the callback. +// +// The request argument may be nil to just force a refresh of the access token, +// if needed. +// +// NOTE: To avoid accidental leaks of bearer tokens, the request must +// be for a URL with the scheme https unless the shouldAuthorizeAllRequests +// property is set. + +// The finish selector should have a signature matching +// - (void)authentication:(GTMOAuth2Authentication *)auth +// request:(NSMutableURLRequest *)request +// finishedWithError:(NSError *)error; + +- (void)authorizeRequest:(NSMutableURLRequest *)request + delegate:(id)delegate + didFinishSelector:(SEL)sel; + +#if NS_BLOCKS_AVAILABLE +- (void)authorizeRequest:(NSMutableURLRequest *)request + completionHandler:(void (^)(NSError *error))handler; +#endif + +// Synchronous entry point; authorizing this way cannot refresh an expired +// access token +- (BOOL)authorizeRequest:(NSMutableURLRequest *)request; + +// If the authentication is waiting for a refresh to complete, spin the run +// loop, discarding events, until the fetch has completed +// +// This is only for use in testing or in tools without a user interface. +- (void)waitForCompletionWithTimeout:(NSTimeInterval)timeoutInSeconds; + + +////////////////////////////////////////////////////////////////////////////// +// +// Internal properties and methods for use by GTMOAuth2SignIn +// + +// Pending fetcher to get a new access token, if any +@property (retain) GTMHTTPFetcher *refreshFetcher; + +// Check if a request is queued up to be authorized +- (BOOL)isAuthorizingRequest:(NSURLRequest *)request; + +// Check if a request appears to be authorized +- (BOOL)isAuthorizedRequest:(NSURLRequest *)request; + +// Stop any pending refresh fetch +- (void)stopAuthorization; + +// OAuth fetch user-agent header value +- (NSString *)userAgent; + +// Parse and set token and token secret from response data +- (void)setKeysForResponseString:(NSString *)str; +- (void)setKeysForResponseDictionary:(NSDictionary *)dict; + +// Persistent token string for keychain storage +// +// We'll use the format "refresh_token=foo&serviceProvider=bar" so we can +// easily alter what portions of the auth data are stored +// +// Use these methods for serialization +- (NSString *)persistenceResponseString; +- (void)setKeysForPersistenceResponseString:(NSString *)str; + +// method to begin fetching an access token, used by the sign-in object +- (GTMHTTPFetcher *)beginTokenFetchWithDelegate:(id)delegate + didFinishSelector:(SEL)finishedSel; + +// Entry point to post a notification about a fetcher currently used for +// obtaining or refreshing a token; the sign-in object will also use this +// to indicate when the user's email address is being fetched. +// +// Fetch type constants are above under "notifications for token fetches" +- (void)notifyFetchIsRunning:(BOOL)isStarting + fetcher:(GTMHTTPFetcher *)fetcher + type:(NSString *)fetchType; + +// Arbitrary key-value properties retained for the user +- (void)setProperty:(id)obj forKey:(NSString *)key; +- (id)propertyForKey:(NSString *)key; + +// +// Utilities +// + ++ (NSString *)encodedOAuthValueForString:(NSString *)str; + ++ (NSString *)encodedQueryParametersForDictionary:(NSDictionary *)dict; + ++ (NSDictionary *)dictionaryWithResponseString:(NSString *)responseStr; + ++ (NSString *)scopeWithStrings:(NSString *)firsStr, ... NS_REQUIRES_NIL_TERMINATION; +@end + +#endif // GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.m b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.m new file mode 100644 index 00000000..6c067f6b --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.m @@ -0,0 +1,1167 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES + +#define GTMOAUTH2AUTHENTICATION_DEFINE_GLOBALS 1 +#import "GTMOAuth2Authentication.h" + +// standard OAuth keys +static NSString *const kOAuth2AccessTokenKey = @"access_token"; +static NSString *const kOAuth2RefreshTokenKey = @"refresh_token"; +static NSString *const kOAuth2ClientIDKey = @"client_id"; +static NSString *const kOAuth2ClientSecretKey = @"client_secret"; +static NSString *const kOAuth2RedirectURIKey = @"redirect_uri"; +static NSString *const kOAuth2ResponseTypeKey = @"response_type"; +static NSString *const kOAuth2ScopeKey = @"scope"; +static NSString *const kOAuth2ErrorKey = @"error"; +static NSString *const kOAuth2TokenTypeKey = @"token_type"; +static NSString *const kOAuth2ExpiresInKey = @"expires_in"; +static NSString *const kOAuth2CodeKey = @"code"; +static NSString *const kOAuth2AssertionKey = @"assertion"; + +// additional persistent keys +static NSString *const kServiceProviderKey = @"serviceProvider"; +static NSString *const kUserEmailKey = @"email"; +static NSString *const kUserEmailIsVerifiedKey = @"isVerified"; + +// fetcher keys +static NSString *const kTokenFetchDelegateKey = @"delegate"; +static NSString *const kTokenFetchSelectorKey = @"sel"; + +static NSString *const kRefreshFetchArgsKey = @"requestArgs"; + +// If GTMNSJSONSerialization is available, it is used for formatting JSON +@interface GTMNSJSONSerialization : NSObject ++ (id)JSONObjectWithData:(NSData *)data options:(NSUInteger)opt error:(NSError **)error; +@end + +@interface GTMOAuth2ParserClass : NSObject +// just enough of SBJSON to be able to parse +- (id)objectWithString:(NSString*)repr error:(NSError**)error; +@end + +// wrapper class for requests needing authorization and their callbacks +@interface GTMOAuth2AuthorizationArgs : NSObject { + @private + NSMutableURLRequest *request_; + id delegate_; + SEL sel_; + id completionHandler_; + NSThread *thread_; + NSError *error_; +} + +@property (retain) NSMutableURLRequest *request; +@property (retain) id delegate; +@property (assign) SEL selector; +@property (copy) id completionHandler; +@property (retain) NSThread *thread; +@property (retain) NSError *error; + ++ (GTMOAuth2AuthorizationArgs *)argsWithRequest:(NSMutableURLRequest *)req + delegate:(id)delegate + selector:(SEL)sel + completionHandler:(id)completionHandler + thread:(NSThread *)thread; +@end + +@implementation GTMOAuth2AuthorizationArgs + +@synthesize request = request_, + delegate = delegate_, + selector = sel_, + completionHandler = completionHandler_, + thread = thread_, + error = error_; + ++ (GTMOAuth2AuthorizationArgs *)argsWithRequest:(NSMutableURLRequest *)req + delegate:(id)delegate + selector:(SEL)sel + completionHandler:(id)completionHandler + thread:(NSThread *)thread { + GTMOAuth2AuthorizationArgs *obj; + obj = [[[GTMOAuth2AuthorizationArgs alloc] init] autorelease]; + obj.request = req; + obj.delegate = delegate; + obj.selector = sel; + obj.completionHandler = completionHandler; + obj.thread = thread; + return obj; +} + +- (void)dealloc { + [request_ release]; + [delegate_ release]; + [completionHandler_ release]; + [thread_ release]; + [error_ release]; + + [super dealloc]; +} +@end + + +@interface GTMOAuth2Authentication () + +@property (retain) NSMutableArray *authorizationQueue; + +- (void)setKeysForResponseJSONData:(NSData *)data; + +- (BOOL)authorizeRequestArgs:(GTMOAuth2AuthorizationArgs *)args; + +- (BOOL)authorizeRequestImmediateArgs:(GTMOAuth2AuthorizationArgs *)args; + +- (BOOL)shouldRefreshAccessToken; + +- (void)updateExpirationDate; + +- (NSDictionary *)dictionaryWithJSONData:(NSData *)data; + +- (void)tokenFetcher:(GTMHTTPFetcher *)fetcher + finishedWithData:(NSData *)data + error:(NSError *)error; + +- (void)auth:(GTMOAuth2Authentication *)auth +finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher + error:(NSError *)error; + +- (void)invokeCallbackArgs:(GTMOAuth2AuthorizationArgs *)args; + ++ (void)invokeDelegate:(id)delegate + selector:(SEL)sel + object:(id)obj1 + object:(id)obj2 + object:(id)obj3; + ++ (NSString *)unencodedOAuthParameterForString:(NSString *)str; ++ (NSString *)encodedQueryParametersForDictionary:(NSDictionary *)dict; + ++ (NSDictionary *)dictionaryWithResponseData:(NSData *)data; + +@end + +@implementation GTMOAuth2Authentication + +@synthesize clientID = clientID_, + clientSecret = clientSecret_, + redirectURI = redirectURI_, + parameters = parameters_, + tokenURL = tokenURL_, + expirationDate = expirationDate_, + additionalTokenRequestParameters = additionalTokenRequestParameters_, + refreshFetcher = refreshFetcher_, + fetcherService = fetcherService_, + parserClass = parserClass_, + shouldAuthorizeAllRequests = shouldAuthorizeAllRequests_, + userData = userData_, + properties = properties_, + authorizationQueue = authorizationQueue_; + +// Response parameters +@dynamic accessToken, + refreshToken, + code, + assertion, + errorString, + tokenType, + scope, + expiresIn, + serviceProvider, + userEmail, + userEmailIsVerified; + +@dynamic canAuthorize; + ++ (id)authenticationWithServiceProvider:(NSString *)serviceProvider + tokenURL:(NSURL *)tokenURL + redirectURI:(NSString *)redirectURI + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret { + GTMOAuth2Authentication *obj = [[[self alloc] init] autorelease]; + obj.serviceProvider = serviceProvider; + obj.tokenURL = tokenURL; + obj.redirectURI = redirectURI; + obj.clientID = clientID; + obj.clientSecret = clientSecret; + return obj; +} + +- (id)init { + self = [super init]; + if (self) { + authorizationQueue_ = [[NSMutableArray alloc] init]; + parameters_ = [[NSMutableDictionary alloc] init]; + } + return self; +} + +- (NSString *)description { + NSArray *props = [NSArray arrayWithObjects:@"accessToken", @"refreshToken", + @"code", @"assertion", @"expirationDate", @"errorString", + nil]; + NSMutableString *valuesStr = [NSMutableString string]; + NSString *separator = @""; + for (NSString *prop in props) { + id result = [self valueForKey:prop]; + if (result) { + [valuesStr appendFormat:@"%@%@=\"%@\"", separator, prop, result]; + separator = @", "; + } + } + + return [NSString stringWithFormat:@"%@ %p: {%@}", + [self class], self, valuesStr]; +} + +- (void)dealloc { + [clientID_ release]; + [clientSecret_ release]; + [redirectURI_ release]; + [parameters_ release]; + [tokenURL_ release]; + [expirationDate_ release]; + [additionalTokenRequestParameters_ release]; + [refreshFetcher_ release]; + [authorizationQueue_ release]; + [userData_ release]; + [properties_ release]; + + [super dealloc]; +} + +#pragma mark - + +- (void)setKeysForResponseDictionary:(NSDictionary *)dict { + if (dict == nil) return; + + // If a new code or access token is being set, remove the old expiration + NSString *newCode = [dict objectForKey:kOAuth2CodeKey]; + NSString *newAccessToken = [dict objectForKey:kOAuth2AccessTokenKey]; + if (newCode || newAccessToken) { + self.expiresIn = nil; + } + + BOOL didRefreshTokenChange = NO; + NSString *refreshToken = [dict objectForKey:kOAuth2RefreshTokenKey]; + if (refreshToken) { + NSString *priorRefreshToken = self.refreshToken; + + if (priorRefreshToken != refreshToken + && (priorRefreshToken == nil + || ![priorRefreshToken isEqual:refreshToken])) { + didRefreshTokenChange = YES; + } + } + + [self.parameters addEntriesFromDictionary:dict]; + [self updateExpirationDate]; + + if (didRefreshTokenChange) { + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc postNotificationName:kGTMOAuth2RefreshTokenChanged + object:self + userInfo:nil]; + } + // NSLog(@"keys set ----------------------------\n%@", dict); +} + +- (void)setKeysForResponseString:(NSString *)str { + NSDictionary *dict = [[self class] dictionaryWithResponseString:str]; + [self setKeysForResponseDictionary:dict]; +} + +- (void)setKeysForResponseJSONData:(NSData *)data { + NSDictionary *dict = [self dictionaryWithJSONData:data]; + [self setKeysForResponseDictionary:dict]; +} + +- (NSDictionary *)dictionaryWithJSONData:(NSData *)data { + NSMutableDictionary *obj = nil; + NSError *error = nil; + + Class serializer = NSClassFromString(@"NSJSONSerialization"); + if (serializer) { + const NSUInteger kOpts = (1UL << 0); // NSJSONReadingMutableContainers + obj = [serializer JSONObjectWithData:data + options:kOpts + error:&error]; +#if DEBUG + if (error) { + NSString *str = [[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding] autorelease]; + NSLog(@"NSJSONSerialization error %@ parsing %@", + error, str); + } +#endif + return obj; + } else { + // try SBJsonParser or SBJSON + Class jsonParseClass = NSClassFromString(@"SBJsonParser"); + if (!jsonParseClass) { + jsonParseClass = NSClassFromString(@"SBJSON"); + } + if (jsonParseClass) { + GTMOAuth2ParserClass *parser = [[[jsonParseClass alloc] init] autorelease]; + NSString *jsonStr = [[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding] autorelease]; + if (jsonStr) { + obj = [parser objectWithString:jsonStr error:&error]; +#if DEBUG + if (error) { + NSLog(@"%@ error %@ parsing %@", NSStringFromClass(jsonParseClass), + error, jsonStr); + } +#endif + return obj; + } + } else { +#if DEBUG + NSAssert(0, @"GTMOAuth2Authentication: No parser available"); +#endif + } + } + return nil; +} + +#pragma mark Authorizing Requests + +// General entry point for authorizing requests + +#if NS_BLOCKS_AVAILABLE +// Authorizing with a completion block +- (void)authorizeRequest:(NSMutableURLRequest *)request + completionHandler:(void (^)(NSError *error))handler { + + GTMOAuth2AuthorizationArgs *args; + args = [GTMOAuth2AuthorizationArgs argsWithRequest:request + delegate:nil + selector:NULL + completionHandler:handler + thread:[NSThread currentThread]]; + [self authorizeRequestArgs:args]; +} +#endif + +// Authorizing with a callback selector +// +// Selector has the signature +// - (void)authentication:(GTMOAuth2Authentication *)auth +// request:(NSMutableURLRequest *)request +// finishedWithError:(NSError *)error; +- (void)authorizeRequest:(NSMutableURLRequest *)request + delegate:(id)delegate + didFinishSelector:(SEL)sel { + GTMAssertSelectorNilOrImplementedWithArgs(delegate, sel, + @encode(GTMOAuth2Authentication *), + @encode(NSMutableURLRequest *), + @encode(NSError *), 0); + + GTMOAuth2AuthorizationArgs *args; + args = [GTMOAuth2AuthorizationArgs argsWithRequest:request + delegate:delegate + selector:sel + completionHandler:nil + thread:[NSThread currentThread]]; + [self authorizeRequestArgs:args]; +} + +// Internal routine common to delegate and block invocations +- (BOOL)authorizeRequestArgs:(GTMOAuth2AuthorizationArgs *)args { + BOOL didAttempt = NO; + + @synchronized(authorizationQueue_) { + + BOOL shouldRefresh = [self shouldRefreshAccessToken]; + + if (shouldRefresh) { + // attempt to refresh now; once we have a fresh access token, we will + // authorize the request and call back to the user + didAttempt = YES; + + if (self.refreshFetcher == nil) { + // there's not already a refresh pending + SEL finishedSel = @selector(auth:finishedRefreshWithFetcher:error:); + self.refreshFetcher = [self beginTokenFetchWithDelegate:self + didFinishSelector:finishedSel]; + if (self.refreshFetcher) { + [authorizationQueue_ addObject:args]; + } + } else { + // there's already a refresh pending + [authorizationQueue_ addObject:args]; + } + } + + if (!shouldRefresh || self.refreshFetcher == nil) { + // we're not fetching a new access token, so we can authorize the request + // now + didAttempt = [self authorizeRequestImmediateArgs:args]; + } + } + return didAttempt; +} + +- (void)auth:(GTMOAuth2Authentication *)auth +finishedRefreshWithFetcher:(GTMHTTPFetcher *)fetcher + error:(NSError *)error { + @synchronized(authorizationQueue_) { + // If there's an error, we want to try using the old access token anyway, + // in case it's a backend problem preventing refresh, in which case + // access tokens past their expiration date may still work + + self.refreshFetcher = nil; + + // Swap in a new auth queue in case the callbacks try to immediately auth + // another request + NSArray *pendingAuthQueue = [NSArray arrayWithArray:authorizationQueue_]; + [authorizationQueue_ removeAllObjects]; + + BOOL hasAccessToken = ([self.accessToken length] > 0); + + if (hasAccessToken && error == nil) { + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc postNotificationName:kGTMOAuth2AccessTokenRefreshed + object:self + userInfo:nil]; + } + + for (GTMOAuth2AuthorizationArgs *args in pendingAuthQueue) { + if (!hasAccessToken && args.error == nil) { + args.error = error; + } + + [self authorizeRequestImmediateArgs:args]; + } + } +} + +- (BOOL)isAuthorizingRequest:(NSURLRequest *)request { + BOOL wasFound = NO; + @synchronized(authorizationQueue_) { + for (GTMOAuth2AuthorizationArgs *args in authorizationQueue_) { + if ([args request] == request) { + wasFound = YES; + break; + } + } + } + return wasFound; +} + +- (BOOL)isAuthorizedRequest:(NSURLRequest *)request { + NSString *authStr = [request valueForHTTPHeaderField:@"Authorization"]; + return ([authStr length] > 0); +} + +- (void)stopAuthorization { + @synchronized(authorizationQueue_) { + [authorizationQueue_ removeAllObjects]; + + [self.refreshFetcher stopFetching]; + self.refreshFetcher = nil; + } +} + +- (BOOL)authorizeRequestImmediateArgs:(GTMOAuth2AuthorizationArgs *)args { + // This authorization entry point never attempts to refresh the access token, + // but does call the completion routine + + NSMutableURLRequest *request = args.request; + + NSString *scheme = [[request URL] scheme]; + BOOL isAuthorizableRequest = self.shouldAuthorizeAllRequests + || [scheme caseInsensitiveCompare:@"https"] == NSOrderedSame; + if (!isAuthorizableRequest) { + // Request is not https, so may be insecure + // + // The NSError will be created below +#if DEBUG + NSLog(@"Cannot authorize request with scheme %@ (%@)", scheme, request); +#endif + } + + NSString *accessToken = self.accessToken; + if (isAuthorizableRequest && [accessToken length] > 0) { + if (request) { + // we have a likely valid access token + NSString *value = [NSString stringWithFormat:@"%s %@", + GTM_OAUTH2_BEARER, accessToken]; + [request setValue:value forHTTPHeaderField:@"Authorization"]; + } + + // We've authorized the request, even if the previous refresh + // failed with an error + args.error = nil; + } else if (args.error == nil) { + NSDictionary *userInfo = nil; + if (request) { + userInfo = [NSDictionary dictionaryWithObject:request + forKey:kGTMOAuth2ErrorRequestKey]; + } + NSInteger code = (isAuthorizableRequest ? + kGTMOAuth2ErrorAuthorizationFailed : + kGTMOAuth2ErrorUnauthorizableRequest); + args.error = [NSError errorWithDomain:kGTMOAuth2ErrorDomain + code:code + userInfo:userInfo]; + } + + // Invoke any callbacks on the proper thread + if (args.delegate || args.completionHandler) { + NSThread *targetThread = args.thread; + BOOL isSameThread = [targetThread isEqual:[NSThread currentThread]]; + + [self performSelector:@selector(invokeCallbackArgs:) + onThread:targetThread + withObject:args + waitUntilDone:isSameThread]; + } + + BOOL didAuth = (args.error == nil); + return didAuth; +} + +- (void)invokeCallbackArgs:(GTMOAuth2AuthorizationArgs *)args { + // Invoke the callbacks + NSError *error = args.error; + + id delegate = args.delegate; + SEL sel = args.selector; + if (delegate && sel) { + NSMutableURLRequest *request = args.request; + + NSMethodSignature *sig = [delegate methodSignatureForSelector:sel]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig]; + [invocation setSelector:sel]; + [invocation setTarget:delegate]; + [invocation setArgument:&self atIndex:2]; + [invocation setArgument:&request atIndex:3]; + [invocation setArgument:&error atIndex:4]; + [invocation invoke]; + } + +#if NS_BLOCKS_AVAILABLE + id handler = args.completionHandler; + if (handler) { + void (^authCompletionBlock)(NSError *) = handler; + authCompletionBlock(error); + } +#endif +} + +- (BOOL)authorizeRequest:(NSMutableURLRequest *)request { + // Entry point for synchronous authorization mechanisms + GTMOAuth2AuthorizationArgs *args; + args = [GTMOAuth2AuthorizationArgs argsWithRequest:request + delegate:nil + selector:NULL + completionHandler:nil + thread:[NSThread currentThread]]; + return [self authorizeRequestImmediateArgs:args]; +} + +- (BOOL)canAuthorize { + NSString *token = self.refreshToken; + if (token == nil) { + // For services which do not support refresh tokens, we'll just check + // the access token + token = self.accessToken; + } + BOOL canAuth = [token length] > 0; + return canAuth; +} + +- (BOOL)shouldRefreshAccessToken { + // We should refresh the access token when it's missing or nearly expired + // and we have a refresh token + BOOL shouldRefresh = NO; + NSString *accessToken = self.accessToken; + NSString *refreshToken = self.refreshToken; + NSString *assertion = self.assertion; + + BOOL hasRefreshToken = ([refreshToken length] > 0); + BOOL hasAccessToken = ([accessToken length] > 0); + BOOL hasAssertion = ([assertion length] > 0); + + // Determine if we need to refresh the access token + if (hasRefreshToken || hasAssertion) { + if (!hasAccessToken) { + shouldRefresh = YES; + } else { + // We'll consider the token expired if it expires 60 seconds from now + // or earlier + NSDate *expirationDate = self.expirationDate; + NSTimeInterval timeToExpire = [expirationDate timeIntervalSinceNow]; + if (expirationDate == nil || timeToExpire < 60.0) { + // access token has expired, or will in a few seconds + shouldRefresh = YES; + } + } + } + return shouldRefresh; +} + +- (void)waitForCompletionWithTimeout:(NSTimeInterval)timeoutInSeconds { + // If there is a refresh fetcher pending, wait for it. + // + // This is only intended for unit test or for use in command-line tools. + GTMHTTPFetcher *fetcher = self.refreshFetcher; + [fetcher waitForCompletionWithTimeout:timeoutInSeconds]; +} + +#pragma mark Token Fetch + +- (NSString *)userAgent { + NSBundle *bundle = [NSBundle mainBundle]; + NSString *appID = [bundle bundleIdentifier]; + + NSString *version = [bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"]; + if (version == nil) { + version = [bundle objectForInfoDictionaryKey:@"CFBundleVersion"]; + } + + if (appID && version) { + appID = [appID stringByAppendingFormat:@"/%@", version]; + } + + NSString *userAgent = @"gtm-oauth2"; + if (appID) { + userAgent = [userAgent stringByAppendingFormat:@" %@", appID]; + } + return userAgent; +} + +- (GTMHTTPFetcher *)beginTokenFetchWithDelegate:(id)delegate + didFinishSelector:(SEL)finishedSel { + + NSMutableDictionary *paramsDict = [NSMutableDictionary dictionary]; + + NSString *commentTemplate; + NSString *fetchType; + + NSString *refreshToken = self.refreshToken; + NSString *code = self.code; + NSString *assertion = self.assertion; + + if (refreshToken) { + // We have a refresh token + [paramsDict setObject:@"refresh_token" forKey:@"grant_type"]; + [paramsDict setObject:refreshToken forKey:@"refresh_token"]; + + fetchType = kGTMOAuth2FetchTypeRefresh; + commentTemplate = @"refresh token for %@"; + } else if (code) { + // We have a code string + [paramsDict setObject:@"authorization_code" forKey:@"grant_type"]; + [paramsDict setObject:code forKey:@"code"]; + + NSString *redirectURI = self.redirectURI; + if ([redirectURI length] > 0) { + [paramsDict setObject:redirectURI forKey:@"redirect_uri"]; + } + + NSString *scope = self.scope; + if ([scope length] > 0) { + [paramsDict setObject:scope forKey:@"scope"]; + } + + fetchType = kGTMOAuth2FetchTypeToken; + commentTemplate = @"fetch tokens for %@"; + } else if (assertion) { + // We have an assertion string + [paramsDict setObject:assertion forKey:@"assertion"]; + [paramsDict setObject:@"http://oauth.net/grant_type/jwt/1.0/bearer" + forKey:@"grant_type"]; + commentTemplate = @"fetch tokens for %@"; + fetchType = kGTMOAuth2FetchTypeAssertion; + } else { +#if DEBUG + NSAssert(0, @"unexpected lack of code or refresh token for fetching"); +#endif + return nil; + } + + NSString *clientID = self.clientID; + if ([clientID length] > 0) { + [paramsDict setObject:clientID forKey:@"client_id"]; + } + + NSString *clientSecret = self.clientSecret; + if ([clientSecret length] > 0) { + [paramsDict setObject:clientSecret forKey:@"client_secret"]; + } + + NSDictionary *additionalParams = self.additionalTokenRequestParameters; + if (additionalParams) { + [paramsDict addEntriesFromDictionary:additionalParams]; + } + + NSString *paramStr = [[self class] encodedQueryParametersForDictionary:paramsDict]; + NSData *paramData = [paramStr dataUsingEncoding:NSUTF8StringEncoding]; + + NSURL *tokenURL = self.tokenURL; + + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:tokenURL]; + [request setValue:@"application/x-www-form-urlencoded" + forHTTPHeaderField:@"Content-Type"]; + + NSString *userAgent = [self userAgent]; + [request setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + + GTMHTTPFetcher *fetcher; + id fetcherService = self.fetcherService; + if (fetcherService) { + fetcher = [fetcherService fetcherWithRequest:request]; + + // Don't use an authorizer for an auth token fetch + fetcher.authorizer = nil; + } else { + fetcher = [GTMHTTPFetcher fetcherWithRequest:request]; + } + + [fetcher setCommentWithFormat:commentTemplate, [tokenURL host]]; + fetcher.postData = paramData; + fetcher.retryEnabled = YES; + fetcher.maxRetryInterval = 15.0; + + // Fetcher properties will retain the delegate + [fetcher setProperty:delegate forKey:kTokenFetchDelegateKey]; + if (finishedSel) { + NSString *selStr = NSStringFromSelector(finishedSel); + [fetcher setProperty:selStr forKey:kTokenFetchSelectorKey]; + } + + if ([fetcher beginFetchWithDelegate:self + didFinishSelector:@selector(tokenFetcher:finishedWithData:error:)]) { + // Fetch began + [self notifyFetchIsRunning:YES fetcher:fetcher type:fetchType]; + return fetcher; + } else { + // Failed to start fetching; typically a URL issue + NSError *error = [NSError errorWithDomain:kGTMHTTPFetcherStatusDomain + code:-1 + userInfo:nil]; + [[self class] invokeDelegate:delegate + selector:finishedSel + object:self + object:nil + object:error]; + return nil; + } +} + +- (void)tokenFetcher:(GTMHTTPFetcher *)fetcher + finishedWithData:(NSData *)data + error:(NSError *)error { + [self notifyFetchIsRunning:NO fetcher:fetcher type:nil]; + + NSDictionary *responseHeaders = [fetcher responseHeaders]; + NSString *responseType = [responseHeaders valueForKey:@"Content-Type"]; + BOOL isResponseJSON = [responseType hasPrefix:@"application/json"]; + BOOL hasData = ([data length] > 0); + + if (error) { + // Failed; if the error body is JSON, parse it and add it to the error's + // userInfo dictionary + if (hasData) { + if (isResponseJSON) { + NSDictionary *errorJson = [self dictionaryWithJSONData:data]; + if ([errorJson count] > 0) { +#if DEBUG + NSLog(@"Error %@\nError data:\n%@", error, errorJson); +#endif + // Add the JSON error body to the userInfo of the error + NSMutableDictionary *userInfo; + userInfo = [NSMutableDictionary dictionaryWithObject:errorJson + forKey:kGTMOAuth2ErrorJSONKey]; + NSDictionary *prevUserInfo = [error userInfo]; + if (prevUserInfo) { + [userInfo addEntriesFromDictionary:prevUserInfo]; + } + error = [NSError errorWithDomain:[error domain] + code:[error code] + userInfo:userInfo]; + } + } + } + } else { + // Succeeded; we have an access token +#if DEBUG + NSAssert(hasData, @"data missing in token response"); +#endif + + if (hasData) { + if (isResponseJSON) { + [self setKeysForResponseJSONData:data]; + } else { + // Support for legacy token servers that return form-urlencoded data + NSString *dataStr = [[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding] autorelease]; + [self setKeysForResponseString:dataStr]; + } + +#if DEBUG + // Watch for token exchanges that return a non-bearer or unlabeled token + NSString *tokenType = [self tokenType]; + if (tokenType == nil + || [tokenType caseInsensitiveCompare:@"bearer"] != NSOrderedSame) { + NSLog(@"GTMOAuth2: Unexpected token type: %@", tokenType); + } +#endif + } + } + + id delegate = [fetcher propertyForKey:kTokenFetchDelegateKey]; + SEL sel = NULL; + NSString *selStr = [fetcher propertyForKey:kTokenFetchSelectorKey]; + if (selStr) sel = NSSelectorFromString(selStr); + + [[self class] invokeDelegate:delegate + selector:sel + object:self + object:fetcher + object:error]; + + // Prevent a circular reference from retaining the delegate + [fetcher setProperty:nil forKey:kTokenFetchDelegateKey]; +} + +#pragma mark Fetch Notifications + +- (void)notifyFetchIsRunning:(BOOL)isStarting + fetcher:(GTMHTTPFetcher *)fetcher + type:(NSString *)fetchType { + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + + NSString *name = (isStarting ? kGTMOAuth2FetchStarted : kGTMOAuth2FetchStopped); + NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: + fetcher, kGTMOAuth2FetcherKey, + fetchType, kGTMOAuth2FetchTypeKey, // fetchType may be nil + nil]; + [nc postNotificationName:name + object:self + userInfo:dict]; +} + +#pragma mark Persistent Response Strings + +- (void)setKeysForPersistenceResponseString:(NSString *)str { + // All persistence keys can be set directly as if returned by a server + [self setKeysForResponseString:str]; +} + +// This returns a "response string" that can be passed later to +// setKeysForResponseString: to reuse an old access token in a new auth object +- (NSString *)persistenceResponseString { + NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:4]; + + NSString *refreshToken = self.refreshToken; + NSString *accessToken = nil; + if (refreshToken == nil) { + // We store the access token only for services that do not support refresh + // tokens; otherwise, we assume the access token is too perishable to + // be worth storing + accessToken = self.accessToken; + } + + // Any nil values will not set a dictionary entry + [dict setValue:refreshToken forKey:kOAuth2RefreshTokenKey]; + [dict setValue:accessToken forKey:kOAuth2AccessTokenKey]; + [dict setValue:self.serviceProvider forKey:kServiceProviderKey]; + [dict setValue:self.userEmail forKey:kUserEmailKey]; + [dict setValue:self.userEmailIsVerified forKey:kUserEmailIsVerifiedKey]; + [dict setValue:self.scope forKey:kOAuth2ScopeKey]; + + NSString *result = [[self class] encodedQueryParametersForDictionary:dict]; + return result; +} + +- (BOOL)primeForRefresh { + if (self.refreshToken == nil) { + // Cannot refresh without a refresh token + return NO; + } + self.accessToken = nil; + self.expiresIn = nil; + self.expirationDate = nil; + self.errorString = nil; + return YES; +} + +- (void)reset { + // Reset all per-authorization values + self.code = nil; + self.accessToken = nil; + self.refreshToken = nil; + self.assertion = nil; + self.expiresIn = nil; + self.errorString = nil; + self.expirationDate = nil; + self.userEmail = nil; + self.userEmailIsVerified = nil; +} + +#pragma mark Accessors for Response Parameters + +- (NSString *)accessToken { + return [self.parameters objectForKey:kOAuth2AccessTokenKey]; +} + +- (void)setAccessToken:(NSString *)str { + [self.parameters setValue:str forKey:kOAuth2AccessTokenKey]; +} + +- (NSString *)refreshToken { + return [self.parameters objectForKey:kOAuth2RefreshTokenKey]; +} + +- (void)setRefreshToken:(NSString *)str { + [self.parameters setValue:str forKey:kOAuth2RefreshTokenKey]; +} + +- (NSString *)code { + return [self.parameters objectForKey:kOAuth2CodeKey]; +} + +- (void)setCode:(NSString *)str { + [self.parameters setValue:str forKey:kOAuth2CodeKey]; +} + +- (NSString *)assertion { + return [self.parameters objectForKey:kOAuth2AssertionKey]; +} + +- (void)setAssertion:(NSString *)str { + [self.parameters setValue:str forKey:kOAuth2AssertionKey]; +} + +- (NSString *)errorString { + return [self.parameters objectForKey:kOAuth2ErrorKey]; +} + +- (void)setErrorString:(NSString *)str { + [self.parameters setValue:str forKey:kOAuth2ErrorKey]; +} + +- (NSString *)tokenType { + return [self.parameters objectForKey:kOAuth2TokenTypeKey]; +} + +- (void)setTokenType:(NSString *)str { + [self.parameters setValue:str forKey:kOAuth2TokenTypeKey]; +} + +- (NSString *)scope { + return [self.parameters objectForKey:kOAuth2ScopeKey]; +} + +- (void)setScope:(NSString *)str { + [self.parameters setValue:str forKey:kOAuth2ScopeKey]; +} + +- (NSNumber *)expiresIn { + return [self.parameters objectForKey:kOAuth2ExpiresInKey]; +} + +- (void)setExpiresIn:(NSNumber *)num { + [self.parameters setValue:num forKey:kOAuth2ExpiresInKey]; + [self updateExpirationDate]; +} + +- (void)updateExpirationDate { + // Update our absolute expiration time to something close to when + // the server expects the expiration + NSDate *date = nil; + NSNumber *expiresIn = self.expiresIn; + if (expiresIn) { + unsigned long deltaSeconds = [expiresIn unsignedLongValue]; + if (deltaSeconds > 0) { + date = [NSDate dateWithTimeIntervalSinceNow:deltaSeconds]; + } + } + self.expirationDate = date; +} + +// +// Keys custom to this class, not part of OAuth 2 +// + +- (NSString *)serviceProvider { + return [self.parameters objectForKey:kServiceProviderKey]; +} + +- (void)setServiceProvider:(NSString *)str { + [self.parameters setValue:str forKey:kServiceProviderKey]; +} + +- (NSString *)userEmail { + return [self.parameters objectForKey:kUserEmailKey]; +} + +- (void)setUserEmail:(NSString *)str { + [self.parameters setValue:str forKey:kUserEmailKey]; +} + +- (NSString *)userEmailIsVerified { + return [self.parameters objectForKey:kUserEmailIsVerifiedKey]; +} + +- (void)setUserEmailIsVerified:(NSString *)str { + [self.parameters setValue:str forKey:kUserEmailIsVerifiedKey]; +} + +#pragma mark User Properties + +- (void)setProperty:(id)obj forKey:(NSString *)key { + if (obj == nil) { + // User passed in nil, so delete the property + [properties_ removeObjectForKey:key]; + } else { + // Be sure the property dictionary exists + if (properties_ == nil) { + [self setProperties:[NSMutableDictionary dictionary]]; + } + [properties_ setObject:obj forKey:key]; + } +} + +- (id)propertyForKey:(NSString *)key { + id obj = [properties_ objectForKey:key]; + + // Be sure the returned pointer has the life of the autorelease pool, + // in case self is released immediately + return [[obj retain] autorelease]; +} + +#pragma mark Utility Routines + ++ (NSString *)encodedOAuthValueForString:(NSString *)str { + CFStringRef originalString = (CFStringRef) str; + CFStringRef leaveUnescaped = NULL; + CFStringRef forceEscaped = CFSTR("!*'();:@&=+$,/?%#[]"); + + CFStringRef escapedStr = NULL; + if (str) { + escapedStr = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, + originalString, + leaveUnescaped, + forceEscaped, + kCFStringEncodingUTF8); + [(id)CFMakeCollectable(escapedStr) autorelease]; + } + + return (NSString *)escapedStr; +} + ++ (NSString *)encodedQueryParametersForDictionary:(NSDictionary *)dict { + // Make a string like "cat=fluffy@dog=spot" + NSMutableString *result = [NSMutableString string]; + NSArray *sortedKeys = [[dict allKeys] sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)]; + NSString *joiner = @""; + for (NSString *key in sortedKeys) { + NSString *value = [dict objectForKey:key]; + NSString *encodedValue = [self encodedOAuthValueForString:value]; + NSString *encodedKey = [self encodedOAuthValueForString:key]; + [result appendFormat:@"%@%@=%@", joiner, encodedKey, encodedValue]; + joiner = @"&"; + } + return result; +} + ++ (void)invokeDelegate:(id)delegate + selector:(SEL)sel + object:(id)obj1 + object:(id)obj2 + object:(id)obj3 { + if (delegate && sel) { + NSMethodSignature *sig = [delegate methodSignatureForSelector:sel]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig]; + [invocation setSelector:sel]; + [invocation setTarget:delegate]; + [invocation setArgument:&obj1 atIndex:2]; + [invocation setArgument:&obj2 atIndex:3]; + [invocation setArgument:&obj3 atIndex:4]; + [invocation invoke]; + } +} + ++ (NSString *)unencodedOAuthParameterForString:(NSString *)str { + NSString *plainStr = [str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; + return plainStr; +} + ++ (NSDictionary *)dictionaryWithResponseString:(NSString *)responseStr { + // Build a dictionary from a response string of the form + // "cat=fluffy&dog=spot". Missing or empty values are considered + // empty strings; keys and values are percent-decoded. + if (responseStr == nil) return nil; + + NSArray *items = [responseStr componentsSeparatedByString:@"&"]; + + NSMutableDictionary *responseDict = [NSMutableDictionary dictionaryWithCapacity:[items count]]; + + for (NSString *item in items) { + NSString *key = nil; + NSString *value = @""; + + NSRange equalsRange = [item rangeOfString:@"="]; + if (equalsRange.location != NSNotFound) { + // The parameter has at least one '=' + key = [item substringToIndex:equalsRange.location]; + + // There are characters after the '=' + value = [item substringFromIndex:(equalsRange.location + 1)]; + } else { + // The parameter has no '=' + key = item; + } + + NSString *plainKey = [[self class] unencodedOAuthParameterForString:key]; + NSString *plainValue = [[self class] unencodedOAuthParameterForString:value]; + + [responseDict setObject:plainValue forKey:plainKey]; + } + + return responseDict; +} + ++ (NSDictionary *)dictionaryWithResponseData:(NSData *)data { + NSString *responseStr = [[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding] autorelease]; + NSDictionary *dict = [self dictionaryWithResponseString:responseStr]; + return dict; +} + ++ (NSString *)scopeWithStrings:(NSString *)str, ... { + // concatenate the strings, joined by a single space + NSString *result = @""; + NSString *joiner = @""; + if (str) { + va_list argList; + va_start(argList, str); + while (str) { + result = [result stringByAppendingFormat:@"%@%@", joiner, str]; + joiner = @" "; + str = va_arg(argList, id); + } + va_end(argList); + } + return result; +} + +@end + +#endif // GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.h b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.h new file mode 100644 index 00000000..a09be13c --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.h @@ -0,0 +1,174 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// This sign-in object opens and closes the web view window as needed for +// users to sign in. For signing in to Google, it also obtains +// the authenticated user's email address. +// +// Typically, this will be managed for the application by +// GTMOAuth2ViewControllerTouch or GTMOAuth2WindowController, so this +// class's interface is interesting only if +// you are creating your own window controller for sign-in. +// +// +// Delegate methods implemented by the window controller +// +// The window controller implements two methods for use by the sign-in object, +// the webRequestSelector and the finishedSelector: +// +// webRequestSelector has a signature matching +// - (void)signIn:(GTMOAuth2SignIn *)signIn displayRequest:(NSURLRequest *)request +// +// The web request selector will be invoked with a request to be displayed, or +// nil to close the window when the final callback request has been encountered. +// +// +// finishedSelector has a signature matching +// - (void)signin:(GTMOAuth2SignIn *)signin finishedWithAuth:(GTMOAuth2Authentication *)auth error:(NSError *)error +// +// The finished selector will be invoked when sign-in has completed, except +// when explicitly canceled by calling cancelSigningIn +// + +#if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES + +#import +#import + +// GTMHTTPFetcher brings in GTLDefines/GDataDefines +#import "GTMHTTPFetcher.h" + +#import "GTMOAuth2Authentication.h" + +@interface GTMOAuth2SignIn : NSObject { + @private + GTMOAuth2Authentication *auth_; + + // the endpoint for displaying the sign-in page + NSURL *authorizationURL_; + NSDictionary *additionalAuthorizationParameters_; + + id delegate_; + SEL webRequestSelector_; + SEL finishedSelector_; + + BOOL hasHandledCallback_; + + GTMHTTPFetcher *pendingFetcher_; + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT + BOOL shouldFetchGoogleUserEmail_; + BOOL shouldFetchGoogleUserProfile_; + NSDictionary *userProfile_; +#endif + + SCNetworkReachabilityRef reachabilityRef_; + NSTimer *networkLossTimer_; + NSTimeInterval networkLossTimeoutInterval_; + BOOL hasNotifiedNetworkLoss_; + + id userData_; +} + +@property (nonatomic, retain) GTMOAuth2Authentication *authentication; + +@property (nonatomic, retain) NSURL *authorizationURL; +@property (nonatomic, retain) NSDictionary *additionalAuthorizationParameters; + +// The delegate is released when signing in finishes or is cancelled +@property (nonatomic, retain) id delegate; +@property (nonatomic, assign) SEL webRequestSelector; +@property (nonatomic, assign) SEL finishedSelector; + +@property (nonatomic, retain) id userData; + +// By default, signing in to Google will fetch the user's email, but will not +// fetch the user's profile. +// +// The email is saved in the auth object. +// The profile is available immediately after sign-in. +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT +@property (nonatomic, assign) BOOL shouldFetchGoogleUserEmail; +@property (nonatomic, assign) BOOL shouldFetchGoogleUserProfile; +@property (nonatomic, retain, readonly) NSDictionary *userProfile; +#endif + +// The default timeout for an unreachable network during display of the +// sign-in page is 30 seconds; set this to 0 to have no timeout +@property (nonatomic, assign) NSTimeInterval networkLossTimeoutInterval; + +// The delegate is retained until sign-in has completed or been canceled +// +// designated initializer +- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + delegate:(id)delegate + webRequestSelector:(SEL)webRequestSelector + finishedSelector:(SEL)finishedSelector; + +// A default authentication object for signing in to Google services +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (GTMOAuth2Authentication *)standardGoogleAuthenticationForScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret; +#endif + +#pragma mark Methods used by the Window Controller + +// Start the sequence of fetches and sign-in window display for sign-in +- (BOOL)startSigningIn; + +// Stop any pending fetches, and close the window (but don't call the +// delegate's finishedSelector) +- (void)cancelSigningIn; + +// Window controllers must tell the sign-in object about any redirect +// requested by the web view, and any changes in the webview window title +// +// If these return YES then the event was handled by the +// sign-in object (typically by closing the window) and should be ignored by +// the window controller's web view + +- (BOOL)requestRedirectedToRequest:(NSURLRequest *)redirectedRequest; +- (BOOL)titleChanged:(NSString *)title; +- (BOOL)cookiesChanged:(NSHTTPCookieStorage *)cookieStorage; +- (BOOL)loadFailedWithError:(NSError *)error; + +// Window controllers must tell the sign-in object if the window was closed +// prematurely by the user (but not by the sign-in object); this calls the +// delegate's finishedSelector +- (void)windowWasClosed; + +#pragma mark - + +// Revocation of an authorized token from Google +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (void)revokeTokenForGoogleAuthentication:(GTMOAuth2Authentication *)auth; +#endif + +#pragma mark - + +// Standard authentication values ++ (NSString *)nativeClientRedirectURI; +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (NSURL *)googleAuthorizationURL; ++ (NSURL *)googleTokenURL; ++ (NSURL *)googleUserInfoURL; +#endif + +@end + +#endif // #if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.m b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.m new file mode 100644 index 00000000..f1a11ee5 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.m @@ -0,0 +1,814 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES + +#define GTMOAUTH2SIGNIN_DEFINE_GLOBALS 1 +#import "GTMOAuth2SignIn.h" + +// we'll default to timing out if the network becomes unreachable for more +// than 30 seconds when the sign-in page is displayed +static const NSTimeInterval kDefaultNetworkLossTimeoutInterval = 30.0; + +// URI indicating an installed app is signing in. This is described at +// +// http://code.google.com/apis/accounts/docs/OAuth2.html#IA +// +NSString *const kOOBString = @"urn:ietf:wg:oauth:2.0:oob"; + + +@interface GTMOAuth2Authentication (InternalMethods) +- (NSDictionary *)dictionaryWithJSONData:(NSData *)data; +@end + +@interface GTMOAuth2SignIn () +@property (assign) BOOL hasHandledCallback; +@property (retain) GTMHTTPFetcher *pendingFetcher; +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT +@property (nonatomic, retain, readwrite) NSDictionary *userProfile; +#endif + +- (void)invokeFinalCallbackWithError:(NSError *)error; + +- (BOOL)startWebRequest; ++ (NSMutableURLRequest *)mutableURLRequestWithURL:(NSURL *)oldURL + paramString:(NSString *)paramStr; +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT +- (void)fetchGoogleUserInfo; +#endif +- (void)finishSignInWithError:(NSError *)error; + +- (void)handleCallbackReached; + +- (void)auth:(GTMOAuth2Authentication *)auth +finishedWithFetcher:(GTMHTTPFetcher *)fetcher + error:(NSError *)error; + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT +- (void)infoFetcher:(GTMHTTPFetcher *)fetcher + finishedWithData:(NSData *)data + error:(NSError *)error; +#endif + +- (void)closeTheWindow; + +- (void)startReachabilityCheck; +- (void)stopReachabilityCheck; +- (void)reachabilityTarget:(SCNetworkReachabilityRef)reachabilityRef + changedFlags:(SCNetworkConnectionFlags)flags; +- (void)reachabilityTimerFired:(NSTimer *)timer; +@end + +@implementation GTMOAuth2SignIn + +@synthesize authentication = auth_; + +@synthesize authorizationURL = authorizationURL_; +@synthesize additionalAuthorizationParameters = additionalAuthorizationParameters_; + +@synthesize delegate = delegate_; +@synthesize webRequestSelector = webRequestSelector_; +@synthesize finishedSelector = finishedSelector_; +@synthesize hasHandledCallback = hasHandledCallback_; +@synthesize pendingFetcher = pendingFetcher_; +@synthesize userData = userData_; + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT +@synthesize shouldFetchGoogleUserEmail = shouldFetchGoogleUserEmail_; +@synthesize shouldFetchGoogleUserProfile = shouldFetchGoogleUserProfile_; +@synthesize userProfile = userProfile_; +#endif + +@synthesize networkLossTimeoutInterval = networkLossTimeoutInterval_; + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (NSURL *)googleAuthorizationURL { + NSString *str = @"https://accounts.google.com/o/oauth2/auth"; + return [NSURL URLWithString:str]; +} + ++ (NSURL *)googleTokenURL { + NSString *str = @"https://accounts.google.com/o/oauth2/token"; + return [NSURL URLWithString:str]; +} + ++ (NSURL *)googleRevocationURL { + NSString *urlStr = @"https://accounts.google.com/o/oauth2/revoke"; + return [NSURL URLWithString:urlStr]; +} + ++ (NSURL *)googleUserInfoURL { + NSString *urlStr = @"https://www.googleapis.com/oauth2/v1/userinfo"; + return [NSURL URLWithString:urlStr]; +} +#endif + ++ (NSString *)nativeClientRedirectURI { + return kOOBString; +} + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (GTMOAuth2Authentication *)standardGoogleAuthenticationForScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret { + NSString *redirectURI = [self nativeClientRedirectURI]; + NSURL *tokenURL = [self googleTokenURL]; + + GTMOAuth2Authentication *auth; + auth = [GTMOAuth2Authentication authenticationWithServiceProvider:kGTMOAuth2ServiceProviderGoogle + tokenURL:tokenURL + redirectURI:redirectURI + clientID:clientID + clientSecret:clientSecret]; + auth.scope = scope; + + return auth; +} +#endif + +- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + delegate:(id)delegate + webRequestSelector:(SEL)webRequestSelector + finishedSelector:(SEL)finishedSelector { + // check the selectors on debug builds + GTMAssertSelectorNilOrImplementedWithArgs(delegate, webRequestSelector, + @encode(GTMOAuth2SignIn *), @encode(NSURLRequest *), 0); + GTMAssertSelectorNilOrImplementedWithArgs(delegate, finishedSelector, + @encode(GTMOAuth2SignIn *), @encode(GTMOAuth2Authentication *), + @encode(NSError *), 0); + + // designated initializer + self = [super init]; + if (self) { + auth_ = [auth retain]; + authorizationURL_ = [authorizationURL retain]; + delegate_ = [delegate retain]; + webRequestSelector_ = webRequestSelector; + finishedSelector_ = finishedSelector; + + // for Google authentication, we want to automatically fetch user info +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT + NSString *host = [authorizationURL host]; + if ([host hasSuffix:@".google.com"]) { + shouldFetchGoogleUserEmail_ = YES; + } +#endif + + // default timeout for a lost internet connection while the server + // UI is displayed is 30 seconds + networkLossTimeoutInterval_ = kDefaultNetworkLossTimeoutInterval; + } + return self; +} + +- (void)dealloc { + [self stopReachabilityCheck]; + + [auth_ release]; + [authorizationURL_ release]; + [additionalAuthorizationParameters_ release]; + [delegate_ release]; + [pendingFetcher_ release]; +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT + [userProfile_ release]; +#endif + [userData_ release]; + + [super dealloc]; +} + +#pragma mark Sign-in Sequence Methods + +// stop any pending fetches, and close the window (but don't call the +// delegate's finishedSelector) +- (void)cancelSigningIn { + [self.pendingFetcher stopFetching]; + self.pendingFetcher = nil; + + [self.authentication stopAuthorization]; + + [self closeTheWindow]; + + [delegate_ autorelease]; + delegate_ = nil; +} + +// +// This is the entry point to begin the sequence +// - display the authentication web page, and monitor redirects +// - exchange the code for an access token and a refresh token +// - for Google sign-in, fetch the user's email address +// - tell the delegate we're finished +// +- (BOOL)startSigningIn { + // For signing in to Google, append the scope for obtaining the authenticated + // user email and profile, as appropriate +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT + GTMOAuth2Authentication *auth = self.authentication; + if (self.shouldFetchGoogleUserEmail) { + NSString *const emailScope = @"https://www.googleapis.com/auth/userinfo.email"; + NSString *scope = auth.scope; + if ([scope rangeOfString:emailScope].location == NSNotFound) { + scope = [GTMOAuth2Authentication scopeWithStrings:scope, emailScope, nil]; + auth.scope = scope; + } + } + + if (self.shouldFetchGoogleUserProfile) { + NSString *const profileScope = @"https://www.googleapis.com/auth/userinfo.profile"; + NSString *scope = auth.scope; + if ([scope rangeOfString:profileScope].location == NSNotFound) { + scope = [GTMOAuth2Authentication scopeWithStrings:scope, profileScope, nil]; + auth.scope = scope; + } + } +#endif + + // start the authorization + return [self startWebRequest]; +} + +- (NSMutableDictionary *)parametersForWebRequest { + GTMOAuth2Authentication *auth = self.authentication; + NSString *clientID = auth.clientID; + NSString *redirectURI = auth.redirectURI; + + BOOL hasClientID = ([clientID length] > 0); + BOOL hasRedirect = ([redirectURI length] > 0 + || redirectURI == [[self class] nativeClientRedirectURI]); + if (!hasClientID || !hasRedirect) { +#if DEBUG + NSAssert(hasClientID, @"GTMOAuth2SignIn: clientID needed"); + NSAssert(hasRedirect, @"GTMOAuth2SignIn: redirectURI needed"); +#endif + return NO; + } + + // invoke the UI controller's web request selector to display + // the authorization page + + // add params to the authorization URL + NSString *scope = auth.scope; + if ([scope length] == 0) scope = nil; + + NSMutableDictionary *paramsDict = [NSMutableDictionary dictionaryWithObjectsAndKeys: + @"code", @"response_type", + clientID, @"client_id", + scope, @"scope", // scope may be nil + nil]; + if (redirectURI) { + [paramsDict setObject:redirectURI forKey:@"redirect_uri"]; + } + return paramsDict; +} + +- (BOOL)startWebRequest { + NSMutableDictionary *paramsDict = [self parametersForWebRequest]; + + NSDictionary *additionalParams = self.additionalAuthorizationParameters; + if (additionalParams) { + [paramsDict addEntriesFromDictionary:additionalParams]; + } + + NSString *paramStr = [GTMOAuth2Authentication encodedQueryParametersForDictionary:paramsDict]; + + NSURL *authorizationURL = self.authorizationURL; + NSMutableURLRequest *request; + request = [[self class] mutableURLRequestWithURL:authorizationURL + paramString:paramStr]; + + [delegate_ performSelector:self.webRequestSelector + withObject:self + withObject:request]; + + // at this point, we're waiting on the server-driven html UI, so + // we want notification if we lose connectivity to the web server + [self startReachabilityCheck]; + return YES; +} + +// utility for making a request from an old URL with some additional parameters ++ (NSMutableURLRequest *)mutableURLRequestWithURL:(NSURL *)oldURL + paramString:(NSString *)paramStr { + NSString *query = [oldURL query]; + if ([query length] > 0) { + query = [query stringByAppendingFormat:@"&%@", paramStr]; + } else { + query = paramStr; + } + + NSString *portStr = @""; + NSString *oldPort = [[oldURL port] stringValue]; + if ([oldPort length] > 0) { + portStr = [@":" stringByAppendingString:oldPort]; + } + + NSString *qMark = [query length] > 0 ? @"?" : @""; + NSString *newURLStr = [NSString stringWithFormat:@"%@://%@%@%@%@%@", + [oldURL scheme], [oldURL host], portStr, + [oldURL path], qMark, query]; + NSURL *newURL = [NSURL URLWithString:newURLStr]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:newURL]; + return request; +} + +// entry point for the window controller to tell us that the window +// prematurely closed +- (void)windowWasClosed { + [self stopReachabilityCheck]; + + NSError *error = [NSError errorWithDomain:kGTMOAuth2ErrorDomain + code:kGTMOAuth2ErrorWindowClosed + userInfo:nil]; + [self invokeFinalCallbackWithError:error]; +} + +// internal method to tell the window controller to close the window +- (void)closeTheWindow { + [self stopReachabilityCheck]; + + // a nil request means the window should be closed + [delegate_ performSelector:self.webRequestSelector + withObject:self + withObject:nil]; +} + +// entry point for the window controller to tell us what web page has been +// requested +// +// When the request is for the callback URL, this method invokes +// handleCallbackReached and returns YES +- (BOOL)requestRedirectedToRequest:(NSURLRequest *)redirectedRequest { + // for Google's installed app sign-in protocol, we'll look for the + // end-of-sign-in indicator in the titleChanged: method below + NSString *redirectURI = self.authentication.redirectURI; + if (redirectURI == nil) return NO; + + // when we're searching for the window title string, then we can ignore + // redirects + NSString *standardURI = [[self class] nativeClientRedirectURI]; + if (standardURI != nil && [redirectURI isEqual:standardURI]) return NO; + + // compare the redirectURI, which tells us when the web sign-in is done, + // to the actual redirection + NSURL *redirectURL = [NSURL URLWithString:redirectURI]; + NSURL *requestURL = [redirectedRequest URL]; + + // avoid comparing to nil host and path values (such as when redirected to + // "about:blank") + NSString *requestHost = [requestURL host]; + NSString *requestPath = [requestURL path]; + BOOL isCallback; + if (requestHost && requestPath) { + isCallback = [[redirectURL host] isEqual:[requestURL host]] + && [[redirectURL path] isEqual:[requestURL path]]; + } else if (requestURL) { + // handle "about:blank" + isCallback = [redirectURL isEqual:requestURL]; + } else { + isCallback = NO; + } + + if (!isCallback) { + // tell the caller that this request is nothing interesting + return NO; + } + + // we've reached the callback URL + + // try to get the access code + if (!self.hasHandledCallback) { + NSString *responseStr = [[redirectedRequest URL] query]; + [self.authentication setKeysForResponseString:responseStr]; + +#if DEBUG + NSAssert([self.authentication.code length] > 0 + || [self.authentication.errorString length] > 0, + @"response lacks auth code or error"); +#endif + + [self handleCallbackReached]; + } + // tell the delegate that we did handle this request + return YES; +} + +// entry point for the window controller to tell us when a new page title has +// been loadded +// +// When the title indicates sign-in has completed, this method invokes +// handleCallbackReached and returns YES +- (BOOL)titleChanged:(NSString *)title { + // return YES if the OAuth flow ending title was detected + + // right now we're just looking for a parameter list following the last space + // in the title string, but hopefully we'll eventually get something better + // from the server to search for + NSRange paramsRange = [title rangeOfString:@" " + options:NSBackwardsSearch]; + NSUInteger spaceIndex = paramsRange.location; + if (spaceIndex != NSNotFound) { + NSString *responseStr = [title substringFromIndex:(spaceIndex + 1)]; + + NSDictionary *dict = [GTMOAuth2Authentication dictionaryWithResponseString:responseStr]; + + NSString *code = [dict objectForKey:@"code"]; + NSString *error = [dict objectForKey:@"error"]; + if ([code length] > 0 || [error length] > 0) { + + if (!self.hasHandledCallback) { + [self.authentication setKeysForResponseDictionary:dict]; + + [self handleCallbackReached]; + } + return YES; + } + } + return NO; +} + +- (BOOL)cookiesChanged:(NSHTTPCookieStorage *)cookieStorage { + // We're ignoring these. + return NO; +}; + +// entry point for the window controller to tell us when a load has failed +// in the webview +// +// if the initial authorization URL fails, bail out so the user doesn't +// see an empty webview +- (BOOL)loadFailedWithError:(NSError *)error { + NSURL *authorizationURL = self.authorizationURL; + NSURL *failedURL = [[error userInfo] valueForKey:@"NSErrorFailingURLKey"]; // NSURLErrorFailingURLErrorKey defined in 10.6 + + BOOL isAuthURL = [[failedURL host] isEqual:[authorizationURL host]] + && [[failedURL path] isEqual:[authorizationURL path]]; + + if (isAuthURL) { + // We can assume that we have no pending fetchers, since we only + // handle failure to load the initial authorization URL + [self closeTheWindow]; + [self invokeFinalCallbackWithError:error]; + return YES; + } + return NO; +} + +- (void)handleCallbackReached { + // the callback page was requested, or the authenticate code was loaded + // into a page's title, so exchange the auth code for access & refresh tokens + // and tell the window to close + + // avoid duplicate signals that the callback point has been reached + self.hasHandledCallback = YES; + + [self closeTheWindow]; + + NSError *error = nil; + + GTMOAuth2Authentication *auth = self.authentication; + NSString *code = auth.code; + if ([code length] > 0) { + // exchange the code for a token + SEL sel = @selector(auth:finishedWithFetcher:error:); + GTMHTTPFetcher *fetcher = [auth beginTokenFetchWithDelegate:self + didFinishSelector:sel]; + if (fetcher == nil) { + error = [NSError errorWithDomain:kGTMHTTPFetcherStatusDomain + code:-1 + userInfo:nil]; + } else { + self.pendingFetcher = fetcher; + } + + // notify the app so it can put up a post-sign in, pre-token exchange UI + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc postNotificationName:kGTMOAuth2UserSignedIn + object:self + userInfo:nil]; + } else { + // the callback lacked an auth code + NSString *errStr = auth.errorString; + NSDictionary *userInfo = nil; + if ([errStr length] > 0) { + userInfo = [NSDictionary dictionaryWithObject:errStr + forKey:kGTMOAuth2ErrorMessageKey]; + } + + error = [NSError errorWithDomain:kGTMOAuth2ErrorDomain + code:kGTMOAuth2ErrorAuthorizationFailed + userInfo:userInfo]; + } + + if (error) { + [self finishSignInWithError:error]; + } +} + +- (void)auth:(GTMOAuth2Authentication *)auth +finishedWithFetcher:(GTMHTTPFetcher *)fetcher + error:(NSError *)error { + self.pendingFetcher = nil; + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT + if (error == nil + && (self.shouldFetchGoogleUserEmail || self.shouldFetchGoogleUserProfile) + && [self.authentication.serviceProvider isEqual:kGTMOAuth2ServiceProviderGoogle]) { + // fetch the user's information from the Google server + [self fetchGoogleUserInfo]; + } else { + // we're not authorizing with Google, so we're done + [self finishSignInWithError:error]; + } +#else + [self finishSignInWithError:error]; +#endif +} + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT +- (void)fetchGoogleUserInfo { + // fetch the user's email address + NSURL *infoURL = [[self class] googleUserInfoURL]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:infoURL]; + + GTMOAuth2Authentication *auth = self.authentication; + + NSString *userAgent = [auth userAgent]; + [request setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + + [request setValue:@"no-cache" forHTTPHeaderField:@"Cache-Control"]; + + // we can do a synchronous authorization since this method is called + // only immediately after a fresh access token has been obtained + [auth authorizeRequest:request]; + + GTMHTTPFetcher *fetcher; + id fetcherService = auth.fetcherService; + if (fetcherService) { + fetcher = [fetcherService fetcherWithRequest:request]; + } else { + fetcher = [GTMHTTPFetcher fetcherWithRequest:request]; + } + fetcher.retryEnabled = YES; + fetcher.maxRetryInterval = 15.0; + fetcher.comment = @"user info"; + + [fetcher beginFetchWithDelegate:self + didFinishSelector:@selector(infoFetcher:finishedWithData:error:)]; + + self.pendingFetcher = fetcher; + + [auth notifyFetchIsRunning:YES + fetcher:fetcher + type:kGTMOAuth2FetchTypeUserInfo]; +} + +- (void)infoFetcher:(GTMHTTPFetcher *)fetcher + finishedWithData:(NSData *)data + error:(NSError *)error { + GTMOAuth2Authentication *auth = self.authentication; + [auth notifyFetchIsRunning:NO + fetcher:fetcher + type:nil]; + + self.pendingFetcher = nil; + + if (error) { +#if DEBUG + if (data) { + NSString *dataStr = [[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding] autorelease]; + NSLog(@"infoFetcher error: %@\n%@", error, dataStr); + } +#endif + } else { + // We have the authenticated user's info + if (data) { + NSDictionary *profileDict = [auth dictionaryWithJSONData:data]; + if (profileDict) { + self.userProfile = profileDict; + + // Save the email into the auth object + NSString *email = [profileDict objectForKey:@"email"]; + [auth setUserEmail:email]; + + NSNumber *verified = [profileDict objectForKey:@"verified_email"]; + [auth setUserEmailIsVerified:[verified stringValue]]; + } + } + } + [self finishSignInWithError:error]; +} + +#endif // !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT + +- (void)finishSignInWithError:(NSError *)error { + [self invokeFinalCallbackWithError:error]; +} + +// convenience method for making the final call to our delegate +- (void)invokeFinalCallbackWithError:(NSError *)error { + if (delegate_ && finishedSelector_) { + GTMOAuth2Authentication *auth = self.authentication; + + NSMethodSignature *sig = [delegate_ methodSignatureForSelector:finishedSelector_]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig]; + [invocation setSelector:finishedSelector_]; + [invocation setTarget:delegate_]; + [invocation setArgument:&self atIndex:2]; + [invocation setArgument:&auth atIndex:3]; + [invocation setArgument:&error atIndex:4]; + [invocation invoke]; + } + + // we'll no longer send messages to the delegate + // + // we want to autorelease it rather than assign to the property in case + // the delegate is below us in the call stack + [delegate_ autorelease]; + delegate_ = nil; +} + +#pragma mark Reachability monitoring + +static void ReachabilityCallBack(SCNetworkReachabilityRef target, + SCNetworkConnectionFlags flags, + void *info) { + // pass the flags to the signIn object + GTMOAuth2SignIn *signIn = (GTMOAuth2SignIn *)info; + + [signIn reachabilityTarget:target + changedFlags:flags]; +} + +- (void)startReachabilityCheck { + // the user may set the timeout to 0 to skip the reachability checking + // during display of the sign-in page + if (networkLossTimeoutInterval_ <= 0.0 || reachabilityRef_ != NULL) { + return; + } + + // create a reachability target from the authorization URL, add our callback, + // and schedule it on the run loop so we'll be notified if the network drops + NSURL *url = self.authorizationURL; + const char* host = [[url host] UTF8String]; + reachabilityRef_ = SCNetworkReachabilityCreateWithName(kCFAllocatorSystemDefault, + host); + if (reachabilityRef_) { + BOOL isScheduled = NO; + SCNetworkReachabilityContext ctx = { 0, self, NULL, NULL, NULL }; + + if (SCNetworkReachabilitySetCallback(reachabilityRef_, + ReachabilityCallBack, &ctx)) { + if (SCNetworkReachabilityScheduleWithRunLoop(reachabilityRef_, + CFRunLoopGetCurrent(), + kCFRunLoopDefaultMode)) { + isScheduled = YES; + } + } + + if (!isScheduled) { + CFRelease(reachabilityRef_); + reachabilityRef_ = NULL; + } + } +} + +- (void)destroyUnreachabilityTimer { + [networkLossTimer_ invalidate]; + [networkLossTimer_ autorelease]; + networkLossTimer_ = nil; +} + +- (void)reachabilityTarget:(SCNetworkReachabilityRef)reachabilityRef + changedFlags:(SCNetworkConnectionFlags)flags { + BOOL isConnected = (flags & kSCNetworkFlagsReachable) != 0 + && (flags & kSCNetworkFlagsConnectionRequired) == 0; + + if (isConnected) { + // server is again reachable + [self destroyUnreachabilityTimer]; + + if (hasNotifiedNetworkLoss_) { + // tell the user that the network has been found + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc postNotificationName:kGTMOAuth2NetworkFound + object:self + userInfo:nil]; + hasNotifiedNetworkLoss_ = NO; + } + } else { + // the server has become unreachable; start the timer, if necessary + if (networkLossTimer_ == nil + && networkLossTimeoutInterval_ > 0 + && !hasNotifiedNetworkLoss_) { + SEL sel = @selector(reachabilityTimerFired:); + networkLossTimer_ = [[NSTimer scheduledTimerWithTimeInterval:networkLossTimeoutInterval_ + target:self + selector:sel + userInfo:nil + repeats:NO] retain]; + } + } +} + +- (void)reachabilityTimerFired:(NSTimer *)timer { + // the user may call [[notification object] cancelSigningIn] to + // dismiss the sign-in + if (!hasNotifiedNetworkLoss_) { + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc postNotificationName:kGTMOAuth2NetworkLost + object:self + userInfo:nil]; + hasNotifiedNetworkLoss_ = YES; + } + + [self destroyUnreachabilityTimer]; +} + +- (void)stopReachabilityCheck { + [self destroyUnreachabilityTimer]; + + if (reachabilityRef_) { + SCNetworkReachabilityUnscheduleFromRunLoop(reachabilityRef_, + CFRunLoopGetCurrent(), + kCFRunLoopDefaultMode); + SCNetworkReachabilitySetCallback(reachabilityRef_, NULL, NULL); + + CFRelease(reachabilityRef_); + reachabilityRef_ = NULL; + } +} + +#pragma mark Token Revocation + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (void)revokeTokenForGoogleAuthentication:(GTMOAuth2Authentication *)auth { + if (auth.canAuthorize + && [auth.serviceProvider isEqual:kGTMOAuth2ServiceProviderGoogle]) { + + // create a signed revocation request for this authentication object + NSURL *url = [self googleRevocationURL]; + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; + [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; + + NSString *token = auth.refreshToken; + NSString *encoded = [GTMOAuth2Authentication encodedOAuthValueForString:token]; + NSString *body = [@"token=" stringByAppendingString:encoded]; + + [request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]]; + [request setHTTPMethod:@"POST"]; + + NSString *userAgent = [auth userAgent]; + [request setValue:userAgent forHTTPHeaderField:@"User-Agent"]; + + // there's nothing to be done if revocation succeeds or fails + GTMHTTPFetcher *fetcher; + id fetcherService = auth.fetcherService; + if (fetcherService) { + fetcher = [fetcherService fetcherWithRequest:request]; + } else { + fetcher = [GTMHTTPFetcher fetcherWithRequest:request]; + } + fetcher.comment = @"revoke token"; + + // Use a completion handler fetch for better debugging, but only if we're + // guaranteed that blocks are available in the runtime +#if (!TARGET_OS_IPHONE && (MAC_OS_X_VERSION_MIN_REQUIRED >= 1060)) || \ + (TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MIN_REQUIRED >= 40000)) + // Blocks are available + [fetcher beginFetchWithCompletionHandler:^(NSData *data, NSError *error) { + #if DEBUG + if (error) { + NSString *errStr = [[[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding] autorelease]; + NSLog(@"revoke error: %@", errStr); + } + #endif // DEBUG + }]; +#else + // Blocks may not be available + [fetcher beginFetchWithDelegate:nil didFinishSelector:NULL]; +#endif + } + + [auth reset]; +} +#endif // !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT + +@end + +#endif // #if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.h b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.h new file mode 100644 index 00000000..0037ab30 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.h @@ -0,0 +1,344 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTMOAuth2ViewControllerTouch.h +// +// This view controller for iPhone handles sign-in via OAuth to Google or +// other services. +// +// This controller is not reusable; create a new instance of this controller +// every time the user will sign in. +// + +#if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES + +#import + +#if TARGET_OS_IPHONE + +#import + +#import "GTMOAuth2Authentication.h" + +#undef _EXTERN +#undef _INITIALIZE_AS +#ifdef GTMOAUTH2VIEWCONTROLLERTOUCH_DEFINE_GLOBALS +#define _EXTERN +#define _INITIALIZE_AS(x) =x +#else +#define _EXTERN extern +#define _INITIALIZE_AS(x) +#endif + +_EXTERN NSString* const kGTMOAuth2KeychainErrorDomain _INITIALIZE_AS(@"com.google.GTMOAuthKeychain"); + + +@class GTMOAuth2SignIn; +@class GTMOAuth2ViewControllerTouch; + +@interface GTMOAuth2ViewControllerTouch : UIViewController { + @private + UIButton *backButton_; + UIButton *forwardButton_; + UIView *navButtonsView_; + UIBarButtonItem *rightBarButtonItem_; + UIWebView *webView_; + + // The object responsible for the sign-in networking sequence; it holds + // onto the authentication object as well. + GTMOAuth2SignIn *signIn_; + + // the page request to load when awakeFromNib occurs + NSURLRequest *request_; + + // The user we're calling back + // + // The delegate is retained only until the callback is invoked + // or the sign-in is canceled + id delegate_; + SEL finishedSelector_; + +#if NS_BLOCKS_AVAILABLE + void (^completionBlock_)(GTMOAuth2ViewControllerTouch *, GTMOAuth2Authentication *, NSError *); +#endif + + NSString *keychainItemName_; + CFTypeRef keychainItemAccessibility_; + + // if non-nil, the html string to be displayed immediately upon opening + // of the web view + NSString *initialHTMLString_; + + // if non-nil, the URL for which cookies will be deleted when the + // browser view is dismissed + NSURL *browserCookiesURL_; + + id userData_; + NSMutableDictionary *properties_; + + // We delegate the decision to our owning NavigationController (if any). + // But, the NavigationController will call us back, and ask us. + // BOOL keeps us from infinite looping. + BOOL isInsideShouldAutorotateToInterfaceOrientation_; + + // YES, when view first shown in this signIn session. + BOOL isViewShown_; + + // YES, after the view has fully transitioned in. + BOOL didViewAppear_; + + // YES between sends of start and stop notifications + BOOL hasNotifiedWebViewStartedLoading_; + + // To prevent us from calling our delegate's selector more than once. + BOOL hasCalledFinished_; + + // Set in a webView callback. + BOOL hasDoneFinalRedirect_; + + // Set during the pop initiated by the sign-in object; otherwise, + // viewWillDisappear indicates that some external change of the view + // has stopped the sign-in. + BOOL didDismissSelf_; +} + +// the application and service name to use for saving the auth tokens +// to the keychain +@property (nonatomic, copy) NSString *keychainItemName; + +// the keychain item accessibility is a system constant for use +// with kSecAttrAccessible. +// +// Since it's a system constant, we do not need to retain it. +@property (nonatomic, assign) CFTypeRef keychainItemAccessibility; + +// optional html string displayed immediately upon opening the web view +// +// This string is visible just until the sign-in web page loads, and +// may be used for a "Loading..." type of message or to set the +// initial view color +@property (nonatomic, copy) NSString *initialHTMLString; + +// the underlying object to hold authentication tokens and authorize http +// requests +@property (nonatomic, retain, readonly) GTMOAuth2Authentication *authentication; + +// the underlying object which performs the sign-in networking sequence +@property (nonatomic, retain, readonly) GTMOAuth2SignIn *signIn; + +// user interface elements +@property (nonatomic, retain) IBOutlet UIButton *backButton; +@property (nonatomic, retain) IBOutlet UIButton *forwardButton; +@property (nonatomic, retain) IBOutlet UIView *navButtonsView; +@property (nonatomic, retain) IBOutlet UIBarButtonItem *rightBarButtonItem; +@property (nonatomic, retain) IBOutlet UIWebView *webView; + +// the default timeout for an unreachable network during display of the +// sign-in page is 10 seconds; set this to 0 to have no timeout +@property (nonatomic, assign) NSTimeInterval networkLossTimeoutInterval; + +// if set, cookies are deleted for this URL when the view is hidden +// +// For Google sign-ins, this is set by default to https://google.com/accounts +// but it may be explicitly set to nil to disable clearing of browser cookies +@property (nonatomic, retain) NSURL *browserCookiesURL; + +// userData is retained for the convenience of the caller +@property (nonatomic, retain) id userData; + +// Stored property values are retained for the convenience of the caller +- (void)setProperty:(id)obj forKey:(NSString *)key; +- (id)propertyForKey:(NSString *)key; + +@property (nonatomic, retain) NSDictionary *properties; + +// Method for creating a controller to authenticate to Google services +// +// scope is the requested scope of authorization +// (like "http://www.google.com/m8/feeds") +// +// keychain item name is used for storing the token on the keychain, +// keychainItemName should be like "My Application: Google Latitude" +// (or set to nil if no persistent keychain storage is desired) +// +// the delegate is retained only until the finished selector is invoked +// or the sign-in is canceled +// +// If you don't like the default nibName and bundle, you can change them +// using the UIViewController properties once you've made one of these. +// +// finishedSelector is called after authentication completes. It should follow +// this signature. +// +// - (void)viewController:(GTMOAuth2ViewControllerTouch *)viewController +// finishedWithAuth:(GTMOAuth2Authentication *)auth +// error:(NSError *)error; +// +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (id)controllerWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector; + +- (id)initWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector; + +#if NS_BLOCKS_AVAILABLE ++ (id)controllerWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler; + +- (id)initWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler; +#endif +#endif + +// Create a controller for authenticating to non-Google services, taking +// explicit endpoint URLs and an authentication object ++ (id)controllerWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName // may be nil + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector; + +// This is the designated initializer +- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector; + +#if NS_BLOCKS_AVAILABLE ++ (id)controllerWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName // may be nil + completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler; + +- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName + completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler; +#endif + +// Override default in UIViewController. If we have a navigationController, ask +// it. else default result (i.e., Portrait mode only). +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation; + +// subclasses may override authNibName to specify a custom name ++ (NSString *)authNibName; + +// subclasses may override authNibBundle to specify a custom bundle ++ (NSBundle *)authNibBundle; + +// apps may replace the sign-in class with their own subclass of it ++ (Class)signInClass; ++ (void)setSignInClass:(Class)theClass; + +- (void)cancelSigningIn; + +// revocation of an authorized token from Google +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (void)revokeTokenForGoogleAuthentication:(GTMOAuth2Authentication *)auth; +#endif + +// +// Keychain +// + +// create an authentication object for Google services from the access +// token and secret stored in the keychain; if no token is available, return +// an unauthorized auth object +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (GTMOAuth2Authentication *)authForGoogleFromKeychainForName:(NSString *)keychainItemName + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret; +#endif + +// add tokens from the keychain, if available, to the authentication object +// +// returns YES if the authentication object was authorized from the keychain ++ (BOOL)authorizeFromKeychainForName:(NSString *)keychainItemName + authentication:(GTMOAuth2Authentication *)auth; + +// method for deleting the stored access token and secret, useful for "signing +// out" ++ (BOOL)removeAuthFromKeychainForName:(NSString *)keychainItemName; + +// method for saving the stored access token and secret ++ (BOOL)saveParamsToKeychainForName:(NSString *)keychainItemName + accessibility:(CFTypeRef)accessibility + authentication:(GTMOAuth2Authentication *)auth; + +// older version, defaults to kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly ++ (BOOL)saveParamsToKeychainForName:(NSString *)keychainItemName + authentication:(GTMOAuth2Authentication *)auth; + +@end + +// To function, GTMOAuth2ViewControllerTouch needs a certain amount of access +// to the iPhone's keychain. To keep things simple, its keychain access is +// broken out into a helper class. We declare it here in case you'd like to use +// it too, to store passwords. + +enum { + kGTMOAuth2KeychainErrorBadArguments = -1301, + kGTMOAuth2KeychainErrorNoPassword = -1302 +}; + + +@interface GTMOAuth2Keychain : NSObject + ++ (GTMOAuth2Keychain *)defaultKeychain; + +// OK to pass nil for the error parameter. +- (NSString *)passwordForService:(NSString *)service + account:(NSString *)account + error:(NSError **)error; + +// OK to pass nil for the error parameter. +- (BOOL)removePasswordForService:(NSString *)service + account:(NSString *)account + error:(NSError **)error; + +// OK to pass nil for the error parameter. +// +// accessibility should be one of the constants for kSecAttrAccessible +// such as kSecAttrAccessibleWhenUnlocked +- (BOOL)setPassword:(NSString *)password + forService:(NSString *)service + accessibility:(CFTypeRef)accessibility + account:(NSString *)account + error:(NSError **)error; + +// For unit tests: allow setting a mock object ++ (void)setDefaultKeychain:(GTMOAuth2Keychain *)keychain; + +@end + +#endif // TARGET_OS_IPHONE + +#endif // #if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.m b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.m new file mode 100644 index 00000000..99952b0b --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.m @@ -0,0 +1,970 @@ +/* Copyright (c) 2011 Google Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// GTMOAuth2ViewControllerTouch.m +// + +#import +#import + +#if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES + +#if TARGET_OS_IPHONE + +#define GTMOAUTH2VIEWCONTROLLERTOUCH_DEFINE_GLOBALS 1 +#import "GTMOAuth2ViewControllerTouch.h" + +#import "GTMOAuth2SignIn.h" +#import "GTMOAuth2Authentication.h" + +static NSString * const kGTMOAuth2AccountName = @"OAuth"; +static GTMOAuth2Keychain* sDefaultKeychain = nil; + +@interface GTMOAuth2ViewControllerTouch() + +@property (nonatomic, copy) NSURLRequest *request; + +- (void)signIn:(GTMOAuth2SignIn *)signIn displayRequest:(NSURLRequest *)request; +- (void)signIn:(GTMOAuth2SignIn *)signIn +finishedWithAuth:(GTMOAuth2Authentication *)auth + error:(NSError *)error; +- (BOOL)isNavigationBarTranslucent; +- (void)moveWebViewFromUnderNavigationBar; +- (void)popView; +- (void)clearBrowserCookies; +@end + +@implementation GTMOAuth2ViewControllerTouch + +// IBOutlets +@synthesize request = request_, + backButton = backButton_, + forwardButton = forwardButton_, + navButtonsView = navButtonsView_, + rightBarButtonItem = rightBarButtonItem_, + webView = webView_; + +@synthesize keychainItemName = keychainItemName_, + keychainItemAccessibility = keychainItemAccessibility_, + initialHTMLString = initialHTMLString_, + browserCookiesURL = browserCookiesURL_, + signIn = signIn_, + userData = userData_, + properties = properties_; + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (id)controllerWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector { + return [[[self alloc] initWithScope:scope + clientID:clientID + clientSecret:clientSecret + keychainItemName:keychainItemName + delegate:delegate + finishedSelector:finishedSelector] autorelease]; +} + +- (id)initWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector { + // convenient entry point for Google authentication + + Class signInClass = [[self class] signInClass]; + + GTMOAuth2Authentication *auth; + auth = [signInClass standardGoogleAuthenticationForScope:scope + clientID:clientID + clientSecret:clientSecret]; + NSURL *authorizationURL = [signInClass googleAuthorizationURL]; + return [self initWithAuthentication:auth + authorizationURL:authorizationURL + keychainItemName:keychainItemName + delegate:delegate + finishedSelector:finishedSelector]; +} + +#if NS_BLOCKS_AVAILABLE + ++ (id)controllerWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler { + return [[[self alloc] initWithScope:scope + clientID:clientID + clientSecret:clientSecret + keychainItemName:keychainItemName + completionHandler:handler] autorelease]; +} + +- (id)initWithScope:(NSString *)scope + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret + keychainItemName:(NSString *)keychainItemName + completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler { + // convenient entry point for Google authentication + + Class signInClass = [[self class] signInClass]; + + GTMOAuth2Authentication *auth; + auth = [signInClass standardGoogleAuthenticationForScope:scope + clientID:clientID + clientSecret:clientSecret]; + NSURL *authorizationURL = [signInClass googleAuthorizationURL]; + self = [self initWithAuthentication:auth + authorizationURL:authorizationURL + keychainItemName:keychainItemName + delegate:nil + finishedSelector:NULL]; + if (self) { + completionBlock_ = [handler copy]; + } + return self; +} + +#endif // NS_BLOCKS_AVAILABLE +#endif // !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT + ++ (id)controllerWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector { + return [[[self alloc] initWithAuthentication:auth + authorizationURL:authorizationURL + keychainItemName:keychainItemName + delegate:delegate + finishedSelector:finishedSelector] autorelease]; +} + +- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName + delegate:(id)delegate + finishedSelector:(SEL)finishedSelector { + + NSString *nibName = [[self class] authNibName]; + NSBundle *nibBundle = [[self class] authNibBundle]; + + self = [super initWithNibName:nibName bundle:nibBundle]; + if (self != nil) { + delegate_ = [delegate retain]; + finishedSelector_ = finishedSelector; + + Class signInClass = [[self class] signInClass]; + + // use the supplied auth and OAuth endpoint URLs + signIn_ = [[signInClass alloc] initWithAuthentication:auth + authorizationURL:authorizationURL + delegate:self + webRequestSelector:@selector(signIn:displayRequest:) + finishedSelector:@selector(signIn:finishedWithAuth:error:)]; + + // if the user is signing in to a Google service, we'll delete the + // Google authentication browser cookies upon completion + // + // for other service domains, or to disable clearing of the cookies, + // set the browserCookiesURL property explicitly + NSString *authorizationHost = [signIn_.authorizationURL host]; + if ([authorizationHost hasSuffix:@".google.com"]) { + NSString *urlStr = [NSString stringWithFormat:@"https://%@/", + authorizationHost]; + NSURL *cookiesURL = [NSURL URLWithString:urlStr]; + [self setBrowserCookiesURL:cookiesURL]; + } + + [self setKeychainItemName:keychainItemName]; + } + return self; +} + +#if NS_BLOCKS_AVAILABLE ++ (id)controllerWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName + completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler { + return [[[self alloc] initWithAuthentication:auth + authorizationURL:authorizationURL + keychainItemName:keychainItemName + completionHandler:handler] autorelease]; +} + +- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth + authorizationURL:(NSURL *)authorizationURL + keychainItemName:(NSString *)keychainItemName + completionHandler:(void (^)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error))handler { + // fall back to the non-blocks init + self = [self initWithAuthentication:auth + authorizationURL:authorizationURL + keychainItemName:keychainItemName + delegate:nil + finishedSelector:NULL]; + if (self) { + completionBlock_ = [handler copy]; + } + return self; +} +#endif + +- (void)dealloc { + [webView_ setDelegate:nil]; + + [backButton_ release]; + [forwardButton_ release]; + [navButtonsView_ release]; + [rightBarButtonItem_ release]; + [webView_ release]; + [signIn_ release]; + [request_ release]; + [delegate_ release]; +#if NS_BLOCKS_AVAILABLE + [completionBlock_ release]; +#endif + [keychainItemName_ release]; + [initialHTMLString_ release]; + [browserCookiesURL_ release]; + [userData_ release]; + [properties_ release]; + + [super dealloc]; +} + ++ (NSString *)authNibName { + // subclasses may override this to specify a custom nib name + return @"GTMOAuth2ViewTouch"; +} + ++ (NSBundle *)authNibBundle { + // subclasses may override this to specify a custom nib bundle + return nil; +} + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (GTMOAuth2Authentication *)authForGoogleFromKeychainForName:(NSString *)keychainItemName + clientID:(NSString *)clientID + clientSecret:(NSString *)clientSecret { + Class signInClass = [self signInClass]; + NSURL *tokenURL = [signInClass googleTokenURL]; + NSString *redirectURI = [signInClass nativeClientRedirectURI]; + + GTMOAuth2Authentication *auth; + auth = [GTMOAuth2Authentication authenticationWithServiceProvider:kGTMOAuth2ServiceProviderGoogle + tokenURL:tokenURL + redirectURI:redirectURI + clientID:clientID + clientSecret:clientSecret]; + [[self class] authorizeFromKeychainForName:keychainItemName + authentication:auth]; + return auth; +} +#endif + ++ (BOOL)authorizeFromKeychainForName:(NSString *)keychainItemName + authentication:(GTMOAuth2Authentication *)newAuth { + newAuth.accessToken = nil; + + BOOL didGetTokens = NO; + GTMOAuth2Keychain *keychain = [GTMOAuth2Keychain defaultKeychain]; + NSString *password = [keychain passwordForService:keychainItemName + account:kGTMOAuth2AccountName + error:nil]; + if (password != nil) { + [newAuth setKeysForResponseString:password]; + didGetTokens = YES; + } + return didGetTokens; +} + ++ (BOOL)removeAuthFromKeychainForName:(NSString *)keychainItemName { + GTMOAuth2Keychain *keychain = [GTMOAuth2Keychain defaultKeychain]; + return [keychain removePasswordForService:keychainItemName + account:kGTMOAuth2AccountName + error:nil]; +} + ++ (BOOL)saveParamsToKeychainForName:(NSString *)keychainItemName + authentication:(GTMOAuth2Authentication *)auth { + return [self saveParamsToKeychainForName:keychainItemName + accessibility:NULL + authentication:auth]; +} + ++ (BOOL)saveParamsToKeychainForName:(NSString *)keychainItemName + accessibility:(CFTypeRef)accessibility + authentication:(GTMOAuth2Authentication *)auth { + [self removeAuthFromKeychainForName:keychainItemName]; + // don't save unless we have a token that can really authorize requests + if (![auth canAuthorize]) return NO; + + if (accessibility == NULL + && &kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly != NULL) { + accessibility = kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly; + } + + // make a response string containing the values we want to save + NSString *password = [auth persistenceResponseString]; + GTMOAuth2Keychain *keychain = [GTMOAuth2Keychain defaultKeychain]; + return [keychain setPassword:password + forService:keychainItemName + accessibility:accessibility + account:kGTMOAuth2AccountName + error:nil]; +} + +- (void)loadView { + NSString *nibPath = nil; + NSBundle *nibBundle = [self nibBundle]; + if (nibBundle == nil) { + nibBundle = [NSBundle mainBundle]; + } + NSString *nibName = self.nibName; + if (nibName != nil) { + nibPath = [nibBundle pathForResource:nibName ofType:@"nib"]; + } + if (nibPath != nil && [[NSFileManager defaultManager] fileExistsAtPath:nibPath]) { + [super loadView]; + } else { + // One of the requirements of loadView is that a valid view object is set to + // self.view upon completion. Otherwise, subclasses that attempt to + // access self.view after calling [super loadView] will enter an infinite + // loop due to the fact that UIViewController's -view accessor calls + // loadView when self.view is nil. + self.view = [[[UIView alloc] init] autorelease]; + +#if DEBUG + NSLog(@"missing %@.nib", nibName); +#endif + } +} + + +- (void)viewDidLoad { + // the app may prefer some html other than blank white to be displayed + // before the sign-in web page loads + NSString *html = self.initialHTMLString; + if ([html length] > 0) { + [[self webView] loadHTMLString:html baseURL:nil]; + } + + rightBarButtonItem_.customView = navButtonsView_; + self.navigationItem.rightBarButtonItem = rightBarButtonItem_; +} + +- (void)popView { + if (self.navigationController.topViewController == self) { + if (!self.view.isHidden) { + // Set the flag to our viewWillDisappear method so it knows + // this is a disappearance initiated by the sign-in object, + // not the user cancelling via the navigation controller + didDismissSelf_ = YES; + + [self.navigationController popViewControllerAnimated:YES]; + self.view.hidden = YES; + } + } +} + +- (void)notifyWithName:(NSString *)name + webView:(UIWebView *)webView + kind:(NSString *)kind { + BOOL isStarting = [name isEqual:kGTMOAuth2WebViewStartedLoading]; + if (hasNotifiedWebViewStartedLoading_ == isStarting) { + // Duplicate notification + // + // UIWebView's delegate methods are so unbalanced that there's little + // point trying to keep a count, as it could easily end up stuck greater + // than zero. + // + // We don't really have a way to track the starts and stops of + // subframe loads, too, as the webView in the notification is always + // for the topmost request. + return; + } + hasNotifiedWebViewStartedLoading_ = isStarting; + + // Notification for webview load starting and stopping + NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: + webView, kGTMOAuth2WebViewKey, + kind, kGTMOAuth2WebViewStopKindKey, // kind may be nil + nil]; + NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; + [nc postNotificationName:name + object:self + userInfo:dict]; +} + +- (void)cancelSigningIn { + // The application has explicitly asked us to cancel signing in + // (so no further callback is required) + hasCalledFinished_ = YES; + + [delegate_ autorelease]; + delegate_ = nil; + +#if NS_BLOCKS_AVAILABLE + [completionBlock_ autorelease]; + completionBlock_ = nil; +#endif + + // The sign-in object's cancel method will close the window + [signIn_ cancelSigningIn]; + hasDoneFinalRedirect_ = YES; +} + +static Class gSignInClass = Nil; + ++ (Class)signInClass { + if (gSignInClass == Nil) { + gSignInClass = [GTMOAuth2SignIn class]; + } + return gSignInClass; +} + ++ (void)setSignInClass:(Class)theClass { + gSignInClass = theClass; +} + +#pragma mark Token Revocation + +#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT ++ (void)revokeTokenForGoogleAuthentication:(GTMOAuth2Authentication *)auth { + [[self signInClass] revokeTokenForGoogleAuthentication:auth]; +} +#endif + +#pragma mark Browser Cookies + +- (GTMOAuth2Authentication *)authentication { + return self.signIn.authentication; +} + +- (void)clearBrowserCookies { + // if browserCookiesURL is non-nil, then get cookies for that URL + // and delete them from the common application cookie storage + NSURL *cookiesURL = [self browserCookiesURL]; + if (cookiesURL) { + NSHTTPCookieStorage *cookieStorage; + + cookieStorage = [NSHTTPCookieStorage sharedHTTPCookieStorage]; + NSArray *cookies = [cookieStorage cookiesForURL:cookiesURL]; + + for (NSHTTPCookie *cookie in cookies) { + [cookieStorage deleteCookie:cookie]; + } + } +} + +#pragma mark Accessors + +- (void)setNetworkLossTimeoutInterval:(NSTimeInterval)val { + signIn_.networkLossTimeoutInterval = val; +} + +- (NSTimeInterval)networkLossTimeoutInterval { + return signIn_.networkLossTimeoutInterval; +} + +- (BOOL)shouldUseKeychain { + NSString *name = self.keychainItemName; + return ([name length] > 0); +} + +#pragma mark User Properties + +- (void)setProperty:(id)obj forKey:(NSString *)key { + if (obj == nil) { + // User passed in nil, so delete the property + [properties_ removeObjectForKey:key]; + } else { + // Be sure the property dictionary exists + if (properties_ == nil) { + [self setProperties:[NSMutableDictionary dictionary]]; + } + [properties_ setObject:obj forKey:key]; + } +} + +- (id)propertyForKey:(NSString *)key { + id obj = [properties_ objectForKey:key]; + + // Be sure the returned pointer has the life of the autorelease pool, + // in case self is released immediately + return [[obj retain] autorelease]; +} + +#pragma mark SignIn callbacks + +- (void)signIn:(GTMOAuth2SignIn *)signIn displayRequest:(NSURLRequest *)request { + // this is the signIn object's webRequest method, telling the controller + // to either display the request in the webview, or close the window + // + // All web requests and all window closing goes through this routine + +#if DEBUG + if (self.navigationController) { + if (self.navigationController.topViewController != self && request != nil) { + NSLog(@"Unexpected: Request to show, when already on top. request %@", [request URL]); + } else if(self.navigationController.topViewController != self && request == nil) { + NSLog(@"Unexpected: Request to pop, when not on top. request nil"); + } + } +#endif + + if (request != nil) { + const NSTimeInterval kJanuary2011 = 1293840000; + BOOL isDateValid = ([[NSDate date] timeIntervalSince1970] > kJanuary2011); + if (isDateValid) { + // Display the request. + self.request = request; + BOOL shouldWaitForHTML = ([self.initialHTMLString length] > 0); + if (shouldWaitForHTML) { + [self.webView performSelector:@selector(loadRequest:) + withObject:request + afterDelay:0.05]; + } else { + [self.webView loadRequest:request]; + } + } else { + // clock date is invalid, so signing in would fail with an unhelpful error + // from the server. Warn the user in an html string showing a watch icon, + // question mark, and the system date and time. Hopefully this will clue + // in brighter users, or at least give them a clue when they report the + // problem to developers. + // + // Even better is for apps to check the system clock and show some more + // helpful, localized instructions for users; this is really a fallback. + NSString *html = @"

" + @"⌚ ?
System Clock Incorrect
%@" + @"
"; + NSString *errHTML = [NSString stringWithFormat:html, [NSDate date]]; + + [[self webView] loadHTMLString:errHTML baseURL:nil]; + } + } else { + // request was nil. + [self popView]; + } +} + +- (void)signIn:(GTMOAuth2SignIn *)signIn + finishedWithAuth:(GTMOAuth2Authentication *)auth + error:(NSError *)error { + if (!hasCalledFinished_) { + hasCalledFinished_ = YES; + + if (error == nil) { + if (self.shouldUseKeychain) { + NSString *keychainItemName = self.keychainItemName; + if (auth.canAuthorize) { + // save the auth params in the keychain + CFTypeRef accessibility = self.keychainItemAccessibility; + [[self class] saveParamsToKeychainForName:keychainItemName + accessibility:accessibility + authentication:auth]; + } else { + // remove the auth params from the keychain + [[self class] removeAuthFromKeychainForName:keychainItemName]; + } + } + } + + if (delegate_ && finishedSelector_) { + SEL sel = finishedSelector_; + NSMethodSignature *sig = [delegate_ methodSignatureForSelector:sel]; + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sig]; + [invocation setSelector:sel]; + [invocation setTarget:delegate_]; + [invocation setArgument:&self atIndex:2]; + [invocation setArgument:&auth atIndex:3]; + [invocation setArgument:&error atIndex:4]; + [invocation invoke]; + } + + [delegate_ autorelease]; + delegate_ = nil; + +#if NS_BLOCKS_AVAILABLE + if (completionBlock_) { + completionBlock_(self, auth, error); + + // release the block here to avoid a retain loop on the controller + [completionBlock_ autorelease]; + completionBlock_ = nil; + } +#endif + } +} + +- (void)moveWebViewFromUnderNavigationBar { + CGRect dontCare; + CGRect webFrame = self.view.bounds; + UINavigationBar *navigationBar = self.navigationController.navigationBar; + CGRectDivide(webFrame, &dontCare, &webFrame, + navigationBar.frame.size.height, CGRectMinYEdge); + [self.webView setFrame:webFrame]; +} + +// isTranslucent is defined in iPhoneOS 3.0 on. +- (BOOL)isNavigationBarTranslucent { + UINavigationBar *navigationBar = [[self navigationController] navigationBar]; + BOOL isTranslucent = + ([navigationBar respondsToSelector:@selector(isTranslucent)] && + [navigationBar isTranslucent]); + return isTranslucent; +} + +#pragma mark - +#pragma mark Protocol implementations + +- (void)viewWillAppear:(BOOL)animated { + if (!isViewShown_) { + isViewShown_ = YES; + if ([self isNavigationBarTranslucent]) { + [self moveWebViewFromUnderNavigationBar]; + } + if (![signIn_ startSigningIn]) { + // Can't start signing in. We must pop our view. + // UIWebview needs time to stabilize. Animations need time to complete. + // We remove ourself from the view stack after that. + [self performSelector:@selector(popView) + withObject:nil + afterDelay:0.5 + inModes:[NSArray arrayWithObject:NSRunLoopCommonModes]]; + } + } + [super viewWillAppear:animated]; +} + +- (void)viewDidAppear:(BOOL)animated { + didViewAppear_ = YES; + [super viewDidAppear:animated]; +} + +- (void)viewWillDisappear:(BOOL)animated { + if (!didDismissSelf_) { + // We won't receive further webview delegate messages, so be sure the + // started loading notification is balanced, if necessary + [self notifyWithName:kGTMOAuth2WebViewStoppedLoading + webView:self.webView + kind:kGTMOAuth2WebViewCancelled]; + + // We are not popping ourselves, so presumably we are being popped by the + // navigation controller; tell the sign-in object to close up shop + // + // this will indirectly call our signIn:finishedWithAuth:error: method + // for us + [signIn_ windowWasClosed]; + } + + // prevent the next sign-in from showing in the WebView that the user is + // already signed in + [self clearBrowserCookies]; + + [super viewWillDisappear:animated]; +} + +- (BOOL)webView:(UIWebView *)webView + shouldStartLoadWithRequest:(NSURLRequest *)request + navigationType:(UIWebViewNavigationType)navigationType { + + if (!hasDoneFinalRedirect_) { + hasDoneFinalRedirect_ = [signIn_ requestRedirectedToRequest:request]; + if (hasDoneFinalRedirect_) { + // signIn has told the view to close + return NO; + } + } + return YES; +} + +- (void)updateUI { + [backButton_ setEnabled:[[self webView] canGoBack]]; + [forwardButton_ setEnabled:[[self webView] canGoForward]]; +} + +- (void)webViewDidStartLoad:(UIWebView *)webView { + [self notifyWithName:kGTMOAuth2WebViewStartedLoading + webView:webView + kind:nil]; + [self updateUI]; +} + +- (void)webViewDidFinishLoad:(UIWebView *)webView { + [self notifyWithName:kGTMOAuth2WebViewStoppedLoading + webView:webView + kind:kGTMOAuth2WebViewFinished]; + + NSString *title = [webView stringByEvaluatingJavaScriptFromString:@"document.title"]; + if ([title length] > 0) { + [signIn_ titleChanged:title]; + } else { +#if DEBUG + // Verify that Javascript is enabled + NSString *result = [webView stringByEvaluatingJavaScriptFromString:@"1+1"]; + NSAssert([result integerValue] == 2, @"GTMOAuth2: Javascript is required"); +#endif + } + + [signIn_ cookiesChanged:[NSHTTPCookieStorage sharedHTTPCookieStorage]]; + + [self updateUI]; +} + +- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { + [self notifyWithName:kGTMOAuth2WebViewStoppedLoading + webView:webView + kind:kGTMOAuth2WebViewFailed]; + + // Tell the sign-in object that a load failed; if it was the authorization + // URL, it will pop the view and return an error to the delegate. + if (didViewAppear_) { + BOOL isUserInterruption = ([error code] == NSURLErrorCancelled + && [[error domain] isEqual:NSURLErrorDomain]); + if (isUserInterruption) { + // Ignore this error: + // Users report that this error occurs when clicking too quickly on the + // accept button, before the page has completely loaded. Ignoring + // this error seems to provide a better experience than does immediately + // cancelling sign-in. + // + // This error also occurs whenever UIWebView is sent the stopLoading + // message, so if we ever send that message intentionally, we need to + // revisit this bypass. + return; + } + + [signIn_ loadFailedWithError:error]; + } else { + // UIWebview needs time to stabilize. Animations need time to complete. + [signIn_ performSelector:@selector(loadFailedWithError:) + withObject:error + afterDelay:0.5 + inModes:[NSArray arrayWithObject:NSRunLoopCommonModes]]; + } +} + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { + BOOL value = YES; + if (!isInsideShouldAutorotateToInterfaceOrientation_) { + isInsideShouldAutorotateToInterfaceOrientation_ = YES; + UIViewController *navigationController = [self navigationController]; + if (navigationController != nil) { + value = [navigationController shouldAutorotateToInterfaceOrientation:interfaceOrientation]; + } else { + value = [super shouldAutorotateToInterfaceOrientation:interfaceOrientation]; + } + isInsideShouldAutorotateToInterfaceOrientation_ = NO; + } + return value; +} + +@end + + +#pragma mark Common Code + +@implementation GTMOAuth2Keychain + ++ (GTMOAuth2Keychain *)defaultKeychain { + if (sDefaultKeychain == nil) { + sDefaultKeychain = [[self alloc] init]; + } + return sDefaultKeychain; +} + + +// For unit tests: allow setting a mock object ++ (void)setDefaultKeychain:(GTMOAuth2Keychain *)keychain { + if (sDefaultKeychain != keychain) { + [sDefaultKeychain release]; + sDefaultKeychain = [keychain retain]; + } +} + +- (NSString *)keyForService:(NSString *)service account:(NSString *)account { + return [NSString stringWithFormat:@"com.google.GTMOAuth.%@%@", service, account]; +} + +// The Keychain API isn't available on the iPhone simulator in SDKs before 3.0, +// so, on early simulators we use a fake API, that just writes, unencrypted, to +// NSUserDefaults. +#if TARGET_IPHONE_SIMULATOR && __IPHONE_OS_VERSION_MAX_ALLOWED < 30000 +#pragma mark Simulator + +// Simulator - just simulated, not secure. +- (NSString *)passwordForService:(NSString *)service account:(NSString *)account error:(NSError **)error { + NSString *result = nil; + if (0 < [service length] && 0 < [account length]) { + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *key = [self keyForService:service account:account]; + result = [defaults stringForKey:key]; + if (result == nil && error != NULL) { + *error = [NSError errorWithDomain:kGTMOAuth2KeychainErrorDomain + code:kGTMOAuth2KeychainErrorNoPassword + userInfo:nil]; + } + } else if (error != NULL) { + *error = [NSError errorWithDomain:kGTMOAuth2KeychainErrorDomain + code:kGTMOAuth2KeychainErrorBadArguments + userInfo:nil]; + } + return result; + +} + + +// Simulator - just simulated, not secure. +- (BOOL)removePasswordForService:(NSString *)service account:(NSString *)account error:(NSError **)error { + BOOL didSucceed = NO; + if (0 < [service length] && 0 < [account length]) { + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *key = [self keyForService:service account:account]; + [defaults removeObjectForKey:key]; + [defaults synchronize]; + } else if (error != NULL) { + *error = [NSError errorWithDomain:kGTMOAuth2KeychainErrorDomain + code:kGTMOAuth2KeychainErrorBadArguments + userInfo:nil]; + } + return didSucceed; +} + +// Simulator - just simulated, not secure. +- (BOOL)setPassword:(NSString *)password + forService:(NSString *)service + accessibility:(CFTypeRef)accessibility + account:(NSString *)account + error:(NSError **)error { + BOOL didSucceed = NO; + if (0 < [password length] && 0 < [service length] && 0 < [account length]) { + NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; + NSString *key = [self keyForService:service account:account]; + [defaults setObject:password forKey:key]; + [defaults synchronize]; + didSucceed = YES; + } else if (error != NULL) { + *error = [NSError errorWithDomain:kGTMOAuth2KeychainErrorDomain + code:kGTMOAuth2KeychainErrorBadArguments + userInfo:nil]; + } + return didSucceed; +} + +#else // ! TARGET_IPHONE_SIMULATOR +#pragma mark Device + ++ (NSMutableDictionary *)keychainQueryForService:(NSString *)service account:(NSString *)account { + NSMutableDictionary *query = [NSMutableDictionary dictionaryWithObjectsAndKeys: + (id)kSecClassGenericPassword, (id)kSecClass, + @"OAuth", (id)kSecAttrGeneric, + account, (id)kSecAttrAccount, + service, (id)kSecAttrService, + nil]; + return query; +} + +- (NSMutableDictionary *)keychainQueryForService:(NSString *)service account:(NSString *)account { + return [[self class] keychainQueryForService:service account:account]; +} + + + +// iPhone +- (NSString *)passwordForService:(NSString *)service account:(NSString *)account error:(NSError **)error { + OSStatus status = kGTMOAuth2KeychainErrorBadArguments; + NSString *result = nil; + if (0 < [service length] && 0 < [account length]) { + CFDataRef passwordData = NULL; + NSMutableDictionary *keychainQuery = [self keychainQueryForService:service account:account]; + [keychainQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData]; + [keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit]; + + status = SecItemCopyMatching((CFDictionaryRef)keychainQuery, + (CFTypeRef *)&passwordData); + if (status == noErr && 0 < [(NSData *)passwordData length]) { + result = [[[NSString alloc] initWithData:(NSData *)passwordData + encoding:NSUTF8StringEncoding] autorelease]; + } + if (passwordData != NULL) { + CFRelease(passwordData); + } + } + if (status != noErr && error != NULL) { + *error = [NSError errorWithDomain:kGTMOAuth2KeychainErrorDomain + code:status + userInfo:nil]; + } + return result; +} + + +// iPhone +- (BOOL)removePasswordForService:(NSString *)service account:(NSString *)account error:(NSError **)error { + OSStatus status = kGTMOAuth2KeychainErrorBadArguments; + if (0 < [service length] && 0 < [account length]) { + NSMutableDictionary *keychainQuery = [self keychainQueryForService:service account:account]; + status = SecItemDelete((CFDictionaryRef)keychainQuery); + } + if (status != noErr && error != NULL) { + *error = [NSError errorWithDomain:kGTMOAuth2KeychainErrorDomain + code:status + userInfo:nil]; + } + return status == noErr; +} + +// iPhone +- (BOOL)setPassword:(NSString *)password + forService:(NSString *)service + accessibility:(CFTypeRef)accessibility + account:(NSString *)account + error:(NSError **)error { + OSStatus status = kGTMOAuth2KeychainErrorBadArguments; + if (0 < [service length] && 0 < [account length]) { + [self removePasswordForService:service account:account error:nil]; + if (0 < [password length]) { + NSMutableDictionary *keychainQuery = [self keychainQueryForService:service account:account]; + NSData *passwordData = [password dataUsingEncoding:NSUTF8StringEncoding]; + [keychainQuery setObject:passwordData forKey:(id)kSecValueData]; + + if (accessibility != NULL && &kSecAttrAccessible != NULL) { + [keychainQuery setObject:(id)accessibility + forKey:(id)kSecAttrAccessible]; + } + status = SecItemAdd((CFDictionaryRef)keychainQuery, NULL); + } + } + if (status != noErr && error != NULL) { + *error = [NSError errorWithDomain:kGTMOAuth2KeychainErrorDomain + code:status + userInfo:nil]; + } + return status == noErr; +} + +#endif // ! TARGET_IPHONE_SIMULATOR + +@end + +#endif // TARGET_OS_IPHONE + +#endif // #if GTM_INCLUDE_OAUTH2 || !GDATA_REQUIRE_SERVICE_INCLUDES diff --git a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewTouch.xib b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewTouch.xib new file mode 100644 index 00000000..f3f65e32 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewTouch.xib @@ -0,0 +1,456 @@ + + + + 768 + 10J869 + 851 + 1038.35 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 141 + + + YES + + + + + YES + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + YES + + YES + + + YES + + + + YES + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + OAuth + IBCocoaTouchFramework + + + IBCocoaTouchFramework + 1 + + + + 292 + + YES + + + 292 + {30, 30} + + NO + NO + IBCocoaTouchFramework + 0 + 0 + + Helvetica-Bold + 24 + 16 + + {0, -2} + â—€ + + 3 + MQA + + + 2 + MC41OTYwNzg0NiAwLjY4NjI3NDUzIDAuOTUyOTQxMjQgMC42MDAwMDAwMgA + + + + 3 + MC41AA + + + + + 292 + {{30, 0}, {30, 30}} + + NO + NO + IBCocoaTouchFramework + 0 + 0 + + {0, -2} + â–¶ + + + 2 + MC41ODQzMTM3NSAwLjY3NDUwOTgyIDAuOTUyOTQxMjQgMC42MDAwMDAwMgA + + + + + + {60, 30} + + + 3 + MSAwAA + + NO + NO + + 3 + + IBCocoaTouchFramework + + + + 274 + + YES + + + 274 + {320, 460} + + + 1 + MSAxIDEAA + + YES + YES + IBCocoaTouchFramework + 1 + YES + + + {320, 460} + + + 3 + MQA + + 2 + + + IBCocoaTouchFramework + + + + + YES + + + delegate + + + + 9 + + + + rightBarButtonItem + + + + 14 + + + + goBack + + + 7 + + 18 + + + + goForward + + + 7 + + 19 + + + + rightBarButtonItem + + + + 20 + + + + navButtonsView + + + + 22 + + + + backButton + + + + 25 + + + + forwardButton + + + + 26 + + + + view + + + + 28 + + + + webView + + + + 29 + + + + + YES + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 6 + + + YES + + + + + 10 + + + + + 15 + + + YES + + + + + + + 16 + + + + + 17 + + + + + 27 + + + YES + + + + + + 4 + + + + + + + YES + + YES + -1.CustomClassName + -2.CustomClassName + 10.IBPluginDependency + 15.IBEditorWindowLastContentRect + 15.IBPluginDependency + 16.IBPluginDependency + 17.IBPluginDependency + 27.IBEditorWindowLastContentRect + 27.IBPluginDependency + 4.IBPluginDependency + 6.IBPluginDependency + + + YES + GTMOAuth2ViewControllerTouch + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + {{34, 1031}, {60, 30}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + {{214, 696}, {320, 460}} + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + YES + + + YES + + + + + YES + + + YES + + + + 29 + + + + YES + + GTMOAuth2ViewControllerTouch + UIViewController + + YES + + YES + backButton + delegate_ + forwardButton + navButtonsView + rightBarButtonItem + userData_ + webView + + + YES + UIButton + id + UIButton + UIView + UIBarButtonItem + id + UIWebView + + + + YES + + YES + backButton + delegate_ + forwardButton + navButtonsView + rightBarButtonItem + userData_ + webView + + + YES + + backButton + UIButton + + + delegate_ + id + + + forwardButton + UIButton + + + navButtonsView + UIView + + + rightBarButtonItem + UIBarButtonItem + + + userData_ + id + + + webView + UIWebView + + + + + IBProjectSource + Touch/GTMOAuth2ViewControllerTouch.h + + + + + 0 + IBCocoaTouchFramework + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS + + + + com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3 + + + YES + ../GTMOAuth2.xcodeproj + 3 + 141 + + diff --git a/External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.h b/External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.h new file mode 100644 index 00000000..e4e2ac72 --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.h @@ -0,0 +1,113 @@ +// +// GTMObjC2Runtime.h +// +// Copyright 2007-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import +#import +#import "GTMDefines.h" + +// These functions exist for code that we want to compile on both the < 10.5 +// sdks and on the >= 10.5 sdks without warnings. It basically reimplements +// certain parts of the objc2 runtime in terms of the objc1 runtime. It is not +// a complete implementation as I've only implemented the routines I know we +// use. Feel free to add more as necessary. +// These functions are not documented because they conform to the documentation +// for the ObjC2 Runtime. + +#if OBJC_API_VERSION >= 2 // Only have optional and req'd keywords in ObjC2. +#define AT_OPTIONAL @optional +#define AT_REQUIRED @required +#else +#define AT_OPTIONAL +#define AT_REQUIRED +#endif + +// The file objc-runtime.h was moved to runtime.h and in Leopard, objc-runtime.h +// was just a wrapper around runtime.h. For the iPhone SDK, this objc-runtime.h +// is removed in the iPhoneOS2.0 SDK. +// +// The |Object| class was removed in the iPhone2.0 SDK too. +#if GTM_IPHONE_SDK +#import +#import +#else +#import +#import +#endif + +#import + +#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) +#import "objc/Protocol.h" + +OBJC_EXPORT Class object_getClass(id obj); +OBJC_EXPORT const char *class_getName(Class cls); +OBJC_EXPORT BOOL class_conformsToProtocol(Class cls, Protocol *protocol); +OBJC_EXPORT BOOL class_respondsToSelector(Class cls, SEL sel); +OBJC_EXPORT Class class_getSuperclass(Class cls); +OBJC_EXPORT Method *class_copyMethodList(Class cls, unsigned int *outCount); +OBJC_EXPORT SEL method_getName(Method m); +OBJC_EXPORT void method_exchangeImplementations(Method m1, Method m2); +OBJC_EXPORT IMP method_getImplementation(Method method); +OBJC_EXPORT IMP method_setImplementation(Method method, IMP imp); +OBJC_EXPORT struct objc_method_description protocol_getMethodDescription(Protocol *p, + SEL aSel, + BOOL isRequiredMethod, + BOOL isInstanceMethod); +OBJC_EXPORT BOOL sel_isEqual(SEL lhs, SEL rhs); + +// If building for 10.4 but using the 10.5 SDK, don't include these. +#if MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 +// atomics +// On Leopard these are GC aware +// Intentionally did not include the non-barrier versions, because I couldn't +// come up with a case personally where you wouldn't want to use the +// barrier versions. +GTM_INLINE bool OSAtomicCompareAndSwapPtrBarrier(void *predicate, + void *replacement, + void * volatile *theValue) { +#if defined(__LP64__) && __LP64__ + return OSAtomicCompareAndSwap64Barrier((int64_t)predicate, + (int64_t)replacement, + (int64_t *)theValue); +#else // defined(__LP64__) && __LP64__ + return OSAtomicCompareAndSwap32Barrier((int32_t)predicate, + (int32_t)replacement, + (int32_t *)theValue); +#endif // defined(__LP64__) && __LP64__ +} + +#endif // MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5 +#endif // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) + +#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5) + +GTM_INLINE BOOL objc_atomicCompareAndSwapGlobalBarrier(id predicate, + id replacement, + volatile id *objectLocation) { + return OSAtomicCompareAndSwapPtrBarrier(predicate, + replacement, + (void * volatile *)objectLocation); +} +GTM_INLINE BOOL objc_atomicCompareAndSwapInstanceVariableBarrier(id predicate, + id replacement, + volatile id *objectLocation) { + return OSAtomicCompareAndSwapPtrBarrier(predicate, + replacement, + (void * volatile *)objectLocation); +} +#endif // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_5) diff --git a/External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.m b/External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.m new file mode 100644 index 00000000..f284542c --- /dev/null +++ b/External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.m @@ -0,0 +1,163 @@ +// +// GTMObjC2Runtime.m +// +// Copyright 2007-2008 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations under +// the License. +// + +#import "GTMObjC2Runtime.h" + +#if GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) +#import +#import + +Class object_getClass(id obj) { + if (!obj) return NULL; + return obj->isa; +} + +const char *class_getName(Class cls) { + if (!cls) return "nil"; + return cls->name; +} + +BOOL class_conformsToProtocol(Class cls, Protocol *protocol) { + // We intentionally don't check cls as it crashes on Leopard so we want + // to crash on Tiger as well. + // I logged + // Radar 5572978 class_conformsToProtocol crashes when arg1 is passed as nil + // because it seems odd that this API won't accept nil for cls considering + // all the other apis will accept nil args. + // If this does get fixed, remember to enable the unit tests. + if (!protocol) return NO; + + struct objc_protocol_list *protos; + for (protos = cls->protocols; protos != NULL; protos = protos->next) { + for (long i = 0; i < protos->count; i++) { + if ([protos->list[i] conformsTo:protocol]) { + return YES; + } + } + } + return NO; +} + +Class class_getSuperclass(Class cls) { + if (!cls) return NULL; + return cls->super_class; +} + +BOOL class_respondsToSelector(Class cls, SEL sel) { + return class_getInstanceMethod(cls, sel) != nil; +} + +Method *class_copyMethodList(Class cls, unsigned int *outCount) { + if (!cls) return NULL; + + unsigned int count = 0; + void *iterator = NULL; + struct objc_method_list *mlist; + Method *methods = NULL; + if (outCount) *outCount = 0; + + while ( (mlist = class_nextMethodList(cls, &iterator)) ) { + if (mlist->method_count == 0) continue; + methods = (Method *)realloc(methods, + sizeof(Method) * (count + mlist->method_count + 1)); + if (!methods) { + //Memory alloc failed, so what can we do? + return NULL; // COV_NF_LINE + } + for (int i = 0; i < mlist->method_count; i++) { + methods[i + count] = &mlist->method_list[i]; + } + count += mlist->method_count; + } + + // List must be NULL terminated + if (methods) { + methods[count] = NULL; + } + if (outCount) *outCount = count; + return methods; +} + +SEL method_getName(Method method) { + if (!method) return NULL; + return method->method_name; +} + +IMP method_getImplementation(Method method) { + if (!method) return NULL; + return method->method_imp; +} + +IMP method_setImplementation(Method method, IMP imp) { + // We intentionally don't test method for nil. + // Leopard fails here, so should we. + // I logged this as Radar: + // 5572981 method_setImplementation crashes if you pass nil for the + // method arg (arg 1) + // because it seems odd that this API won't accept nil for method considering + // all the other apis will accept nil args. + // If this does get fixed, remember to enable the unit tests. + // This method works differently on SnowLeopard than + // on Leopard. If you pass in a nil for IMP on SnowLeopard + // it doesn't change anything. On Leopard it will. Since + // attempting to change a sel to nil is probably an error + // we follow the SnowLeopard way of doing things. + IMP oldImp = NULL; + if (imp) { + oldImp = method->method_imp; + method->method_imp = imp; + } + return oldImp; +} + +void method_exchangeImplementations(Method m1, Method m2) { + if (m1 == m2) return; + if (!m1 || !m2) return; + IMP imp2 = method_getImplementation(m2); + IMP imp1 = method_setImplementation(m1, imp2); + method_setImplementation(m2, imp1); +} + +struct objc_method_description protocol_getMethodDescription(Protocol *p, + SEL aSel, + BOOL isRequiredMethod, + BOOL isInstanceMethod) { + struct objc_method_description *descPtr = NULL; + // No such thing as required in ObjC1. + if (isInstanceMethod) { + descPtr = [p descriptionForInstanceMethod:aSel]; + } else { + descPtr = [p descriptionForClassMethod:aSel]; + } + + struct objc_method_description desc; + if (descPtr) { + desc = *descPtr; + } else { + bzero(&desc, sizeof(desc)); + } + return desc; +} + +BOOL sel_isEqual(SEL lhs, SEL rhs) { + // Apple (informally) promises this will work in the future: + // http://twitter.com/#!/gparker/status/2400099786 + return (lhs == rhs) ? YES : NO; +} + +#endif // GTM_MACOS_SDK && (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5) diff --git a/External/google-plus-ios-sdk/README b/External/google-plus-ios-sdk/README new file mode 100644 index 00000000..749afdf6 --- /dev/null +++ b/External/google-plus-ios-sdk/README @@ -0,0 +1,39 @@ +This Google+ iOS SDK allows users to sign in with Google+, share with Google+, +and write moments to Google+ history from third-party apps. The SDK contains the +following files: + +README -- This file. + +Changelog -- The versions and changes of the SDK. + +lib/ -- Header files and libraries. + GooglePlusShare.h -- Header file to include for sharing with Google+. + GooglePlusSignIn.h -- Header file to include for signing into Google+. + GooglePlusSignInButton.h -- Header file to include for showing a button to + sign in with Google+. + libGooglePlus.a -- Static library built for iOS device to link into your app. + libGooglePlusUniversal.a -- Static library built for both iOS device and + simulator to link into your app. + +OpenSource/ -- Google open source files used by the SDK. Add all files in this + directory into your project if you're not already using them. + Also see comments for the subdirectory below. + GTL/ -- Google open source files only used by the sample app. Include them + into your project if you're going to use the same functionality, + e.g. Add Moments. + +Resources/ -- Resources that can be used in your app. + For |GooglePlusSignInButton|, the google_plus_sign_in*.png images + are required. + google_plus_share.png -- 82x24 Google+ share button image. + google_plus_share_large.png -- 112x32 Google+ share button image. + google_plus_share@2x.png -- 164x48 Google+ share button image. + google_plus_share_large@2x.png -- 224x64 Google+ share button image. + google_plus_sign_in.png -- 120x32 Google+ sign-in button image. + google_plus_sign_in_wide.png --220x32 Wide Google+ sign-in button image. + google_plus_sign_in@2x.png -- 240x64 Google+ sign-in button image. + google_plus_sign_in_wide@2x.png -- 440x64 Wide Google+ sign-in button image. + +SampleCode/ -- Sample code for your reference only. + Do not include this in your project. + GooglePlusSample.xcodeproj/ -- The Xcode project. diff --git a/External/google-plus-ios-sdk/Resources/google_plus_share.png b/External/google-plus-ios-sdk/Resources/google_plus_share.png new file mode 100644 index 0000000000000000000000000000000000000000..8bafd4cd9f09a2040a34322d31e0fa2744f72e61 GIT binary patch literal 2934 zcmbVOcTiK=8V`aL(I70+O9+uBqyYf}sH9M&mtEolnveofl3)@b1Q7&jN-s(g5wU=% z=mOF~6s0+!3rd%!uB)IJsUosLW#4-2ZZ38^wyA6b00282 z>~S8#b>mf%6c>K!AFgKz7iBJnuD;`=%z@TzTARZ%#$wBk1!QXh%!u`fE3=I0F!aZsY z{_YgP*$sqcv8fdN7yHVuCgpN&c)5t~FTb>Gu#A!OqTq6EitK5+zI-j7JKFA)s&=gRv3UH*F5r zgZdvg{!yFb6&_55c~Cj55H?v@51RHSSeUziH?*NB^akz9rVEQg3c|6-Aq*;$>wvQc z3vZwlIt2~4F^3}%W+remBphXqK$zn&7>p?r14kjTHpUp#CdWTvO^i_(TfDig4GwF8 zK;RKJ2rS;h7-fnuH$mdejp3VE2PTJ0Vv?zwcIiU9Kd|_J#iFrnDv8Ttd$CwSn;qa5 z$l|g%fvjK<*3%T^Od`{n8}deZzDJ9rvgx5ziY=SP0Da3Zn*I;=g~9%B+*l+YZ-X$w zn3@^eTHu6nf5%e(pPa#j&cHUBVUKH;tkInly=J=P_|yB3@JAJ)-Bj6569zywiNFYu5wQT+C}3_+g|}f>*`_J#$i4A?b6Yx_MoQHb0JSbyr{7UCIHj%)hg` zQdI07p^U4ymsx66i+kDJiR^twZa~jOI6z*dyF&tKVm-~(JMeaCM0}|n3Au+aIMf=_ z9(s!IaT`$q2x*B@Ilvj101nQQ8Qp^m(_%h)@sI`OV9^Ij4fFSTUyXBN=VGU4rHen4 z1aUo@gDO5jmnc9>k9_Hb5rk$m;2n7T6HZx(ly5>MNChl*1w$;HF<5~B4erFrYQwU3pxcW1Xc{WLd$?>ZkR zV>6=~onJ2w3FvZw( zlGlvO?GB}fEvlwwkgHPKKdT;n`in0BzaJD+#1}bH5d|3ci+b2K&u!zM$@^2LIWO+< z&wJe5m!ZcmP0u-uF=#=alY4{sCQ@}R2OrFrd&ZZH5oukDF4;s+ClI(OLRnq02Q;05 zYpnB4IfUW&{$5nlZ8CRrz-rjn*K+b&`LV`%xV(n;t=Z}sUC6G?OWgI5Qa%0q)2-VE z?drb5n-5k;3(RRFJd#02Yed92=I|Re+@rFL^k%uy9Ocs9&KOuzYV}=WS&N#im1Kg*InFp*vC21uR%o7l7EM2|M5`2c0B6B4Gn?r^DQq<3>K=zzT+D&`rg>R zCcX-caHz!rETvqp$tYf$OEJ94f4;>unQu+NYM9fng+@Kqt?f_*ov*F=&^^=x9KJ6) z7&YN{S=&@`t4{3gw3xgG=C})2taTMGt2kPxlf@}7YWY=w zs23~Zmnh&wBirnp9Ib5f$>d%4#T)WS`sc}1eHz~19PtLJBQUTUQI zt{Z78SDlhdTIo7;$Jqh%7mPN>6x(T3hwgUXIjtvVE%zDgRKKU>gB*i5Jw>s$`X_U0 zuZ0iLbe_An`IX0~zs%nvbD>+Q{>1wAtmU^9*(%D3)33fFaowk~1S7t3f=QpGEAN1H z-ahxH1aqKc5{18terk^(*3K{K>-Ht+L5A$uu181-*$*%=H61G!>7|J(MiIB8+pncH zs$N`ppky8I4@~;lZ`*5K=8Z#jR&PNCVC5?TYOuO@DcVyBw*#6)XEiJDtu+p=)&H?i zKXaX^^8T0X$>p=#y?&7!sN+Z+7a3}5lfQg3O4gYC8qEI$JWprDU0=*BsJjC!;K}ae z91Dc6=8V(s@yoYB(t=b` zhlb4$mV)=Ne9KZ@m$F&|`lUtqvy&Q9(`C$D*B zX}n9K9Mxvzy?P$1$suj zOEKquJA6582AQ9fyyAay`cSh9;KMuBtDFI|nsuvctZBK3d O2|M6jaJMkTn7;thx&#jZ literal 0 HcmV?d00001 diff --git a/External/google-plus-ios-sdk/Resources/google_plus_share@2x.png b/External/google-plus-ios-sdk/Resources/google_plus_share@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..9cf3345ec8f0dcdc44b07554501609c3f78c229a GIT binary patch literal 5531 zcmbVQXHZk?x<-_)5CU#G1cD$)NvNR&NJt>4AP5N30|`YSfh2SgkzS;;K@p>1p$JHm zrda4jdKW>d(xi8RgL`k!y?5r!`El3GTHp76>wTWL&#YO|h6cLln0c9LXlTyqVNlmk z)~6>ogpvN_Nk#T>o-8~Rv^m9?=t%LwlJGPL9MK*R(sRc;;jiPdI6u!;ygCidX-5|m zbBekCRaFO~yA1Z1j*PFn#|fH-MqSg_1MA?5r-1D7PA&wv$V%-y5s(WGE@Gyr57GC~ z#yh)U{7HCYe*+T-e^&<;oQS3dNZnWUguoq7!Ge6<-3Vk=U%1F$ys9VrU&pc{pubco zu5gjRoif)q1ZfjVc#xtDMA`wO1OX{QWuWp3%F4=8AUOyWA`6j|g~~}ol~v{CR3Q-1 zKbOdfH4@HI^*T!DA6q99T*R3|@lchO_3`nM@sXDylAL6rDk>_!IOOD{Pc)>-egq2E zSDHWu|7Jkp$qpnJ4~h$s0Q$v+b$5uD`U&lo-WdMLQa$r~A*3r-b+fI*;8Wd(?`97G8Qg~CusBvMfh2~m>MM#v+TeslaM zEDSA&l83;Q5Gd^vBpQlpuQA^ehmmFMqhQFxMzHy)=$BD#bA%CD-+ zf3SZN?Ej5hTMmszKoyXR%JMoYsFS$=#^U}zIg>qcM)p^8{I6#DeRR@+zqbEw{S)Ee z!-FTBObqE{H2T!U`)Fv`+x1Wg6W`G#YbJ^by5`7#qHo?U3$6uXx&i{w-W6djjYOZp z0dC?v#Z>NGTUAE~G4hA;*ir5vc-WOu>{xEJ7S32pLFy)e@d}_crJ{_|8?aMQlSQfN z`y$+W7BO>M#cSW&^h9``3mypFz$J_ zX>mxkB-;%KX*b8yYNQilSRk}Ygl@MkYjwHAxTXD57Ulx(GIHYfRl1Z}rK@SmBT4o> z!msXczDmXo{s}H311{j0skw`%5DOslg*I${3syI}@$j*j3I91o0fsd?8SaJeA@PU_NYOa*|m@dNQG?motsK`NVnye6%g`DLtfuC()OAs5p zSUC{HEqlo5sy}1B7|rlGOVVLm#a!{((zJSFOy+8Vk-nO%YmpVx+G8l7X_HP6ibKGz@Qm65684;$J|2CG!IDsV3c@|%3}1>?&D=bE#GVI zb1i|cJeNDOaCOal?ZRBE7G8w-=d2q39D(RS?+8H@Q)`qCD?_i5Jcv)8gCx*t!GhT? zEwmmKr7jZ@QNWF)!-QQN;xV#vdVi!S8zKv^dp|60#k)9m>D1y;9n)wQ-x$weeA-93 zbws5wQ>TzhSd3aD9?GEY2%bEXxLRnk!hNAX;;JEtTq*dxAn&|7cGrKB?hKaV#oG?t&87u+cDsf(^zdAHPk3W%bFANSrn zD*;dI5e*1rZrgT`obPTHWE^3LStDmmCCAPsuC08*Fq*vTa77?%s(K&vszn*MJ_abP zmWOi&9Pmr7lfUqqqR}}hfvLkW@9Z`^ova?x(BeMv!Xw*PW^zipU!VF_rDTjv9`-JF zNfj=?T0GVlgEb0E#QDQ(TG4Sabp@M`&uEajkNO^w(;c%o049`AQ-1rgF0e8Ref*rO z)w=EHpv1kgt@NSjry6tKHh52AK~qxV)9v}hfy);x!90tuuB&^tW}uB><&F}QZ=qq$ zx(>)TmQ^Cea`MrUe7xWRb2M|2*~a~NFW06&D}?#JOC()-+`Vcckey`vA~-SJV0&p#fpL4qKl{>`duGZO5a$vyiK0jyPI}OVEc{rm`~Ky?#8>i_|3xrh-9yj zC)5bQ5qXVDjd(c|{PETDb~sAU0{91mHD1Y>^@XRGQu6mL7Li&gu5!>7+g9s2OnEtpkc5-q-0L>bDcEey(wf)O`65cFWq# z3i_Ey?pwgDstkDnIYEz%P#Iqu{P3MXcrRiu2`YR>>0&Oh#za` z!j@Zn7XOrMkrTY5!kSm>0W1}E5MWW9yyt^0DhQvyMZY;Dhi!Yy3Rii~>*Ub#G>D zOA}zEaVpYN?Et9V9VxEwY7v$)D{>H=Am5t?Y`q^h6TS!2R;R=aKSe|dK!$&4=`??P ztSYG8CR4qM{+y=DK~3F@2$L7}A;^agH>lck>|EG}yw#nxiM;kcgd>vOHqkFw^y$W} z=aQd!d(J6oFD^6f=l1Yy>gn(IXh+SijiMzp!7{glnQm4P)pmn~LNMbBC4u*8e>Ug} z3%5S$Wb(|b8F-}XVTLsjcnuaJYCkMaHKNLuu`(IY!7%SCFrntQOrnPmmdqAVg@L3q zVG;hKfRt}i)iN`m0|5Me^@L`hc*ORW0_<3s^8)z7Xu9Q5#G8WjCk1&;-(AWCfYjMS zD*V1nip-rAOeUOa8-9E01!QJT-nex#kLTc?=^O+WuFJ)Mf!igH@*Zg}x#Fa=2J z#qq&_HPXc}x0+dCGH|g)_cKHi86I*jiFWNAuYSf&i8$g$qcu{;!&BlM0zs7$cTKMd9n z-&qW%Jr@=y8atK4ducNDHS287r=#!PJZ~ct8fP4AwTyfZi_Yzy4FK|EQwq&I;Cun& zfv4430lNI@uft$xmCK^@E1MPF5!tqAUsSe4c*wAE=HNSK!bfl%XDoO@E;~ThEDd8y zS`iJTW}MwxyO!yu`ogkB{FcR4dPl9tA3cdbcAVK*?q81m>e^91h3#1tg7e&7I}|pJ z3=!g<^yAHJRL?upQR~mdGKu8Y>yUcbSrWfq?K)2DeCt$pE}@%e{mW8cKtU-SgOM?+ zz_OS<_8uS?6}Ap}@wp8CbFpjC!Su$?B{3k!)Tdh52iikmH;Vk_9Hs8PoSeyN3= ztI$Wj!?_(z6`@?KedEi!Rs{@H-vanC1PFG7Gvp;?J%p!-PrY|KZpcAN`duHn72Q2k z=k{o6E~29-_6G9Ex%Bgvm0CbVbdaj%Yy4Gyr-O8i>8RPp(P+L#UPJskpk~pKsTCkn z%7Q8;AQ~f{LCpTFZvJk60CHaA`wC3c_mtmIKlw7izF7p7&?JQKziy{L`zPa=Kp8JMQrv5ZTbUixoW6=c6mL3Oe5yK_t;e)mBx~g9nKOSpO+R*F!_+MxGoe!h!ODJ zH*ugI<9COHCEM`JrYGp>fcP-T#VHcjkz zLhB0`ApkW4P8{2~Pgc_1$sI4ombcSldO=xHS8`Z7Zw<|g9d%2lE%T?oSg5YN+$1U^ ztp9$AYs_8m^Ou8OYXctusbPr@c0VP&W%7A*Eh0}=duKPRZm9S)wQH1{9Y5G_hs3>k7-bc4p=yc-+_q- zuK%9MV`>{5L%Ody`Mi@*nl*s3&xdQSj~(@HRPFb%#kEd)@wjH4zn*EC=nV>?>9WKXSlt+@R3A zDfOnlCd;7(1FF+QJcjP&07Z>c%$mWKDK3v0TLXlO`#FQ82R1|&!;oaVii(e72Q_qk-)50^ex^i%$^$q zdysf)Y}mJ)WdnMZ>2q+)TCBR04VKtgc zZHNW`$uwhf=K={P+7XLQ)o@l>BarI1J;VoOZ^7*%}ENcO} zGB+R2wO4e9dwGTV=I*#seL;h|ak?$Y8?khRIh+3eDJT6b@RGcG!@#CQPo_tCu8a83 zIGGR`{EI8MJPLItJnCrlP~fc_de)=QxVe5bTRB|`QbZC<dYU0)?WI0TAf zm=gouB*eduoFf_|^O=OXo_uYvkv-L0^u64(a*nSc4>>=2p&Rcsi8ys3`h&es!u+wo zm*Um~_+$=C<$J#Ts=3z&;)KIDX<=!R7uCBYlk@J+Ka!6-z^ zMztZc@73&PsiS}v(FY&rKb;?64*&S600equj!7>f;Q3{^5ae`7a=GsY^X$FzQs(7d zc~3ksY^>BOSGMGu&=o$KkYK>aRLS9|(knj=H8et^sppFVn3T$*1+4#A_PE8ntxb9= zw|niuIlo>2X6hi|<<$Yw(M)XO0R!?p|71zLeK#abb|UPqX;-}?ZlbO|I}3PS-9`23 zsRc2%nu}~{>GDbGxBu9?IhT}~bXFio$wTYGX##E_#&?>BCpB0z$nUk9mV< zG1qI&{^T(Ny}j{OBe3ky{h@x>s`*W=WwbC`b0q;ayGBf^*@Gu|KYQt8HS_X_lJ+)-xIy99@J};3tVNFWCtN7MXAU$s&DVbX%MenYHy60*0dXZ@b23; zy&rt$r>O>rt(}SYRu8-46=Ic!6Q}EaH)#lu;Pum+n@M(esGNvw$2G+l)pPc>EsOFf(&9bJYFf=!b!_cL?JYQM~KHTbteJwTb%hpQg;E=9NDs)^?A*i4cjWu|Bw<(iUdVWU%x(6kse+`}1abRImSOf^)gcn@Aio=e3Qp z#ErYh&OW*jVe-gK?040}o9Xbh7YRbz;`;1rlTsE9Y;@;yp%2nMCnS4*RC!M|sf|?3 z9-A+Dmn;}reqU(VjX*#CXy-Tp%zX1a7O!}*e_=vT;K8QL6j7jVul`dY=Pt&0@-!!7 zYE;I(>gAA`(XJ{h!>_vrwi{M13iZWlE8I?NcJD7|U~KPZ-n6(!i_}T37%vVGIw<}? z;vKGp8LDz@Q^f_f1ZK9qz3axq{KbpaALMR8PSvu9gtL6FQ=XlRp4*NYdlD0^YZn;& c^Bv7;nvz;HJzjXD literal 0 HcmV?d00001 diff --git a/External/google-plus-ios-sdk/Resources/google_plus_share_large.png b/External/google-plus-ios-sdk/Resources/google_plus_share_large.png new file mode 100644 index 0000000000000000000000000000000000000000..2ad6cfde2392700e4a35dce3328bb21431209553 GIT binary patch literal 3747 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 D*4}v# literal 0 HcmV?d00001 diff --git a/External/google-plus-ios-sdk/Resources/google_plus_share_large@2x.png b/External/google-plus-ios-sdk/Resources/google_plus_share_large@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..10546b2745ad45c83fdbd57b8ca8b85c853e2776 GIT binary patch literal 6712 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 Q_vc@Zwz>hd7-AdxUuMo~i~s-t literal 0 HcmV?d00001 diff --git a/External/google-plus-ios-sdk/Resources/google_plus_sign_in.png b/External/google-plus-ios-sdk/Resources/google_plus_sign_in.png new file mode 100644 index 0000000000000000000000000000000000000000..b2996c8a422ec36059f731286211662c7e1b5fd0 GIT binary patch literal 3803 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 R|MO2>Q%y&;Sml1${{V0kD~SLA literal 0 HcmV?d00001 diff --git a/External/google-plus-ios-sdk/Resources/google_plus_sign_in_wide@2x.png b/External/google-plus-ios-sdk/Resources/google_plus_sign_in_wide@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b3a4e5c81225cf4fc75b170d0751d590fa59b036 GIT binary patch literal 10894 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 literal 0 HcmV?d00001 diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist new file mode 100644 index 00000000..4c97df21 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist @@ -0,0 +1,74 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleDisplayName + ${PRODUCT_NAME} + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFiles + + Icon.png + Icon@2x.png + + CFBundleIcons + + CFBundlePrimaryIcon + + CFBundleIconFiles + + Icon.png + Icon@2x.png + + + + CFBundleIdentifier + com.google.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + com.google.GooglePlusSample + CFBundleURLSchemes + + com.google.GooglePlusSample + + + + CFBundleVersion + 1.0 + LSRequiresIPhoneOS + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Prefix.pch b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Prefix.pch new file mode 100644 index 00000000..bda6af71 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Prefix.pch @@ -0,0 +1,14 @@ +// +// Prefix header for all source files of the 'GooglePlusSample' target in the 'GooglePlusSample' project +// + +#import + +#ifndef __IPHONE_4_0 +#warning "This project uses features only available in iOS SDK 4.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import +#endif diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.pbxproj b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.pbxproj new file mode 100644 index 00000000..c8d5eff4 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.pbxproj @@ -0,0 +1,648 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0043C79F1580045B000DF02E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0043C79E1580045B000DF02E /* UIKit.framework */; }; + 0043C7A11580045B000DF02E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0043C7A01580045B000DF02E /* Foundation.framework */; }; + 0043C7A31580045B000DF02E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0043C7A21580045B000DF02E /* CoreGraphics.framework */; }; + 00F70E83158006DC0077799E /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 00F70E82158006DC0077799E /* main.m */; }; + 00F70E99158007D90077799E /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00F70E98158007D90077799E /* Security.framework */; }; + 00F70E9B158008040077799E /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00F70E9A158008040077799E /* SystemConfiguration.framework */; }; + 0C52D6F8158BAB1F001510E6 /* button_background.png in Resources */ = {isa = PBXBuildFile; fileRef = 0C52D6F7158BAB1F001510E6 /* button_background.png */; }; + D973B402158ABC1F0083A4B5 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D973B401158ABC1F0083A4B5 /* MessageUI.framework */; }; + D98254A815990D8D0060CA47 /* Icon_2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D98254A615990D8D0060CA47 /* Icon_2x.png */; }; + D98254A915990D8D0060CA47 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = D98254A715990D8D0060CA47 /* Icon.png */; }; + D98254F2159937730060CA47 /* GTLPlusPerson.m in Sources */ = {isa = PBXBuildFile; fileRef = D98254F1159937730060CA47 /* GTLPlusPerson.m */; }; + D9EE743D158A8BD400EC1D05 /* google_plus_share_large.png in Resources */ = {isa = PBXBuildFile; fileRef = D9EE7435158A8BD400EC1D05 /* google_plus_share_large.png */; }; + D9EE743E158A8BD400EC1D05 /* google_plus_share_large@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D9EE7436158A8BD400EC1D05 /* google_plus_share_large@2x.png */; }; + D9EE743F158A8BD400EC1D05 /* google_plus_share.png in Resources */ = {isa = PBXBuildFile; fileRef = D9EE7437158A8BD400EC1D05 /* google_plus_share.png */; }; + D9EE7440158A8BD400EC1D05 /* google_plus_share@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D9EE7438158A8BD400EC1D05 /* google_plus_share@2x.png */; }; + D9EE748D158A8C0E00EC1D05 /* GTLBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7449158A8C0E00EC1D05 /* GTLBase64.m */; }; + D9EE748E158A8C0E00EC1D05 /* GTLBatchQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE744B158A8C0E00EC1D05 /* GTLBatchQuery.m */; }; + D9EE748F158A8C0E00EC1D05 /* GTLBatchResult.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE744D158A8C0E00EC1D05 /* GTLBatchResult.m */; }; + D9EE7490158A8C0E00EC1D05 /* GTLDateTime.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE744F158A8C0E00EC1D05 /* GTLDateTime.m */; }; + D9EE7491158A8C0E00EC1D05 /* GTLErrorObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7452158A8C0E00EC1D05 /* GTLErrorObject.m */; }; + D9EE7492158A8C0E00EC1D05 /* GTLFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7454158A8C0E00EC1D05 /* GTLFramework.m */; }; + D9EE7493158A8C0E00EC1D05 /* GTLJSONParser.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7456158A8C0E00EC1D05 /* GTLJSONParser.m */; }; + D9EE7494158A8C0E00EC1D05 /* GTLObject.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7458158A8C0E00EC1D05 /* GTLObject.m */; }; + D9EE7495158A8C0E00EC1D05 /* GTLPlusConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE745C158A8C0E00EC1D05 /* GTLPlusConstants.m */; }; + D9EE7496158A8C0E00EC1D05 /* GTLPlusItemScope.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE745E158A8C0E00EC1D05 /* GTLPlusItemScope.m */; }; + D9EE7497158A8C0E00EC1D05 /* GTLPlusMoment.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7460158A8C0E00EC1D05 /* GTLPlusMoment.m */; }; + D9EE7499158A8C0E00EC1D05 /* GTLQueryPlus.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7464158A8C0E00EC1D05 /* GTLQueryPlus.m */; }; + D9EE749A158A8C0E00EC1D05 /* GTLServicePlus.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7466158A8C0E00EC1D05 /* GTLServicePlus.m */; }; + D9EE749B158A8C0E00EC1D05 /* GTLQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7468158A8C0E00EC1D05 /* GTLQuery.m */; }; + D9EE749C158A8C0E00EC1D05 /* GTLRuntimeCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE746A158A8C0E00EC1D05 /* GTLRuntimeCommon.m */; }; + D9EE749D158A8C0E00EC1D05 /* GTLService.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE746C158A8C0E00EC1D05 /* GTLService.m */; }; + D9EE749E158A8C0E00EC1D05 /* GTLUploadParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE746F158A8C0E00EC1D05 /* GTLUploadParameters.m */; }; + D9EE749F158A8C0E00EC1D05 /* GTLUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7471158A8C0E00EC1D05 /* GTLUtilities.m */; }; + D9EE74A0158A8C0E00EC1D05 /* GTMHTTPFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7475158A8C0E00EC1D05 /* GTMHTTPFetcher.m */; }; + D9EE74A1158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7477158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.m */; }; + D9EE74A2158A8C0E00EC1D05 /* GTMHTTPFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7479158A8C0E00EC1D05 /* GTMHTTPFetcherService.m */; }; + D9EE74A3158A8C0E00EC1D05 /* GTMHTTPFetchHistory.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE747B158A8C0E00EC1D05 /* GTMHTTPFetchHistory.m */; }; + D9EE74A4158A8C0E00EC1D05 /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE747D158A8C0E00EC1D05 /* GTMLogger.m */; }; + D9EE74A5158A8C0E00EC1D05 /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE747F158A8C0E00EC1D05 /* GTMMethodCheck.m */; }; + D9EE74A6158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7481158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.m */; }; + D9EE74A7158A8C0E00EC1D05 /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7483158A8C0E00EC1D05 /* GTMNSString+URLArguments.m */; }; + D9EE74A8158A8C0E00EC1D05 /* GTMOAuth2Authentication.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7485158A8C0E00EC1D05 /* GTMOAuth2Authentication.m */; }; + D9EE74A9158A8C0E00EC1D05 /* GTMOAuth2SignIn.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7487158A8C0E00EC1D05 /* GTMOAuth2SignIn.m */; }; + D9EE74AA158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE7489158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.m */; }; + D9EE74AB158A8C0E00EC1D05 /* GTMOAuth2ViewTouch.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE748A158A8C0E00EC1D05 /* GTMOAuth2ViewTouch.xib */; }; + D9EE74AC158A8C0E00EC1D05 /* GTMObjC2Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE748C158A8C0E00EC1D05 /* GTMObjC2Runtime.m */; }; + D9EE74B0158A8D1E00EC1D05 /* libGooglePlusUniversal.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D9EE74AE158A8D1E00EC1D05 /* libGooglePlusUniversal.a */; }; + D9EE74C2158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B4158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.m */; }; + D9EE74C3158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B6158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.m */; }; + D9EE74C4158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74B7158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.xib */; }; + D9EE74C5158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B9158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.m */; }; + D9EE74C6158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74BA158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.xib */; }; + D9EE74C7158A8E0500EC1D05 /* GooglePlusSampleShareViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74BC158A8E0500EC1D05 /* GooglePlusSampleShareViewController.m */; }; + D9EE74C8158A8E0500EC1D05 /* GooglePlusSampleShareViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74BD158A8E0500EC1D05 /* GooglePlusSampleShareViewController.xib */; }; + D9EE74C9158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74BF158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.m */; }; + D9EE74CA158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74C0158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.xib */; }; + D9EE74CD158A8E2900EC1D05 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74CB158A8E2900EC1D05 /* InfoPlist.strings */; }; + D9EE74E4158A9A7D00EC1D05 /* google_plus_sign_in_wide.png in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74E0158A9A7D00EC1D05 /* google_plus_sign_in_wide.png */; }; + D9EE74E5158A9A7D00EC1D05 /* google_plus_sign_in_wide@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74E1158A9A7D00EC1D05 /* google_plus_sign_in_wide@2x.png */; }; + D9EE74E6158A9A7D00EC1D05 /* google_plus_sign_in.png in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74E2158A9A7D00EC1D05 /* google_plus_sign_in.png */; }; + D9EE74E7158A9A7D00EC1D05 /* google_plus_sign_in@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74E3158A9A7D00EC1D05 /* google_plus_sign_in@2x.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + 0043C79A1580045B000DF02E /* GooglePlusSample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = GooglePlusSample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 0043C79E1580045B000DF02E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + 0043C7A01580045B000DF02E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 0043C7A21580045B000DF02E /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; + 00F70E82158006DC0077799E /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = SOURCE_ROOT; }; + 00F70E98158007D90077799E /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; + 00F70E9A158008040077799E /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + 0C52D6F7158BAB1F001510E6 /* button_background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = button_background.png; path = Resources/button_background.png; sourceTree = SOURCE_ROOT; }; + D973B401158ABC1F0083A4B5 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; + D98254A615990D8D0060CA47 /* Icon_2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_2x.png; path = Resources/Icon_2x.png; sourceTree = SOURCE_ROOT; }; + D98254A715990D8D0060CA47 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = Resources/Icon.png; sourceTree = SOURCE_ROOT; }; + D98254F0159937730060CA47 /* GTLPlusPerson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusPerson.h; sourceTree = ""; }; + D98254F1159937730060CA47 /* GTLPlusPerson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusPerson.m; sourceTree = ""; }; + D9EE7431158A8BAE00EC1D05 /* GooglePlusShare.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GooglePlusShare.h; path = ../lib/GooglePlusShare.h; sourceTree = ""; }; + D9EE7432158A8BAE00EC1D05 /* GooglePlusSignIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GooglePlusSignIn.h; path = ../lib/GooglePlusSignIn.h; sourceTree = ""; }; + D9EE7433158A8BAE00EC1D05 /* GooglePlusSignInButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GooglePlusSignInButton.h; path = ../lib/GooglePlusSignInButton.h; sourceTree = ""; }; + D9EE7435158A8BD400EC1D05 /* google_plus_share_large.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = google_plus_share_large.png; path = ../Resources/google_plus_share_large.png; sourceTree = ""; }; + D9EE7436158A8BD400EC1D05 /* google_plus_share_large@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "google_plus_share_large@2x.png"; path = "../Resources/google_plus_share_large@2x.png"; sourceTree = ""; }; + D9EE7437158A8BD400EC1D05 /* google_plus_share.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = google_plus_share.png; path = ../Resources/google_plus_share.png; sourceTree = ""; }; + D9EE7438158A8BD400EC1D05 /* google_plus_share@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "google_plus_share@2x.png"; path = "../Resources/google_plus_share@2x.png"; sourceTree = ""; }; + D9EE7448158A8C0E00EC1D05 /* GTLBase64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBase64.h; sourceTree = ""; }; + D9EE7449158A8C0E00EC1D05 /* GTLBase64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBase64.m; sourceTree = ""; }; + D9EE744A158A8C0E00EC1D05 /* GTLBatchQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBatchQuery.h; sourceTree = ""; }; + D9EE744B158A8C0E00EC1D05 /* GTLBatchQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBatchQuery.m; sourceTree = ""; }; + D9EE744C158A8C0E00EC1D05 /* GTLBatchResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBatchResult.h; sourceTree = ""; }; + D9EE744D158A8C0E00EC1D05 /* GTLBatchResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBatchResult.m; sourceTree = ""; }; + D9EE744E158A8C0E00EC1D05 /* GTLDateTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLDateTime.h; sourceTree = ""; }; + D9EE744F158A8C0E00EC1D05 /* GTLDateTime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLDateTime.m; sourceTree = ""; }; + D9EE7450158A8C0E00EC1D05 /* GTLDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLDefines.h; sourceTree = ""; }; + D9EE7451158A8C0E00EC1D05 /* GTLErrorObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLErrorObject.h; sourceTree = ""; }; + D9EE7452158A8C0E00EC1D05 /* GTLErrorObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLErrorObject.m; sourceTree = ""; }; + D9EE7453158A8C0E00EC1D05 /* GTLFramework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLFramework.h; sourceTree = ""; }; + D9EE7454158A8C0E00EC1D05 /* GTLFramework.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLFramework.m; sourceTree = ""; }; + D9EE7455158A8C0E00EC1D05 /* GTLJSONParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLJSONParser.h; sourceTree = ""; }; + D9EE7456158A8C0E00EC1D05 /* GTLJSONParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLJSONParser.m; sourceTree = ""; }; + D9EE7457158A8C0E00EC1D05 /* GTLObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLObject.h; sourceTree = ""; }; + D9EE7458158A8C0E00EC1D05 /* GTLObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLObject.m; sourceTree = ""; }; + D9EE745A158A8C0E00EC1D05 /* GTLPlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlus.h; sourceTree = ""; }; + D9EE745B158A8C0E00EC1D05 /* GTLPlusConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusConstants.h; sourceTree = ""; }; + D9EE745C158A8C0E00EC1D05 /* GTLPlusConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusConstants.m; sourceTree = ""; }; + D9EE745D158A8C0E00EC1D05 /* GTLPlusItemScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusItemScope.h; sourceTree = ""; }; + D9EE745E158A8C0E00EC1D05 /* GTLPlusItemScope.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusItemScope.m; sourceTree = ""; }; + D9EE745F158A8C0E00EC1D05 /* GTLPlusMoment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusMoment.h; sourceTree = ""; }; + D9EE7460158A8C0E00EC1D05 /* GTLPlusMoment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusMoment.m; sourceTree = ""; }; + D9EE7463158A8C0E00EC1D05 /* GTLQueryPlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLQueryPlus.h; sourceTree = ""; }; + D9EE7464158A8C0E00EC1D05 /* GTLQueryPlus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLQueryPlus.m; sourceTree = ""; }; + D9EE7465158A8C0E00EC1D05 /* GTLServicePlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLServicePlus.h; sourceTree = ""; }; + D9EE7466158A8C0E00EC1D05 /* GTLServicePlus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLServicePlus.m; sourceTree = ""; }; + D9EE7467158A8C0E00EC1D05 /* GTLQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLQuery.h; sourceTree = ""; }; + D9EE7468158A8C0E00EC1D05 /* GTLQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLQuery.m; sourceTree = ""; }; + D9EE7469158A8C0E00EC1D05 /* GTLRuntimeCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLRuntimeCommon.h; sourceTree = ""; }; + D9EE746A158A8C0E00EC1D05 /* GTLRuntimeCommon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLRuntimeCommon.m; sourceTree = ""; }; + D9EE746B158A8C0E00EC1D05 /* GTLService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLService.h; sourceTree = ""; }; + D9EE746C158A8C0E00EC1D05 /* GTLService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLService.m; sourceTree = ""; }; + D9EE746D158A8C0E00EC1D05 /* GTLTargetNamespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLTargetNamespace.h; sourceTree = ""; }; + D9EE746E158A8C0E00EC1D05 /* GTLUploadParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLUploadParameters.h; sourceTree = ""; }; + D9EE746F158A8C0E00EC1D05 /* GTLUploadParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLUploadParameters.m; sourceTree = ""; }; + D9EE7470158A8C0E00EC1D05 /* GTLUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLUtilities.h; sourceTree = ""; }; + D9EE7471158A8C0E00EC1D05 /* GTLUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLUtilities.m; sourceTree = ""; }; + D9EE7472158A8C0E00EC1D05 /* GTMDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = ""; }; + D9EE7473158A8C0E00EC1D05 /* GTMGarbageCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMGarbageCollection.h; sourceTree = ""; }; + D9EE7474158A8C0E00EC1D05 /* GTMHTTPFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcher.h; sourceTree = ""; }; + D9EE7475158A8C0E00EC1D05 /* GTMHTTPFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcher.m; sourceTree = ""; }; + D9EE7476158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcherLogging.h; sourceTree = ""; }; + D9EE7477158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcherLogging.m; sourceTree = ""; }; + D9EE7478158A8C0E00EC1D05 /* GTMHTTPFetcherService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcherService.h; sourceTree = ""; }; + D9EE7479158A8C0E00EC1D05 /* GTMHTTPFetcherService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcherService.m; sourceTree = ""; }; + D9EE747A158A8C0E00EC1D05 /* GTMHTTPFetchHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetchHistory.h; sourceTree = ""; }; + D9EE747B158A8C0E00EC1D05 /* GTMHTTPFetchHistory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetchHistory.m; sourceTree = ""; }; + D9EE747C158A8C0E00EC1D05 /* GTMLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMLogger.h; sourceTree = ""; }; + D9EE747D158A8C0E00EC1D05 /* GTMLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLogger.m; sourceTree = ""; }; + D9EE747E158A8C0E00EC1D05 /* GTMMethodCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMMethodCheck.h; sourceTree = ""; }; + D9EE747F158A8C0E00EC1D05 /* GTMMethodCheck.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMMethodCheck.m; sourceTree = ""; }; + D9EE7480158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSDictionary+URLArguments.h"; sourceTree = ""; }; + D9EE7481158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSDictionary+URLArguments.m"; sourceTree = ""; }; + D9EE7482158A8C0E00EC1D05 /* GTMNSString+URLArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSString+URLArguments.h"; sourceTree = ""; }; + D9EE7483158A8C0E00EC1D05 /* GTMNSString+URLArguments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+URLArguments.m"; sourceTree = ""; }; + D9EE7484158A8C0E00EC1D05 /* GTMOAuth2Authentication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2Authentication.h; sourceTree = ""; }; + D9EE7485158A8C0E00EC1D05 /* GTMOAuth2Authentication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2Authentication.m; sourceTree = ""; }; + D9EE7486158A8C0E00EC1D05 /* GTMOAuth2SignIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2SignIn.h; sourceTree = ""; }; + D9EE7487158A8C0E00EC1D05 /* GTMOAuth2SignIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2SignIn.m; sourceTree = ""; }; + D9EE7488158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2ViewControllerTouch.h; sourceTree = ""; }; + D9EE7489158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2ViewControllerTouch.m; sourceTree = ""; }; + D9EE748A158A8C0E00EC1D05 /* GTMOAuth2ViewTouch.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GTMOAuth2ViewTouch.xib; sourceTree = ""; }; + D9EE748B158A8C0E00EC1D05 /* GTMObjC2Runtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMObjC2Runtime.h; sourceTree = ""; }; + D9EE748C158A8C0E00EC1D05 /* GTMObjC2Runtime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMObjC2Runtime.m; sourceTree = ""; }; + D9EE74AD158A8D1E00EC1D05 /* libGooglePlus.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGooglePlus.a; path = ../lib/libGooglePlus.a; sourceTree = ""; }; + D9EE74AE158A8D1E00EC1D05 /* libGooglePlusUniversal.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libGooglePlusUniversal.a; path = ../lib/libGooglePlusUniversal.a; sourceTree = ""; }; + D9EE74B1158A8E0500EC1D05 /* GooglePlusSample-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GooglePlusSample-Info.plist"; sourceTree = SOURCE_ROOT; }; + D9EE74B2158A8E0500EC1D05 /* GooglePlusSample-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GooglePlusSample-Prefix.pch"; sourceTree = SOURCE_ROOT; }; + D9EE74B3158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleAppDelegate.h; sourceTree = SOURCE_ROOT; }; + D9EE74B4158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleAppDelegate.m; sourceTree = SOURCE_ROOT; }; + D9EE74B5158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleMasterViewController.h; sourceTree = SOURCE_ROOT; }; + D9EE74B6158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleMasterViewController.m; sourceTree = SOURCE_ROOT; }; + D9EE74B7158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GooglePlusSampleMasterViewController.xib; sourceTree = SOURCE_ROOT; }; + D9EE74B8158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleMomentsViewController.h; sourceTree = SOURCE_ROOT; }; + D9EE74B9158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleMomentsViewController.m; sourceTree = SOURCE_ROOT; }; + D9EE74BA158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GooglePlusSampleMomentsViewController.xib; sourceTree = SOURCE_ROOT; }; + D9EE74BB158A8E0500EC1D05 /* GooglePlusSampleShareViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleShareViewController.h; sourceTree = SOURCE_ROOT; }; + D9EE74BC158A8E0500EC1D05 /* GooglePlusSampleShareViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleShareViewController.m; sourceTree = SOURCE_ROOT; }; + D9EE74BD158A8E0500EC1D05 /* GooglePlusSampleShareViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GooglePlusSampleShareViewController.xib; sourceTree = SOURCE_ROOT; }; + D9EE74BE158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSampleSignInViewController.h; sourceTree = SOURCE_ROOT; }; + D9EE74BF158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GooglePlusSampleSignInViewController.m; sourceTree = SOURCE_ROOT; }; + D9EE74C0158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GooglePlusSampleSignInViewController.xib; sourceTree = SOURCE_ROOT; }; + D9EE74CC158A8E2900EC1D05 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = SOURCE_ROOT; }; + D9EE74E0158A9A7D00EC1D05 /* google_plus_sign_in_wide.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = google_plus_sign_in_wide.png; path = ../Resources/google_plus_sign_in_wide.png; sourceTree = ""; }; + D9EE74E1158A9A7D00EC1D05 /* google_plus_sign_in_wide@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "google_plus_sign_in_wide@2x.png"; path = "../Resources/google_plus_sign_in_wide@2x.png"; sourceTree = ""; }; + D9EE74E2158A9A7D00EC1D05 /* google_plus_sign_in.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = google_plus_sign_in.png; path = ../Resources/google_plus_sign_in.png; sourceTree = ""; }; + D9EE74E3158A9A7D00EC1D05 /* google_plus_sign_in@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "google_plus_sign_in@2x.png"; path = "../Resources/google_plus_sign_in@2x.png"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 0043C7971580045B000DF02E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D973B402158ABC1F0083A4B5 /* MessageUI.framework in Frameworks */, + 00F70E9B158008040077799E /* SystemConfiguration.framework in Frameworks */, + 00F70E99158007D90077799E /* Security.framework in Frameworks */, + 0043C79F1580045B000DF02E /* UIKit.framework in Frameworks */, + 0043C7A11580045B000DF02E /* Foundation.framework in Frameworks */, + 0043C7A31580045B000DF02E /* CoreGraphics.framework in Frameworks */, + D9EE74B0158A8D1E00EC1D05 /* libGooglePlusUniversal.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0043C78F1580045B000DF02E = { + isa = PBXGroup; + children = ( + D9EE7434158A8BB500EC1D05 /* GooglePlusSDK */, + D9EE7446158A8C0E00EC1D05 /* GoogleOpenSource */, + 0043C7A41580045B000DF02E /* GooglePlusSample */, + 0043C79D1580045B000DF02E /* Frameworks */, + 0043C79B1580045B000DF02E /* Products */, + ); + sourceTree = ""; + }; + 0043C79B1580045B000DF02E /* Products */ = { + isa = PBXGroup; + children = ( + 0043C79A1580045B000DF02E /* GooglePlusSample.app */, + ); + name = Products; + sourceTree = ""; + }; + 0043C79D1580045B000DF02E /* Frameworks */ = { + isa = PBXGroup; + children = ( + D973B401158ABC1F0083A4B5 /* MessageUI.framework */, + 00F70E9A158008040077799E /* SystemConfiguration.framework */, + 00F70E98158007D90077799E /* Security.framework */, + 0043C79E1580045B000DF02E /* UIKit.framework */, + 0043C7A01580045B000DF02E /* Foundation.framework */, + 0043C7A21580045B000DF02E /* CoreGraphics.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 0043C7A41580045B000DF02E /* GooglePlusSample */ = { + isa = PBXGroup; + children = ( + D9EE74B3158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.h */, + D9EE74B4158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.m */, + D9EE74B5158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.h */, + D9EE74B6158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.m */, + D9EE74B7158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.xib */, + D9EE74B8158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.h */, + D9EE74B9158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.m */, + D9EE74BA158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.xib */, + D9EE74BB158A8E0500EC1D05 /* GooglePlusSampleShareViewController.h */, + D9EE74BC158A8E0500EC1D05 /* GooglePlusSampleShareViewController.m */, + D9EE74BD158A8E0500EC1D05 /* GooglePlusSampleShareViewController.xib */, + D9EE74BE158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.h */, + D9EE74BF158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.m */, + D9EE74C0158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.xib */, + D98254AB15990DBC0060CA47 /* Resources */, + 0043C7A51580045B000DF02E /* Supporting Files */, + ); + path = GooglePlusSample; + sourceTree = ""; + }; + 0043C7A51580045B000DF02E /* Supporting Files */ = { + isa = PBXGroup; + children = ( + 00F70E82158006DC0077799E /* main.m */, + D9EE74CB158A8E2900EC1D05 /* InfoPlist.strings */, + D9EE74B1158A8E0500EC1D05 /* GooglePlusSample-Info.plist */, + D9EE74B2158A8E0500EC1D05 /* GooglePlusSample-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + D98254AB15990DBC0060CA47 /* Resources */ = { + isa = PBXGroup; + children = ( + D98254A615990D8D0060CA47 /* Icon_2x.png */, + D98254A715990D8D0060CA47 /* Icon.png */, + 0C52D6F7158BAB1F001510E6 /* button_background.png */, + ); + name = Resources; + sourceTree = ""; + }; + D9EE7434158A8BB500EC1D05 /* GooglePlusSDK */ = { + isa = PBXGroup; + children = ( + D9EE7431158A8BAE00EC1D05 /* GooglePlusShare.h */, + D9EE7432158A8BAE00EC1D05 /* GooglePlusSignIn.h */, + D9EE7433158A8BAE00EC1D05 /* GooglePlusSignInButton.h */, + D9EE74AD158A8D1E00EC1D05 /* libGooglePlus.a */, + D9EE74AE158A8D1E00EC1D05 /* libGooglePlusUniversal.a */, + D9EE7445158A8BDB00EC1D05 /* Resources */, + ); + name = GooglePlusSDK; + sourceTree = ""; + }; + D9EE7445158A8BDB00EC1D05 /* Resources */ = { + isa = PBXGroup; + children = ( + D9EE74E0158A9A7D00EC1D05 /* google_plus_sign_in_wide.png */, + D9EE74E1158A9A7D00EC1D05 /* google_plus_sign_in_wide@2x.png */, + D9EE74E2158A9A7D00EC1D05 /* google_plus_sign_in.png */, + D9EE74E3158A9A7D00EC1D05 /* google_plus_sign_in@2x.png */, + D9EE7435158A8BD400EC1D05 /* google_plus_share_large.png */, + D9EE7436158A8BD400EC1D05 /* google_plus_share_large@2x.png */, + D9EE7437158A8BD400EC1D05 /* google_plus_share.png */, + D9EE7438158A8BD400EC1D05 /* google_plus_share@2x.png */, + ); + name = Resources; + sourceTree = ""; + }; + D9EE7446158A8C0E00EC1D05 /* GoogleOpenSource */ = { + isa = PBXGroup; + children = ( + D9EE7447158A8C0E00EC1D05 /* GTL */, + D9EE7472158A8C0E00EC1D05 /* GTMDefines.h */, + D9EE7473158A8C0E00EC1D05 /* GTMGarbageCollection.h */, + D9EE7474158A8C0E00EC1D05 /* GTMHTTPFetcher.h */, + D9EE7475158A8C0E00EC1D05 /* GTMHTTPFetcher.m */, + D9EE7476158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.h */, + D9EE7477158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.m */, + D9EE7478158A8C0E00EC1D05 /* GTMHTTPFetcherService.h */, + D9EE7479158A8C0E00EC1D05 /* GTMHTTPFetcherService.m */, + D9EE747A158A8C0E00EC1D05 /* GTMHTTPFetchHistory.h */, + D9EE747B158A8C0E00EC1D05 /* GTMHTTPFetchHistory.m */, + D9EE747C158A8C0E00EC1D05 /* GTMLogger.h */, + D9EE747D158A8C0E00EC1D05 /* GTMLogger.m */, + D9EE747E158A8C0E00EC1D05 /* GTMMethodCheck.h */, + D9EE747F158A8C0E00EC1D05 /* GTMMethodCheck.m */, + D9EE7480158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.h */, + D9EE7481158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.m */, + D9EE7482158A8C0E00EC1D05 /* GTMNSString+URLArguments.h */, + D9EE7483158A8C0E00EC1D05 /* GTMNSString+URLArguments.m */, + D9EE7484158A8C0E00EC1D05 /* GTMOAuth2Authentication.h */, + D9EE7485158A8C0E00EC1D05 /* GTMOAuth2Authentication.m */, + D9EE7486158A8C0E00EC1D05 /* GTMOAuth2SignIn.h */, + D9EE7487158A8C0E00EC1D05 /* GTMOAuth2SignIn.m */, + D9EE7488158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.h */, + D9EE7489158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.m */, + D9EE748A158A8C0E00EC1D05 /* GTMOAuth2ViewTouch.xib */, + D9EE748B158A8C0E00EC1D05 /* GTMObjC2Runtime.h */, + D9EE748C158A8C0E00EC1D05 /* GTMObjC2Runtime.m */, + ); + name = GoogleOpenSource; + path = ../OpenSource; + sourceTree = ""; + }; + D9EE7447158A8C0E00EC1D05 /* GTL */ = { + isa = PBXGroup; + children = ( + D9EE7459158A8C0E00EC1D05 /* GTLPlus */, + D9EE7448158A8C0E00EC1D05 /* GTLBase64.h */, + D9EE7449158A8C0E00EC1D05 /* GTLBase64.m */, + D9EE744A158A8C0E00EC1D05 /* GTLBatchQuery.h */, + D9EE744B158A8C0E00EC1D05 /* GTLBatchQuery.m */, + D9EE744C158A8C0E00EC1D05 /* GTLBatchResult.h */, + D9EE744D158A8C0E00EC1D05 /* GTLBatchResult.m */, + D9EE744E158A8C0E00EC1D05 /* GTLDateTime.h */, + D9EE744F158A8C0E00EC1D05 /* GTLDateTime.m */, + D9EE7450158A8C0E00EC1D05 /* GTLDefines.h */, + D9EE7451158A8C0E00EC1D05 /* GTLErrorObject.h */, + D9EE7452158A8C0E00EC1D05 /* GTLErrorObject.m */, + D9EE7453158A8C0E00EC1D05 /* GTLFramework.h */, + D9EE7454158A8C0E00EC1D05 /* GTLFramework.m */, + D9EE7455158A8C0E00EC1D05 /* GTLJSONParser.h */, + D9EE7456158A8C0E00EC1D05 /* GTLJSONParser.m */, + D9EE7457158A8C0E00EC1D05 /* GTLObject.h */, + D9EE7458158A8C0E00EC1D05 /* GTLObject.m */, + D9EE7467158A8C0E00EC1D05 /* GTLQuery.h */, + D9EE7468158A8C0E00EC1D05 /* GTLQuery.m */, + D9EE7469158A8C0E00EC1D05 /* GTLRuntimeCommon.h */, + D9EE746A158A8C0E00EC1D05 /* GTLRuntimeCommon.m */, + D9EE746B158A8C0E00EC1D05 /* GTLService.h */, + D9EE746C158A8C0E00EC1D05 /* GTLService.m */, + D9EE746D158A8C0E00EC1D05 /* GTLTargetNamespace.h */, + D9EE746E158A8C0E00EC1D05 /* GTLUploadParameters.h */, + D9EE746F158A8C0E00EC1D05 /* GTLUploadParameters.m */, + D9EE7470158A8C0E00EC1D05 /* GTLUtilities.h */, + D9EE7471158A8C0E00EC1D05 /* GTLUtilities.m */, + ); + path = GTL; + sourceTree = ""; + }; + D9EE7459158A8C0E00EC1D05 /* GTLPlus */ = { + isa = PBXGroup; + children = ( + D9EE745A158A8C0E00EC1D05 /* GTLPlus.h */, + D9EE745B158A8C0E00EC1D05 /* GTLPlusConstants.h */, + D9EE745C158A8C0E00EC1D05 /* GTLPlusConstants.m */, + D9EE745D158A8C0E00EC1D05 /* GTLPlusItemScope.h */, + D9EE745E158A8C0E00EC1D05 /* GTLPlusItemScope.m */, + D9EE745F158A8C0E00EC1D05 /* GTLPlusMoment.h */, + D9EE7460158A8C0E00EC1D05 /* GTLPlusMoment.m */, + D98254F0159937730060CA47 /* GTLPlusPerson.h */, + D98254F1159937730060CA47 /* GTLPlusPerson.m */, + D9EE7463158A8C0E00EC1D05 /* GTLQueryPlus.h */, + D9EE7464158A8C0E00EC1D05 /* GTLQueryPlus.m */, + D9EE7465158A8C0E00EC1D05 /* GTLServicePlus.h */, + D9EE7466158A8C0E00EC1D05 /* GTLServicePlus.m */, + ); + path = GTLPlus; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 0043C7991580045B000DF02E /* GooglePlusSample */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0043C7B21580045B000DF02E /* Build configuration list for PBXNativeTarget "GooglePlusSample" */; + buildPhases = ( + 0043C7961580045B000DF02E /* Sources */, + 0043C7971580045B000DF02E /* Frameworks */, + 0043C7981580045B000DF02E /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = GooglePlusSample; + productName = GooglePlusSample; + productReference = 0043C79A1580045B000DF02E /* GooglePlusSample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 0043C7911580045B000DF02E /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0420; + ORGANIZATIONNAME = "Google Inc"; + }; + buildConfigurationList = 0043C7941580045B000DF02E /* Build configuration list for PBXProject "GooglePlusSample" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 0043C78F1580045B000DF02E; + productRefGroup = 0043C79B1580045B000DF02E /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 0043C7991580045B000DF02E /* GooglePlusSample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 0043C7981580045B000DF02E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D9EE743D158A8BD400EC1D05 /* google_plus_share_large.png in Resources */, + D9EE743E158A8BD400EC1D05 /* google_plus_share_large@2x.png in Resources */, + D9EE743F158A8BD400EC1D05 /* google_plus_share.png in Resources */, + D9EE7440158A8BD400EC1D05 /* google_plus_share@2x.png in Resources */, + D9EE74E4158A9A7D00EC1D05 /* google_plus_sign_in_wide.png in Resources */, + D9EE74E5158A9A7D00EC1D05 /* google_plus_sign_in_wide@2x.png in Resources */, + D9EE74E6158A9A7D00EC1D05 /* google_plus_sign_in.png in Resources */, + D9EE74E7158A9A7D00EC1D05 /* google_plus_sign_in@2x.png in Resources */, + D9EE74AB158A8C0E00EC1D05 /* GTMOAuth2ViewTouch.xib in Resources */, + D9EE74C4158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.xib in Resources */, + D9EE74C6158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.xib in Resources */, + D9EE74C8158A8E0500EC1D05 /* GooglePlusSampleShareViewController.xib in Resources */, + D9EE74CA158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.xib in Resources */, + D9EE74CD158A8E2900EC1D05 /* InfoPlist.strings in Resources */, + 0C52D6F8158BAB1F001510E6 /* button_background.png in Resources */, + D98254A815990D8D0060CA47 /* Icon_2x.png in Resources */, + D98254A915990D8D0060CA47 /* Icon.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0043C7961580045B000DF02E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 00F70E83158006DC0077799E /* main.m in Sources */, + D9EE748D158A8C0E00EC1D05 /* GTLBase64.m in Sources */, + D9EE748E158A8C0E00EC1D05 /* GTLBatchQuery.m in Sources */, + D9EE748F158A8C0E00EC1D05 /* GTLBatchResult.m in Sources */, + D9EE7490158A8C0E00EC1D05 /* GTLDateTime.m in Sources */, + D9EE7491158A8C0E00EC1D05 /* GTLErrorObject.m in Sources */, + D9EE7492158A8C0E00EC1D05 /* GTLFramework.m in Sources */, + D9EE7493158A8C0E00EC1D05 /* GTLJSONParser.m in Sources */, + D9EE7494158A8C0E00EC1D05 /* GTLObject.m in Sources */, + D9EE7495158A8C0E00EC1D05 /* GTLPlusConstants.m in Sources */, + D9EE7496158A8C0E00EC1D05 /* GTLPlusItemScope.m in Sources */, + D9EE7497158A8C0E00EC1D05 /* GTLPlusMoment.m in Sources */, + D9EE7499158A8C0E00EC1D05 /* GTLQueryPlus.m in Sources */, + D9EE749A158A8C0E00EC1D05 /* GTLServicePlus.m in Sources */, + D9EE749B158A8C0E00EC1D05 /* GTLQuery.m in Sources */, + D9EE749C158A8C0E00EC1D05 /* GTLRuntimeCommon.m in Sources */, + D9EE749D158A8C0E00EC1D05 /* GTLService.m in Sources */, + D9EE749E158A8C0E00EC1D05 /* GTLUploadParameters.m in Sources */, + D9EE749F158A8C0E00EC1D05 /* GTLUtilities.m in Sources */, + D9EE74A0158A8C0E00EC1D05 /* GTMHTTPFetcher.m in Sources */, + D9EE74A1158A8C0E00EC1D05 /* GTMHTTPFetcherLogging.m in Sources */, + D9EE74A2158A8C0E00EC1D05 /* GTMHTTPFetcherService.m in Sources */, + D9EE74A3158A8C0E00EC1D05 /* GTMHTTPFetchHistory.m in Sources */, + D9EE74A4158A8C0E00EC1D05 /* GTMLogger.m in Sources */, + D9EE74A5158A8C0E00EC1D05 /* GTMMethodCheck.m in Sources */, + D9EE74A6158A8C0E00EC1D05 /* GTMNSDictionary+URLArguments.m in Sources */, + D9EE74A7158A8C0E00EC1D05 /* GTMNSString+URLArguments.m in Sources */, + D9EE74A8158A8C0E00EC1D05 /* GTMOAuth2Authentication.m in Sources */, + D9EE74A9158A8C0E00EC1D05 /* GTMOAuth2SignIn.m in Sources */, + D9EE74AA158A8C0E00EC1D05 /* GTMOAuth2ViewControllerTouch.m in Sources */, + D9EE74AC158A8C0E00EC1D05 /* GTMObjC2Runtime.m in Sources */, + D9EE74C2158A8E0500EC1D05 /* GooglePlusSampleAppDelegate.m in Sources */, + D9EE74C3158A8E0500EC1D05 /* GooglePlusSampleMasterViewController.m in Sources */, + D9EE74C5158A8E0500EC1D05 /* GooglePlusSampleMomentsViewController.m in Sources */, + D9EE74C7158A8E0500EC1D05 /* GooglePlusSampleShareViewController.m in Sources */, + D9EE74C9158A8E0500EC1D05 /* GooglePlusSampleSignInViewController.m in Sources */, + D98254F2159937730060CA47 /* GTLPlusPerson.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + D9EE74CB158A8E2900EC1D05 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + D9EE74CC158A8E2900EC1D05 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 0043C7B01580045B000DF02E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + OTHER_LDFLAGS = ( + "-all_load", + "-ObjC", + ); + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 0043C7B11580045B000DF02E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_32_BIT)"; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 5.0; + OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; + OTHER_LDFLAGS = ( + "-all_load", + "-ObjC", + ); + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 0043C7B31580045B000DF02E /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "GooglePlusSample-Prefix.pch"; + INFOPLIST_FILE = "GooglePlusSample-Info.plist"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)\"", + "\"$(SRCROOT)/../lib\"", + ); + OTHER_LDFLAGS = ( + "-all_load", + "-ObjC", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 0043C7B41580045B000DF02E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "GooglePlusSample-Prefix.pch"; + INFOPLIST_FILE = "GooglePlusSample-Info.plist"; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)\"", + "\"$(SRCROOT)/../lib\"", + ); + OTHER_LDFLAGS = ( + "-all_load", + "-ObjC", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 0043C7941580045B000DF02E /* Build configuration list for PBXProject "GooglePlusSample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0043C7B01580045B000DF02E /* Debug */, + 0043C7B11580045B000DF02E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0043C7B21580045B000DF02E /* Build configuration list for PBXNativeTarget "GooglePlusSample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0043C7B31580045B000DF02E /* Debug */, + 0043C7B41580045B000DF02E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 0043C7911580045B000DF02E /* Project object */; +} diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 00000000..87d7bd1d --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.xcworkspace/xcuserdata/xiangtian.xcuserdatad/UserInterfaceState.xcuserstate b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.xcworkspace/xcuserdata/xiangtian.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..c4253c1930f209decb36304e51ea7f870752622d GIT binary patch literal 10782 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 m=MT;woxfs!%Vn4{(lYWg3Nwa literal 0 HcmV?d00001 diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/xcuserdata/xiangtian.xcuserdatad/xcschemes/GooglePlusSample.xcscheme b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/xcuserdata/xiangtian.xcuserdatad/xcschemes/GooglePlusSample.xcscheme new file mode 100644 index 00000000..da367a26 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/xcuserdata/xiangtian.xcuserdatad/xcschemes/GooglePlusSample.xcscheme @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/xcuserdata/xiangtian.xcuserdatad/xcschemes/xcschememanagement.plist b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/xcuserdata/xiangtian.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 00000000..b6fa4a06 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/xcuserdata/xiangtian.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,22 @@ + + + + + SchemeUserState + + GooglePlusSample.xcscheme + + orderHint + 0 + + + SuppressBuildableAutocreation + + 0043C7991580045B000DF02E + + primary + + + + + diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleAppDelegate.h b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleAppDelegate.h new file mode 100644 index 00000000..7da9a72a --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleAppDelegate.h @@ -0,0 +1,41 @@ +// +// GooglePlusSampleAppDelegate.h +// +// Copyright 2012 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +@class GooglePlusShare; +@class GooglePlusSignInButton; +@class GTMOAuth2Authentication; + +@interface GooglePlusSampleAppDelegate : UIResponder + +// The sample app's |UIWindow|. +@property (retain, nonatomic) UIWindow *window; +// The navigation controller. +@property (retain, nonatomic) UINavigationController *navigationController; +// The Google+ sign-in button to handle the URL redirect. +@property (retain, nonatomic) GooglePlusSignInButton *signInButton; +// The OAuth 2.0 authentication used in the application. +@property (retain, nonatomic) GTMOAuth2Authentication *auth; +// The Google+ share object to handle the URL redirect. +@property (retain, nonatomic) GooglePlusShare *share; + +// The OAuth 2.0 client ID to be used for Google+ sign-in, share, and moments. ++ (NSString *)clientID; + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleAppDelegate.m b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleAppDelegate.m new file mode 100644 index 00000000..f4024ad1 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleAppDelegate.m @@ -0,0 +1,89 @@ +// +// GooglePlusSampleAppDelegate.m +// +// Copyright 2012 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "GooglePlusSampleAppDelegate.h" + +#import "GooglePlusSampleMasterViewController.h" +#import "GooglePlusSignIn.h" +#import "GooglePlusSignInButton.h" + +@implementation GooglePlusSampleAppDelegate + +@synthesize window = window_; +@synthesize navigationController = navigationController_; +@synthesize signInButton = signInButton_; +@synthesize auth = auth_; +@synthesize share = share_; + +// DO NOT USE THIS CLIENT ID. IT WILL NOT WORK FOR YOUR APP. +// Please use the client ID created for you by Google. +static NSString * const kClientID = @"571459971810-" + @"2bpoda566pap5kkc0aqljqfjki8tgeb6.apps.googleusercontent.com"; + ++ (NSString *)clientID { + return kClientID; +} + +#pragma mark Object life-cycle. + +- (void)dealloc { + [window_ release]; + [navigationController_ release]; + [signInButton_ release]; + [auth_ release]; + [share_ release]; + [super dealloc]; +} + +- (BOOL)application:(UIApplication *)application + didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + self.window = [[[UIWindow alloc] + initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; + GooglePlusSampleMasterViewController *masterViewController = + [[[GooglePlusSampleMasterViewController alloc] + initWithNibName:@"GooglePlusSampleMasterViewController" + bundle:nil] autorelease]; + self.navigationController = + [[[UINavigationController alloc] + initWithRootViewController:masterViewController] autorelease]; + self.window.rootViewController = self.navigationController; + [self.window makeKeyAndVisible]; + return YES; +} + +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation { + // Handle Google+ share dialog URL. + if ([share_ handleURL:url + sourceApplication:sourceApplication + annotation:annotation]) { + return YES; + } + + // Handle Google+ sign-in button URL. + if ([signInButton_ handleURL:url + sourceApplication:sourceApplication + annotation:annotation]) { + return YES; + } + return NO; +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.h b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.h new file mode 100644 index 00000000..2d3b166f --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.h @@ -0,0 +1,23 @@ +// +// GooglePlusSampleMasterViewController.h +// +// Copyright 2012 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +@interface GooglePlusSampleMasterViewController : UITableViewController + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.m b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.m new file mode 100644 index 00000000..b15ab22a --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.m @@ -0,0 +1,98 @@ +// +// GooglePlusSampleMasterViewController.m +// +// Copyright 2012 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "GooglePlusSampleMasterViewController.h" + +#import "GooglePlusSampleShareViewController.h" +#import "GooglePlusSampleSignInViewController.h" +#import "GooglePlusSampleMomentsViewController.h" + +static const int kNumViewControllers = 3; +static NSString * const kMenuOptions[kNumViewControllers] = { + @"Sign In", @"Share", @"Moments" }; +static NSString * const kNibNames[kNumViewControllers] = { + @"GooglePlusSampleSignInViewController", + @"GooglePlusSampleShareViewController", + @"GooglePlusSampleMomentsViewController" }; + +@implementation GooglePlusSampleMasterViewController + +- (id)initWithNibName:(NSString *)nibNameOrNil + bundle:(NSBundle *)nibBundleOrNil { + self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; + if (self) { + self.title = @"Google+ SDK Sample"; + UIBarButtonItem *backButton = [[[UIBarButtonItem alloc] + initWithTitle:@"Back" + style:UIBarButtonItemStylePlain + target:self + action:@selector(backPressed)] autorelease]; + self.navigationItem.backBarButtonItem = backButton; + } + return self; +} + +#pragma mark - View lifecycle + +- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) + interfaceOrientation { + if ([[UIDevice currentDevice] userInterfaceIdiom] == + UIUserInterfaceIdiomPhone) { + return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown; + } + return YES; +} + +#pragma mark - UITableViewDelegate/UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView + numberOfRowsInSection:(NSInteger)section { + return kNumViewControllers; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString * const kCellIdentifier = @"Cell"; + UITableViewCell *cell = + [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; + if (cell == nil) { + cell = + [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:kCellIdentifier] autorelease]; + cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; + } + + cell.textLabel.text = kMenuOptions[indexPath.row]; + return cell; +} + +- (void)tableView:(UITableView *)tableView + didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + Class nibClass = NSClassFromString(kNibNames[indexPath.row]); + UIViewController *controller = + [[[nibClass alloc] initWithNibName:nil bundle:nil] autorelease]; + controller.navigationItem.title = kMenuOptions[indexPath.row]; + + [self.navigationController pushViewController:controller animated:YES]; +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.xib b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.xib new file mode 100644 index 00000000..7f4463c7 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMasterViewController.xib @@ -0,0 +1,251 @@ + + + + 1280 + 10K549 + 1938 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 933 + + + IBUINavigationItem + IBUITableView + IBUITableViewController + IBUINavigationController + IBUINavigationBar + IBProxyObject + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + {{0, 20}, {320, 460}} + + + 3 + MQA + + YES + + IBCocoaTouchFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + + + 1 + 1 + + IBCocoaTouchFramework + NO + + + 256 + {0, 0} + NO + YES + YES + IBCocoaTouchFramework + + + + + + 274 + {{0, 64}, {320, 416}} + + + + + NO + YES + NO + IBCocoaTouchFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + + Google Plus Sample App + IBCocoaTouchFramework + + + + + 1 + 1 + + IBCocoaTouchFramework + NO + + + + + + + + + view + + + + 3 + + + + dataSource + + + + 4 + + + + delegate + + + + 5 + + + + delegate + + + + 12 + + + + dataSource + + + + 13 + + + + + + 0 + + + + + + -1 + + + File's Owner + + + -2 + + + + + 2 + + + + + 6 + + + + + + + + + 7 + + + + + 10 + + + + + + + + + 11 + + + + + 14 + + + + + + + GooglePlusSampleMasterViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 14 + + + + + GooglePlusSampleMasterViewController + UITableViewController + + IBProjectSource + ./Classes/GooglePlusSampleMasterViewController.h + + + + + 0 + IBCocoaTouchFramework + YES + 3 + 933 + + diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.h b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.h new file mode 100644 index 00000000..2e0ad98d --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.h @@ -0,0 +1,45 @@ +// +// GooglePlusSampleMomentsViewController.h +// +// Copyright 2012 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +@class GTLServicePlus; + +// A view controller for writing different kinds of moments to Google+ history. +// The open-source GTLPlus libraries are required. For more details, see +// https://developers.google.com/+/history/ . +@interface GooglePlusSampleMomentsViewController : UIViewController< + UITableViewDelegate, + UITableViewDataSource, + UITextFieldDelegate> { + BOOL keyboardVisible_; +} + +// The table that displays the different kinds of moments available. +@property (retain, nonatomic) IBOutlet UITableView *momentsTable; +// The target URL to associate with this moment. +@property (retain, nonatomic) IBOutlet UITextField *momentURL; +// A label to display the result of writing a moment. +@property (retain, nonatomic) IBOutlet UILabel *momentStatus; +// The "Add Moment" button. +@property (retain, nonatomic) IBOutlet UIButton *addButton; + +// Called when the user presses the "Add Moment" button. +- (IBAction)momentButton:(id)sender; + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.m b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.m new file mode 100644 index 00000000..d4a5172f --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.m @@ -0,0 +1,334 @@ +// +// GooglePlusSampleMomentsViewController.m +// +// Copyright 2012 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "GooglePlusSampleMomentsViewController.h" + +#import +#import "GTLPlus.h" +#import "GTLPlusConstants.h" +#import "GTLPlusItemScope.h" +#import "GTLPlusMoment.h" +#import "GTLQueryPlus.h" +#import "GTLServicePlus.h" +#import "GTMLogger.h" +#import "GTMOAuth2Authentication.h" +#import "GooglePlusSampleAppDelegate.h" + +@interface GooglePlusSampleMomentsViewController () +- (GTLPlusItemScope *)resultFor:(NSString *)selectedMoment; +- (void)animateKeyboard:(NSNotification *)notification + shouldShow:(BOOL)shouldShow; +- (NSString *)momentURLForIndex:(int)i; +- (void)reportAuthStatus; +@end + +@implementation GooglePlusSampleMomentsViewController + +@synthesize momentsTable = momentsTable_; +@synthesize momentURL = momentURL_; +@synthesize momentStatus = momentStatus_; +@synthesize addButton = addButton_; + +// The different kinds of moments. +static const int kNumMomentTypes = 9; +static NSString * const kMomentTypes[kNumMomentTypes] = { + @"AddActivity", + @"BuyActivity", + @"CheckInActivity", + @"CommentActivity", + @"CreateActivity", + @"ListenActivity", + @"ReserveActivity", + @"ReviewActivity", + @"ViewActivity" }; +static NSString * const kMomentURLs[kNumMomentTypes] = { + @"thing", + @"a-book", + @"place", + @"blog-entry", + @"photo", + @"song", + @"restaurant", + @"widget", + @"video" }; +static NSString * const kMomentURLFormat = + @"https://developers.google.com/+/plugins/snippet/examples/%@"; + +#pragma mark - Object lifecycle + +- (void)dealloc { + // Unregister for keyboard notifications while not visible. + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillHideNotification + object:nil]; + [momentsTable_ release]; + [momentURL_ release]; + [momentStatus_ release]; + [addButton_ release]; + [super dealloc]; +} + +#pragma mark - View lifecycle + +- (void)viewDidLoad { + // Set up "Add Moment" button. + [[addButton_ layer] setCornerRadius:5]; + [[addButton_ layer] setMasksToBounds:YES]; + CGColorRef borderColor = [[UIColor colorWithWhite:203.0/255.0 + alpha:1.0] CGColor]; + [[addButton_ layer] setBorderColor:borderColor]; + [[addButton_ layer] setBorderWidth:1.0]; + + // Set up sample view of writing moments. + int selectedRow = [[momentsTable_ indexPathForSelectedRow] row]; + momentURL_.text = [self momentURLForIndex:selectedRow]; + + [self reportAuthStatus]; + [super viewDidLoad]; +} + +- (void)viewWillAppear:(BOOL)animated { + [super viewWillAppear:animated]; + + // Register for keyboard notifications while visible. + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(keyboardWillShow:) + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] + addObserver:self + selector:@selector(keyboardWillHide:) + name:UIKeyboardWillHideNotification + object:nil]; +} + +- (void)viewWillDisappear:(BOOL)animated { + // Unregister for keyboard notifications while not visible. + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillShowNotification + object:nil]; + [[NSNotificationCenter defaultCenter] + removeObserver:self + name:UIKeyboardWillHideNotification + object:nil]; + + [super viewWillDisappear:animated]; +} + +#pragma mark - IBActions + +- (IBAction)momentButton:(id)sender { + GooglePlusSampleAppDelegate *appDelegate = (GooglePlusSampleAppDelegate *) + [[UIApplication sharedApplication] delegate]; + if (!appDelegate.auth) { + // To authenticate, use Google+ sign-in button. + momentStatus_.text = @"Status: Not authenticated"; + return; + } + + // Here is an example of writing a moment to Google+ history: + // 1. Create a |GTLServicePlus| instance to send a request to Google+. + GTLServicePlus* plusService = [[[GTLServicePlus alloc] init] autorelease]; + plusService.retryEnabled = YES; + + // 2. Set a valid |GTMOAuth2Authentication| object as the authorizer. + [plusService setAuthorizer:appDelegate.auth]; + + // 3. Create a |GTLPlusMoment| object with required fields. For reference, see + // https://developers.google.com/+/history/ . + int selectedRow = [[momentsTable_ indexPathForSelectedRow] row]; + NSString *selectedMoment = kMomentTypes[selectedRow]; + + GTLPlusMoment *moment = [[[GTLPlusMoment alloc] init] autorelease]; + moment.type = [NSString stringWithFormat:@"https://schemas.google.com/%@", + selectedMoment]; + GTLPlusItemScope *target = [[[GTLPlusItemScope alloc] init] autorelease]; + target.url = momentURL_.text; + if ([target.url isEqualToString:@""]) { + target.url = [self momentURLForIndex:selectedRow]; + } + moment.target = target; + + // CommentActivity, ReserveActivity, and ReviewActivity require setting a + // |result| field in the request. + GTLPlusItemScope *result = [self resultFor:selectedMoment]; + if (result) { + moment.result = result; + } + + // 4. Create a |GTLQuery| object to write a moment. + GTLQueryPlus *query = + [GTLQueryPlus queryForMomentsInsertWithObject:moment + userId:@"me" + collection:kGTLPlusCollectionVault]; + + [plusService executeQuery:query + completionHandler:^(GTLServiceTicket *ticket, + id object, + NSError *error) { + if (error) { + GTMLoggerError(@"Error: %@", error); + momentStatus_.text = + [NSString stringWithFormat:@"Status: Error: %@", error]; + } else { + momentStatus_.text = [NSString stringWithFormat: + @"Status: Saved to Google+ history (%@)", + selectedMoment]; + } + }]; +} + +#pragma mark - UITableViewDelegate/UITableViewDataSource + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView + numberOfRowsInSection:(NSInteger)section { + return kNumMomentTypes; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView + cellForRowAtIndexPath:(NSIndexPath *)indexPath { + static NSString * const kCellIdentifier = @"Cell"; + UITableViewCell *cell = + [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; + if (cell == nil) { + cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:kCellIdentifier] + autorelease]; + cell.accessoryType = UITableViewCellAccessoryNone; + } + + // Configure the cell. + cell.textLabel.text = kMomentTypes[indexPath.row]; + return cell; +} + +- (void)tableView:(UITableView *)tableView + didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + int selectedRow = [[momentsTable_ indexPathForSelectedRow] row]; + momentURL_.text = [self momentURLForIndex:selectedRow]; +} + +#pragma mark - UITextFieldDelegate + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + [textField resignFirstResponder]; + return YES; +} + +#pragma mark - UIKeyboard + +- (void)keyboardWillShow:(NSNotification *)notification { + [self animateKeyboard:notification shouldShow:YES]; +} + +- (void)keyboardWillHide:(NSNotification *)notification { + [self animateKeyboard:notification shouldShow:NO]; +} + +#pragma mark - Private methods + +// Helps set required result field for select moment types. +- (GTLPlusItemScope *)resultFor:(NSString *)selectedMoment { + GTLPlusItemScope *result = [[[GTLPlusItemScope alloc] init] autorelease]; + if ([selectedMoment isEqualToString:@"CommentActivity"]) { + result.type = @"http://schema.org/Comment"; + result.url = + @"https://developers.google.com/+/plugins/snippet/examples/blog-entry#comment-1"; + result.name = @"This is amazing!"; + result.text = @"I can't wait to use it on my site :)"; + return result; + } else if ([selectedMoment isEqualToString:@"ReserveActivity"]) { + result.type = @"http://schema.org/Reservation"; + result.startDate = @"2012-06-28T19:00:00-08:00"; + result.attendeeCount = [[[NSNumber alloc] initWithInt:3] autorelease]; + return result; + } else if ([selectedMoment isEqualToString:@"ReviewActivity"]) { + result.type = @"http://schema.org/Review"; + result.name = @"A Humble Review of Widget"; + result.url = + @"https://developers.google.com/+/plugins/snippet/examples/review"; + result.text = + @"It's amazingly effective at whatever it is that it's supposed to do."; + GTLPlusItemScope *rating = [[[GTLPlusItemScope alloc] init] autorelease]; + rating.type = @"http://schema.org/Rating"; + rating.ratingValue = @"100"; + rating.bestRating = @"100"; + rating.worstRating = @"0"; + result.reviewRating = + [[[NSArray alloc] initWithObjects:rating, nil] autorelease]; + return result; + } + return nil; +} + +// Helps animate keyboard for target URL text field. +- (void)animateKeyboard:(NSNotification *)notification + shouldShow:(BOOL)shouldShow { + NSDictionary *userInfo = [notification userInfo]; + CGFloat height = [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] + CGRectValue].size.height; + CGFloat duration = [[userInfo + objectForKey:UIKeyboardAnimationDurationUserInfoKey] floatValue]; + [UIView beginAnimations:nil context:NULL]; + [UIView setAnimationDuration:duration]; + CGRect newFrame = self.view.frame; + if (shouldShow) { + newFrame.size.height -= height; + } else { + newFrame.size.height += height; + } + self.view.frame = newFrame; + [UIView commitAnimations]; + if (shouldShow) { + keyboardVisible_ = YES; + } else { + keyboardVisible_ = NO; + } +} + +- (NSString *)momentURLForIndex:(int)i { + return [NSString stringWithFormat:kMomentURLFormat, kMomentURLs[i]]; +} + +- (void)reportAuthStatus { + NSString *authStatus = @""; + GooglePlusSampleAppDelegate *appDelegate = (GooglePlusSampleAppDelegate *) + [[UIApplication sharedApplication] delegate]; + + if (appDelegate.auth) { + authStatus = @"Status: Authenticated"; + } else { + // To authenticate, use Google+ sign-in button. + authStatus = @"Status: Not authenticated"; + } + + momentStatus_.text = authStatus; +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.xib b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.xib new file mode 100644 index 00000000..791b6beb --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleMomentsViewController.xib @@ -0,0 +1,462 @@ + + + + 1280 + 10K549 + 1938 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 933 + + + IBUITextField + IBUITableView + IBUIButton + IBUIView + IBUILabel + IBProxyObject + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 290 + {{10, 5}, {296, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Select an activity (scroll for more) + + 1 + MCAwIDAAA + + + 1 + 10 + + 1 + 17 + + + Helvetica + 17 + 16 + + + + + 274 + {{0, 32}, {320, 132}} + + + + + 3 + MQA + + YES + IBCocoaTouchFramework + YES + 1 + 0 + YES + 44 + 22 + 22 + + + + 266 + + + + 266 + {{11, 20}, {296, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Enter a Moment URL + + + 1 + 10 + + + + + + 266 + {{11, 51}, {291, 31}} + + + + NO + YES + IBCocoaTouchFramework + 0 + + 3 + + 3 + MAA + + 2 + + + YES + 17 + + IBCocoaTouchFramework + + + 1 + 14 + + + Helvetica + 14 + 16 + + + + + 264 + {{12, 113}, {142, 37}} + + + + NO + IBCocoaTouchFramework + 0 + 0 + Add Moment + + 1 + MC40MzkyMTU2ODYzIDAuMTI1NDkwMTk2MSAwLjA2Mjc0NTA5ODA0AA + + + 1 + MC42MzUyOTQxMTc2IDAuMzIxNTY4NjI3NSAwLjI1ODgyMzUyOTQAA + + + 3 + MC41AA + + + NSImage + button_background.png + + + 2 + 15 + + + Helvetica-Bold + 15 + 16 + + + + + 266 + {{11, 180}, {290, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Status: + + + 1 + 11 + + + + + {{0, 172}, {320, 244}} + + + + + IBCocoaTouchFramework + + + {{0, 64}, {320, 416}} + + + + + 3 + MQA + + + + + + NO + + IBCocoaTouchFramework + + + + + + + view + + + + 3 + + + + momentsTable + + + + 17 + + + + momentStatus + + + + 25 + + + + addButton + + + + 28 + + + + momentURL + + + + 30 + + + + dataSource + + + + 18 + + + + delegate + + + + 19 + + + + delegate + + + + 31 + + + + momentButton: + + + 7 + + 20 + + + + + + 0 + + + + + + 1 + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 7 + + + + + + 26 + + + + + 27 + + + + + + + + + + + 13 + + + + + 12 + + + + + 16 + + + + + 22 + + + + + + + GooglePlusSampleMomentsViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 31 + + + + + GooglePlusSampleMomentsViewController + UIViewController + + momentButton: + id + + + momentButton: + + momentButton: + id + + + + UIButton + UILabel + UITextField + UITableView + + + + addButton + UIButton + + + momentStatus + UILabel + + + momentURL + UITextField + + + momentsTable + UITableView + + + + IBProjectSource + ./Classes/GooglePlusSampleMomentsViewController.h + + + + + 0 + IBCocoaTouchFramework + YES + 3 + + button_background.png + {1, 1} + + 933 + + diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.h b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.h new file mode 100644 index 00000000..3feca972 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.h @@ -0,0 +1,50 @@ +// +// GooglePlusSampleShareViewController.h +// +// Copyright 2012 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import +#import +#import +#import "GooglePlusShare.h" + +// A view controller for the Google+ share dialog which contains a text field +// to prefill the user comment, and a text field for an optional URL to share. +// A Google+ share button is provided to launch the share dialog. +@interface GooglePlusSampleShareViewController : UIViewController< + GooglePlusShareDelegate, + UITextFieldDelegate, + UIActionSheetDelegate, + MFMailComposeViewControllerDelegate> { + // The Google+ share object to manage the share dialog. + GooglePlusShare *share_; +} + +// The text to prefill the user comment in the share dialog. +@property (retain, nonatomic) IBOutlet UITextField *sharePrefillText; +// The URL resource to share in the share dialog. +@property (retain, nonatomic) IBOutlet UITextField *shareURL; +// A label to display the result of the share action. +@property (retain, nonatomic) IBOutlet UILabel *shareStatus; +// A toolbar to share via Google+ or email. +@property (retain, nonatomic) IBOutlet UIToolbar *shareToolbar; + +// Called when the share button is pressed. +- (IBAction)shareButton:(id)sender; +// Called when the toolbar share button is pressed. +- (IBAction)shareToolbar:(id)sender; + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.m b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.m new file mode 100644 index 00000000..2e93562e --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.m @@ -0,0 +1,145 @@ +// +// GooglePlusSampleShareViewController.m +// +// Copyright 2012 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "GooglePlusSampleShareViewController.h" + +#import "GooglePlusSampleAppDelegate.h" + +@implementation GooglePlusSampleShareViewController + +@synthesize sharePrefillText = sharePrefillText_; +@synthesize shareURL = shareURL_; +@synthesize shareStatus = shareStatus_; +@synthesize shareToolbar = shareToolbar_; + +- (void)dealloc { + [sharePrefillText_ release]; + [shareURL_ release]; + [shareStatus_ release]; + [share_ release]; + [shareToolbar_ release]; + [super dealloc]; +} + +#pragma mark - View lifecycle + +- (void)viewDidLoad { + // Set up Google+ share dialog. + GooglePlusSampleAppDelegate *appDelegate = (GooglePlusSampleAppDelegate *) + [[UIApplication sharedApplication] delegate]; + NSString *clientID = [GooglePlusSampleAppDelegate clientID]; + share_ = [[GooglePlusShare alloc] initWithClientID:clientID]; + share_.delegate = self; + appDelegate.share = share_; + + [super viewDidLoad]; +} + +- (void)viewDidUnload { + GooglePlusSampleAppDelegate *appDelegate = (GooglePlusSampleAppDelegate *) + [[UIApplication sharedApplication] delegate]; + appDelegate.share = nil; + share_.delegate = nil; + [share_ release]; + share_ = nil; + + [super viewDidUnload]; +} + +#pragma mark - UITextFieldDelegate + +- (BOOL)textFieldShouldReturn:(UITextField *)textField { + [textField resignFirstResponder]; + return YES; +} + +#pragma mark - GooglePlusShareDelegate + +- (void)finishedSharing:(BOOL)shared { + NSString *text = shared ? @"Success" : @"Canceled"; + shareStatus_.text = [NSString stringWithFormat:@"Status: %@", text]; +} + +#pragma mark - UIActionSheetDelegate + +- (void)actionSheet:(UIActionSheet *)actionSheet + didDismissWithButtonIndex:(NSInteger)buttonIndex { + if (buttonIndex == 0) { + [self shareButton:nil]; + } else if (buttonIndex == 1) { + shareStatus_.text = @"Status: Sharing..."; + MFMailComposeViewController *picker = + [[[MFMailComposeViewController alloc] init] autorelease]; + picker.mailComposeDelegate = self; + [picker setSubject:sharePrefillText_.text]; + [picker setMessageBody:shareURL_.text isHTML:NO]; + + [self presentModalViewController:picker animated:YES]; + } +} + +#pragma mark - MFMailComposeViewControllerDelegate + +- (void)mailComposeController:(MFMailComposeViewController *)controller + didFinishWithResult:(MFMailComposeResult)result + error:(NSError*)error { + NSString *text; + switch (result) { + case MFMailComposeResultCancelled: + text = @"Canceled"; + break; + case MFMailComposeResultSaved: + text = @"Saved"; + break; + case MFMailComposeResultSent: + text = @"Sent"; + break; + case MFMailComposeResultFailed: + text = @"Failed"; + break; + default: + text = @"Not sent"; + break; + } + shareStatus_.text = [NSString stringWithFormat:@"Status: %@", text]; + [self dismissModalViewControllerAnimated:YES]; +} + +#pragma mark - IBActions + +- (IBAction)shareButton:(id)sender { + NSString *inputURL = shareURL_.text; + NSURL *urlToShare = [inputURL length] ? [NSURL URLWithString:inputURL] : nil; + NSString *inputText = sharePrefillText_.text; + NSString *text = [inputText length] ? inputText : nil; + shareStatus_.text = @"Status: Sharing..."; + [[[[share_ shareDialog] setURLToShare:urlToShare] setPrefillText:text] open]; +} + +- (IBAction)shareToolbar:(id)sender { + UIActionSheet *actionSheet = + [[[UIActionSheet alloc] initWithTitle:@"Share this post" + delegate:self + cancelButtonTitle:@"Cancel" + destructiveButtonTitle:nil + otherButtonTitles:@"Google+", @"Email", nil] + autorelease]; + [actionSheet showFromToolbar:shareToolbar_]; +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.xib b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.xib new file mode 100644 index 00000000..de51b338 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleShareViewController.xib @@ -0,0 +1,493 @@ + + + + 1280 + 10K549 + 1938 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 933 + + + IBUIView + IBProxyObject + IBUILabel + IBUIToolbar + IBUIBarButtonItem + IBUITextField + IBUIButton + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 292 + {{20, 55}, {280, 31}} + + + + NO + YES + IBCocoaTouchFramework + 0 + http://developers.google.com/ + 3 + + 3 + MAA + + 2 + + + YES + 17 + + IBCocoaTouchFramework + + + 1 + 14 + + + Helvetica + 14 + 16 + + + + + 292 + {{20, 144}, {280, 31}} + + + + NO + YES + IBCocoaTouchFramework + 0 + Welcome to Google+ Platform + 3 + + 3 + MAA + + + YES + 17 + + IBCocoaTouchFramework + + + + + + + 292 + {{20, 26}, {179, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + URL to Share (optional) + + 1 + MCAwIDAAA + + + 1 + 10 + + 1 + 17 + + + Helvetica + 17 + 16 + + + + + 292 + {{20, 115}, {156, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Prefill Text (optional) + + + 1 + 10 + + + + + + 292 + {{21, 209}, {112, 32}} + + + + NO + IBCocoaTouchFramework + 0 + 0 + + 3 + MQA + + + 1 + MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA + + + 3 + MC41AA + + + NSImage + google_plus_share_large.png + + + 2 + 15 + + + Helvetica-Bold + 15 + 16 + + + + + 290 + {{20, 283}, {280, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Status: + + + 1 + 15 + + + + + + 266 + {{0, 372}, {320, 44}} + + + + NO + NO + IBCocoaTouchFramework + + + IBCocoaTouchFramework + + 5 + + + IBCocoaTouchFramework + 1 + + 9 + + + + + {{0, 64}, {320, 416}} + + + + + 3 + MQA + + + + + NO + + IBCocoaTouchFramework + + + + + + + view + + + + 3 + + + + sharePrefillText + + + + 11 + + + + shareStatus + + + + 14 + + + + shareToolbar + + + + 19 + + + + shareURL + + + + 21 + + + + delegate + + + + 23 + + + + delegate + + + + 22 + + + + shareButton: + + + 7 + + 10 + + + + shareToolbar: + + + + 20 + + + + + + 0 + + + + + + 1 + + + + + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 5 + + + + + 6 + + + + + 7 + + + + + 8 + + + + + 9 + + + + + 13 + + + + + 15 + + + + + + + + + 17 + + + + + 18 + + + + + + + GooglePlusSampleShareViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 23 + + + + + GooglePlusSampleShareViewController + UIViewController + + id + id + + + + shareButton: + id + + + shareToolbar: + id + + + + UITextField + UILabel + UIToolbar + UITextField + + + + sharePrefillText + UITextField + + + shareStatus + UILabel + + + shareToolbar + UIToolbar + + + shareURL + UITextField + + + + IBProjectSource + ./Classes/GooglePlusSampleShareViewController.h + + + + + 0 + IBCocoaTouchFramework + YES + 3 + + google_plus_share_large.png + {112, 32} + + 933 + + diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.h b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.h new file mode 100644 index 00000000..942fbb75 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.h @@ -0,0 +1,40 @@ +// +// GooglePlusSignInViewController.h +// +// Copyright 2012 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import +#import "GooglePlusSignIn.h" + +@class GooglePlusSignInButton; + +// A view controller for the Google+ sign-in button which initiates a standard +// OAuth 2.0 flow and provides an access token and a refresh token. A "Sign out" +// button is provided to allow users to sign out of this application. +@interface GooglePlusSampleSignInViewController : UIViewController< + GooglePlusSignInDelegate> + +// The button that handles Google+ sign-in. +@property (retain, nonatomic) IBOutlet GooglePlusSignInButton *signInButton; +// A label to display the result of the sign-in action. +@property (retain, nonatomic) IBOutlet UILabel *signInAuthStatus; +// A button to sign out of this application. +@property (retain, nonatomic) IBOutlet UIButton *signOutButton; + +// Called when the user presses the "Sign out" button. +- (IBAction)signOut:(id)sender; + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.m b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.m new file mode 100644 index 00000000..a9e78412 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.m @@ -0,0 +1,110 @@ +// +// GooglePlusSignInViewController.m +// +// Copyright 2012 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import "GooglePlusSampleSignInViewController.h" + +#import +#import "GooglePlusSampleAppDelegate.h" +#import "GooglePlusSignIn.h" +#import "GooglePlusSignInButton.h" + +@implementation GooglePlusSampleSignInViewController + +@synthesize signInButton = signInButton_; +@synthesize signInAuthStatus = signInAuthStatus_; +@synthesize signOutButton = signOutButton_; + +- (void)dealloc { + [signInButton_ release]; + [signInAuthStatus_ release]; + [signOutButton_ release]; + [super dealloc]; +} + +#pragma mark - View lifecycle + +- (void)reportAuthStatus { + GooglePlusSampleAppDelegate *appDelegate = (GooglePlusSampleAppDelegate *) + [[UIApplication sharedApplication] delegate]; + if (appDelegate.auth) { + signInAuthStatus_.text = @"Status: Authenticated"; + } else { + // To authenticate, use Google+ sign-in button. + signInAuthStatus_.text = @"Status: Not authenticated"; + } +} + +- (void)viewDidLoad { + // Set up sign-out button. + [[signOutButton_ layer] setCornerRadius:5]; + [[signOutButton_ layer] setMasksToBounds:YES]; + CGColorRef borderColor = [[UIColor colorWithWhite:203.0/255.0 + alpha:1.0] CGColor]; + [[signOutButton_ layer] setBorderColor:borderColor]; + [[signOutButton_ layer] setBorderWidth:1.0]; + + // Set up sample view of Google+ sign-in. + signInButton_.delegate = self; + signInButton_.clientID = [GooglePlusSampleAppDelegate clientID]; + signInButton_.scope = [NSArray arrayWithObjects: + @"https://www.googleapis.com/auth/plus.moments.write", + @"https://www.googleapis.com/auth/plus.me", + nil]; + + GooglePlusSampleAppDelegate *appDelegate = (GooglePlusSampleAppDelegate *) + [[UIApplication sharedApplication] delegate]; + appDelegate.signInButton = signInButton_; + [self reportAuthStatus]; + [super viewDidLoad]; +} + +- (void)viewDidUnload { + GooglePlusSampleAppDelegate *appDelegate = (GooglePlusSampleAppDelegate *) + [[UIApplication sharedApplication] delegate]; + appDelegate.signInButton = nil; + [super viewDidUnload]; +} + +#pragma mark - GooglePlusSignInDelegate + +- (void)finishedWithAuth:(GTMOAuth2Authentication *)auth + error:(NSError *)error { + if (error) { + signInAuthStatus_.text = + [NSString stringWithFormat:@"Status: Authentication error: %@", error]; + return; + } + GooglePlusSampleAppDelegate *appDelegate = (GooglePlusSampleAppDelegate *) + [[UIApplication sharedApplication] delegate]; + appDelegate.auth = auth; + [self reportAuthStatus]; +} + +#pragma mark - IBActions + +- (IBAction)signOut:(id)sender { + [[signInButton_ googlePlusSignIn] signOut]; + + GooglePlusSampleAppDelegate *appDelegate = (GooglePlusSampleAppDelegate *) + [[UIApplication sharedApplication] delegate]; + appDelegate.auth = nil; + + [self reportAuthStatus]; +} + +@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.xib b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.xib new file mode 100644 index 00000000..e4e828f7 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/GooglePlusSampleSignInViewController.xib @@ -0,0 +1,256 @@ + + + + 1280 + 10K549 + 1938 + 1038.36 + 461.00 + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + 933 + + + IBUIButton + IBUIView + IBUILabel + IBProxyObject + + + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + PluginDependencyRecalculationVersion + + + + + IBFilesOwner + IBCocoaTouchFramework + + + IBFirstResponder + IBCocoaTouchFramework + + + + 274 + + + + 292 + {{19, 93}, {119, 35}} + + + + NO + IBCocoaTouchFramework + 0 + 0 + Sign out + + 1 + MC42MzUyOTQxMTc2IDAuMzIxNTY4NjI3NSAwLjI1ODgyMzUyOTQAA + + + 1 + MC42MzUyOTQxMTc2IDAuMzIxNTY4NjI3NSAwLjI1ODgyMzUyOTQAA + + + 3 + MC41AA + + + NSImage + button_background.png + + + 2 + 15 + + + Helvetica-Bold + 15 + 16 + + + + + 292 + {{18, 34}, {118, 32}} + + + + + 3 + MQA + + 2 + + + IBCocoaTouchFramework + + + + 290 + {{20, 163}, {280, 21}} + + + + NO + YES + 7 + NO + IBCocoaTouchFramework + Status: + + 1 + MCAwIDAAA + + + 1 + 13 + + 1 + 17 + + + Helvetica + 17 + 16 + + + + {{0, 20}, {320, 460}} + + + + + 3 + MQA + + + + IBCocoaTouchFramework + + + + + + + view + + + + 4 + + + + signInButton + + + + 14 + + + + signInAuthStatus + + + + 23 + + + + signOutButton + + + + 24 + + + + signOut: + + + 7 + + 26 + + + + + + 0 + + + + + + 1 + + + + + + + + + + -1 + + + File's Owner + + + -2 + + + + + 7 + + + + + 6 + + + + + 22 + + + + + + + GooglePlusSampleSignInViewController + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + UIResponder + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + GooglePlusSignInButton + com.apple.InterfaceBuilder.IBCocoaTouchPlugin + + + + + + 26 + + + 0 + IBCocoaTouchFramework + YES + 3 + + button_background.png + {1, 1} + + 933 + + diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Icon.png b/External/google-plus-ios-sdk/SampleCode/Resources/Icon.png new file mode 100644 index 0000000000000000000000000000000000000000..8b72f13fae1fe72d382316093acb93c61de46eee GIT binary patch literal 4179 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 literal 0 HcmV?d00001 diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Icon_2x.png b/External/google-plus-ios-sdk/SampleCode/Resources/Icon_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..4c308280f9d312e06952a57bba3d2a822d95d3f9 GIT binary patch literal 10599 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 BKcoNv literal 0 HcmV?d00001 diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/button_background.png b/External/google-plus-ios-sdk/SampleCode/Resources/button_background.png new file mode 100644 index 0000000000000000000000000000000000000000..b63e8719af8085b37fc3621ce82cbdd1bfd0ad92 GIT binary patch literal 6039 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 RgL41?002ovPDHLkV1nvStYH8E literal 0 HcmV?d00001 diff --git a/External/google-plus-ios-sdk/SampleCode/en.lproj/InfoPlist.strings b/External/google-plus-ios-sdk/SampleCode/en.lproj/InfoPlist.strings new file mode 100644 index 00000000..477b28ff --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/External/google-plus-ios-sdk/SampleCode/main.m b/External/google-plus-ios-sdk/SampleCode/main.m new file mode 100644 index 00000000..98dfc495 --- /dev/null +++ b/External/google-plus-ios-sdk/SampleCode/main.m @@ -0,0 +1,28 @@ +// +// main.m +// +// Copyright 2012 Google Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// + +#import + +#import "GooglePlusSampleAppDelegate.h" + +int main(int argc, char *argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, + NSStringFromClass([GooglePlusSampleAppDelegate class])); + } +} diff --git a/External/google-plus-ios-sdk/lib/GooglePlusShare.h b/External/google-plus-ios-sdk/lib/GooglePlusShare.h new file mode 100644 index 00000000..90fe2ae9 --- /dev/null +++ b/External/google-plus-ios-sdk/lib/GooglePlusShare.h @@ -0,0 +1,112 @@ +// +// GooglePlusShare.h +// Google+ iOS SDK +// +// Copyright 2012 Google Inc. +// +// Usage of this SDK is subject to the Google+ Platform Terms of Service: +// https://developers.google.com/+/terms +// + +// To allow a user to share with Google+, please follow these steps: +// +// 0. Create a project on Google APIs console, +// https://code.google.com/apis/console . Under "API Access", create a +// client ID as "Installed application" with the type "iOS", and +// register the bundle ID of your application. +// +// 1. Initialize a GooglePlusShare instance with your registered client ID: +// +// GooglePlusShare *googlePlusShare = +// [[GooglePlusShare alloc] initWithClientID:myClientID]; +// +// 2. In the code where the share dialog is to be opened: +// +// [[googlePlusShare shareDialog] open]; +// +// You may optionally call |setURLToShare:| and/or |setPrefillText:| before +// calling |open|, if there is a particular URL resource to be shared, or +// you want to set text to prefill user comment in the share dialog, e.g. +// +// NSURL *urlToShare = [NSURL URLWithString:@"http://www.google.com/"]; +// NSString *prefillText = @"You probably already know this site..."; +// [[[[googlePlusShare shareDialog] setURLToShare:urlToShare] +// setPrefillText:prefillText] open]; +// +// 3. In the 'YourApp-info.plist' settings for your application, add a URL +// type to be handled by your application. Make the URL scheme the same as +// the bundle ID of your application. +// +// 4. In your application delegate, implement +// - (BOOL)application:(NSString*)application +// openURL:(NSURL *)url +// sourceApplication:(NSString*)sourceApplication +// annotation:(id)annotation { +// if ([googlePlusShare handleURL:url +// sourceApplication:sourceApplication +// annotation:annotation]) { +// return YES; +// } +// // Other handling code here... +// } +// +// 5. Optionally, if you want to be notified of the result of the share action, +// have a delegate class implement |GooglePlusShareDelegate|, e.g. +// +// @interface MyDelegateClass : NSObject; +// +// - (void)finishedSharing:(BOOL)shared { +// // The share action was successful if |shared| is YES. +// } +// +// MyDelegateClass *myDelegate = [[MyDelegateClass alloc] init]; +// googlePlusShare.delegate = myDelegate; + +#import + +// Protocol to receive the result of the share action. +@protocol GooglePlusShareDelegate + +// Reports the status of the share action, |shared| is |YES| if user has +// successfully shared her post, |NO| otherwise, e.g. user canceled the post. +- (void)finishedSharing:(BOOL)shared; + +@end + +// The builder protocol to open the share dialog. +@protocol GooglePlusShareBuilder + +// Sets the URL resource to be shared. +- (id)setURLToShare:(NSURL *)urlToShare; + +// Sets the text to prefill user comment in the share dialog. +- (id)setPrefillText:(NSString *)prefillText; + +// Opens the share dialog. +- (void)open; + +@end + +// The primary class for the share action on Google+. +@interface GooglePlusShare : NSObject + +// The object to be notified when the share action has finished. +@property (nonatomic, assign) id delegate; + +// All Google+ objects must be initialized with a client ID registered +// in the Google APIs console, https://code.google.com/apis/console/ +// with their corresponding bundle ID before they can be used. +- (id)initWithClientID:(NSString *)clientID; + +// Returns a share dialog builder instance. Call its |open| method to +// create the dialog after setting the parameters as needed. +- (id)shareDialog; + +// This method should be called from your |UIApplicationDelegate|'s +// |application:openURL:sourceApplication:annotation|. Returns |YES| if +// |GooglePlusShare| handled this URL. +- (BOOL)handleURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +@end diff --git a/External/google-plus-ios-sdk/lib/GooglePlusSignIn.h b/External/google-plus-ios-sdk/lib/GooglePlusSignIn.h new file mode 100644 index 00000000..d68edc67 --- /dev/null +++ b/External/google-plus-ios-sdk/lib/GooglePlusSignIn.h @@ -0,0 +1,67 @@ +// +// GooglePlusSignIn.h +// Google+ iOS SDK +// +// Copyright 2012 Google Inc. +// +// Usage of this SDK is subject to the Google+ Platform Terms of Service: +// https://developers.google.com/+/terms +// + +#import + +@class GTMOAuth2Authentication; +@class GTMOAuth2ViewControllerTouch; + +// Protocol implemented by the client of GooglePlusSignIn to receive a refresh +// token or an error. It is up to the client to present the OAuth 2.0 view +// controller if single sign-on is disabled via |attemptSSO| in |authenticate|. +@protocol GooglePlusSignInDelegate + +// Authorization has finished and is successful if |error| is |nil|. +- (void)finishedWithAuth:(GTMOAuth2Authentication *)auth + error:(NSError *)error; + +@end + +// |GooglePlusSignIn| signs the user in with Google+. It provides single sign-on +// via the Google+ app, if installed, or Mobile Safari. +// Here is sample code to use GooglePlusSignIn: +// 1) GooglePlusSignIn *signIn = +// [[GooglePlusSignIn alloc] initForClientID:clientID +// language:@"en" +// scope:@"https://www.googleapis.com/auth/plus.me" +// keychainName:nil]; +// [signIn setDelegate:self]; +// 2) Setup delegate methods |finishedWithAuth|, etc. +// 3) Call |handleURL| from |application:openUrl:...| in your app delegate. +// 4) [auth authenticate:YES]; +@interface GooglePlusSignIn : NSObject + +// The object to be notified when authentication is finished. +@property (nonatomic, assign) id delegate; + +// Initializes with your |clientID| from the Google APIs console. Set |scope| to +// an array of your API scopes. Set |keychainName| to |nil| to use the default +// name. +- (id)initWithClientID:(NSString *)clientID + language:(NSString *)language + scope:(NSArray *)scope + keychainName:(NSString *)keychainName; + +// Starts the authentication process. Set |attemptSSO| to try single sign-on. +// Set |clearKeychain| to remove previously stored authentication in the +// keychain. +- (void)authenticate:(BOOL)attemptSSO clearKeychain:(BOOL)clearKeychain; + +// This method should be called from your |UIApplicationDelegate|'s +// |application:openURL:sourceApplication:annotation|. Returns |YES| if +// |GooglePlusSignIn| handled this URL. +- (BOOL)handleURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +// Removes the OAuth 2.0 token from the keychain. +- (void)signOut; + +@end diff --git a/External/google-plus-ios-sdk/lib/GooglePlusSignInButton.h b/External/google-plus-ios-sdk/lib/GooglePlusSignInButton.h new file mode 100644 index 00000000..b73f8c83 --- /dev/null +++ b/External/google-plus-ios-sdk/lib/GooglePlusSignInButton.h @@ -0,0 +1,52 @@ +// +// GooglePlusSignInButton.h +// Google+ iOS SDK +// +// Copyright 2012 Google Inc. +// +// Usage of this SDK is subject to the Google+ Platform Terms of Service: +// https://developers.google.com/+/terms +// + +#import + +@class GooglePlusSignIn; +@protocol GooglePlusSignInDelegate; + +// The various visual styles supported by the GooglePlusSignInButton. +typedef enum { + kGooglePlusSignInButtonStyleNormal, + kGooglePlusSignInButtonStyleWide +} GooglePlusSignInButtonStyle; + +// A view that displays the Google+ sign-in button. You can instantiate this +// class programmatically or from a NIB file. Once instantiated, you should +// set the client ID and delegate properties and add this view to your own view +// hierarchy. +@interface GooglePlusSignInButton : UIView + +// The OAuth 2.0 client ID of the application. +@property(nonatomic, copy) NSString *clientID; + +// See GooglePlusSignIn.h for details on this delegate. +@property(nonatomic, assign) id delegate; + +// Actually does the work of signing in with Google+. +@property(nonatomic, readonly) GooglePlusSignIn *googlePlusSignIn; + +// The OAuth 2.0 scopes for the APIs that you are using. This is used to fetch +// an OAuth 2.0 token. By default, this is set to the +// https://www.googleapis.com/auth/plus.me scope. +@property(nonatomic, copy) NSArray *scope; + +// Sets the sign-in button. The default style is normal. +- (void)setStyle:(GooglePlusSignInButtonStyle)style; + +// This method should be called from your |UIApplicationDelegate|'s +// |application:openURL:sourceApplication:annotation|. Returns |YES| if +// |GooglePlusSignInButton| handled this URL. +- (BOOL)handleURL:(NSURL *)url + sourceApplication:(NSString *)sourceApplication + annotation:(id)annotation; + +@end diff --git a/External/google-plus-ios-sdk/lib/libGooglePlus.a b/External/google-plus-ios-sdk/lib/libGooglePlus.a new file mode 100644 index 0000000000000000000000000000000000000000..1824ec72978d413eeea261fba40ed4bdea007c4c GIT binary patch literal 326432 zcmd44dwf*Yxi`M|Tp$-NQOG0$LP!Ecgm4E%OCbpZ(GV~Rc&R!J$s{u{nTazKE?&`E ztF5(Y)r0p-tF=d~)KhzGYdsumt;bpqYENyg^;mDG-oUoD__kVp-|w^bvuDpFXx~5H z_xP6nL-YyL=pZd=yw8MgJN z!;kixcnh81Ug!5F=XZ*8-zm=T4(Im{=lAE%@1LFD8l=yBzT)KbedqUooZm|1%luDv ze*e?S=MT>BO6UHqPWWWhhxJ(F{HC4X-Olfa_>HV>I;lC*+_s{#Gg2Q}l}`61W9yQG z+0H~?sx{>Vw{BR`F-&MHyG{v)OgwM^gygLmr11hJ}rBRs*%>L>{{_Df;?Ps z(_k)_{uF7OIE|Yms^)o^mT}_#gVJ_l|AR7jV)qrP%0E`3e^_89m&2=PJerApa%j_F zBH0tmwDu1q537_+rSa3HB+))yJdEba^&d>wd&fW~)|*HsyJFjOhnHt@HiMaDSGtp| z-g6jDWE4jfpAf@S9xG|gL)(g`m2HuA9c#PRHm_|fv;>~g95#A;XLEXB2l|u7_=l77 zM9e2L#7u37WwMEMs(rA3Q!Ha0F4%Nw*joPMIN}TpGCb%w!qH;5ab(GYNt55t{Pn%R>wpGxY{4{J_mtwR#%@yha!`o; zO_4~~%G0{?m{;S=&HXU_*24EOrZKaCwG-d+&!o|vjwT~1CRLmU@8`c?jW@sg4SJ_u zM?`8Eb_mB%kWhFnc3MJ)d`jp(LLnb=m! zqcDxXpJ`doA@*avdWZWvG>r^Kr&xAK8v7#Vo@*2Cy?QYujs9r2RHwKc|2t_U6R8+8 z7%q)dpr2Zf+##deh&rSk$#l1ru{e#XsKfD4>^CwJY+Z>o{%9_Tq%knKDYs)FmMu=> zi~-BK5q`_$bIpyO?;&Yqb0(wWG(LdV{Itum9=_0X_hHK6G|Lcq{O~_4s~Y!Q^t`!o z(nuTKP5yby5zR#n$#0ZnMc0ZvejaJ?-##hFb{S zhBSJ;i4>RPzMr9EAdP|lGL3m6>N2;m7)T?%X>)g^M=MmE#w<9q4Y=q1Uz#)?DY31x z;nT z((wK(l!w$M8%wejL)&HHbC&fqZvOB$rX1r@js?KMq2=gKMzh)B>SCcyDUZirGHKjb z=E|eEE{UyCS5FJ%(SS52A&qyPG;lfOpCb<`2L)0rj~1kH1nw&NZQ-rM$U}@fV->f{ zX-H!)^kWjz;CS{C>e5!2oazVLh5dF&yHrEBIN^Kg<-!|>D+gtoOkkiX(vM#u4eH0u z|7~P?=IF!fN1`8&K8;~<8ZRLYjwQD{X?RNGX_x50Kr$AgJhO;^Gz!Ls*OA6X2;v^3 z!GAp{$8x#y+Cq~CHH|^VX|(*>vbKXSdClC|GuGCdU6Dj0o^lLCyNlC!1ZmXc_MJ`| zCMEeEl7<*l1Qn<83ewntLH-*~8ab5X36qc~jZ`vX#_Y%dY%0Thv z{R4rpH7m8Re7A2`*)3LMVBc{PHaA@H%3`_Vw-rBh@WlfQTX(dS#;w{z2Y+#3zFZ$V zxbMI`xr$boY@8$U?cIkCK7L@f%gzEjBHj?57d~|G;RDCGe1pWEaniXh4G6jK0K@M& zQ16EOc3TZcKRXq%f^mM^@fyU~eZU`{3}nS?s;&6Z5_@yFV&g<7oy!kQ5bn^yOAb`K zY1M>-d*1)ia@f;q*h34SzdnmG6TkcM`yxJjas32-@5k>W_`MOo_u%(07*8(5^)h^R z0-u53Bz_+S--h4Cz?AVNds5**xW+BnWaK?Mehf;y?7$?KC0=~sr~=%0AXI>-9~f7F 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ℜ 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�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 ){;L*wlt9 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

2#RNH$;>rQ(aM_mL!IGN1r*8)YQU*|pipm6 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 Y#hHkiGR!&4>IEE~*e&{smY!h!7v!#TtN;K2 literal 0 HcmV?d00001 diff --git a/MasterPassword-iOS.xcodeproj/project.pbxproj b/MasterPassword-iOS.xcodeproj/project.pbxproj index 1674e1e4..10468019 100644 --- a/MasterPassword-iOS.xcodeproj/project.pbxproj +++ b/MasterPassword-iOS.xcodeproj/project.pbxproj @@ -9,8 +9,13 @@ /* Begin PBXBuildFile section */ 93D390BC6AE7A1C9B91A3668 /* MPKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39E81EFABC6085AC8AE69 /* MPKey.m */; }; 93D392B30CE6C58A9A905E0A /* MPAlgorithmV0.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D3938863322199C3E7E2E3 /* MPAlgorithmV0.m */; }; + 93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */; }; 93D394744B5485303B326ECB /* MPAlgorithm.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39B0DF5E3C56355186738 /* MPAlgorithm.m */; }; + 93D395F08A087F8A24689347 /* NSArray+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */; }; + 93D399433EA75E50656040CB /* Twitter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93D394077F8FAB8167647187 /* Twitter.framework */; }; + 93D39C34FE35830EF5BE1D2A /* NSArray+Indexing.h in Headers */ = {isa = PBXBuildFile; fileRef = 93D396D04E57792A54D437AC /* NSArray+Indexing.h */; }; 93D39DC7A7282137B08C8D82 /* MPAlgorithmV1.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39E9D7B9005211E7D5262 /* MPAlgorithmV1.m */; }; + 93D39E281E3658B30550CB55 /* NSDictionary+Indexing.m in Sources */ = {isa = PBXBuildFile; fileRef = 93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */; }; DA04E33E14B1E70400ECA4F3 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA04E33D14B1E70400ECA4F3 /* MobileCoreServices.framework */; }; DA0A1D0515690A9A0092735D /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = DA0A1D0315690A9A0092735D /* Default.png */; }; DA0A1D0615690A9A0092735D /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA0A1D0415690A9A0092735D /* Default@2x.png */; }; @@ -37,9 +42,63 @@ DA44260A1557D9E40052177D /* libiCloudStoreManager.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA4425CB1557BED40052177D /* libiCloudStoreManager.a */; }; DA46826F15AB843200FB09E7 /* tip_basic_black_bottom_right.png in Resources */ = {isa = PBXBuildFile; fileRef = DA46826D15AB843200FB09E7 /* tip_basic_black_bottom_right.png */; }; DA46827015AB843200FB09E7 /* tip_basic_black_bottom_right@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA46826E15AB843200FB09E7 /* tip_basic_black_bottom_right@2x.png */; }; + DA497B9815E8C90E00B52167 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; + DA497BED15E8C94300B52167 /* GTLBase64.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BA915E8C94300B52167 /* GTLBase64.m */; }; + DA497BEE15E8C94300B52167 /* GTLBatchQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BAB15E8C94300B52167 /* GTLBatchQuery.m */; }; + DA497BEF15E8C94300B52167 /* GTLBatchResult.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BAD15E8C94300B52167 /* GTLBatchResult.m */; }; + DA497BF015E8C94300B52167 /* GTLDateTime.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BAF15E8C94300B52167 /* GTLDateTime.m */; }; + DA497BF115E8C94300B52167 /* GTLErrorObject.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BB215E8C94300B52167 /* GTLErrorObject.m */; }; + DA497BF215E8C94300B52167 /* GTLFramework.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BB415E8C94300B52167 /* GTLFramework.m */; }; + DA497BF315E8C94300B52167 /* GTLJSONParser.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BB615E8C94300B52167 /* GTLJSONParser.m */; }; + DA497BF415E8C94300B52167 /* GTLObject.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BB815E8C94300B52167 /* GTLObject.m */; }; + DA497BF515E8C94300B52167 /* GTLPlusConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BBC15E8C94300B52167 /* GTLPlusConstants.m */; }; + DA497BF615E8C94300B52167 /* GTLPlusItemScope.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BBE15E8C94300B52167 /* GTLPlusItemScope.m */; }; + DA497BF715E8C94300B52167 /* GTLPlusMoment.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BC015E8C94300B52167 /* GTLPlusMoment.m */; }; + DA497BF815E8C94300B52167 /* GTLPlusPerson.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BC215E8C94300B52167 /* GTLPlusPerson.m */; }; + DA497BF915E8C94300B52167 /* GTLQueryPlus.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BC415E8C94300B52167 /* GTLQueryPlus.m */; }; + DA497BFA15E8C94300B52167 /* GTLServicePlus.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BC615E8C94300B52167 /* GTLServicePlus.m */; }; + DA497BFB15E8C94300B52167 /* GTLQuery.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BC815E8C94300B52167 /* GTLQuery.m */; }; + DA497BFC15E8C94300B52167 /* GTLRuntimeCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BCA15E8C94300B52167 /* GTLRuntimeCommon.m */; }; + DA497BFD15E8C94300B52167 /* GTLService.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BCC15E8C94300B52167 /* GTLService.m */; }; + DA497BFE15E8C94300B52167 /* GTLUploadParameters.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BCF15E8C94300B52167 /* GTLUploadParameters.m */; }; + DA497BFF15E8C94300B52167 /* GTLUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BD115E8C94300B52167 /* GTLUtilities.m */; }; + DA497C0015E8C94300B52167 /* GTMHTTPFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BD515E8C94300B52167 /* GTMHTTPFetcher.m */; }; + DA497C0115E8C94300B52167 /* GTMHTTPFetcherLogging.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BD715E8C94300B52167 /* GTMHTTPFetcherLogging.m */; }; + DA497C0215E8C94300B52167 /* GTMHTTPFetcherService.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BD915E8C94300B52167 /* GTMHTTPFetcherService.m */; }; + DA497C0315E8C94300B52167 /* GTMHTTPFetchHistory.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BDB15E8C94300B52167 /* GTMHTTPFetchHistory.m */; }; + DA497C0415E8C94300B52167 /* GTMLogger.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BDD15E8C94300B52167 /* GTMLogger.m */; }; + DA497C0515E8C94300B52167 /* GTMMethodCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BDF15E8C94300B52167 /* GTMMethodCheck.m */; }; + DA497C0615E8C94300B52167 /* GTMNSDictionary+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BE115E8C94300B52167 /* GTMNSDictionary+URLArguments.m */; }; + DA497C0715E8C94300B52167 /* GTMNSString+URLArguments.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BE315E8C94300B52167 /* GTMNSString+URLArguments.m */; }; + DA497C0815E8C94300B52167 /* GTMOAuth2Authentication.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BE515E8C94300B52167 /* GTMOAuth2Authentication.m */; }; + DA497C0915E8C94300B52167 /* GTMOAuth2SignIn.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BE715E8C94300B52167 /* GTMOAuth2SignIn.m */; }; + DA497C0A15E8C94300B52167 /* GTMOAuth2ViewControllerTouch.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BE915E8C94300B52167 /* GTMOAuth2ViewControllerTouch.m */; }; + DA497C0B15E8C94300B52167 /* GTMObjC2Runtime.m in Sources */ = {isa = PBXBuildFile; fileRef = DA497BEC15E8C94300B52167 /* GTMObjC2Runtime.m */; }; + DA497C0C15E8C95700B52167 /* libGoogle+.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA497B9715E8C90E00B52167 /* libGoogle+.a */; }; + DA497C0F15E8C9CF00B52167 /* libGooglePlusUniversal.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5587FC15E8B7B200860B4F /* libGooglePlusUniversal.a */; }; DA4DA1D91564471A00F6F596 /* libjrswizzle.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6326C148680650075AEA5 /* libjrswizzle.a */; }; DA4DA1DA1564471F00F6F596 /* libuicolor-utilities.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */; }; DA4DA1DB1564475E00F6F596 /* libscryptenc-ios.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DA79A9BB1557DB6F00BAA07A /* libscryptenc-ios.a */; }; + DA55873F15E81D9E00860B4F /* iTunesArtwork-Rounded-73.png in Resources */ = {isa = PBXBuildFile; fileRef = DA55873E15E81D9E00860B4F /* iTunesArtwork-Rounded-73.png */; }; + DA55878015E82C0300860B4F /* FacebookSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA55877F15E82C0300860B4F /* FacebookSDK.framework */; }; + DA55878215E82C2B00860B4F /* FacebookSDKResources.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DA55878115E82C2B00860B4F /* FacebookSDKResources.bundle */; }; + DA5587EB15E83C3200860B4F /* social-facebook.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5587E515E83C3200860B4F /* social-facebook.png */; }; + DA5587EC15E83C3200860B4F /* social-facebook@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5587E615E83C3200860B4F /* social-facebook@2x.png */; }; + DA5587ED15E83C3200860B4F /* social-google+.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5587E715E83C3200860B4F /* social-google+.png */; }; + DA5587EE15E83C3200860B4F /* social-google+@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5587E815E83C3200860B4F /* social-google+@2x.png */; }; + DA5587EF15E83C3200860B4F /* social-twitter.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5587E915E83C3200860B4F /* social-twitter.png */; }; + DA5587F015E83C3200860B4F /* social-twitter@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5587EA15E83C3200860B4F /* social-twitter@2x.png */; }; + DA5587F415E8418200860B4F /* iTunesArtwork-Rounded-73@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5587F115E8418200860B4F /* iTunesArtwork-Rounded-73@2x.png */; }; + DA5587F515E8418200860B4F /* iTunesArtwork-Rounded-256.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5587F215E8418200860B4F /* iTunesArtwork-Rounded-256.png */; }; + DA5587F615E8418200860B4F /* iTunesArtwork-Rounded.png in Resources */ = {isa = PBXBuildFile; fileRef = DA5587F315E8418200860B4F /* iTunesArtwork-Rounded.png */; }; + DA55888415E8C0BA00860B4F /* google_plus_share.png in Resources */ = {isa = PBXBuildFile; fileRef = DA55887C15E8C0BA00860B4F /* google_plus_share.png */; }; + DA55888515E8C0BA00860B4F /* google_plus_share@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA55887D15E8C0BA00860B4F /* google_plus_share@2x.png */; }; + DA55888615E8C0BA00860B4F /* google_plus_share_large.png in Resources */ = {isa = PBXBuildFile; fileRef = DA55887E15E8C0BA00860B4F /* google_plus_share_large.png */; }; + DA55888715E8C0BA00860B4F /* google_plus_share_large@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA55887F15E8C0BA00860B4F /* google_plus_share_large@2x.png */; }; + DA55888815E8C0BA00860B4F /* google_plus_sign_in.png in Resources */ = {isa = PBXBuildFile; fileRef = DA55888015E8C0BA00860B4F /* google_plus_sign_in.png */; }; + DA55888915E8C0BA00860B4F /* google_plus_sign_in@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA55888115E8C0BA00860B4F /* google_plus_sign_in@2x.png */; }; + DA55888A15E8C0BA00860B4F /* google_plus_sign_in_wide.png in Resources */ = {isa = PBXBuildFile; fileRef = DA55888215E8C0BA00860B4F /* google_plus_sign_in_wide.png */; }; + DA55888B15E8C0BA00860B4F /* google_plus_sign_in_wide@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DA55888315E8C0BA00860B4F /* google_plus_sign_in_wide@2x.png */; }; DA5BFA49147E415C00F98B1E /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA48147E415C00F98B1E /* UIKit.framework */; }; DA5BFA4B147E415C00F98B1E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DA5BFA4D147E415C00F98B1E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4C147E415C00F98B1E /* CoreGraphics.framework */; }; @@ -890,9 +949,26 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + DA497B9515E8C90E00B52167 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/${PRODUCT_NAME}"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ + 93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Indexing.m"; sourceTree = ""; }; 93D3938863322199C3E7E2E3 /* MPAlgorithmV0.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAlgorithmV0.m; sourceTree = ""; }; + 93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+Indexing.h"; sourceTree = ""; }; + 93D394077F8FAB8167647187 /* Twitter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Twitter.framework; path = System/Library/Frameworks/Twitter.framework; sourceTree = SDKROOT; }; + 93D396D04E57792A54D437AC /* NSArray+Indexing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Indexing.h"; sourceTree = ""; }; 93D398E394E311C545E0A057 /* MPAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAlgorithm.h; sourceTree = ""; }; + 93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+Indexing.m"; sourceTree = ""; }; 93D39AAB616A652A4847E4CF /* MPAlgorithmV0.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAlgorithmV0.h; sourceTree = ""; }; 93D39B0DF5E3C56355186738 /* MPAlgorithm.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MPAlgorithm.m; sourceTree = ""; }; 93D39C68AFA48A13015E4FAC /* MPKey.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPKey.h; sourceTree = ""; }; @@ -936,6 +1012,133 @@ DA46826C15AB48F100FB09E7 /* MasterPassword 2.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = "MasterPassword 2.xcdatamodel"; sourceTree = ""; }; DA46826D15AB843200FB09E7 /* tip_basic_black_bottom_right.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tip_basic_black_bottom_right.png; sourceTree = ""; }; DA46826E15AB843200FB09E7 /* tip_basic_black_bottom_right@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tip_basic_black_bottom_right@2x.png"; sourceTree = ""; }; + DA497B9715E8C90E00B52167 /* libGoogle+.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libGoogle+.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + DA497BA815E8C94300B52167 /* GTLBase64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBase64.h; sourceTree = ""; }; + DA497BA915E8C94300B52167 /* GTLBase64.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBase64.m; sourceTree = ""; }; + DA497BAA15E8C94300B52167 /* GTLBatchQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBatchQuery.h; sourceTree = ""; }; + DA497BAB15E8C94300B52167 /* GTLBatchQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBatchQuery.m; sourceTree = ""; }; + DA497BAC15E8C94300B52167 /* GTLBatchResult.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLBatchResult.h; sourceTree = ""; }; + DA497BAD15E8C94300B52167 /* GTLBatchResult.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLBatchResult.m; sourceTree = ""; }; + DA497BAE15E8C94300B52167 /* GTLDateTime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLDateTime.h; sourceTree = ""; }; + DA497BAF15E8C94300B52167 /* GTLDateTime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLDateTime.m; sourceTree = ""; }; + DA497BB015E8C94300B52167 /* GTLDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLDefines.h; sourceTree = ""; }; + DA497BB115E8C94300B52167 /* GTLErrorObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLErrorObject.h; sourceTree = ""; }; + DA497BB215E8C94300B52167 /* GTLErrorObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLErrorObject.m; sourceTree = ""; }; + DA497BB315E8C94300B52167 /* GTLFramework.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLFramework.h; sourceTree = ""; }; + DA497BB415E8C94300B52167 /* GTLFramework.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLFramework.m; sourceTree = ""; }; + DA497BB515E8C94300B52167 /* GTLJSONParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLJSONParser.h; sourceTree = ""; }; + DA497BB615E8C94300B52167 /* GTLJSONParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLJSONParser.m; sourceTree = ""; }; + DA497BB715E8C94300B52167 /* GTLObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLObject.h; sourceTree = ""; }; + DA497BB815E8C94300B52167 /* GTLObject.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLObject.m; sourceTree = ""; }; + DA497BBA15E8C94300B52167 /* GTLPlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlus.h; sourceTree = ""; }; + DA497BBB15E8C94300B52167 /* GTLPlusConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusConstants.h; sourceTree = ""; }; + DA497BBC15E8C94300B52167 /* GTLPlusConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusConstants.m; sourceTree = ""; }; + DA497BBD15E8C94300B52167 /* GTLPlusItemScope.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusItemScope.h; sourceTree = ""; }; + DA497BBE15E8C94300B52167 /* GTLPlusItemScope.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusItemScope.m; sourceTree = ""; }; + DA497BBF15E8C94300B52167 /* GTLPlusMoment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusMoment.h; sourceTree = ""; }; + DA497BC015E8C94300B52167 /* GTLPlusMoment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusMoment.m; sourceTree = ""; }; + DA497BC115E8C94300B52167 /* GTLPlusPerson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLPlusPerson.h; sourceTree = ""; }; + DA497BC215E8C94300B52167 /* GTLPlusPerson.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLPlusPerson.m; sourceTree = ""; }; + DA497BC315E8C94300B52167 /* GTLQueryPlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLQueryPlus.h; sourceTree = ""; }; + DA497BC415E8C94300B52167 /* GTLQueryPlus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLQueryPlus.m; sourceTree = ""; }; + DA497BC515E8C94300B52167 /* GTLServicePlus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLServicePlus.h; sourceTree = ""; }; + DA497BC615E8C94300B52167 /* GTLServicePlus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLServicePlus.m; sourceTree = ""; }; + DA497BC715E8C94300B52167 /* GTLQuery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLQuery.h; sourceTree = ""; }; + DA497BC815E8C94300B52167 /* GTLQuery.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLQuery.m; sourceTree = ""; }; + DA497BC915E8C94300B52167 /* GTLRuntimeCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLRuntimeCommon.h; sourceTree = ""; }; + DA497BCA15E8C94300B52167 /* GTLRuntimeCommon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLRuntimeCommon.m; sourceTree = ""; }; + DA497BCB15E8C94300B52167 /* GTLService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLService.h; sourceTree = ""; }; + DA497BCC15E8C94300B52167 /* GTLService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLService.m; sourceTree = ""; }; + DA497BCD15E8C94300B52167 /* GTLTargetNamespace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLTargetNamespace.h; sourceTree = ""; }; + DA497BCE15E8C94300B52167 /* GTLUploadParameters.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLUploadParameters.h; sourceTree = ""; }; + DA497BCF15E8C94300B52167 /* GTLUploadParameters.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLUploadParameters.m; sourceTree = ""; }; + DA497BD015E8C94300B52167 /* GTLUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTLUtilities.h; sourceTree = ""; }; + DA497BD115E8C94300B52167 /* GTLUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTLUtilities.m; sourceTree = ""; }; + DA497BD215E8C94300B52167 /* GTMDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMDefines.h; sourceTree = ""; }; + DA497BD315E8C94300B52167 /* GTMGarbageCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMGarbageCollection.h; sourceTree = ""; }; + DA497BD415E8C94300B52167 /* GTMHTTPFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcher.h; sourceTree = ""; }; + DA497BD515E8C94300B52167 /* GTMHTTPFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcher.m; sourceTree = ""; }; + DA497BD615E8C94300B52167 /* GTMHTTPFetcherLogging.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcherLogging.h; sourceTree = ""; }; + DA497BD715E8C94300B52167 /* GTMHTTPFetcherLogging.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcherLogging.m; sourceTree = ""; }; + DA497BD815E8C94300B52167 /* GTMHTTPFetcherService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetcherService.h; sourceTree = ""; }; + DA497BD915E8C94300B52167 /* GTMHTTPFetcherService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetcherService.m; sourceTree = ""; }; + DA497BDA15E8C94300B52167 /* GTMHTTPFetchHistory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMHTTPFetchHistory.h; sourceTree = ""; }; + DA497BDB15E8C94300B52167 /* GTMHTTPFetchHistory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMHTTPFetchHistory.m; sourceTree = ""; }; + DA497BDC15E8C94300B52167 /* GTMLogger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMLogger.h; sourceTree = ""; }; + DA497BDD15E8C94300B52167 /* GTMLogger.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMLogger.m; sourceTree = ""; }; + DA497BDE15E8C94300B52167 /* GTMMethodCheck.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMMethodCheck.h; sourceTree = ""; }; + DA497BDF15E8C94300B52167 /* GTMMethodCheck.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMMethodCheck.m; sourceTree = ""; }; + DA497BE015E8C94300B52167 /* GTMNSDictionary+URLArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSDictionary+URLArguments.h"; sourceTree = ""; }; + DA497BE115E8C94300B52167 /* GTMNSDictionary+URLArguments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSDictionary+URLArguments.m"; sourceTree = ""; }; + DA497BE215E8C94300B52167 /* GTMNSString+URLArguments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "GTMNSString+URLArguments.h"; sourceTree = ""; }; + DA497BE315E8C94300B52167 /* GTMNSString+URLArguments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "GTMNSString+URLArguments.m"; sourceTree = ""; }; + DA497BE415E8C94300B52167 /* GTMOAuth2Authentication.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2Authentication.h; sourceTree = ""; }; + DA497BE515E8C94300B52167 /* GTMOAuth2Authentication.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2Authentication.m; sourceTree = ""; }; + DA497BE615E8C94300B52167 /* GTMOAuth2SignIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2SignIn.h; sourceTree = ""; }; + DA497BE715E8C94300B52167 /* GTMOAuth2SignIn.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2SignIn.m; sourceTree = ""; }; + DA497BE815E8C94300B52167 /* GTMOAuth2ViewControllerTouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMOAuth2ViewControllerTouch.h; sourceTree = ""; }; + DA497BE915E8C94300B52167 /* GTMOAuth2ViewControllerTouch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMOAuth2ViewControllerTouch.m; sourceTree = ""; }; + DA497BEA15E8C94300B52167 /* GTMOAuth2ViewTouch.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GTMOAuth2ViewTouch.xib; sourceTree = ""; }; + DA497BEB15E8C94300B52167 /* GTMObjC2Runtime.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GTMObjC2Runtime.h; sourceTree = ""; }; + DA497BEC15E8C94300B52167 /* GTMObjC2Runtime.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GTMObjC2Runtime.m; sourceTree = ""; }; + DA55873E15E81D9E00860B4F /* iTunesArtwork-Rounded-73.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iTunesArtwork-Rounded-73.png"; sourceTree = ""; }; + DA55877F15E82C0300860B4F /* FacebookSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FacebookSDK.framework; path = "External/facebook-ios-sdk/build/FacebookSDK.framework"; sourceTree = ""; }; + DA55878115E82C2B00860B4F /* FacebookSDKResources.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = FacebookSDKResources.bundle; path = "External/facebook-ios-sdk/build/FacebookSDK.framework/Versions/A/Resources/FacebookSDKResources.bundle"; sourceTree = ""; }; + DA5587B815E838CD00860B4F /* Facebook.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Facebook.h; sourceTree = ""; }; + DA5587B915E838CD00860B4F /* FacebookSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FacebookSDK.h; sourceTree = ""; }; + DA5587BA15E838CD00860B4F /* FBCacheDescriptor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBCacheDescriptor.h; sourceTree = ""; }; + DA5587BB15E838CD00860B4F /* FBConnect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBConnect.h; sourceTree = ""; }; + DA5587BC15E838CD00860B4F /* FBDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBDialog.h; sourceTree = ""; }; + DA5587BD15E838CD00860B4F /* FBError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBError.h; sourceTree = ""; }; + DA5587BE15E838CD00860B4F /* FBFrictionlessRequestSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBFrictionlessRequestSettings.h; sourceTree = ""; }; + DA5587BF15E838CD00860B4F /* FBFriendPickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBFriendPickerViewController.h; sourceTree = ""; }; + DA5587C015E838CD00860B4F /* FBGraphLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBGraphLocation.h; sourceTree = ""; }; + DA5587C115E838CD00860B4F /* FBGraphObject.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBGraphObject.h; sourceTree = ""; }; + DA5587C215E838CD00860B4F /* FBGraphPlace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBGraphPlace.h; sourceTree = ""; }; + DA5587C315E838CD00860B4F /* FBGraphUser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBGraphUser.h; sourceTree = ""; }; + DA5587C415E838CD00860B4F /* FBLoginDialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBLoginDialog.h; sourceTree = ""; }; + DA5587C515E838CD00860B4F /* FBLoginView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBLoginView.h; sourceTree = ""; }; + DA5587C615E838CD00860B4F /* FBOpenGraphAction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBOpenGraphAction.h; sourceTree = ""; }; + DA5587C715E838CD00860B4F /* FBPlacePickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBPlacePickerViewController.h; sourceTree = ""; }; + DA5587C815E838CD00860B4F /* FBProfilePictureView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBProfilePictureView.h; sourceTree = ""; }; + DA5587C915E838CD00860B4F /* FBRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBRequest.h; sourceTree = ""; }; + DA5587CA15E838CD00860B4F /* FBRequestConnection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBRequestConnection.h; sourceTree = ""; }; + DA5587CB15E838CD00860B4F /* FBSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBSession.h; sourceTree = ""; }; + DA5587CC15E838CD00860B4F /* FBSessionManualTokenCachingStrategy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBSessionManualTokenCachingStrategy.h; sourceTree = ""; }; + DA5587CD15E838CD00860B4F /* FBSessionTokenCachingStrategy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBSessionTokenCachingStrategy.h; sourceTree = ""; }; + DA5587CE15E838CD00860B4F /* FBSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBSettings.h; sourceTree = ""; }; + DA5587CF15E838CD00860B4F /* FBTestSession.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBTestSession.h; sourceTree = ""; }; + DA5587D015E838CD00860B4F /* FBUserSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBUserSettingsViewController.h; sourceTree = ""; }; + DA5587D115E838CD00860B4F /* FBViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FBViewController.h; sourceTree = ""; }; + DA5587D215E838CD00860B4F /* JSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSON.h; sourceTree = ""; }; + DA5587D315E838CD00860B4F /* NSObject+SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSObject+SBJSON.h"; sourceTree = ""; }; + DA5587D415E838CD00860B4F /* NSString+SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+SBJSON.h"; sourceTree = ""; }; + DA5587D515E838CD00860B4F /* SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJSON.h; sourceTree = ""; }; + DA5587D615E838CD00860B4F /* SBJsonBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonBase.h; sourceTree = ""; }; + DA5587D715E838CD00860B4F /* SBJsonParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonParser.h; sourceTree = ""; }; + DA5587D815E838CD00860B4F /* SBJsonWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SBJsonWriter.h; sourceTree = ""; }; + DA5587E515E83C3200860B4F /* social-facebook.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-facebook.png"; sourceTree = ""; }; + DA5587E615E83C3200860B4F /* social-facebook@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-facebook@2x.png"; sourceTree = ""; }; + DA5587E715E83C3200860B4F /* social-google+.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-google+.png"; sourceTree = ""; }; + DA5587E815E83C3200860B4F /* social-google+@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-google+@2x.png"; sourceTree = ""; }; + DA5587E915E83C3200860B4F /* social-twitter.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-twitter.png"; sourceTree = ""; }; + DA5587EA15E83C3200860B4F /* social-twitter@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-twitter@2x.png"; sourceTree = ""; }; + DA5587F115E8418200860B4F /* iTunesArtwork-Rounded-73@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iTunesArtwork-Rounded-73@2x.png"; sourceTree = ""; }; + DA5587F215E8418200860B4F /* iTunesArtwork-Rounded-256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iTunesArtwork-Rounded-256.png"; sourceTree = ""; }; + DA5587F315E8418200860B4F /* iTunesArtwork-Rounded.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "iTunesArtwork-Rounded.png"; sourceTree = ""; }; + DA5587F815E8B7B200860B4F /* GooglePlusShare.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusShare.h; sourceTree = ""; }; + DA5587F915E8B7B200860B4F /* GooglePlusSignIn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSignIn.h; sourceTree = ""; }; + DA5587FA15E8B7B200860B4F /* GooglePlusSignInButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GooglePlusSignInButton.h; sourceTree = ""; }; + DA5587FB15E8B7B200860B4F /* libGooglePlus.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libGooglePlus.a; sourceTree = ""; }; + DA5587FC15E8B7B200860B4F /* libGooglePlusUniversal.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libGooglePlusUniversal.a; sourceTree = ""; }; + DA55887C15E8C0BA00860B4F /* google_plus_share.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = google_plus_share.png; sourceTree = ""; }; + DA55887D15E8C0BA00860B4F /* google_plus_share@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "google_plus_share@2x.png"; sourceTree = ""; }; + DA55887E15E8C0BA00860B4F /* google_plus_share_large.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = google_plus_share_large.png; sourceTree = ""; }; + DA55887F15E8C0BA00860B4F /* google_plus_share_large@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "google_plus_share_large@2x.png"; sourceTree = ""; }; + DA55888015E8C0BA00860B4F /* google_plus_sign_in.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = google_plus_sign_in.png; sourceTree = ""; }; + DA55888115E8C0BA00860B4F /* google_plus_sign_in@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "google_plus_sign_in@2x.png"; sourceTree = ""; }; + DA55888215E8C0BA00860B4F /* google_plus_sign_in_wide.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = google_plus_sign_in_wide.png; sourceTree = ""; }; + DA55888315E8C0BA00860B4F /* google_plus_sign_in_wide@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "google_plus_sign_in_wide@2x.png"; sourceTree = ""; }; DA5BFA44147E415C00F98B1E /* MasterPassword.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MasterPassword.app; sourceTree = BUILT_PRODUCTS_DIR; }; DA5BFA48147E415C00F98B1E /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; DA5BFA4A147E415C00F98B1E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; @@ -1842,10 +2045,20 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DA497B9415E8C90E00B52167 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DA497B9815E8C90E00B52167 /* Foundation.framework in Frameworks */, + DA497C0F15E8C9CF00B52167 /* libGooglePlusUniversal.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; DA5BFA41147E415C00F98B1E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + DA497C0C15E8C95700B52167 /* libGoogle+.a in Frameworks */, DA829E6215984832002417D3 /* libFontReplacer.a in Frameworks */, DA44260A1557D9E40052177D /* libiCloudStoreManager.a in Frameworks */, DAD312C21552A22700A3F9ED /* libsqlite3.dylib in Frameworks */, @@ -1864,6 +2077,8 @@ DA5BFA4F147E415C00F98B1E /* CoreData.framework in Frameworks */, DAD3126715528C9C00A3F9ED /* Crashlytics.framework in Frameworks */, DAD3126915528C9C00A3F9ED /* libTestFlight.a in Frameworks */, + 93D399433EA75E50656040CB /* Twitter.framework in Frameworks */, + DA55878015E82C0300860B4F /* FacebookSDK.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1951,6 +2166,170 @@ path = External/iCloudStoreManager/iCloudStoreManager; sourceTree = ""; }; + DA497BA615E8C94300B52167 /* OpenSource */ = { + isa = PBXGroup; + children = ( + DA497BA715E8C94300B52167 /* GTL */, + DA497BD215E8C94300B52167 /* GTMDefines.h */, + DA497BD315E8C94300B52167 /* GTMGarbageCollection.h */, + DA497BD415E8C94300B52167 /* GTMHTTPFetcher.h */, + DA497BD515E8C94300B52167 /* GTMHTTPFetcher.m */, + DA497BD615E8C94300B52167 /* GTMHTTPFetcherLogging.h */, + DA497BD715E8C94300B52167 /* GTMHTTPFetcherLogging.m */, + DA497BD815E8C94300B52167 /* GTMHTTPFetcherService.h */, + DA497BD915E8C94300B52167 /* GTMHTTPFetcherService.m */, + DA497BDA15E8C94300B52167 /* GTMHTTPFetchHistory.h */, + DA497BDB15E8C94300B52167 /* GTMHTTPFetchHistory.m */, + DA497BDC15E8C94300B52167 /* GTMLogger.h */, + DA497BDD15E8C94300B52167 /* GTMLogger.m */, + DA497BDE15E8C94300B52167 /* GTMMethodCheck.h */, + DA497BDF15E8C94300B52167 /* GTMMethodCheck.m */, + DA497BE015E8C94300B52167 /* GTMNSDictionary+URLArguments.h */, + DA497BE115E8C94300B52167 /* GTMNSDictionary+URLArguments.m */, + DA497BE215E8C94300B52167 /* GTMNSString+URLArguments.h */, + DA497BE315E8C94300B52167 /* GTMNSString+URLArguments.m */, + DA497BE415E8C94300B52167 /* GTMOAuth2Authentication.h */, + DA497BE515E8C94300B52167 /* GTMOAuth2Authentication.m */, + DA497BE615E8C94300B52167 /* GTMOAuth2SignIn.h */, + DA497BE715E8C94300B52167 /* GTMOAuth2SignIn.m */, + DA497BE815E8C94300B52167 /* GTMOAuth2ViewControllerTouch.h */, + DA497BE915E8C94300B52167 /* GTMOAuth2ViewControllerTouch.m */, + DA497BEA15E8C94300B52167 /* GTMOAuth2ViewTouch.xib */, + DA497BEB15E8C94300B52167 /* GTMObjC2Runtime.h */, + DA497BEC15E8C94300B52167 /* GTMObjC2Runtime.m */, + ); + name = OpenSource; + path = "External/google-plus-ios-sdk/OpenSource"; + sourceTree = SOURCE_ROOT; + }; + DA497BA715E8C94300B52167 /* GTL */ = { + isa = PBXGroup; + children = ( + DA497BA815E8C94300B52167 /* GTLBase64.h */, + DA497BA915E8C94300B52167 /* GTLBase64.m */, + DA497BAA15E8C94300B52167 /* GTLBatchQuery.h */, + DA497BAB15E8C94300B52167 /* GTLBatchQuery.m */, + DA497BAC15E8C94300B52167 /* GTLBatchResult.h */, + DA497BAD15E8C94300B52167 /* GTLBatchResult.m */, + DA497BAE15E8C94300B52167 /* GTLDateTime.h */, + DA497BAF15E8C94300B52167 /* GTLDateTime.m */, + DA497BB015E8C94300B52167 /* GTLDefines.h */, + DA497BB115E8C94300B52167 /* GTLErrorObject.h */, + DA497BB215E8C94300B52167 /* GTLErrorObject.m */, + DA497BB315E8C94300B52167 /* GTLFramework.h */, + DA497BB415E8C94300B52167 /* GTLFramework.m */, + DA497BB515E8C94300B52167 /* GTLJSONParser.h */, + DA497BB615E8C94300B52167 /* GTLJSONParser.m */, + DA497BB715E8C94300B52167 /* GTLObject.h */, + DA497BB815E8C94300B52167 /* GTLObject.m */, + DA497BB915E8C94300B52167 /* GTLPlus */, + DA497BC715E8C94300B52167 /* GTLQuery.h */, + DA497BC815E8C94300B52167 /* GTLQuery.m */, + DA497BC915E8C94300B52167 /* GTLRuntimeCommon.h */, + DA497BCA15E8C94300B52167 /* GTLRuntimeCommon.m */, + DA497BCB15E8C94300B52167 /* GTLService.h */, + DA497BCC15E8C94300B52167 /* GTLService.m */, + DA497BCD15E8C94300B52167 /* GTLTargetNamespace.h */, + DA497BCE15E8C94300B52167 /* GTLUploadParameters.h */, + DA497BCF15E8C94300B52167 /* GTLUploadParameters.m */, + DA497BD015E8C94300B52167 /* GTLUtilities.h */, + DA497BD115E8C94300B52167 /* GTLUtilities.m */, + ); + path = GTL; + sourceTree = ""; + }; + DA497BB915E8C94300B52167 /* GTLPlus */ = { + isa = PBXGroup; + children = ( + DA497BBA15E8C94300B52167 /* GTLPlus.h */, + DA497BBB15E8C94300B52167 /* GTLPlusConstants.h */, + DA497BBC15E8C94300B52167 /* GTLPlusConstants.m */, + DA497BBD15E8C94300B52167 /* GTLPlusItemScope.h */, + DA497BBE15E8C94300B52167 /* GTLPlusItemScope.m */, + DA497BBF15E8C94300B52167 /* GTLPlusMoment.h */, + DA497BC015E8C94300B52167 /* GTLPlusMoment.m */, + DA497BC115E8C94300B52167 /* GTLPlusPerson.h */, + DA497BC215E8C94300B52167 /* GTLPlusPerson.m */, + DA497BC315E8C94300B52167 /* GTLQueryPlus.h */, + DA497BC415E8C94300B52167 /* GTLQueryPlus.m */, + DA497BC515E8C94300B52167 /* GTLServicePlus.h */, + DA497BC615E8C94300B52167 /* GTLServicePlus.m */, + ); + path = GTLPlus; + sourceTree = ""; + }; + DA5587B715E838CD00860B4F /* DeprecatedHeaders */ = { + isa = PBXGroup; + children = ( + DA5587B815E838CD00860B4F /* Facebook.h */, + DA5587B915E838CD00860B4F /* FacebookSDK.h */, + DA5587BA15E838CD00860B4F /* FBCacheDescriptor.h */, + DA5587BB15E838CD00860B4F /* FBConnect.h */, + DA5587BC15E838CD00860B4F /* FBDialog.h */, + DA5587BD15E838CD00860B4F /* FBError.h */, + DA5587BE15E838CD00860B4F /* FBFrictionlessRequestSettings.h */, + DA5587BF15E838CD00860B4F /* FBFriendPickerViewController.h */, + DA5587C015E838CD00860B4F /* FBGraphLocation.h */, + DA5587C115E838CD00860B4F /* FBGraphObject.h */, + DA5587C215E838CD00860B4F /* FBGraphPlace.h */, + DA5587C315E838CD00860B4F /* FBGraphUser.h */, + DA5587C415E838CD00860B4F /* FBLoginDialog.h */, + DA5587C515E838CD00860B4F /* FBLoginView.h */, + DA5587C615E838CD00860B4F /* FBOpenGraphAction.h */, + DA5587C715E838CD00860B4F /* FBPlacePickerViewController.h */, + DA5587C815E838CD00860B4F /* FBProfilePictureView.h */, + DA5587C915E838CD00860B4F /* FBRequest.h */, + DA5587CA15E838CD00860B4F /* FBRequestConnection.h */, + DA5587CB15E838CD00860B4F /* FBSession.h */, + DA5587CC15E838CD00860B4F /* FBSessionManualTokenCachingStrategy.h */, + DA5587CD15E838CD00860B4F /* FBSessionTokenCachingStrategy.h */, + DA5587CE15E838CD00860B4F /* FBSettings.h */, + DA5587CF15E838CD00860B4F /* FBTestSession.h */, + DA5587D015E838CD00860B4F /* FBUserSettingsViewController.h */, + DA5587D115E838CD00860B4F /* FBViewController.h */, + DA5587D215E838CD00860B4F /* JSON.h */, + DA5587D315E838CD00860B4F /* NSObject+SBJSON.h */, + DA5587D415E838CD00860B4F /* NSString+SBJSON.h */, + DA5587D515E838CD00860B4F /* SBJSON.h */, + DA5587D615E838CD00860B4F /* SBJsonBase.h */, + DA5587D715E838CD00860B4F /* SBJsonParser.h */, + DA5587D815E838CD00860B4F /* SBJsonWriter.h */, + ); + name = DeprecatedHeaders; + path = "External/facebook-ios-sdk/build/FacebookSDK.framework/Versions/A/DeprecatedHeaders"; + sourceTree = ""; + }; + DA5587F715E8B7B200860B4F /* Google+ */ = { + isa = PBXGroup; + children = ( + DA497BA615E8C94300B52167 /* OpenSource */, + DA55887B15E8C0BA00860B4F /* Resources */, + DA5587F815E8B7B200860B4F /* GooglePlusShare.h */, + DA5587F915E8B7B200860B4F /* GooglePlusSignIn.h */, + DA5587FA15E8B7B200860B4F /* GooglePlusSignInButton.h */, + DA5587FB15E8B7B200860B4F /* libGooglePlus.a */, + DA5587FC15E8B7B200860B4F /* libGooglePlusUniversal.a */, + ); + name = "Google+"; + path = "External/google-plus-ios-sdk/lib"; + sourceTree = ""; + }; + DA55887B15E8C0BA00860B4F /* Resources */ = { + isa = PBXGroup; + children = ( + DA55887C15E8C0BA00860B4F /* google_plus_share.png */, + DA55887D15E8C0BA00860B4F /* google_plus_share@2x.png */, + DA55887E15E8C0BA00860B4F /* google_plus_share_large.png */, + DA55887F15E8C0BA00860B4F /* google_plus_share_large@2x.png */, + DA55888015E8C0BA00860B4F /* google_plus_sign_in.png */, + DA55888115E8C0BA00860B4F /* google_plus_sign_in@2x.png */, + DA55888215E8C0BA00860B4F /* google_plus_sign_in_wide.png */, + DA55888315E8C0BA00860B4F /* google_plus_sign_in_wide@2x.png */, + ); + name = Resources; + path = "External/google-plus-ios-sdk/Resources"; + sourceTree = SOURCE_ROOT; + }; DA5BFA39147E415C00F98B1E = { isa = PBXGroup; children = ( @@ -1965,6 +2344,7 @@ DAD3125E15528C9C00A3F9ED /* Crashlytics */, DAD3126115528C9C00A3F9ED /* TestFlight */, DAD3127315528CD200A3F9ED /* Localytics */, + DA5587F715E8B7B200860B4F /* Google+ */, DA4425D71557BF260052177D /* iCloudStoreManager */, DA829E5D15984812002417D3 /* FontReplacer */, DA3EF17E15A47744003ABF4E /* Tests */, @@ -1985,6 +2365,7 @@ DA4425CB1557BED40052177D /* libiCloudStoreManager.a */, DA829E51159847E0002417D3 /* libFontReplacer.a */, DA3EF17915A47744003ABF4E /* Tests.octest */, + DA497B9715E8C90E00B52167 /* libGoogle+.a */, ); name = Products; sourceTree = ""; @@ -1992,6 +2373,10 @@ DA5BFA47147E415C00F98B1E /* Frameworks */ = { isa = PBXGroup; children = ( + DA5587B715E838CD00860B4F /* DeprecatedHeaders */, + DA55878115E82C2B00860B4F /* FacebookSDKResources.bundle */, + DA55877F15E82C0300860B4F /* FacebookSDK.framework */, + 93D394077F8FAB8167647187 /* Twitter.framework */, DAAC35DD156BD77D00C5FD93 /* CoreTelephony.framework */, DAD312C01552A20800A3F9ED /* libsqlite3.dylib */, DA95D5F014DF0B1E008D1B94 /* MessageUI.framework */, @@ -2218,6 +2603,16 @@ DAB8D46F15036BF600CED3BC /* Resources */ = { isa = PBXGroup; children = ( + DA5587F115E8418200860B4F /* iTunesArtwork-Rounded-73@2x.png */, + DA5587F215E8418200860B4F /* iTunesArtwork-Rounded-256.png */, + DA5587F315E8418200860B4F /* iTunesArtwork-Rounded.png */, + DA5587E515E83C3200860B4F /* social-facebook.png */, + DA5587E615E83C3200860B4F /* social-facebook@2x.png */, + DA5587E715E83C3200860B4F /* social-google+.png */, + DA5587E815E83C3200860B4F /* social-google+@2x.png */, + DA5587E915E83C3200860B4F /* social-twitter.png */, + DA5587EA15E83C3200860B4F /* social-twitter@2x.png */, + DA55873E15E81D9E00860B4F /* iTunesArtwork-Rounded-73.png */, DAC4149115C53C48007A716E /* dictionary.lst */, DA902BD01576CA4A00C38161 /* keypad.png */, DA902B931576C0FB00C38161 /* Avatars */, @@ -3050,6 +3445,10 @@ DAFE45D715039823003ABA7C /* Pearl */ = { isa = PBXGroup; children = ( + 93D393B97158D7BE9332EA53 /* NSDictionary+Indexing.h */, + 93D39AA1EE2E1E7B81372240 /* NSDictionary+Indexing.m */, + 93D396D04E57792A54D437AC /* NSArray+Indexing.h */, + 93D39067C0AFDC581794E2B8 /* NSArray+Indexing.m */, DAFE4A63150399FF003ABA93 /* NSDateFormatter+RFC3339.h */, DAFE4A63150399FF003ABA91 /* NSDateFormatter+RFC3339.m */, DAFE4A63150399FF003ABA87 /* NSObject+PearlKVO.h */, @@ -3284,6 +3683,8 @@ DAFE4A63150399FF003ABA8C /* UIControl+PearlSelect.h in Headers */, DAFE4A63150399FF003ABA90 /* UIScrollView+PearlFlashingIndicators.h in Headers */, DAFE4A63150399FF003ABA94 /* NSDateFormatter+RFC3339.h in Headers */, + 93D39C34FE35830EF5BE1D2A /* NSArray+Indexing.h in Headers */, + 93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -3338,10 +3739,28 @@ productReference = DA4425CB1557BED40052177D /* libiCloudStoreManager.a */; productType = "com.apple.product-type.library.static"; }; + DA497B9615E8C90E00B52167 /* Google+ */ = { + isa = PBXNativeTarget; + buildConfigurationList = DA497BA015E8C90E00B52167 /* Build configuration list for PBXNativeTarget "Google+" */; + buildPhases = ( + DA497B9315E8C90E00B52167 /* Sources */, + DA497B9415E8C90E00B52167 /* Frameworks */, + DA497B9515E8C90E00B52167 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Google+"; + productName = "Google+"; + productReference = DA497B9715E8C90E00B52167 /* libGoogle+.a */; + productType = "com.apple.product-type.library.static"; + }; DA5BFA43147E415C00F98B1E /* MasterPassword */ = { isa = PBXNativeTarget; buildConfigurationList = DA5BFA6D147E415C00F98B1E /* Build configuration list for PBXNativeTarget "MasterPassword" */; buildPhases = ( + DA55878315E82C8500860B4F /* Run Script: FacebookSDK */, DA5BFA40147E415C00F98B1E /* Sources */, DA5BFA41147E415C00F98B1E /* Frameworks */, DA5BFA42147E415C00F98B1E /* Resources */, @@ -3500,6 +3919,7 @@ DA4425CA1557BED40052177D /* iCloudStoreManager */, DA829E50159847E0002417D3 /* FontReplacer */, DA3EF17815A47744003ABF4E /* Tests */, + DA497B9615E8C90E00B52167 /* Google+ */, ); }; /* End PBXProject section */ @@ -4179,6 +4599,25 @@ DA46826F15AB843200FB09E7 /* tip_basic_black_bottom_right.png in Resources */, DA46827015AB843200FB09E7 /* tip_basic_black_bottom_right@2x.png in Resources */, DAC4149215C53C48007A716E /* dictionary.lst in Resources */, + DA55873F15E81D9E00860B4F /* iTunesArtwork-Rounded-73.png in Resources */, + DA55878215E82C2B00860B4F /* FacebookSDKResources.bundle in Resources */, + DA5587EB15E83C3200860B4F /* social-facebook.png in Resources */, + DA5587EC15E83C3200860B4F /* social-facebook@2x.png in Resources */, + DA5587ED15E83C3200860B4F /* social-google+.png in Resources */, + DA5587EE15E83C3200860B4F /* social-google+@2x.png in Resources */, + DA5587EF15E83C3200860B4F /* social-twitter.png in Resources */, + DA5587F015E83C3200860B4F /* social-twitter@2x.png in Resources */, + DA5587F415E8418200860B4F /* iTunesArtwork-Rounded-73@2x.png in Resources */, + DA5587F515E8418200860B4F /* iTunesArtwork-Rounded-256.png in Resources */, + DA5587F615E8418200860B4F /* iTunesArtwork-Rounded.png in Resources */, + DA55888415E8C0BA00860B4F /* google_plus_share.png in Resources */, + DA55888515E8C0BA00860B4F /* google_plus_share@2x.png in Resources */, + DA55888615E8C0BA00860B4F /* google_plus_share_large.png in Resources */, + DA55888715E8C0BA00860B4F /* google_plus_share_large@2x.png in Resources */, + DA55888815E8C0BA00860B4F /* google_plus_sign_in.png in Resources */, + DA55888915E8C0BA00860B4F /* google_plus_sign_in@2x.png in Resources */, + DA55888A15E8C0BA00860B4F /* google_plus_sign_in_wide.png in Resources */, + DA55888B15E8C0BA00860B4F /* google_plus_sign_in_wide@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4198,6 +4637,21 @@ shellPath = /bin/sh; shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; }; + DA55878315E82C8500860B4F /* Run Script: FacebookSDK */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script: FacebookSDK"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "[ -d External/facebook-ios-sdk/build ] || env -i PATH=\"$PATH\" ./External/facebook-ios-sdk/scripts/build_framework.sh"; + showEnvVarsInLog = 0; + }; DA6556E314D55F3000841C99 /* Run Script: GIT version -> Info.plist */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -4247,6 +4701,44 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + DA497B9315E8C90E00B52167 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DA497BED15E8C94300B52167 /* GTLBase64.m in Sources */, + DA497BEE15E8C94300B52167 /* GTLBatchQuery.m in Sources */, + DA497BEF15E8C94300B52167 /* GTLBatchResult.m in Sources */, + DA497BF015E8C94300B52167 /* GTLDateTime.m in Sources */, + DA497BF115E8C94300B52167 /* GTLErrorObject.m in Sources */, + DA497BF215E8C94300B52167 /* GTLFramework.m in Sources */, + DA497BF315E8C94300B52167 /* GTLJSONParser.m in Sources */, + DA497BF415E8C94300B52167 /* GTLObject.m in Sources */, + DA497BF515E8C94300B52167 /* GTLPlusConstants.m in Sources */, + DA497BF615E8C94300B52167 /* GTLPlusItemScope.m in Sources */, + DA497BF715E8C94300B52167 /* GTLPlusMoment.m in Sources */, + DA497BF815E8C94300B52167 /* GTLPlusPerson.m in Sources */, + DA497BF915E8C94300B52167 /* GTLQueryPlus.m in Sources */, + DA497BFA15E8C94300B52167 /* GTLServicePlus.m in Sources */, + DA497BFB15E8C94300B52167 /* GTLQuery.m in Sources */, + DA497BFC15E8C94300B52167 /* GTLRuntimeCommon.m in Sources */, + DA497BFD15E8C94300B52167 /* GTLService.m in Sources */, + DA497BFE15E8C94300B52167 /* GTLUploadParameters.m in Sources */, + DA497BFF15E8C94300B52167 /* GTLUtilities.m in Sources */, + DA497C0015E8C94300B52167 /* GTMHTTPFetcher.m in Sources */, + DA497C0115E8C94300B52167 /* GTMHTTPFetcherLogging.m in Sources */, + DA497C0215E8C94300B52167 /* GTMHTTPFetcherService.m in Sources */, + DA497C0315E8C94300B52167 /* GTMHTTPFetchHistory.m in Sources */, + DA497C0415E8C94300B52167 /* GTMLogger.m in Sources */, + DA497C0515E8C94300B52167 /* GTMMethodCheck.m in Sources */, + DA497C0615E8C94300B52167 /* GTMNSDictionary+URLArguments.m in Sources */, + DA497C0715E8C94300B52167 /* GTMNSString+URLArguments.m in Sources */, + DA497C0815E8C94300B52167 /* GTMOAuth2Authentication.m in Sources */, + DA497C0915E8C94300B52167 /* GTMOAuth2SignIn.m in Sources */, + DA497C0A15E8C94300B52167 /* GTMOAuth2ViewControllerTouch.m in Sources */, + DA497C0B15E8C94300B52167 /* GTMObjC2Runtime.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; DA5BFA40147E415C00F98B1E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -4370,6 +4862,8 @@ DAFE4A63150399FF003ABA8A /* UIControl+PearlSelect.m in Sources */, DAFE4A63150399FF003ABA8E /* UIScrollView+PearlFlashingIndicators.m in Sources */, DAFE4A63150399FF003ABA92 /* NSDateFormatter+RFC3339.m in Sources */, + 93D395F08A087F8A24689347 /* NSArray+Indexing.m in Sources */, + 93D39E281E3658B30550CB55 /* NSDictionary+Indexing.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4540,6 +5034,42 @@ }; name = AppStore; }; + DA497BA115E8C90E00B52167 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_OBJCPP_ARC_ABI = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/External/google-plus-ios-sdk/lib\"", + ); + }; + name = Debug; + }; + DA497BA215E8C90E00B52167 /* AdHoc */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_OBJCPP_ARC_ABI = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/External/google-plus-ios-sdk/lib\"", + ); + }; + name = AdHoc; + }; + DA497BA315E8C90E00B52167 /* AppStore */ = { + isa = XCBuildConfiguration; + buildSettings = { + CLANG_WARN_OBJCPP_ARC_ABI = NO; + GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "\"$(SRCROOT)/External/google-plus-ios-sdk/lib\"", + ); + }; + name = AppStore; + }; DA5BFA6B147E415C00F98B1E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -4549,7 +5079,9 @@ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; CLANG_WARN_OBJCPP_ARC_ABI = YES; + CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer: Maarten Billemont (DWGU95U4ZD)"; COPY_PHASE_STRIP = NO; @@ -4608,7 +5140,9 @@ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; CLANG_WARN_OBJCPP_ARC_ABI = YES; + CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Maarten Billemont"; COPY_PHASE_STRIP = YES; @@ -4666,6 +5200,7 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/Crashlytics\"", + "\"$(SRCROOT)/External/facebook-ios-sdk/build\"", ); GCC_PREFIX_HEADER = "MasterPassword/iOS/MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword/iOS/MasterPassword-Info.plist"; @@ -4674,6 +5209,7 @@ "$(inherited)", "\"$(SRCROOT)/TestFlight\"", "\"$(SRCROOT)/External/Pearl/Pearl-Crypto\"", + "\"$(SRCROOT)/External/google-plus-ios-sdk/lib\"", ); SKIP_INSTALL = NO; TARGETED_DEVICE_FAMILY = 1; @@ -4688,6 +5224,7 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/Crashlytics\"", + "\"$(SRCROOT)/External/facebook-ios-sdk/build\"", ); GCC_PREFIX_HEADER = "MasterPassword/iOS/MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword/iOS/MasterPassword-Info.plist"; @@ -4696,6 +5233,7 @@ "$(inherited)", "\"$(SRCROOT)/TestFlight\"", "\"$(SRCROOT)/External/Pearl/Pearl-Crypto\"", + "\"$(SRCROOT)/External/google-plus-ios-sdk/lib\"", ); SKIP_INSTALL = NO; TARGETED_DEVICE_FAMILY = 1; @@ -4754,7 +5292,9 @@ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_IMPLICIT_SIGN_CONVERSION = YES; CLANG_WARN_OBJCPP_ARC_ABI = YES; + CLANG_WARN_OBJC_IMPLICIT_ATOMIC_PROPERTIES = YES; CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CLANG_WARN__EXIT_TIME_DESTRUCTORS = YES; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution: Maarten Billemont"; COPY_PHASE_STRIP = YES; @@ -4812,6 +5352,7 @@ FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", "\"$(SRCROOT)/Crashlytics\"", + "\"$(SRCROOT)/External/facebook-ios-sdk/build\"", ); GCC_PREFIX_HEADER = "MasterPassword/iOS/MasterPassword-Prefix.pch"; INFOPLIST_FILE = "MasterPassword/iOS/MasterPassword-Info.plist"; @@ -4820,6 +5361,7 @@ "$(inherited)", "\"$(SRCROOT)/TestFlight\"", "\"$(SRCROOT)/External/Pearl/Pearl-Crypto\"", + "\"$(SRCROOT)/External/google-plus-ios-sdk/lib\"", ); SKIP_INSTALL = NO; TARGETED_DEVICE_FAMILY = 1; @@ -5007,6 +5549,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = AdHoc; }; + DA497BA015E8C90E00B52167 /* Build configuration list for PBXNativeTarget "Google+" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DA497BA115E8C90E00B52167 /* Debug */, + DA497BA215E8C90E00B52167 /* AdHoc */, + DA497BA315E8C90E00B52167 /* AppStore */, + ); + defaultConfigurationIsVisible = 0; + }; DA5BFA3E147E415C00F98B1E /* Build configuration list for PBXProject "MasterPassword-iOS" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/MasterPassword/MPAppDelegate_Shared.m b/MasterPassword/MPAppDelegate_Shared.m index 15119adf..2acb232e 100644 --- a/MasterPassword/MPAppDelegate_Shared.m +++ b/MasterPassword/MPAppDelegate_Shared.m @@ -11,7 +11,7 @@ @interface MPAppDelegate_Shared () -@property (strong) NSManagedObjectID *activeUserID; +@property (strong, nonatomic) NSManagedObjectID *activeUserID; @end diff --git a/MasterPassword/MPAppDelegate_Store.m b/MasterPassword/MPAppDelegate_Store.m index 89c91b47..38bd604b 100644 --- a/MasterPassword/MPAppDelegate_Store.m +++ b/MasterPassword/MPAppDelegate_Store.m @@ -177,7 +177,7 @@ Throw(@"Local store was reset, application must be restarted to use it."); } else // Try again. - [self storeManager].persistentStoreCoordinator; + [[self storeManager] persistentStoreCoordinator]; } case UbiquityStoreManagerErrorCauseOpenCloudStore: { wrn(@"iCloud store could not be opened: %@", error); @@ -194,7 +194,7 @@ break; } else // Try again. - [self storeManager].persistentStoreCoordinator; + [[self storeManager] persistentStoreCoordinator]; } } } diff --git a/MasterPassword/iOS/MPAppDelegate.m b/MasterPassword/iOS/MPAppDelegate.m index 7249d631..8ab7e197 100644 --- a/MasterPassword/iOS/MPAppDelegate.m +++ b/MasterPassword/iOS/MPAppDelegate.m @@ -6,6 +6,8 @@ // Copyright (c) 2011 Lyndir. All rights reserved. // +#import + #import "MPAppDelegate.h" #import "MPAppDelegate_Key.h" #import "MPAppDelegate_Store.h" @@ -148,7 +150,7 @@ @{UITextAttributeTextColor: [UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f], UITextAttributeTextShadowColor: [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.5f], UITextAttributeTextShadowOffset: [NSValue valueWithUIOffset:UIOffsetMake(0, 1)], - UITextAttributeFont: [UIFont fontWithName:@"Helvetica-Neue" size:0.0f]} + UITextAttributeFont: [UIFont fontWithName:@"HelveticaNeue" size:0.0f]} forState:UIControlStateNormal]; UIImage *toolBarImage = [[UIImage imageNamed:@"ui_toolbar_container"] resizableImageWithCapInsets:UIEdgeInsetsMake(25, 5, 5, 5)]; @@ -215,7 +217,25 @@ - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { + // No URL? + if (!url) + return NO; + + // Check if this is a Facebook login URL. + if ([FBSession.activeSession handleOpenURL:url]) + return YES; + + // Arbitrary URL to mpsites data. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSError *error; + NSURLResponse *response; + NSData *importedSitesData = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:url] + returningResponse:&response error:&error]; + if (error) + err(@"While reading imported sites from %@: %@", url, error); + if (!importedSitesData) + return; + PearlAlert *activityAlert = [PearlAlert showAlertWithTitle:@"Importing" message:@"\n\n" viewStyle:UIAlertViewStyleDefault initAlert: ^(UIAlertView *alert, UITextField *firstField) { @@ -226,15 +246,6 @@ } tappedButtonBlock:nil cancelTitle:nil otherTitles:nil]; - NSError *error; - NSURLResponse *response; - NSData *importedSitesData = [NSURLConnection sendSynchronousRequest:[NSURLRequest requestWithURL:url] - returningResponse:&response error:&error]; - if (error) - err(@"While reading imported sites from %@: %@", url, error); - if (!importedSitesData) - return; - NSString *importedSitesString = [[NSString alloc] initWithData:importedSitesData encoding:NSUTF8StringEncoding]; MPImportResult result = [self importSites:importedSitesString askImportPassword:^NSString *(NSString *userName) { __block NSString *masterPassword = nil; @@ -325,6 +336,10 @@ [TestFlight passCheckpoint:MPCheckpointActivated]; + if (FBSession.activeSession.state == FBSessionStateCreatedOpening) + // An old Facebook Login session that wasn't finished. Clean it up. + [FBSession.activeSession close]; + [super applicationDidBecomeActive:application]; } @@ -353,6 +368,8 @@ [[LocalyticsSession sharedLocalyticsSession] close]; [[LocalyticsSession sharedLocalyticsSession] upload]; + [FBSession.activeSession close]; + [super applicationWillTerminate:application]; } diff --git a/MasterPassword/iOS/MPMainViewController.h b/MasterPassword/iOS/MPMainViewController.h index b60e7738..ba5683d8 100644 --- a/MasterPassword/iOS/MPMainViewController.h +++ b/MasterPassword/iOS/MPMainViewController.h @@ -13,7 +13,7 @@ @interface MPMainViewController : UIViewController -@property (nonatomic, assign) BOOL siteInfoHidden; +@property (assign, nonatomic) BOOL siteInfoHidden; @property (strong, nonatomic) MPElementEntity *activeElement; @property (strong, nonatomic) IBOutlet MPSearchDelegate *searchDelegate; @property (weak, nonatomic) IBOutlet UITextField *contentField; @@ -48,8 +48,8 @@ @property (weak, nonatomic) IBOutlet UIButton *outdatedAlertCloseButton; -@property (copy) void (^contentTipCleanup)(BOOL finished); -@property (copy) void (^toolTipCleanup)(BOOL finished); +@property (copy, nonatomic) void (^contentTipCleanup)(BOOL finished); +@property (copy, nonatomic) void (^toolTipCleanup)(BOOL finished); - (IBAction)copyContent; - (IBAction)incrementPasswordCounter; diff --git a/MasterPassword/iOS/MPMainViewController.m b/MasterPassword/iOS/MPMainViewController.m index 90c2ccf2..214369f2 100644 --- a/MasterPassword/iOS/MPMainViewController.m +++ b/MasterPassword/iOS/MPMainViewController.m @@ -122,6 +122,9 @@ if ([[MPiOSConfig get].showQuickStart boolValue]) [[MPAppDelegate get] showGuide]; + if (![MPAppDelegate get].activeUser) + [self.navigationController presentViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"MPUnlockViewController"] + animated:animated completion:nil]; if (self.activeElement.user != [MPAppDelegate get].activeUser) self.activeElement = nil; @@ -141,6 +144,8 @@ - (void)viewDidAppear:(BOOL)animated { + // Needed for when we appear after a modal VC dismisses: + // We can't present until the other modal VC has been fully dismissed and presenting in viewDidAppear will fail. if (![MPAppDelegate get].activeUser) [self.navigationController presentViewController:[self.storyboard instantiateViewControllerWithIdentifier:@"MPUnlockViewController"] animated:animated completion:nil]; diff --git a/MasterPassword/iOS/MPUnlockViewController.h b/MasterPassword/iOS/MPUnlockViewController.h index ad57d1c4..3e9ca8ad 100644 --- a/MasterPassword/iOS/MPUnlockViewController.h +++ b/MasterPassword/iOS/MPUnlockViewController.h @@ -29,5 +29,8 @@ @property (nonatomic, strong) UIColor *avatarShadowColor; - (IBAction)targetedUserAction:(UILongPressGestureRecognizer *)sender; +- (IBAction)facebook:(UIButton *)sender; +- (IBAction)twitter:(UIButton *)sender; +- (IBAction)google:(UIButton *)sender; @end diff --git a/MasterPassword/iOS/MPUnlockViewController.m b/MasterPassword/iOS/MPUnlockViewController.m index 0b52e37b..f0cc5a6d 100644 --- a/MasterPassword/iOS/MPUnlockViewController.m +++ b/MasterPassword/iOS/MPUnlockViewController.m @@ -7,6 +7,10 @@ // #import +#import + +#import "Facebook.h" +#import "GooglePlusShare.h" #import "MPUnlockViewController.h" #import "MPAppDelegate.h" @@ -18,7 +22,8 @@ @property (strong, nonatomic) MPUserEntity *selectedUser; @property (strong, nonatomic) NSMutableDictionary *avatarToUser; @property (nonatomic) BOOL wordWallAnimating; -@property (nonatomic, strong) NSArray *wordList; +@property (nonatomic, strong) NSArray *wordList; +@property (nonatomic, strong) NSOperationQueue *fbOperationQueue; @end @@ -43,6 +48,7 @@ @synthesize avatarShadowColor = _avatarShadowColor; @synthesize wordWallAnimating = _wordWallAnimating; @synthesize wordList = _wordList; +@synthesize fbOperationQueue = _fbOperationQueue; - (void)initializeAvatarAlert:(UIAlertView *)alert forUser:(MPUserEntity *)user { @@ -122,7 +128,9 @@ - (void)viewDidLoad { - self.avatarToUser = [NSMutableDictionary dictionaryWithCapacity:3]; + self.avatarToUser = [NSMutableDictionary dictionaryWithCapacity:3]; + self.fbOperationQueue = [NSOperationQueue new]; + [self.fbOperationQueue setSuspended:YES]; self.avatarsView.decelerationRate = UIScrollViewDecelerationRateFast; self.avatarsView.clipsToBounds = NO; @@ -283,7 +291,7 @@ if ([self.selectedUser.objectID isEqual:user.objectID]) { self.selectedUser = user; - avatar.selected = YES; + avatar.selected = YES; } return avatar; @@ -407,9 +415,9 @@ if (self.selectedUser && !self.passwordView.alpha) { // User was just selected. self.passwordView.alpha = 1; - self.avatarsView.center = CGPointMake(160, 170); + self.avatarsView.center = CGPointMake(160, 180); self.avatarsView.scrollEnabled = NO; - self.nameLabel.center = CGPointMake(160, 84); + self.nameLabel.center = CGPointMake(160, 94); self.nameLabel.backgroundColor = [UIColor blackColor]; self.oldNameLabel.center = self.nameLabel.center; self.avatarShadowColor = [UIColor whiteColor]; @@ -764,4 +772,81 @@ } cancelTitle:[PearlStrings get].commonButtonCancel destructiveTitle:@"Delete User" otherTitles:@"Reset Password", nil]; } + +- (IBAction)facebook:(UIButton *)sender { + + [self.fbOperationQueue addOperationWithBlock:^{ + Facebook *facebook = [[Facebook alloc] initWithAppId:FBSession.activeSession.appID andDelegate:nil]; + facebook.accessToken = FBSession.activeSession.accessToken; + facebook.expirationDate = FBSession.activeSession.expirationDate; + + [[NSOperationQueue mainQueue] addOperationWithBlock:^{ + [[self.view findFirstResponderInHierarchy] resignFirstResponder]; + [facebook dialog:@"feed" andParams:[@{ + @"link": @"http://masterpasswordapp.com", + @"picture": @"http://masterpasswordapp.com/img/iTunesArtwork-Rounded.png", + @"name": @"Master Password", + @"description": @"Actually secure passwords that cannot get lost.", + @"ref": @"iOS_Unlock" + } mutableCopy] andDelegate:nil]; + }]; + }]; + if ([self.fbOperationQueue isSuspended]) + [self openSessionWithAllowLoginUI:YES]; +} + +- (IBAction)twitter:(UIButton *)sender { + + if (![TWTweetComposeViewController canSendTweet]) { + [PearlAlert showAlertWithTitle:@"Twitter Not Enabled" message:@"To send tweets, configure Twitter from Settings." + viewStyle:UIAlertViewStyleDefault initAlert:nil tappedButtonBlock:nil cancelTitle:nil otherTitles:@"OK", nil]; + return; + } + + TWTweetComposeViewController *vc = [TWTweetComposeViewController new]; + [vc addImage:[UIImage imageNamed:@"iTunesArtwork-Rounded-73"]]; + [vc setInitialText:@"I've secured my accounts with Master Password: masterpasswordapp.com"]; + [self presentViewController:vc animated:YES completion:nil]; +} + +- (IBAction)google:(UIButton *)sender { + + GooglePlusShare *share = [[GooglePlusShare alloc] initWithClientID:[[PearlInfoPlist get] objectForKeyPath:@"GooglePlusClientID"]]; + [[[[share shareDialog] + setURLToShare:[NSURL URLWithString:@"http://masterpasswordapp.com"]] + setPrefillText:@"I've secured my accounts with Master Password: Actually secure passwords that cannot get lost."] + open]; +} + +- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState)state error:(NSError *)error { + + switch (state) { + case FBSessionStateOpen: + if (!error) { + [self.fbOperationQueue setSuspended:NO]; + return; + } + + break; + case FBSessionStateClosed: + case FBSessionStateClosedLoginFailed: + [FBSession.activeSession closeAndClearTokenInformation]; + break; + default: + break; + } + [self.fbOperationQueue setSuspended:YES]; + + if (error) + [PearlAlert showError:error.localizedDescription]; +} + +- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI { + + return [FBSession openActiveSessionWithPermissions:nil allowLoginUI:allowLoginUI + completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { + [self sessionStateChanged:session state:state error:error]; + }]; +} + @end diff --git a/MasterPassword/iOS/MainStoryboard_iPhone.storyboard b/MasterPassword/iOS/MainStoryboard_iPhone.storyboard index 48662911..1ccf1f5f 100644 --- a/MasterPassword/iOS/MainStoryboard_iPhone.storyboard +++ b/MasterPassword/iOS/MainStoryboard_iPhone.storyboard @@ -1,6 +1,7 @@ - + + @@ -1143,7 +1144,7 @@ Pink fluffy door frame. - + @@ -1306,7 +1307,7 @@ Pink fluffy door frame. - + + + @@ -1823,6 +1869,9 @@ You could use the word wall for inspiration in finding a memorable master passw + + + @@ -1925,7 +1974,10 @@ You could use the word wall for inspiration in finding a memorable master passw + + + diff --git a/MasterPassword/iOS/MasterPassword-Info.plist b/MasterPassword/iOS/MasterPassword-Info.plist index c8d25870..5e85d481 100644 --- a/MasterPassword/iOS/MasterPassword-Info.plist +++ b/MasterPassword/iOS/MasterPassword-Info.plist @@ -61,8 +61,35 @@ [auto] CFBundleSignature ???? + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLName + facebook + CFBundleURLSchemes + + fb257095917745237 + + + + CFBundleTypeRole + Editor + CFBundleURLName + com.lyndir.lhunath.MasterPassword + CFBundleURLSchemes + + com.lyndir.lhunath.MasterPassword + + + CFBundleVersion [auto] + FacebookAppID + 257095917745237 + GooglePlusClientID + 1098891429568.apps.googleusercontent.com LSRequiresIPhoneOS NSHumanReadableCopyright diff --git a/Resources/iTunesArtwork-Rounded-73.png b/Resources/iTunesArtwork-Rounded-73.png new file mode 100644 index 0000000000000000000000000000000000000000..c6abacedcfbb14b644c60176a94c8759e41fcc54 GIT binary patch literal 5929 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 literal 0 HcmV?d00001 diff --git a/Resources/iTunesArtwork-Rounded-73@2x.png b/Resources/iTunesArtwork-Rounded-73@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c62b617deecda6a490dc32be5fb984d037b11b36 GIT binary patch literal 18511 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
9i2Hp z%?c2s&%00l03F#j}$`a=D)JhWjATf){-G*Zd$*9X`6y3C+h~%Dq-yU9L z@B2(&I?^jnvg|&9E_%aeCt##brv8-Z+PTJfM>Kf;+hD%C3^!5lqO>vDIhAg2y$RKh zis#OcOK>yCa{vo+* zx&9D$sg95zxk0hC3~Pc_P{i4$dW*P6iSExK7-*t`7G>$1lndgi*ddV&(G*p1Dr{zi zgerHWE+chj%o`o5cOaN64kE_Fh^`yrjFQJQ56O+i-3K%AR4gKzvZDBq#DT+J#EX0< z6~7jBu*yBo^*^Oek@hFtYMwn#wT>*}NiOIXT>p*MW|ZU&>%`N9@>`F{$ zmNR;!sb^33S*G^h^S)<73Ulg0+<^+k)8CZD_iVjzTtQ_O;OkxM@3Mi+V~@07gxM0|&Bg}E6%HOh8xl0YkYod z&r(?GARgO9-($tOr>n!lW4X!@p+=6aGLw`A5iTr~T7%HSHr=nZc#ksqZz z%GhZK3o7@E+|wmUrEap%rZ93Qt#A^BGQ@Li^Z*d)D&rEvWP}-;!+jOL1g;qMqg>D$zog8mQ8$0L9_t5uRf0!e?sjzBc;8 z!YBeAnA;bYz(VmRmlzcN1vqwaqq$CfK|;pVE|bzmox_?2(Hig{y#NooL-qH;F7puF zH*0qfRn@{@lsnVLDucifMj)x#Q?rJ^8L@@OuL%r7|47`~ z>ppz35H{th>3a2u=wZGTg$R{=&4Z(1te@|1ETgmYt6hWqeiy=NFY3SJKXDL|z{o~UVqmLRxsORIeH5Rga{wB2nM z@l0~hep+5hkEnU~3-|BT3PQGRH<$k!IImwxOF@^Hm(5oaIiP{X0bpzTcbft9$#yt> zu-6*QZf$Jj1C~%c^K%B}#5=f*U`X(6Rx`#9awM7<>)=UG2XZAqHt7JA^vBo+pDgf6 zF$##dinN4=hR(MPp+Sc@bjB$hoZ6X{LNMp|F;q)OBQEWeUu-_bbJ3zEih}OB$WZ9G z-^&;1@rVLrQDgk)Q92?^z;JUcZvC%gBFxA>5z6#$x1Wtc0j@{^OsDMRU|$DikommN zD4top#r?amUFY`UNXefaxI%V%KDb0i7hk)zRC6j;i1C&iX%*w~ad z#2&sM_gvK&yaI1iY}G1hTq2$U&lSV+w8cqs?32nMslC9hiT8%tZN4@J8&cE;;ZhRj zHJ<}p=OcRXvxwgfgjrQdl-6Z z6NhyK#W;!LCXzvi6Y3<;hHG=rdCW_3IPU(EppIA{4u}(nt!IGwFUe?OOi?zOT*mgM zoHTrSyY+|f2uu!6z_iI*~+61B$w7V>tHpn2yXdSPTR5 zV9NhIh7vM@#rThFUpm7c9}8~nA&&8!_J3H%MXIvvTDv`%pGB{MkooT|mZ<-FP~VCB zwS{vgx_NHDA&_Z2qSO(b@ZR2J_)N^ja`D|y^yu8W`X5PW85Pz0cHtRXQU&Q06zMd` zArz37kd7ZA9ZKg6prEvL51@o}BMqW}bV$dbbayi|@5BH7;$o?50cXy6&K-MSd*}RM z4->_>j_kE0LiBIqkp;iv-zb694-!;*K9970?!b^g(R~@Q0Yhij6R#T^a2i>;O=G^B zm0D_p`)WHxpsT#4$^?UU2Z6Ko!$+?#wu>*-c37OKn%0Ag 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 z zlXh10m^ey)t+|Iw|GKpm%W&vp$%@E1=#m!r_n?W{t}x_&=dkA+mIRKHze*;hcIy(o zHIdvKA|>+n-N@c1g@kaKb89rBE{*Pz^itX&f$9BDuh#ydOzl~UQ&U+Ba!aZ z+7Pn4!EKFE@G}lk5h*ay{cGGRbGze*|D7!+9{Y$ThyDW0Z{p+Q8Qb50a6q8p0r!-N z=*(et{)mgSvjw>Kv>CU-ux6-KdtFB!n$9aj|I#5%chF;K;#j>5Sr)>ND?9*;aCnfdy>lLK~F<#aTf^uCmLtcgzo0(YZ^&3dAb*2HjPl#&T zp{PLKfY^)CI*YQ)1G<=pE|#vRnhD$HlfC9YQ^+bilJ>b;pz==GvIt;fLUEhRv{L+f zSK&5sSekngdi`P8t#%HywdD^UD$t5R!C@d7t7M|M6N61Ki?@pQxPyz(3;3Giw8=1i zG0MWRYWxZ^wNrTqOC!VInTj;vZu}gCbt=D%z?a#u6J__tVaG)rlBwaB4nETt0n zkpEXaY9#QOlSYotqz{+(Urm6RVUz44LB73fKQSp$`#84vpN{#hn^+M5KJ64c-7Kt- zHjDZM+=DW@2|g*IKZNlnKHC;OxMCl329F~b=iKue9fU$kzKE9oqeovxdYsh#2_}=f z2vPDard}VbjA^n`4(X*A?0iqR4JKopl~oC|R3A>w&H~of+0fcMXVKT^^EYO`8?EL{ zv8WoT|K@PP*vWaWkq+lb^*vw^JoQqe;cT;A{Ip|C*DYcC9)7UF^0U0{=!N(G#mRlQ z2bpmM@US)MQ-bR$qvR7e)ge7z!a#z4CgSnKISL&g=q{6V4ds4MdB?s#QgB~n^VgG?BF0e9t9 z`yfb#0TazVktFD};SW)@%x0m-0jvKH>S_tC{Za>$4%t)7e4Zuj=G46x zNXLx!0Y7f*#Ru>G$9dQDY&EfMSWHr*NZ|4D=R?_Ppfcw-F?Q*{QOmjy0cJ5!JmC7` zEiR{U)h5vOX6^1Qn;hPYQdohJ?Dzf|x(yR~k>rc?_jMN?63J=hfW`0Wvb=T9NrU%7 zRDMr!!nQn{p20EAe*D@VsUx1?sxvY%i5Yz{EWLSP+5yCEe^JVWRkcbj}A-O#RczcVM+qUYd8LG3y9` zVe-kmeSqM-k>OgmhANEFp}=vC{$lam)<;EY;ZePzycFXgw8S7zrghU@+!=YpO4aj~ zXP(ePa=dh1?N4opZgUi1J#fF*ov&}QtIHQmXGomw`NT=JOaxMoy#vtakaY0BQpm6QU0%I1{(5_&7i@gN!hg+gguG!T$*B3A#qO`hK>xCN zFT3PNg1Jd_TRXydFv3N0pL^Y<03D9~xMYb4w`4=wf2x}}JQA_^ZKoLueRlGI%daxt zdrh%Gda>n_AxBkL<;i~k(6LzE`!P&efI;uhI@?+n(t+VBm3%^aPJH)8L_XDB<#ZvL zhaaJfLX-%GT=7xIZlXuXPEUFt5aE+D@MhsRGz4#E63h&|@XeG8du-=8Xr0ER48AA> z087*53uujdivh!zcE%?w3lr2M2+Q6I;WYfw#nl&@Y~qum6*{c<$S(HxhnsTQ@oe+^ z9odJ0bJh*hFai4INnchw($tSHZQ!A&rze0}i`|@ZKQvav(+3!3=o9%+ zw?v?YR%6R2=S5di)a5>F4-(w3wDvk(+9`+TSOmUTu1pwfT+`LA+PLdO+Z1AyHQ1-z ziACjl`?LQ?eN4y2`SQiAe3A*fFT&IIGm3Sz9zTEC&54h{+v{lHso%E_!`ZGUYlE5c z08t9K0j}V7yOB3#=KwgytzR7-L1F5QIDc;_E z-~lM-Thz+Sluf>QFN2V>RQzRJdb=VTUMyE^B2J%SVBMr!70mpbLn89Ts_U=?=j&&S z!<_m%x06FS;q;7O`oTp4y0uxcziGGH5%|^_N5dfysaLwJ+J09`wn&aAgI2<_z~$t3 zsIaE7|5eeS%=Ahxk91+-54OjczzL#Weu10xtpl7IKqbC2FlWhCJ!uAS>9cRzZQOz^ zyX@U>1Aa`fANL!~*(4ZneC4OMS2>xDb4K(g0TNjE$#g_zzKqs5gJ);HkJ|YzlViD2 zP1tj>MSC$xo*4?;wJoPx?Q?h5F1ae|#IZtXhH8~<%v~IX0by(s(ZCeh#VbQ`6`Oe+ zLWhTlU4bO*Tqz!jpz@{MgpY1hrhj>m;5Z9$1<2$vUVVR=5xzR)DVd-vp<0Q1Jgk3# zxZ((S*sC6SoEb(wCFYVisV{+X(lzK5M|~?(E*GGG&s3wE*BebG_-AYZv7K*+iQI7H}wK*;|QGfybDZH<(? z`+c}I`8MJ+2Bf0`bNzQizf&5&GW^@iS3s}`e5c35f2w)=px*kJY8h3qdbJg$H$~GU zRm_E=HO3PEd|YbU^K693Mc$@ET@j)}(s28;(yXUtQv*^}# z=%X}7&z&f^$l}qcc1F0UzLq-B;q~G^lItJ3@tP6$n&bdE&QcU{k2dyQ*>%BH(5cPZ zow%4`$=9_EfI2=q+XN|s9fgwc8%togpS!D%z+mi4|%3LB%i0HSlj3>$@lQ{z{hck{@VB9zOm|= zwVbsvz^~;+8Mop$-_0lEOseE$axv~H1hEtUu(6^HjXhx#6m@#B3s-&t2>=;?RjJX= zXJlD_v;!}gOlc?r5F* z_rn-5Gx44NqTvvO!SrZpT>VOnsJ^DC8ClZ3%zq9QMxa4zxb!Q@42S_Ksg_n0Yw;YP z2&XLyt_#>Ca>m|3-_OkK0ctv{3gcZ%N5;yv=|U4C{CD@J{WLUGiYJ~mzK#$ZvO)SH zr%#M(cXQr?mSb^!{gIb%Rrs4~Ixy^eyD^%#7+N*hyp!VBa^s0>sXRZ@XdZGeBYl3u zQ&mY^rY+H?!)Y&iU3|V`BSk=gjW+wCcvWB+9Va={Sqxw9bM0J0?oEsbU)zolno39N=^}zJTxTTiq z@1@gK9|E^uZl9H57%i{WCrE{$bQDHo%>BY3&YQrV$ny8#_@*pbuNHwBwizCx7`WDV zP}v7pyPE%ax}UZNr`x^y&hlIA^4bJ82JbgzBo9-^0=)DeKc(R7@(1PMUMxG#`)E;+ zP(Lv!#b?qg0oiRAv+BF_M7y-N8K{mmkLy(h#*a3hmP-Y+wyawF4>Q z1&be0u@%_X4!(EG7M2D_&*m%lBXjsofFz#%013jFPtXCIa%p*i2yF+D*MGOI2>DWMJ9;#a>?q6 zS`YUsR*$<+LDJ|a_s&`*Y-(2%_k2P7l#?RzD>}fH0?a7aL2&#R=aruP<9u#el$gPL+fgO@k%B>uML~ zD0Bv=qYH?^XcTyuSgz)=;R2XURHw%ErHaah#Df#qVfT4iw-j;PA%(}@bF)l}iE|v+ zRLxD=yTw5Wtu%VZQI-;e0-$EmS!vUhD5lY;*<3E1mU+^1=#RYg?@gG|q#hFYcR6{r zUgpGFqIV*yqe8C;Xfc?Bn5L~iDW3}6@=D)n7%%Mu%YuYE`==VgKdGV z7J>8rA9d8@INmHN%1l}60i8gfFU3B2P2Q4}`ZMY~F8l;!QZ`T&9+KcKUzP*aO;+MNH z+Axhmd0AF_xEPAqTyXz9E1uanFS#Dw{}S|LFV3sM>{aynwD?f%l2JXZ_rVzHEy=>8 z;cXTZoB2+v*x}OxKTu7}10PVYc;7(9okZ-V<=#~G$y4-!4ydDsn!RynVtjfkrP18KW8~UCn*Krz`V)}2%U74iWcMqY zW!7Y~WyyR)5m2tS98v%DmjAT(B6^{#TM1Bo6P(4Pw{Io3k~v=nizZmymH1U}_jN0u zXd1H}{JurN&93&M~?~1(XWzB^Kk+oXxU#HcB{u5=F z8!Ht<-8biy<|KgplJ@Bg!l}_;>xzzn=sI?jeH_Xj`$Z&?C^UQBMiYRGxoB|d*uoyZ zNubIHMiimes}Vl`gQwUUi2=<5`SJ#xb{Y@K;{ZXTJoN}EUD5-j_yETWF23M>me1Io zdry)yO8qlJ0gPjoHxCFMJem_pxB0Uh!UXC(~(;pkcwEZ8k{!r+Xj4(LgD;oQm1 zxsmmFw#4F)>%T+(B+^@rTA1+leKb50j$MDke6gJTY(dv1JSb&N2W3eYGV#ZtT zc#zcb7CRQNa2OHbQlsJXIK2g@{v%e-w?Zk9Z-0mT%7qDC%(+^?C()wD@pxvFQ7B&Y z4Gg4WLMfeM6Rr|XW$7iF^}S%@hQ8xto9nZfLdBDZxN#Gg@hp!Qd(IdRZMJ20`~KXHW6yK%dG5Hb^E$8d z+#1r2ziI#RYL1DUNGCVVY-?tFVh6(dymrr(tt0PXXZP(#c7>WefgwNpbAF0kR=>C9 zlx+o9lx^z=S)$RLSB(L=LI7U2WI(9Luo1EOc0&qSw$%>lfXKEL*2??$x1m&mPLT3)H;H3883*;c&u$y=#V-HG~G&uMOjGIO~SmiuoR z4mL!4*|bn%E`LBDTb;Zm&zY0NmXvU!m*?g*VjG#tet6h2pr+F9u02t@am6-S=@X-N zaZJke4hVhg+P@$98oOEA5_>se9w-zVFXG80nPOlXW#gtg^+J zP}2^vNDAK}&XHJ!QUIqDmDa6mqklAL9q12NgSqkWmrQ=;x{Z`rpI2Qg zT8QlMoAL*v|SIPE~z0Oc^rHF~NHF!SmT;!Hdn7uT>>5w&o zB4g1!P#BBWtq)4U1q#kjg3W5{d3IAv|lnmU@;(*TH1G_6w`zugA(rN_FE)8 z`9ROUl*GQf{2@acR#Y*f#-?)KZ%He-9#$Du=Jh?*o5kt9&A}B9Dn2`ps9g)5Va(k; z)lrGrKPj8_ zini9QnC+W6NM$!r(>EqO8Me%_xM*SzM$=q6F|X7V6p7IbW~m8S&y5*QfdP!pV53AqvX z?2qGDxKDujPjg;RoyA}Co(=C`w;fZD4o920^XVT^oibIPF+Z*>oh&fli#LKKP$w)| z+1P)>I$o%gt!-nZrn6QIDJC&G$FeW~J}jgEWjVj0@ahj4`A(koQmYLSyTVq9O89&D-Md zciXI>nz@r?!xI!#8ahH?$u-DtGG}(0f=S@0S(>}V=w*lSS$QY`NUcC`X&shv?fnpJ zeQm=17VlKKg}y5=HgB7f@k~<$Uc=1r5vKYkn0$WSexl&UwC|DD8yB4mky%*@I<@#bg=Io0kj*m@X9fwwCQ-t(xPJCMleKgo4Enx1nkor;~M8GPd z48wEx+q$#OpvNtn;zi4Hjj^!^M;Fta{e$vg+jHK@L2<3}j;ndXIl{ z28EKNDoIPtfGl)92G0YeH4Vnr8cn%EBP3U__v-7KnJ>$JEjx6P#p1{w8P z?H){9Li9_NZHqms=C9+@iA(ziNAcj|QH`Ubqv=rb7$f_ATQQauLfA+aY+l(2+cZms z&^10TSmK+OPS_KTG9UwA1|AGax$Fj}y7OcIRBhE+_o$$()C_}`F2TNb-ms6if-Q%G zR!>7tp3~PCmx+x|&Jq>8wd$wvY7)u89s3*iFn5z&U`Oqww$Zlx#jc0l)97H|Cn8s! zv^nF(IIpP59r9A^l;$o6*X0Sjs_4aET{Q99BqY@4#c_IK_?X2p7Zy@?l`dXko4t#x z23(=o*>Vhk#8cij`^_rxrL!Dyvsy%JwCT^=H9kIkK?9 zX-}fRjaN1_vN(*92>Lu-uNO|MVA(e?g6I$Tmd;_spDpi4I-}X&kc4d`21bMFbE#BV zsx9_Av{$N45KQ_gymGG#(qcP^+E}?4x?b-1MkaFHa=q6P$9;0YoBKjx=MU?%85-T% zEG4)iL;&Op?CJ7JRi9-BP+*{PkekxHmmnfl(PeolEQuhzpiu#OpE7zNj^5E{MRcMq z$T_;)6zsq&JA%o__O>+2V0ldqb(DzcVxE+;ZX6HkhDR^JmtML0wK6Z!mc1O3|Nris zEU-B8doBNumqK=%AH6(-i`W?-D)P>*#Ru;zx1^QR-kxj{tC>NOGwl;jagAQLzvP&} zPktk!Uv=DTnQA{cdcF$w#9gm~dl{Eyl52H*opitXV+7#k~yW9sLzGzKh?# z-0pQ>lr2o0fu!)ZX!=Js5~sNM6b|2m%<|MhmTWe6>AQiL$myLms#9ftmH?n5VwwDa zw#E!S;}E#c>755ogEaRNJSe9{Uh96oxGKe1dwp03KCTQM`ovIkpxgR(xBqza_A8XC zAqFPCzY<}j=UU#OZX?KQPGl5bDYO#K09p)q!>#_=5MD&dwa*?|^Yckaf!(#czgoFR zhS(QRmc9;fW-&OcgbE-Z6})!uv0R+I$jiiDl?pLO54yK<`uch#A<7R{KMv($>$8Qv zUiV$ijy~uP9bUZYgr=#VWS|i(w*4r}$aT`_rc%s4!UPO?%cIbvJ{trDR6V%Wh+;D5 zsZCbsT6tZ5aW9nbHiH@LeC7FvEJe2ee*FBB?I!bZr9;WH_KRZqwJxrU)~X8Phxd-t zr5_3<>Ybx@K5mdaUTc@FW#=$4PJLzXZT$V0b053$RojRB=%>>Pyt{6~<&4EA(mb=U{gqk$kWp@WXB*{yP_uP0a7d+BBrw@G;4pLhl_R|ZUjVakumYEZ zNWd3zDSk_tiHaGHZr{_4d5QxQ6gu1P%WNO9DC2w2(bLM&QBH?dY(u4k(AxI0P$ux!}Q zv?uiKc}%#+4qG@J4_hGRGh@Barj0H~N_WY;BZn{(q>3~&sxLY*AJ3DPz{$ea-}Wo& zz+F^Ls;ego7cp<`zWhxBBSiT7Mng`Urr{aDd>==Gpd) zkKM)eRtFRDj`0j{iRxKVOiuO)izd&My!oGtVUitdz$7dqk?7Oj;`WXsdOyhTR3=*Nl3IMHG(e)}QxY>c`h5C>&6v$x z4Q-!Z9J*f?VO$K?`zXS}VYX-STsB<6asjCt)bLbR=-)xENckQtQ=C9(4#rVv z7^vfmT=){WK*oz1$~2XhKeWz+?%ZE;ga!tlO-3_OD0&hROVfaM&Y&Bjb|DNYj3fQ5 zW9=y88lyuI;^6kQw_co@blMyb>u^B{GBb!?G%B< zjHU7`xf5^&K1nBUBL}OhGJIQ=V^qC8Z`4<;qdVD5_fJQzr0#)KT%ZNkwcQ*OPpV{| z6EZPNQhCi{Hq4-d=eWro+=6+z^Vl|=)FP9DrC+mExIpZNVwg_M0VM4jbqTm2M(f4S zLFtY(I5CO2?O01{teDnKhX@4Qt2S~G?*P1OCx72QQ^ z5ta524IZ`<-!lH0g9%68DC`EeIdP@+^EqW0SPd|WKm8c#dX;bf=N$^poH>G@N?;bV z{ZnK)lQw0y)EjTm7l+lf`>L|$nvv1Z2X!nw9Jo@?VRM@j|2oj~+|wc!FPu(b?x59%yxPM@&s#LI9|;p zOHomCQq+0qc=T~EGlmWXyPeXe23VgA?RJ}I*%1Cgp51PrCb_)7?Huaotqt`(4Es4NAda%n+!M0jP_&POu z2fV!9N)&rIVG}$u@!Xk=U=~49j6Fvh(k6eKs6_jZSxKj5gY&)o{0SfEL@=$GUWp{Y z7L=ItNEhsUNX2lL`lhn+>_wtJXq+^2J-T-_Lk6McYY}l~D+XHZ?Uw1)Q!+*-F89NZ zNIGQsh@c^0Jiw1?7*-Pa+e^RK>NcZ{v}$ibNqeQ7)un}tA!W?-m9}T5l#fu+$8A;M zjsC#gI=iha;Vd(@10q*(QA8rK=&9fzM-m9vZkgR1mha0B(AUGwv6+9jNbA*+tcaTr z69v$GFIYu^cUC>Q9%FhTKfXz4-a{u3uZcy~J-(mq)qdoclAN1>BHRMJbkxw$c+&FF zNui3oopCPsPIF#+b}xFo>-xpVTGJl6m=30S=+B-$Z{crKC5mwUOTW|NN*Dyjos2&#}_WBFs(m zVSki8Yuod^Xf!IndbE*0`(;l!qb4KeO2hK4x`9GCWwQ$3Y9=75WTJ1^gxMdq9tS57kd%+Y|-Wd{8?8`Z)hk+<<9w&ME*OE)!o9iq(1-i z`C|k`@F}G}SrRKHrzG1vTX9Ch(1=k+1ZIMl!2=uZ?;WPKUbH=F00p(RJ)-xL9Pah7 z(C^3BKmGn?u8o-YUKk!uakah>1ZEFFlF^P0s1qpT_uE+*Et&2GCS9YJ{%@3HQlYF- z{+DPM&({)u^dV~dFVvg)SNlkkrF)|OS<&m0S+BI`MV{Ede~K=cvlQUlq%a z;l#|QRB0tyO;@ttR5Ls_TnmFMpNgoI>9y(h$m zcs8v+fnIWjJ=+Cm8KmX6&*J1mqvs_pq1TI;rh_m~Zt{9ibR`o)0KQ}_t0VFqw|2p; zd|36mhm7i(55!R{f!4FqZ{NXXm#M|-JV@JmZ?;nXohF+%PTj;V^oUp z^%6?a7knanFo*VB6ES)mDH%uXp+_}$$9_q2zEG`8zdn?dF5EVurj{)Ux@XOSiy`;o z&yhL`6G_K&R;MF6UYM@&nsSEWPu8Y?)c6;FkqJ$Rcp(}owBGH;Z|!EPpOrw4^eIP? zxrtuL6I){W)omDAIC_RL#@qldFi&7)I&l|*bVcZfyTIYxA!FeB5Z}Om97)zU;kWaa z=Qj3!=Yu2Mkfgu9i@r!|+P+lOy42h(;~4r9`O5#7xXBKg$QP^=cllCbqS?puV`tR+ z>_G8&{Y+u5k~q8FVmKhw?ZQ|^TZs4JOc6J0^6M@n+bEf)8CqHiAO6_rurb?Ie=j@vfqkWhaF2~@s}wn_|Flkz z!(9Vx5*>`vB98YfQRXdjWLBB@wqzRSTL9ohnj`97OinDHsCdk)^Y+Me@jT!hW% z)pOXfHn9e%m1p7ti_6bFPvd2o33Qv>#>-NrJhlm=xCoI`>D1mvji#=jLSxUMZ}a?p zdO`Q|w>jZ|wVgQkz@ywK-U7^=6#u;T;;pE;Gl%21oDJ)wpN_N*xLRc0v*_Vj#7VYg zW&g94M|8J#Lr1=PoCIM8EOK#eB$U>xNnC_ei=Qg_g?F8aE-uvv@Vw72b`BU=P|=lM z_-uW({^FD8@VtZ%g&uZ;aUrcSR-x4*Lg(EKrGU=d9#cuw#9^@yck1r!jjnf`mpBoW zzgCnu%#IKGWSW13P3pcpw!R>9pRD7a=QUGswRJdk@wv0bw*I0%sLj8??dh)UZNTiK zfD9Ifb|3C<`j8dX4#_?ZSiL1LhxVl-nV+N38cffJXQrmGC=xXqmY0`j9TMunJ+jdJ z^Jg`o4o;*sK^NO!X>)dzKKxS8$WpJHJBc0dGRiO$eNNNM|8US>TCgJ8^Ullw6g5Ro zxKaqWw~oTEy|t<3qJ+($EUubIZw8DGYwnS!4r%wJI^u7CCM!LQG`>}=Lu*9Vn|`1+K2zcp)HOj z)Y3xREHKnE1pbx;BQe(ij&lv@4r$5$+o4WdF4dl#3^{CS^)IlOGZw~+;Qx9hqQ+BE zgBVt-p_o0mBlh49b3u@j1U$(abiMSjTmNdLC4{0m_s5zoKYj$Y`46X3mmUX4Dd1j4 zrR3Rv;p9RII2rEneOyop5MuzBO_H=%PUjKAAE_Rpne!2FFcNfW(V1^GMZCFE|9=l`-Y5n0nK3v4mm^$jj;I+iO} z`)+Czy=g1j`;S~ZXvA)tF3a!xPKk2%eU&hz|BNSoZr z8Z2UUzuF>ZFJ0kIRhtpJ((24yx&4{_UBgKpHnMja%8b&Wr_K)l8n1VIRx#TBc_QY` znwVailcVXjBcvwgreHk8cTIoHa~0PQSVpFX18hCSEDspl#bOK2St> zh94V?B9FZOKB}Gn`SyJ7ONC#UASb^mlkz+Ny^1TvaBIK4-oB zq@@*dk5-uWwI()1Qg`l5pU4V7+hz(o$BUbD51g19n>6enwZK=8Uln?x`2O(&4>wB3 zte!%>chaDI)PnpCX`)Aq7G{WQu?<|sMp@u}wP${niaS6DRppeS)>#IwVx>o6vl(f-M{im1;9EO$J zOpAcd&ZmsFy;2*cU(C!(aN5W#BC^*187uH+JdK#_wP2QxmqOJRIXjvKv?r~6!^Mi( z0;`&48wPRzP3qjNnN0MR8`Ha!_JO2dwK^Lm;3{}>)4igsa%H!1>X*VK)J?m&7b~k- zW>dHhA#fZND2PprS*Ez6W3^ z4BVyr**hkTOKrhI7HC3tNuGe66jyu$tRMkIF;cgFWpI&Wkw3rqWU;jco~uFIv(2v)L$;)^bHJH3mM)w^1yI8v+N@^r`k zHzq`T>Oj@;7GDR)kKB0$qpr^4;oV?|(*RN$Dv7+w2#bM!{>abBWLv5pk2%^3^XXbu ze!oy#am8M9ur~c>X%EmP2U4ZO@>%JP?0ERpU7|=SR4KlsMlEhC`s+sMtcd?B|E%s( z`o2phTT+e5%7RwCF`KhLUG(zClHmH|ac54!aM=|@NY&GI0F(E4-!92onCB5&!5BBt ziu+|&>+(}{_NFz;wi{{Al!n___C@~7_QOBDY!=QS{BlzZB=B)??6Cl1mXyYf_=YH4 zY&pD(5lh(OoJzmW6E%Pq0K#$cN)AE*DmUx~T4H)feD;Fc77yAV;xGUZF{7kOAXx1> zkbJWae`=rZhV)?VL%~pb?NWSxl?KG5ZOYasG1%PlU=TkD{KYV9e#+RLt}e0YIjvkP zqMtM?K3I1UUrKmO_=f(ch^O`D^qCmkXesKeb)3pAv6L~Hzi{g`9H@kXc*LTZvb?30 z`g9SFbCwFE^!Q(BMJ<)3E{5^AGu52Hx6|g`dn5cG25(QS?mwG~Uxx=`*X26y*E=sd zlA@;J!7=Yz+VYTN2la|g_5gnPc*(e>-dzau8zcwFweJE=rf0CUGDMW{Y*g8WR6-p) zNBAuM(p;8j?|O_qKfOEFpjBM|;mz~P@?87P5;GP9HAGcZYvb48r`NGdH!~#)e^ozo z`a3g2D}>_HqPqhCK3l{QZS4I#()Xy+Tam3f5}b@L5AJI!su&^rn=s%kY%rL^56m*2ZxFM61d(lj6;Cp9O*9P6K<^_Y;B z@zT@FgIscah{QGC&RCTWePPMO_Ur_+Sm;j)!=-T(i7*Gd9Rz!*vSWtiMA@N_WFj$b zJI8BiEH(a=ButmFYX8vEnc-i+28~x4RTYf?iV$$Aw|>CAWqwoesh>1o)K>6+x0L$M z^>lvWV?SdD=I>ArS-T{jEVsNH6vy!!IC1MpdF%`Vc%U}JJv$RSy2FPs-clRo7MJ6F zm+=|MCFT-NamdP6)tn~XeGcD9=&UX48C-YLB%Ji3C6oi2Tca(@Gouc+8TIs&FZL1hqx=2ZL_Q>~>0ZeBE%AWv-Q^s|!-;iABUteX ze;9Eq9^70CDm$5 zmBc9fo`9;Ys+Uj3a!9f+r{#2s4MO#yR7_JBa@=wxbWN{V(xEH6yG#Eb5qPKY12h~+ z-3*^g-)@dt<#Q~6F5U*Dzw!a})ef~Y2#A&uWU=Ml(mi(@uXjkVXE8H(9>COZv%q?L z$UWsgUnq6)$^Cay7mV`nyJ=m27aM-E0h38v^q+!J{{!iTof$s~+^ir5UCjtm9Fc|Ll1cz@Gi_L{Tu;l(kr{l}EN{-{hYtV&*~l+dWurbRbvhEz6Dr=YS?1pf(W{@1;5+y*DL;Dx=D z{js8OdRWCJ!Qx%eyU`%~?|Fu!Lw66WSqPHf9sZEZ@qRDtkHgmspdFlHr&$xd$g>S& ztTYY&J4&+my~y7c&04AZYG9m<)OEn&>MTY$n(US3YJKD7A5b49zqd0{MK)r#PWwEc zF&zN1c8A->6D)9@3~s3l;p;Iv5lum1Xggogm9y@x!d@A4NkUrn1^n$>0)hn+QUj`$ zEbp5(OJ6tKNpgtY<=*v8ad3ttxA<~26|>XAsueAHI9fe88HZZBp4oW`_4tI{O53K% zK#yhm+vno|0USb`f&u3Gi*V2+65ZdXAtZT9ZBm>EUhKb+BR1ux4L|!qa@fPvNig60 z{4K7s6?yo{bG)%yVCFYN2%Dm^qyc*KaaQlpCeZo#pQzDoe^1S zVMVy!UQ4lqta3s2Zy+PASaOxJ@jf8-IM((TzCxzG@d>;*OYtCeyW;~_mfwNj^4+;+*@UYnuc9AeZazS@Y zaB%FK3|7&MC0h9vm^m4>yGt?E{7Y&xf@~JOmpp-gQE@5qY^6@Hg7|L|J2fAkW{)Z; zN$ToYte1RF%K#n5V4NcTZ9%1jIGsLSn2_ITafC5~C`#|v>P=BDgB|%)7`JA}Z-s8* z!T{3o?Z+pUhE-)-B-cufd?2gZCph;~U)vX4wuqDqSMqA3SEE^&(5FD{W5}) zKdZ4>C+tyi&oR?+n(}bi{=FoqoSIRo2@y80gfbp6tJcfAzzB#d-bXFEIQwHnaoZ^6 zuOU+w6|BJH;6IQ*;oPjTD0d@rWnO14t(1Bc@ufNgrV48$4Kah2XRWMr?ppv>#^}frDUhDfnVqf$=;T7r# z=Pn!7kr+zd14HtC%9;2UNvXXdLnCI9M`&#ooLWlQ(?kZ-a?PP;AiwDa*@&qTr3i>b z`?H3>v#>$jlFf3`Vej9}=gsP0T5ecPUkwNHD?U;!{1raX_DHn$sLo2^@*y}n{r2yU zke#GP=NOhk#5U+g0cZR(<-pZQe{GSsG(ZlAOueg~n4M1nAkiod)ncW7GnC)FIC6{3seA!`2N&829#Zn-?r;~mY1ftGYW>FS8|~i0 zw_agL{{ON{Av4+}nNt^^w!5qDCo}WVdF#x5LWyI9n`H2Kun&<|p|~v!2bv zo)6!*8=T24Ud+~zGDKO-r_ku~ov@AseuZKdYc9ceLpjMy;>aN_zi~ao6e2h#7<|$S z?bvniQ1;D>XQ|IfqUCoc7yAaIc99vahmqAZm6fZbN+-1loru@g@R_2lpJDVa$#R*@ zU<%2INv29)blnk7Q_49z4Yi|uKmLw>Z1yp%wbk*sRI160&MKWwP=B)Cq60p|ifZY` zoVL%lAf9(&yN$aC8p~Yas7fWo)iu>XRIX1ewL(jxkG7fwVJs-^e3KcpXAJM!%Y)~7LbI{x4z ziB0aNPRT(LiM?%EdhISG6e@+)5ieZyDlSn+=0rop6G&YO` zU(-G5@BHsIDoW$?qx}0f^t|~?Lv%WqQZ>$n%!rn-IL*}$=RdsA<8wH*|ITw*cSof_ zlEW*kg9T=vw&Wz9?;8( ztxG3-MNK?D$BZ+BUHYHd9yy^LF4)tU)ZmkCQCltF3R6)DU3KK^qF$P_CLyLphn4U( zKhWm#ei}X?3?zWct9YF|TA^VsXysV6RrpA70PpyIxt#(*l~W)DdV4?t zJ_qI+0JROb3#1z{r)Qyiw7_4AM8z>PCu@7dR^KqT+sl@s&hZ>P%Mmq>zhAzs{1ecD z2OUsGzo4dmRTv{Yqe|Mi02&ZM78NIoxXnmO>;#0`BKq*fs~YJ4IIqL>N3LBBXzF2AZA#iP|$;)e0Co53ZOzGMDgClVFH5 zFq+59+hQVpIFVChLlxvrB`8^bNmBrD7zgM&D#2kJCP&F?puc~%jTWhb+^3f#ux-j# zcSfyZlHU$JT9b}pH}!Vznu2y=EFraQax8``jaFrW9=eysiG z$-9I~fPScwxI6ESZm-ys&2s?YmdJyT+>idW>c8@2$%C5cYKP^dohvwp{FK5c*yC}o zL6Dg-N^!tAzIQOHY7Oqk>#RJg%ypJ|MD6{Rx?NZS9YU&tB91E>{?n4;)$6$?zMtX2 zlzwfbq%J7v2JkSA9oRdB>}K}IHnN^+tKLDFglzg}G5-n;{Ev5J?&e-lyje89jx=%Tvz{=MKJ&bvJ{F}N0tYwr>g8QN*sH3*NytI;$nLhsf)OqE@GwCs@)AvPP}R%2yYRzl9vh2S|CSZfG;YVW zK4Pz*tQYci(iwN#`fl(-CFfP_u|ggBg%4S)Y3POff3YCFQ4R%b#B7mXG;Nt2DQWuP zyug%KwrehWXtj<1K0FBs1Qh732;Hwz9rSLq@kK4F*DXCh9Y4V}W}ClV6_^sj|E8-) zZq$%>?oVNMI3jg+$Szz5Ik-8Yy7(aURo8ZRK+Wpuy!vlYS-=&V3&`F2nexYGDDRuD z$WEPmf`H`BqVO742|eRioQS@OXrG*;^J8^IwYuQ;MuI2Dsh)MG?YEm#9JLcSu5ZM! zwhv_mB_qgeVq^Ig=yK$(+6U?J`cNlU1*q;zu40z|`@#X%++wk|Rz4HcddmThuK1I- z&z{4_+|BMFFQIqag&)+tRrBV;8yX+H4QkB07Z+TLd-giI0jgjrX=*MJCi{sa6Db$= z(nY{_dr`%AQ!=372KEsU{SW$~*}^4_U&}!k6)cxhH*+_IFl8IvLv|}q@_;+Y2Q&4% zK`)XvFZZ$S=)PeX6VhULbQqcaNp6?QF0#7!2WJqxR9%`aH$VY3bP$D*A;DkEM@KRgjEibs{tnDMN* zUPyMV`->I(DnH4$Z1aeI&>tu&)yfETEZabMwkvPzFcr8d(VGT;k1WS=TXo(HbSg3# zD#vWWZe`-O=#SZ?1}T=7Y5T0C@(8|M_XVBDRq+|h0L8}^QNHWH+B%z-$h1r!{&l>T z!up+du4DE9awKX#a_R$=-d3h7z7b56*v#xjDhztRLVHM@i$;t=m+v_2BD2d`Ax~+P zY1rEaOOGauDiQgMTF}%Kjyv(6hCT?CY&W~dv><4ACu$v^OQW;J0+0|$rq4JE-DjL9 zyj{0dxih`{X@Hxi4-w?0598V>=F=f+GnfOU3WpEj@MY9qUZisRn*C~r7HWu_ zT9k>qyIx|`so@rjii!at_v_XXM z&IWj?PvTq27Av|3j? zZb1N|ACoO_r&2diukbL#v^rj&rez;wv~L&ElkWZ;A$Y8sd%$Atnc}$(n1qO^FBkAA zIo`{y6Hss~MQOAX8J$jbczuN%EJjgk`NW8iUL|y5d@vs{RF`g5*8?eU%ek`Ea}nsm zjb>}{5Se*sy0Ffj=7S(DPAX(Oeo*}>I(`e*pMF4I!NTprdt@RN`5}FNXr`Fkgj;1-y@nl=*ZxOp0JSCQitUmQhRLG^-&gW?lt1dt+ zvQ_&A0K@?Py{~Wnt8t{M<5HHPo-O|k_M(ypyz;jN*$?mh%*ymq4!d_0!CxS^NSZlACg%OOgD5RM<@pI9=zuUFmueY5Z;qs#+Qk8hU^T0 z^aaHSPK)Biwxx5vn)PhjXYq{%Yk}k&EwaFflzbL@qEXS%T&N@Xl5*xi!4nzS%XL&T zo6|Gg1%R?X7)2ZQh0FGrK4SMN9MPSe96jT4LTo}xXcB0z1=*EN6M99svP=tj-HN&O zIzL#S58&Jy3vpmAmW0gH-(&f85<;vhC=R;QZ;v>hSF+PMbU9Z#t*n}H=dapa;kXuy zjhGeM4b?3W-MYj<@CXurr7Rek9c!5*Q;~dLgfH+%hx(9kDkXx(;ph~E%aneEZ3HAP z2*!YTPi+m`N-*>p=Sma|AZ*FiZ&`4SF@y|XcU@6?mOrqqMOz;(y$Jw%NLyKVgKvbt zf`8d=$NPP>x~Am)=qP;BtY#|ITCkOD>SUBDoXOFi^(ZAXYNNfXHRC9aU?F-~!j6Bb z=r`ZGTPpEY;MC>J{HA3cX{%@~C?KZ&2i`IB;?gr_=~6kvEF6JH0pX1JCFBGYftSJ= z5Ts((K{z$&@pC-@tkoHLI0)5tIm0rH><|W3Zk?S|ZBbMAt;UiE0>;dwM>6c~3=b@- z@HU-Ok)f0rOh{ikdqOyNx`J~C{y)T(kwtM$CL-wfv?Y|9RO&5SEyCV|y08mb9Ow3%Fc;~0kdkX^v=T(=t-DgE2Kk}Pei*I)or5fovcO zN@E-V0~THU@t568D^6|+=U69s?9*eNw1t}LZ}v@#4J=)V`$&HC9FNt3=HefAw5e2h(!06UH^T!ee) zrD)28F##B(1h~H@KQ9ecjyxx#td4ZWhZg3HZYPjU!%x0UbX~-8@rLU-Sh%?AJ#jtW z=1dyc;Kao?JFloYNWCuFt^`&=&BC=DbognL9=ARoZ?nDjzi+o`uvBTfKM_>JQNvyZrl*|0A=$ol8ahcvs6{huCG0o)4fBrbF8VE&9ifYh zG1Gdz5Qb0gO(Q~+H=~VEGfIQcqzr%u)dtzN9D4`!ZG9QK%{a=l>u3u!*Z=}0ZK2kY z?o-tjmb*x;Vs7xP^z}ut(J+j9z3p$dY0+lONF2b`%jw+A68A z-#a3jM3L;JFcA68j`7k{AT-O> zpM3X}_uVvhnU@2gt&B;E9;6PSm)85Of#HE>JCu%t&n1D7V~Frx4vlVOSfn&P z%18IXWR%j~Ie9lH9cPqUqs@+cv76+|@7e6cNBzd{B{y=-f^?&bj@MWsb?FwF4EZk_ zTgKD0nap@OdN1x9W$*u&1SUoM6lKdt{*zV8a z_{X@(lVOwO7{|_Q04?N7QgQWcrhA_hGW)2_%0UMiw+Zz6moCcrXM<4+Ubmm@eMvD& z>rMKYoB{pQep&UlGT2700K3U}nSKVFAjK(_K`qv2DG2fg4Ba9}l*Yt!J!zG$lBsiL zOEw=X6#R#biY&8xkhXZ#5KXc7uDWRMw5q(QISmLjT^+ZH2ClFWvN{Dm z(zCmB)jTom{roJcvXI}afIv+Ehl+~yyWD2%v`w4B;9bfYr9Ph~aXnpAOzxz|8a zsVdEQHte%(MR(+q?`=+%H@K1~$p*}mW#=qpG*aqmIon}iK)^rkEjE>R<*EjfxJ1LE z_6wOmp{>#L{f8Uf5r_fY|B-av@l^lc|6c3Lx|D1#sZUnO&bp*%A|oR%GLwvo?0dOJ z!zv<~B_T5-WRsD-cU;-T#l7|&znAatuRI>*q5JlFpV#x8=Qx^2aPg`*=fva4QMA-P z()9=rR$G5bkjs#fmIlYLGy^haPaX=DIAqyhsAHcVdQ-pS95xpd6T z_XT4G=!V%7MeX)Zfflk9@JZXPY*SkusCr4MA!I?(xtyv z$6Y$KIWRvg`uJDIYF6GF>OY#XX#&l#z9FZV%o#~xHO<;WTapDB*;ZecPk6E za%LsDHRnK`t;n=J)TB{_I5&``H}_2Qa2azmf20%`B3p`zi=U_q!LomaHn#Byc~AS+ z8tSXC4p?do$9%%$GWekXhH=}e=xck#@(5+YvZ|%mhXpB0!DEO06tBDS^_BY61exiW z+5EQR&a?Gd^QM%!7fL%->5RHM-_TZX-ccvS}hM5+?=*?#Y_(s8{9~Wazfh zbk*${j9uvZ$$<0R8C%~4bBXH%PowfiTrKiPn0CYaD+7|<_CCuJp-Q-yO)cT7`dSq;JztkMbg%8&objy@vjVCx zP$%@oA18eRvI8tamptaCv;kt--XZB$O*}wTRyKKj#kpEc$=FqM^EP$kvB&Tq82&T( zHg!bq_UQK4(Se{e$jYgW5~O)j^0nh*Xc|$sR0ZO4w~x^O+`PB4iLubo9d(&nZoJcc zclWvMUT~uh4YL2K^$xb+6=VNwHVN_fK32}?V-CDe5tn`2&b>9!ea`Q`zZ9B9Y;izx zzU+swW?B4$|71X)M3PK_(?8rg5A2oQ<;yFZ%mf zekCvaG1>~tTE5WiB);j5?3{fv%HId;8VOoKuKZE&v(`i=Q1Z)Wf(>^OU5L?0r||cM z%0a=yM4Mab18l_3h4A)3GjcmT6)FF0)wD47xF7AfZnkf;)D_eRm_D%YaeQvhuA_eE zA5zmz=cI-z3fkZt)swTEMtx_1@KRxBY7I$uuUxRWQUap;q+Kgj0?h-%V^RIkryfpk zk@15%E;*Dtg4B+zc5S)h=a@w%ZTdd^<+4y@M`Wc`&H+Cyt3Q5`#RCPq#XLW{B3(93`|Vk0moa~WwPqfUqh?U z3x-y&4czQe?~s~`x$-91Kto+94gEz&w1VZ{XhKV#!g@>w+W(CWTCdYQXXq64azai) zVhZCz4>4j1$;_DU2nbi5Wz3YlrZ6(@LA1|k8d?z9!2HO?H*V$>pW$cKEL&RJteZ`6L`wkCQR}U$F4L#^YwKBS!~iW zGFh6#BgUjCT~QERSur?MOHtxu1z(ELqm@T{R`xBZD}A5{o$fGRwn0aROu8wFQWAR5 z$rPPK+8hR@l%AFHeaBT~I@~>WctAhr%$^jF0?!%!*|n$)^rk3P%=mHTl*q>H)3V>s z9}*^}!3s4nYU+MkQvrH%zN~3MC0tNNjZaRFG;HrZ z`b&;vELJ1IBW+<(2_n3Q=rrFd5$wvD0k$}5nk9cp#&!UB*u4Q~Wi}f@}zU_4rCgH*cRjQ{1Fx@32sZl$F~QPhcFr?HF6)>csE(sa?#YFGjX#1ywM^X%IP zp?buT9%0DEDV)-?Ou*Ha+5Ohy3uFrUX)EPGPuGMMh78T`f3y%$Ez;7nl!OUoq^5?+ z(a4v9kIHCoEARKfaU4HEj99VYFbsb@?O7V4fanfyUj~_=AUzT|N5Gw?N96Rq-k##R z?5O9Wmio@sf;n{_n2EqqL7~asDLqan1`~j%Xc7kZ|NaUYJ3aPgHBi`=u08DVsgDoW zlKpq{ao`3!QCh??1m3%70}bj29|F9kpVSawrOhc7ixIYo>z-Ioi)84-_mH7 za;Ncki!TyyY#x(?J@qZ%BH?T~qx~&lwHMfyCyEi?f{#gq0y*VOOIH|22jO9(tjZNsTSBy@g< zc8-8cvZ+L_-uDP@!K!}${jz?JJy>6!4&s$FMlFRFa7sr8#TLy09Bu%Qi`3m8;}>}9 zP!04nSE)ujR(jMBbejG}hl1|{wl+X7mx9r1aE?5*>mN!NdZy6pSl&~Uc(oZNShs*dC9eipiccXf))ap_1qQP2c?^V)9v;6 z!pa8&WtTKckJi_aGkqMkHS2*U75R^;juuWWbN#)&z2~ai{af-B-IAMZZRdY`_utIl zE#3R{i>w~}=<-t15Z=@yp-|Zy_Z~1UN<3^C8L*kay=(qp zv>PLVFG4p9Sf`LbfSX`wRiPHU`dz>m*j#2n;4!Vh>6!ej^5YLMqN>Kx0sO4fMKi2Db~kBv`_7DdS%gn zPwu$Zhjz=$%P;=E=`>xdGbMc8sQQ}B`s(;YWvp=xc&1=g1${jbTL*0a4Nq>ppbCm6 zaB>Fi*UVOch}uw@Ze&5q6cMg{Ee%d5$lD*qI@Hy58~C?;{QWII*c9FUlLTbJeL@=k zCUHsk^BuvD66uHeGwOeMB2e2Ni_kk_@)!8|N!rFRhTbYd&JQdv-y414F`CX|Qk}SK$kS z<(5I_@|J8MvX5}9-j=l)xAfv)3%5rtW5?$0KHAP>yJ58B#_)vWGIhScA<_j5brJ29 zU4M-L(t%fYu&ylP=t`e*wguR_^Ly$Ss<%wi)Y#@_+L&(EJ&5I{`L5r;Z`!5h_lBH# z%yrD{rq=v*Os874F+r8>K#kGr*?%FherG2U&(5l|ucJR}C8?w6Nw-(6FGX%miuVg2 zL~^3b(v16_g;B&Z6fqE+*Hhm!BFVIof~2iaN|Q~G;O~|M9tMo<=?*4u#qa*{x3vLV z1QYdSRaT;XFT0K1a>4d0r`#0Kxce|?YSCs3=httKO} ziHx!@k{K9+4kyU2Dbm20q~@Ts{*9;C!t%aD{5>}>Z-R0GLKA_}s`-QB0mL5!wSxgC zxFW+K(9dlj;C+Y7#_HvdJIG|U#hB#<|+f-QtH#+!MZf@?% zC1yFpJwN=D$?x)>Nq)ywC)v^T3bVWZPr!Z<_>tD?r$0}t%bkJW3f#bP)nJ>5gJGUN z730uL_>MYhT=X!Hh3bIZQQ*qT4)~*#qjRQf{pFNKFsUjtW0`RBfBFU5u<^#aZG8}s zRyTXB5wKA)b`=fgk3k1>kpbJ;QyUS)(VshRPJ3|Z6 z;POmD+6HvWD_XM>TZU3X2+3ag=PXc?N4dS~{55jF0puck4)#>iCJfjw3zcSVd=N?+ ze{@r3Z0XrvCCti&D`R@z@IIOI0Gs-!3Ca*$eDuzW3a=g%)|!~B?EJECj5Zh{1uVkC zPisdry1=d!Hs;GW%|4xCybuaOt%cAW`Y9@ql<}6@~^nu=8%Nr34fj~Ck6BHz9ln+oa-Is`N*tMI`osQUESk6H5lTN9)uRV>brh#^c z4+`(wkwASJAW2}}7TE+Yr5${oc{8L)e|l$$RZD(_R?oiYTS(2`lXk)b=b)89le)2a zgwa<&%~C053tmS;2rQW<(Da+L6yU8v>Ew9gLqXO0a)iFg+ilXi4{jY$(p-U^M8(IH zG=%#PL&x!a@lXYcgr__ggjB+jr2d&e!d(FO_K2%P4r;|G*DKwc`R4cDkha36#~p8|_ae$ZcUW=!%sV*D$4J^qjji-JnvaSno%4M~|7i?;>I1%!}_uj@TSeLvA# z0U7Fk58-=p8}*ijC#YQvZ`oFDb)*%oidci?YJ~lWlcet)l5^HD`B_zUqm%hq+*gJT zy6tH=TXx1Tn4?><%ytN6W21);A3`zQDZ(%QlYraPLPFz^9(9*9cI&{D8!LIuD$H{Ede`n3 zWY-T_*`4Y{9^VYVrVvgsx_z~?{bKg#IZJ{!!3Xgb<~j-zqZdNx)8(JLd33zHTLBWW z=_5yu-FY=UW)28gEVh~Si0M|^c9w?BX^fH|;Z03jadC0h%O^E|egMD2=R}gAO6Rv< zot`pA4V9Lc)KpcU9>)Isdl-lsce$5{IrCrC#?FphR92J?Ni9`0xSv};$5E&5kNZ?p zleUQWteZVc2vQyIeITFFcY>L&Z!Ucg2$2ZF3Fk)rRVZ?+8;LIeD)b&7v}lhw^7VWo zgsd8>{f0cULZKp_A`+=TgRTXAjWM8o@7jLR7ay6XTcqRf}UW)I84`yJhbcp*W-32?W%UyuPg;~<~;T&e(x zZWJ;Y*Q4ZL3O=KY!fVerrEZbCE!y+PR#fj%LOuRidl>EAZWC#f7hfhPSYbd7?r&>| zt*gNwC>pjI+(HKI*$h)PFmszkldYC{v(8PKl-tsCL)&sF%;eo^wnc^+R_;8_tUD3K zAf^#aZf(ovOoYZY#mol1pkrSl|AP9C`m*X`DfveQcMv=N_tM|*V#(YFumJVktSsi> zd_}2B?}OFoyj!!CMlu7hwy)IQ9_styt#GI+Er?_DJf)@0;dpr*Iw}5ASSTbsAXlb7aTZe!PkX%|j;g?_|yRKT9)SF3>hwb;IiLpabwI+f3dRNc)-j>YM zfwu{>JYqO)DaA#9fpwm-_kP1{?563`K1j=_L&=Ua$_N+DDNSYT`w_QLbST`fQXQIQ zK1Ihs)t4>{Zc1eUzXMP&au=b_#})~|>u0_oA(?Z@fe*tA&M*XO7fOy@m^%;6vHbui z@)JUiR!>HAPGuG=u}RQOjLaQ4iI*)>+snqvYJ7LsTMTP=*n+Qm$C_ssm!#fDi}qy` zmRUg}aR^9x`7hd1jL-bGO8>l?yI+t1*mJhS0%I6>&@Z`;SfGbksx|=TbcJ=p+#?$k zFWVp?Bh@EV2kK0xvlblkw%}lWkha);3Mq582>iYy5y3pymn=5Bmh6>MCR$ssKQDH_ zm2Qg2`~ymQ#T%&>p2#(B`hs~1IH=bZhto-UV66uBs^O&De8)NSHbRINPbs1bUEDzV zN#4X$HVYTw>x}F7Lp~H06@_AZAff6F00t2DB;3M;8#i5EVb+KBwJ|E)G~s|jXj zv$X&xwWLj@s&+oJxgax%Tw-2VbO`h%f-d^xY6lAvXoG&hAr7WrslGF{QF=2lzo6l_ z4RS%dEt%B433UES_QG=nx!vFvWo-?aHai76>J`(~hMG>qKAfb(dwO;*2ER_)sr`g@ z8C!ksW=fN}CnvPUK)Nc6A~Q*Q6qMQw+sKw}d6c*IT&_jqhJh#0rNK=pWv>6*o%ByS z+HfB_ge*>&1L_H({rjiGgpY;6=lOF^ISm#2H~aiQ&h$vp2@oeA{%E>ltbG`{<4!MR z8q``r;z1{#^+>lZP$|d8=8<*42b&@Ucpkxn;%Qb|)M{J$O|(Lnt*Klt4u^ZAsa0t& zJX2J|o~+*1xcd7>Q}8SX=%)#73nH+R+Z_!VdMZ z{Wn;ulFj&ZrwN8Q8DYhV*S=8Tn^;_QbPxy;8uRyJKZQ4!;+kW7s>lF3NLrUD8Ucw6 z5O}G9rc48RH*WGQE}sdrytdXkx$y(!Hy>}cz_Ig;Ettgw-Q!fzugAWDxeLb zyJ)l=4PINh&VzQs8@vRDg;Q4lKR>}HFRb*#dRy8#qI%#GbjgL9fcoQA()9Id<4!Y_ zM~P3%L-r*{NVR&4yz2zJv59XK?W1WRCI4J$E_L-Q`?@5L=Pmd~$$bq!ZBLy=5Z^&R zZc;Cm)Rjr)UCE6S>O!E+77Y$VA*{1b?;QEBIo*Xh`9YVO9v9bftzyC4^WQ(I)F`|p zTCA^;51IjVKN>+t3JIr8e8XczGH0$pC`fdq5RLAW|$?#700TzOz$mL^b{0 z1W%#l6J~;TGhnh-W>nLShROjj7^;i`dI1R;@b!zgNR-F;nYfuAZDk1L8|k}%EcNFf zcR9&*N6o<8whuN1W0xELZQ0l52?#@eD}0JFrj zfc+*k8GdJS2{VA1Dx2sA2anmXRT~m>LptfU8WIU+#bq!1z^|@t-V18Y%M_~Ymks0e zq?f*Sp1bWWOc70yUC(F)fyy;uUX53*n2& z(G2}V1)?gs-ANKx!ma#t3p){n)~v|Kj21RtkC@g)I?kqM%K6RJZ?+(L1g++)fLp^% z@%?YpH1EydP?*oBj1x$pAi%!0kPXWCNiW?AYecfC`>$gUbJjsIziv+V0shZ8FY{9; zLem&G0GQQdE&=cQ#BBgtPKKg~xr1oNhYzFt(jyzq1<9~_2;CWSO5gHZc`H3OP`@|dC4X8a%@@gt7jDgT#T|sh=;@D5k;Bn$?{c(HOD7uq7Ef&yn;^a_#?H%%R z53G$&Gl%$0V*C@)Qzg5x6uw;|+HPA>b)CsapzV{7)KnUdIpZ(3j|uWk>!o>vYy0ST zsyUl_qjA5EEf3LL|Gm&rWWglBabjTi2-5+~zvIKzo4gCRpt~wq*5gPT;wQl*qCe&p zD1f~hl?2Rh#oH~k?7w_>>tN72ufBT_+;)1Iu*I;3M<3@M zyl8B7L%>{W zR8`Fkz>eXuvE*4WQHuY4{#$%&9=q?ycL4f}w5IM`CY;;yAL6_xq?asUvWol)IJFkv z%gQt2sEH$tx?S;d<~JwnghDu5XI3nDB|(#PdpDy~JKdwds7bV&L+-+JO`vL{Ro}2o zFTTC|-lBl|Z4?h`;Ly({d?n@f1cy+a>hYBIZbp&K#%$Lx`i_jFM~V2@ayjW6=iHMlxac{F zHLQ$JztQF;y}!<-?vzk5HSlb55IN`Kq<9v~^up96?5yA<&8gGR%Y*d}o3!Dv>6Em4 z=f7{gf8m-i668zDb7N(T`O=m}{ICStkZbVDGrwMbP@4|*uD@5#qYQSJ7(X+0-t?YU z*SyB#7YMmx*J_~@+&|x;m~d9Vc5Uau`+K!Qdnx#!Wt-I&Abx)K!0+eA!CUg@`Pqw# zTT1h@&J=tAiR4b2((y*;ZU?N(jGz@Cq9RBEj~m>Ark6=&Lu}TUg<|*9(b6_e&Z*iJ zeMe)O$xkqd2E9K*8P$vT$r_fhG}4FAzkIX}<_ z&hg2m-g){53^y_qwrlM)4TqAJYlb!GSj|!0QY!S8gm&PKlP&8o*Tsp`E40A-`1^`G z5q&8?j4yO#^8@;SEBPGfYWc^-;ygek4;5&-!TbV@Ki*R2|D`2N6G$`dfwCGivyf}_ zN8Y2^YsS5`E%laq4W3Mr>5ES-Zd3hsqKsJ6;h0CJtH^)yEOcER6XN7Z&WA;6f6N+y z_;EGRR%V$@a$G^)wd*7BjGqbA-aFrL{6Ds>E`o(2 ztOWR#fe?t4C$G_d>D)?=9n7hkiIUTf8zaGgve6P|uURv9qVWENxq*2Imzo)q`upV+ zPCQU3jk3VDGfiYQ@oelu^iwkC{`?2?97-c$!Op)VgQ2wG~PSjoki6lHoJzS#C~;U~8m)cuKKG+tMg z1{~z_hS4bDIxx)=uB<}E?FQYVikr(UFf9gkCxJ=x$+)DbUxVo<%kfmLT(aQ?9^sjsj9`9T$r7yz68)3n1i(Lwa&c5VJ%rM-W~ zqh@gdBO8G=&=oIU*jRVV;c_>s4{zre@(0MJjBZpcW6cxvBtIh6s8V|VY7jN5=kVeE zE9vm@1}2u3-yFwvQJ0zwI%48%p_H#13XfX?hG&c7H6}?D8RUuLE!gZqn=;MiYpn;f zsr8r!ajlH6D!#L=8_;A&r{r0EQRLAK=zFGSDL$S!jYj%wt_KUV`R^my?Y37JZ0CQ? z9=z6Otd+Q2YgWA5s5Zcs^1=N-01|2D{z^i2k68P$BA@i7W6!?q^pz2PTq-O|3vFU# z$p3rf)?Zsakx2v|cr99W$e{W;H_{I~6uxdcru_l%W)Q22r`=W4B3$-#h;Xxz z?ITR{7@xzU4b!Eu^;y8>XdSjKHKuSD!+98Ux3NOv{O$E*u+99Wk-uJYG5%)N_SN@2%?^%F;uGUEpnZ;oN zn+p!uTZ(7DIm68C@TiP@erl z_})mLkk)yJys3>z15$T`JCfowhT4-q21dm-8T6$C#u9v!WN)BS*_X83oCC)0t^F&) zuea}SAY6>~sGra!FBCsC<_wE#Z1%{6%EdimI}O2yY`YzlmBa`{(}!e%iO7(J z>(_Bsp4apS4z(XEO-)P2X6i53@vR$8e1t%lLwLQsA-vMGQ3Njh@;H*X z%86so*g^;jo((;BEE0oAO%&7UfR4r}&kP5OvB&?YVb*})FBeKp zLG@-T&^*cn`W&xmwhVj0xob1>Tpv(>C?Jat%&D0!K2EPK(P`cQWjbhg8mKu}UN0Hlj5VA5{BCz$y%vuwHKztemD#i-If& zO}vT=P}$|1-fM$al$P zB&1Q$Q#s?`1$ZG5Q4YB*@=(5_Ue?=P{}f3>yu?00FAfNtwJO4K2X;&ZJ=FA9d&~mC!lEL;c6-A)5sBX#klI7C z+d8WA3&Hl3YxUAR=^g{s^~)Ga@QJ9Z-!`m_T`D8x>lirUOjXwykL_aqP z$w>n;z;jfqpu$Ae15;|zv9CCRgpr9pZA?f9p`dW{=R(f5)@Y-!OFf`!e^N84<<~WR}<1N8r)ddnKhcXrPXZJ zA*UVB57^gX4Ku!<~$sM*>39V|hAeWqbzu z`ZU4p`(^s*w^uy9yyhM<4g1;l=Tiv8N2aqMd%l7Q)Duxb!ZdR}5nVi125Mc$oW%Tf z2@S6GJutybxG?IMfC3e~rKRP3#E7Or*+jWstk4M`a*pz^=6=Y}&1||dok#ZzxR>^{ zmXS#03u-U%pgKQz$;XPpo(oYPgvw)0!6j<&aTL=vY^>*{#?&**u1Frb7OeIuS~(z zb=COB-jXrBbg5L#ic>cv$cZca%T@~yjiF(##vC6fJ#j9;0OV`9gqR4|MOOn`t;GOowsoSsYj@eYgH4idP zC?C*bZwFRXM)~zal4Zng1yOqG#+{1QD5?>$T!?dibhoQYM7^P3MwY zK4L~^NQ};L^<@q#Q2+A+LHC!j(AA+M-q zR{Q&n)*6n*I&i$>KUnIDSKQ}2RKH4Yuy{3qxN=YILa4e8phlsqsABG-A;)TGipUfY z(r#vFfVZt~yNy45=-J9Ap!%Pnb4X;}0OEH$WM;#O7Hr{n{L3-Zou~?bfJ>nv-|O22 z*ZOa|jJZ}^U3%p_R!2En-}{3PR!$&%S%_WaUHtJf*7)-sJ6WEvJ38au zDi_o>HGcq-C9)JTf_7RZzbiwUP@z$*X6La&u3xI}V0IZseQ!}$DRbKvW06U>iZ*;} z-KgJZIyUxtx51H>DoGN7xvlR6e>sYMyl(gG>5+zmfR9vZl`MB=(lUST8=y53dl0r* zeuugW7!`4~<}5Jq^SmARq$Al?{1_5>^CvY_NKS;eFS4vT?o^DCWQV*(4#ZkPpU@Y;AK!JqoH zbnyBbv&TbrrdmW3{93bl^og%m8erG@s2 zxpdMVm^1gsu(B0dJ7`t{a0i|~P@`SH#7lR&)}M6n-CH$n3pscypbjOQnK>@YR?9uk zP+)c0gT*uZX=88npuH_On-7p)fh+Iz+MjJ?l)s0j?+j1stK)W3%g?{tpABvlYkCRT`--*zHQY0_uJv`nj{Yw?pe(rwj9T4Wa_)UWAas{u|Q3OPWdAy z=j3+g!|)kQk+#2*vtIes2K$$AH%WH$WJ>;^jAvlAF5lzuGSd=G(4vDUEoL57U+cU5 z(1ZK}=xi#Qs0A4shb^^stXrg~e8`!u7~5M^5#J7C+|xJv;Ec0l7Cz1Zpbef2H*O#urOb$tVNgbdZ z5|%$HSuAq)hUZX?)}Lr*OaTV0gqleO3BhR@8L&)bg^lboD1icDvW@?hKEQS7Qs&9_ zbtt`~MPnQgyg>5(sl>X@ZEMe!p+QcJLo0 zF2p9;n1w8EAo3H)IO4Z zGnGe}b+6or&mcK0G?d~aGFHsye(!btFm|2^I5<9X8|0@kaq*-bsxdp!G+ok@@v3d%8g$GWo{AS;ni6b;o&OfPxJE=-S0EW^)^A$mf$T zLOepD6lDJrzr0qqmGZgPlSvwgRqxAU6~MQig2-q|xx396x(ICvNuHVEoM@z-WtXY~ zSI51(nwNeZaNeL5Tk|cZp%d?CafphR--2`K&y<&loNMKKl=xDCP7LJr+I4H7t_i&g3i4aPCtkbpSpx0E#j*{WcsUMP?%G#7wIOH}mFM8CXzofR&6w7! z^z?My7`6o>K%^>(0?`rQTeRel_hPXMabtiag8U2J{Q*cszKi^^2hv%pWwcEsdHDeH z?if~J4h$0Z2J{f&cQNwzAhchD?s>^55TmK&6|5nSUg88smDZ?!XK<9#O+dbeDCgGL z1AnSvpC9drci002=M#Y@CKVxdL>#b3T%a7n+zLQV9&%Z?-N zU`n4lJ0lKcFrqh(0n z_Qn8#h35Lr3ghZ!oCupk`2x$+*xfJlkh)TecpH1_-un7_iP@GS##fe&P1vh3gm%>t zgRYIi_1OwU4Pmy=xpWhO%@YDOS*{&Cto%E&xi&3%>1$G_+*a^18ciW&#A?RghK%k) zs74o$RI7$(KL|}e;?lNIbL6R~%{tp4Pq66tp4ZrqW4z=tGd*oy-&^?S(F3RC9_J}z ztvBr~Sl+9@-kNf;Fw}Pt)TNBBm3?R!UpREti3+H;in!i<0DUdpN$i&5DfL`Se$gGt zqvG(ysalcmEk(EiqKtF9PYH83F$Kg|ly$qQ)}6{Ry#v3scP8T?%+X@$>wS;{#d9*^ zP*W@8mO;^FTQK}f_?z(q+l`}Rf+R8~te(o5U^{S=OE#~mxJkCUWR_^rQrh;PsrX}u z5TUO3y&j2_x>t&_>jnawmjn@hF=(bG z=Z%2CyscCpzd)Qx&t}s~qmV{0Cvnzk$cA&x^-%RXMDTKkUD%!f;yvHc*!*r=$Ks=v z%2r&9QN_;f?d{rZTR5h{1PWI3dR#(R`_|A9I?-8s*}nA>cUS1NBB+~(P z?AQ9wuA>i7yPBG8*$)b+va?qDAr!lrnm_K0FU_C={_C_sIC7wh07F{OQJ>_emVisM zsNbWj6NF`cJ+-p#Qr*B#FkA?=ZYGwx(PlDds!2!w%~UOh8?dR|=pY;ek)$WhS|Qv@ z^vRDhDi9Vp0ZYWdWEf>&zbG;PlKG34?x$UR$A1MVNyN6&oZ%bGk(P95C!a7$~iXI(dT_;_w5qyZ~Esm)epa&`Z9 znKgqaC=}vkSDWoQ!6AD?pMon4Yon);Wq;<_tp0Abe zk&@VLIijz+LJV<6+DDC>wa_-{*Ae2J-^=V;_$+VXlap@P7r>hgnidnWMecv*>Cpk{3 zzH;05h}BWkK67J7cv9q2bTT`z7#w7T-M}H&$^?4GP7VzU5qcaXkCg zsr@y2c1N%`McF6q@glv}n{;)*cO?Ch!0(|rC7@Yg>#aDawvOfO_X)^akqy32u_|5= z=TFNwX^dHxHI-Qpp*|{kWzelbOZ(#Hvj@|0P0;Igt>^o0&V{BwNnHYWNOa!V`pMh& zh_2F&Bz`CpV6=YIIK#N~3z-%l8u&nH6}b}jbG^=ur21lJHlIj~jvf01z|+sk2l1a2 zSj~2Mt~_5iwX3}qKjg5j%+sXqinZYPoJp(r*cJ z(z^z5;|utwjmaI`sta*rdgg2q?mv5R`d7UGHhXsmp4vY8fFN?Zv7Gb z*qaGc?nbF@0H{!wYH7LJlbl06iEzC*_I>(|3Ruvz6?xp!*eCASh8J29Duo&T_! zsj6ZeS1Pa6ODP5)AP6P`TD?@Zw8FM)T zC^gpa9pYd2d~JGP3QN93f*cnXv3|l!5ofolA#d8-hfz2Y0dP@6~5Zcw{jp*-`xR%&XonbLHa@v2TYg?0B}wrLw{* zY0OOg%&`|?tD83(miJ4qE`8*WS@~Al_E%?8}`1f zW8>9Q+msBuTQtzV%9T@XV{J`8<9XNSY~6&L(@6sX+M-Vw+J0DVu1@Tb$yv{ri^(B; z#w2^cwhs#7XI69a4o&@ixo6&JmegP6(itIr{>q7O#n)abrPxpM?>1+t(D~OHcz+B*2$7@6H89gfJHa zjU@riO>STPt?r?f7b#@sx4i;DZakhMA? zY4I(KDjVtc;`1HtCnh6k@Ngl%JF6L?j+^;Z&)2WNH;#ts>krtoAVy%~Yk9n+|-(CuP zrTvX3Cx0I9%6ZD=PIVS1`sv1piT|m0Pm#5iRT!s**!8XO;)goaa)uAfSY_M7o4*1D1O=}@ z?UVb(KkrCOxe82A&b`h+dar34d_!|BPYu8l+icMOg*6K&p?%GSsT>9GBXvbmUsPn5T-K$4R?{dyO{0Eadll<2Xf4-k3Qy556HfTdTh(kQcpnQu}==@U3YOJcQ;lQWO!tO=G?Jg zPk?1%(oO%t{%AW;wU>DKB0&_zNlgiD6DPj_-xLiE)P+E_VQhRm{B{X4Gur*~#yemX9}A zk;7qxfP48?U#aXsE#35LboYBKrA5Wh8jLS+FY`&O!Rdo&v5IEZ_TaallS;v@GJ*|( z^roL=JKaXBjiVT&?1D-fAXjiYS_UYdW7>_(07JGUF{?!jXU3HpOb7umKRV^#->uB71)8U7Rcbf4 zd;8<~C;GMfC+)t7=xA5RjVn|X4$_dLPs$e{l@^5d1#Lcii`MJCIhJH{21&X)yA)HK$xuQc9Khw&luHsoLjn)CuR0{khU4$p$I;L;}Ol<^V;N zP@>vb7#1^|pK@xlNoCZ_lQT7%&&t40m{Kiq=R)@8%c*+yY8mqUre$eeyAzF zy|Q@tm5n`x&E7CdH;a97@en6WuQZkGB;RFqMdiwsS4&BY22e}k`PZZQkWe?1mH+7d zXLh4qf6bLguv+&6&*OEvJ9)af6KpqAR=?kSqqaHF0OSsvnxl{DEhx3#Un+7SD@_4j zyVgJ)N7R}J1LJr3fUPL~DBRWUteNKQcW*v%43<%p`wVipbVfN5SRl{px0+DQ*^CHH zIhCp&Gl8CJ4r}1jh+_?u&T1zS7Lu{(5BXrc;}Y!kIXrR^zp|2x3633l5i3)LO~I}0~C#T>~|6zGG{VpP~2TFIs%v?^O7vPc6A2N^4iOVsTJ z0{@St^Ny$b|KI;P){)&rb}FMdB6}wkWeeGvMTqQijHGvVRv3K8i>mAFvI~t%$gj8HJz}SvYl~7!AY~e^!^P3MEsHqS zD-6o#5M`_w8bt5pN;#(!+D~Myl7mK?ys-x-Er5JXePoHYb6N0Z@nIL*0q_%#o6{_| zDOWx>fL{Z6O7Kmk!R1f35MgJzOm0I$;6~}$4w#u7g0>k`Z~HFpt^nYaKF(IP>n`VUO=GZ)Vrm&x{hjqV27nrs}SNc&8Nb}-Hv#Piifnn=BeLDJdP zmbgq(v~4bR*szFQnw;avD~@_ym!@I%Inc^kmL( zdzcTE$=6kH2*Rob(yFJJbB*)KGWmYksY2sUz;R>f!{?9Z5&(EI{+2?AQOUz)&E@FR zq%WX?rbKb~b5IcgTfUPkaey+c#xp_Hu_WSnxCL3&PbZ!6j1lb-B1yzW=E;nk?ZPIshpI)4O*Uw() z`a#U29vu5epEq(YQv>uXj6Md-p=V*9LWBG|Gu4RvL*IY^b|F2cvUQ+WTBm#AqE9#uc(Nnq1|i zZDf&nnH@GnSDXBN_-Y1_W!zCkVZd@trHG3^pH(KVOYNt^CSIMb$q$m6Pw-(5wW|Xr z(H4QF{zuWmvSwrb*|HrLH8phtglX1F%ySIHoLP6Fl%iWo6GOYc6HZ~K#d$;t1!ZY}c*Pnd6`-B! z$bV1QO1Ozs6JIq+$OJW`#5*km9?;SK+CLYOU88j;oHheu#N)~K*3o#5;_W(3GwG%z zkxO-35aJ3FIw9H%L;fhT%10Ky(>lx(*&wHVWUPE=W`XQOJay0Pj?e3>Q?TbOijh-q z*{=)x>*RCswcO=l%Zr~TicuC%(q*>&Cp?a7Em%6%2(WV%`&RCYm7?HVLK@tt8Kc5hJnvP=%#4u;$gA5V`@ zdJlA?_X{1-@g>L7Jx@NT*QURxe_F!$7ZJg%TaDH^FTUygIai7RV)j9q$=fkoJxg=b z&NAq|b7#5sMgcW>8L-wBCsyn!5qSr{qT$5{O^4Br?CxIUo7ES3K1NuCn&*7mV;aO) zO(9xL?+3|gjfna<`kiG5yjSr;!DBiZuaCmQcdps1X;R4IS7lQZ`(cdw`vZ#u%gS*bqjfv3!hcu$odXtgVKHGEy$~xpduS{QoB9c0pDf5D zq@XMze-RFmouc?qHNF0_a;RcvEEaEfW5>8l@PM7xHQ8wCiI=OEDB&8iXN!aIho_Bc z?|5_X=oAtSKB7Q8OUjX4JIs7#kPX#g?-0%%qKuHO>4&^J9>sRy14&J ziC&-TeZ&Cqvvg_IqcR0@u7)(lGcrMvQs`je2FLfaUPe&0@~w{1>&lQZ+$!_(NX4y& zp8U^6OfLL;TazLeQ4sMtKanqtGj_i3-d(m2g!{F9KVaGo-AO;fd3t#nN{A{1K3adP zLANgvDiRId-1mdE<=UvEGQYCTdibbxURzRDR@S|=?^1PCWxY{NJ^z;==$=!_{0iaq zN7%T=BRVE8`f+;EZ?v25r%Oz{_d8Lqe74y!Wn3!$q@B+e_%)hP0BtmC8pq6io3+ z8yq^G^E0m7{=m89`PuFfwDSTMmsS|=#vuvMX1Uo+dgwYS)* z{erKQ+XC-}(<~RU#YVC=?X9plsfmx9*cq)P67tcM`%SW@pe{_hclwx_^9pk@dL0Zd zz|MI)EhFhr;l%^F-%>+(lWkpR#G(hNTOu7<^Z?|LwNnmOwG%j^(zdo`uBZKlNZV`8feBZ8c^rcq#EP+^& zb=hdX0?BC=C*Ni3WtTN+eDT5+^`w!K#O1j-i?apgn|lvbn2dp2wBaKO#=vJ>Jp1&O z%=S?YnPvS|6%{+t%DnV1Y4<3)P}#icpEV*|3ce^vqYYziyINr{#I^>77@pKlM~Yqj z5v-9rOnJxfA{c@qeIQ1Db7XH{Lho`A0uEKHrLM&{iE4wyrbE1B$8VA_D$M5!q4dU z+g!V`t!ifDl7ydrw%ibG(B1}4%R;$}kL8XTt-uPYTffF_xk7F@OW4`nVf|&UrwnDynzIx_|Y(1(VyRVGj}Dc)12HT-R6)R#y0_Pam2Atb4*Sc z=@;Nm1ud3;C;jS3Uh<|aG{ZK(Jh0NEbMcM-CsIUY+Kq8YO1CaN zc1!*s^iV|lKj6U6=~=vZRKPtWJvj-5Ymt3dMUj|&nkhBLHb;{roC*S zB4Tm3tJ3^E+q$o}|1Qo3!EpAF?u#z7AST*&&}(~lQji*kfY%HwnDTGWQIqAFqtE{) zwH#d6FbAIG7H!D(^to*1eUb6}V}ik;!t;bDISg-(f`0zVVw-9Kc8{!`qFXd z%yC^Bvd1Yy%gjbsJ7~Z5qpsM8?O3*5TO&;-qk0&kOd1j@ZdS50zvrVt4MI%fdg5bP1&w-FKibQsQ`GrE8cZVk}sD0ERX9 z2%Wy%CY$}D+;UaihaHu#&@~y{^1aaeD&va)e(jd|@vtlJ7OF!8fzkA0q zq+$V+yzRiTd)ZzfE(u&=+xTEkkF+FtQ_P*h0tHyE0G&tTIji2n@v8wD35kha=QQIn zd&Ao4@*V#j-}(1U!duWQuh2raYj)&7zgic=(Gxq^$;|fi#g1OM6SO^hEdEOsH2z5h zv`&o368m9mk+~OZdXpCpU`>_jc-KtL%^6R=kXXNcc=LZW7tqDmwOl(2!VJb>K{~x1 z8rSYoXlhL4%Dga^IMPfQyb<@trT{PvEU>QuN3Xa9G|jd?`63XM{b!pdUVGN*=u~*f zKlACg7+*B$_?1E#dWsN?78s;%2c;T0m&yKF)RG>WhD|cJiGIm<)a+$htc0fpyucffKRgMQKXRVZyjV2D2^-EI5ZuGG^hfk)gHww^(z0jJyA=UgNZo^4 z8D~%qCz6=7=VdZY&;{+TsmpquS+#Pg`W55b3{3j?FQt7AvuuGF3nAV$#z7n6lc7^@ z)?WG4^Ltvn=rB%3JJ!eexWibI^Tl_SrswOL2&s*X)ulqEe)+@3bB*oXW4Ztt+|<#9 zF?yu*?LUHGe~jGkxof5sB=>z!?x<9?D!9w_Z0wv84Ba1j4RPvN)sQ+3#@`(YTcm*e zsP%&WCo`Z_#mJ-Nrvw!f8EpUliaVg(@Iz!0l-Q&U;py!qq2$Q5-OJ{*Gozxt<^1V@ zo2n#GjtNF{Z7?Jjm$G+w{Qk$WGTqG#@zWA5kc!XyU| zSB8{?o|JZ35ptF+xT!bW8fFaAMeW=D);$`ZT3yGs^L(d~`Mo*5$+5%L+X-l7z`#sp zfG8Pv=n<$rb&UJ$Y+GX}c;9m=eHr5U$g0VVsAmSAXRe8!GfwQlFyelXZR10e{%_hX zLPVL7*Cy@&>s~ZGyLJYy#=J_T+p>X@>9t@6a~j9sg~?@nSnwAKWY2(A&s!mmFAdsB$51jSjl;; zO$;20&xOXwdZ$0T%jNQmC)STC_?~OCf4B{F`8{aDI^x*Ub0%uRXcW!YBD>Zr*~w32=)yN4(Q)`=X|-Y;SPwrg8LgmqKA zx?l2Z>t^I(xGkrPZLnOgTMdh$SyeHvU5(x!h?|GXX)P%!)!l&6 zA^}wkBIKZ9*`#NNYX9Qxyf|3sU9{X=dR8*d3N#WX>8k$3k@|7uo@}vxee3j#mjyA2 z1MY+>a0hraXrzw&S3n#zAAqdB+x(AH`jw3M*&1>rz&K~%D?(;9J@UsQ<`~RAVTJqg zV%;>c2~biNo?u{5&R@(VQ>Z|{PHIt-SE@-oX8Sh)v=P0MKOG{Qc8Th+((kvEYs;V@$2pEB&UsZVx<|PVfv$F!qWdwJuN`)5W@2KPXroAXa4p!ub%=h) z=NA1Sk23wSwbH-X(O}71KL^J{Uk{PAWSe?mBxIDh^m-a+7AU3Yq$L+zc$b-zSCoz^ zU13V!TN{-%>3GBR?ds6*&CVx;275a(l;8ct(8HhD!rUZ2Z`)itsZYa~hUl;zEEMC0 zKbLYG<>J|UWDoQQeG`*|;C;oc5{n?;*TFc3;2$ud{v*YK0|dYB-#>Vb!S%{Q;r8I7 zu65u1_70Zo`j`z+zYv49 zleCiq-ahi0Adb@1>5eTUGM(M+5xb)vp&eNLU+*G6K35?Ge5NBvXA$qP{cq|kULb9@ zHKuQ1bBq#UMPzh>l$j+ao6#A0Lz<@|G4PV1G$We#`9ahj(ZdcHBRY~y zKaE=ZPZ?1dp%rb?n2p_BC$ttZ5n1Y5xHI44r5HLJgs>Iht>_E?Y_6vKq(1u`25Qb{REZ?d_hFN(g&$Gu83_O(ti*G}gbil82wt5HghCKm2xP zS!9HGZS7Xhx1H-gUcNTi34ACMLd?8s(BP_%&$J_$W6Eeg(NUWQ85FFwGDynE&;*g~ zdINj>J?ufV6!IB8<;*$iD^!62-Gi}-F&0A$byD3hr0DI)DBo+fUxiA_hl_8I_>FkO zSt#cr$XyXYX{ZXw3kd2Ng|}slIL$q^tI*`W~d|Dakc$3%0u68 z#l0W(8Hg&{X%EoUl7pwe4gXom=^SvvVpeHM_G|}0u3~KS_)WCI^t&?6aY^Sjp_k2l zY(9yRz0>_Lt1E%*EHr*BJ#U)b6slg7_xoOkSOvnH%nxG#7P>;B`bI06CUG=58u%5! z#~5M{RnVEl*?UgKwy3HVkW?fVi}%6@Sg_ZT^kGWiULUZI(_G(^of$Nklq#%7V;=9z zQLdK0!2=h|+Ees^r9n;yHA-eM{MC();LuV+%I%JTo+q zX>GfZScb^lqV~yFBhJ56qxkh05s3IQ_lTI!ikf_0>^2cl=f)N!T7->nX>i7O9(Zgn z+Ujm_VS_NVOH|m8lEowqCZ*%rxKkxLmj>qX2;h))fIPA`%Na|7DfIYR%DKG=-{7iz zzH)1DKNk9vKr-!s_PstB3&my9%iudbeA8DGMJq7J7?Bfd_Ce0lxk<+tbsv+bEgfU- zjUgmr7WTQxpIM&;mfy_ekq80aenWZRu(sXkLC_gkd84^-O|*y0b*WbI8f)H-iXFD{ zV?URGjMc(L=Wq24ILnk@NiY01%$^O8!yP)CS~o$JQFCE=dE?Fl38L``qNjE!Vq3P9 z&qvJw%Kmk7t124_&MI=-0@8@9Uiy!Kp7bLg^Xp108I#L|p9E`YzwkUt^Hs=Se zD~9J(UZLcaH@!}*uhNfq&o{2MTMPg9VLbeeoIkEgi@P23()LD4=X??QkCJtF9-rr| z0jmyQuDM^=7E|e4-Vq{BNMd;Fe$sg#jKqBS0s@IOAg~nLvbGXM;L1a38>G#RzHy^J z2GW^J4T{@3eE0m7E(MY4cfu)X;{JR$@|{ar==y_T{%hhwe1_?gK3hZBrGV;}lORnn zZsse{EsXkecL1KPm(&Lz|FXZXoW9Dn&^tj5iOv7sNfAY2-#TO|b15fm@8?Ndt|MeZ zsjoTty4JCCrQBBpTGUX+SuJ`QvQHz4IZXL(a0j+^JFyRL^}*!@6^pUWrqXh{2u0Jd z;9&cl#kDsKi(s9;)J3(Sd@pHQbE=|Mr?zSuRR^)%!3G(Du!7*Y=p zD1sZ(%k}Rb+hBXn7oW+a)y-=N!wM1%b*I;e?ey|RIYhutd;hlwWv9Pc3!(y_P%1(_ zV$-mgvkNh|_v(o-n3#cee|{EVk|21S2-1k`XT*7&YQKyL2!DHf8%ZJc&qLf$n}6GH zYh8p8OkAvi(F?qitVvyY_H_)1djeNtLio=@(_RVM0eCX-YTokC5nVgZ2Q?Vssslw{ z)Q^%`Iqkc!Jx3i%a%I&)bL6@7H7rT5%L!KaFBL>RWLf1OAJz;$j0od>`T*O z>!dIH3redmy6>ITz$zRU{7P_?0`kZX>r zyb$hef)dXIG00ScshnqZ`rp6c=4^ZWi?XWMy@JU6afM0+G&ZT+Y?S%Zq8fu$S!MYUc)FR= z7`=2X>xtJB1_h9Ck}UGBG*$VMtPCI(+rpC1x08D9(&s3(;x*47zzEU4);H1%5o zDJ%*4sv^KvJ`~SR_|y8txoJ>d=I#Ng(C%!-b-Q^me_}iGPsr#DdLPZsia2Cx9`Q?j zH(<1?1lie9gOdxc`9}ks)Xo^GGr>3{AxUb=Chbs|WJ3;gzPCdC{sr*FFW5CY*ndiv zIuY*hr8&4;S0rzy^7wQ5u`cNY8*CY~XSPtlxwTIwIl&c@qs6iCI9)HW&KVv2MAl~i z2mZPL4ZOfeiPqc`x+)}V`RJYlSJ2u!-aI|JyvWL}OB&v)8bKL}Jv5W5Yc z5&4p<_WS`G9a>@r`KLN^d(xMe_1Q;~iBAZXUWC)zm*-YbS5FVUvJQ0iOEYp#(iV`% zzRVnk|3n<>usiF>isRfdXHy@uz#7MlyuWZ9@@OCp;c$B$ltP2|+z;(_E*q&0-ATW< z945tGJ8jZB6~BmR=B{bTsZY{>da6Y4b32Gwm6GkZ{m<*(!i!M&=p-UJ%*E-HkL3D| z)wzF)#J!!*t?fRNcZdx)4iqV#Cj{^f15`E~O{^KGYwJ2(dnXhesnYM!R7_Y*iGDB3 zE4xfu8ydG*OeB#HA>8YipBw7)ut_Fh-|WwK#e@Fx=HH9U3aW3|ys!h4h4zeFGzLVQ zr#|_ob%l5Xu~jwoxgNigigEKXT~(*iQY{91(2cNo=wemLGFxrZyr@WvMI0~90s?1<+mv6!8AsNcWE%i-&x zZqKIS$V4}7y)bDAM{3oA=PU*+65X;se-)zsPPpiL+jXvv$d;TqkXUZ-A;DDLsT7Er z^V5FPiJ7``UoGlm>k|tLp31bg7w-+<=2nYk79QVmpq1Zv0`^DlzO%fC5vQMN6NjBp zj8%)0OW$;U<_>8n?fYR;p879L+Si6cX2gyAp8Tt4`@1_RuMvjT zStu{Lt~Jo(b6vSbsjRhlzQ2gHV1jyISkkwD0EOJO#(|b*qS*q}*@9X9mc03qZI2L| z3U)i52nRLY3le6eN_mTvv~+ldO2LYfW}G%vSOjaTls66zu@b#`v^JFeXq)HgSPC@S z=&Ho8=04F}z60;=l*4JBiQkN*IwxIu1bFG>!WWA=;1GnA+TebxU*@2pXmp=+G|X*m zG?1&N|Lzxd7@ibcUP@5XBI9vjFDuVAAK~i|?Xkh}7ZV4a3~ESypO1U15ksHFJI&c* z-tiC>^y_vV^ z<-;J|6Sq-37LZmIZfb?3#_}cd#>eV?I*SVRmwRLmM9_d-dr|cQdiRogY!v@hlac$7 z7<{c@?X|76&=es8zo^5BH|x202a|=QP0`I={pp}|7){q5r?1lRPYdLN*Un2hLl%_2 zF$W3qqzh2ue-cNRVP>|9*PJkMnV7&NGLt4=^*1g)_>3@H$`wYOb)#|~z6U#tj~Kcw zCibY@Wb0pvN?Bm3_^bKWKmWkB@kQhHw7Omh?;O-fO@pPy@!mK0123w;q+RYhRXp!FE)4KRLdD zxvh&*W zlf4zzLV-g=x3~8S53Aov=<0bvV7UFrVqkL)WJBhg0kaW^ zsW~&10Ua_6&3WE0IEDUkl#2Ut%-OUQ8L-4JdlXtF4kBWk91p40rWgjz1e3rUIfOO7 zZ^uifFQcF8A*=sJQuMv17H_Pey*VKEVDVi^M=8pD`dA?$7J3%dJV@M)ZE&u`&1!*uZ??m?yG z?0$G4wAC)cV6HHSYyOYGe&;CBCV6-+n%Ou+ z_MHaRWfisr%krQB!~4L*q|HXNLi=gAD834@c{ugIMfGbtqrHBQZ4UFS8WX__OTLBf z8i+vC8q6g`CavcSlgKhz6^(G|vNsReSJl6I@;w2h$mYp3I%7BHCbKJDJ`cF3*?0OK zX&?dEmGV^?E66e5N+t0+aM6kRCLXW@*2mPFi=gf<^K=~0*gY`niEm3h{-!+SR1&h- z{HrAWxHeb{j9*^>IK2e8sR`VHp#Im0&@i`;f_*#+)KwFn_XmUyPa zJKgTSzJvaq=YOCY5`FiJ05twJ`27U}A6b8_90SzBl+{TT)*lC(MV%c;nTJhFy(siK zxS*a~O&^DK=yk|PTo0n%QXRa5nw+qc1Kb73KWkaCtrY*&B(^30F;xH<1B=E-HJ6DmaI%1?u07HxW+P_f3i17TNKN;ZsgG4N;Udm*p`p3g-XEwt>@emq zBThVRO`WHj_g|&mJ`l=#Ml3f2TWagynL8~3M-FYe__MYFBJ!%!s zNlnLlTyMHC6KJhg&WY+rNAgJSd0 zN7D~vogXn+Dm@%^2(uR=-L&s+o}{yhA3mHIT)cXlmqp~>{Tn|!6$Ib>;FTpuVLP${ zErAr0VL@{6L^u8NyvjGr^i^^_T^aCT@bdJs>HO8jlgdgE!4G?xJHiX+Hy}SA$X3#l zoB*xhaVhBE+bl(zDg3u`y#Ms7G%+R=sGM3QTAp$jUn3T4HGqpRCl~d1qc9M0k=PGw zCyD6+nceVk>f>hjz=8KoLOu_WGBy6tmVzluG$*3hN+g_6LoeIQ{e8@YU7G^aA@y8) z^TC`wj1d24?(J#CfY-ZwK@|67y-T=ZG@tVMa`o|x&m)84bn=_^H$BZ;fVq-9trt}c zu3|^$r`Wt`HTqmuDddysmght#C#Nk?(Ge=Se&`ds^Vwcq31*EsxgBM?lT zVD<1`iBiMCMf@Qw!i&}R!LA;#f`L`w54-UqGU4mQ{+jnH zn0$DYThFMZSBzN_$W}MQO6W!It;xr~u1ly9W z?d0sgF+E(xGN&(zm$^LcEQ09wt{o%tbAVGILTT3&`sANejmDk@Pksy&Sxg7algdG|k6?AXEFj>cL>=Q#$lEAB@2E`tUprIJ_>lvei}j z-XDhgc;aR_Oj43xj)Ng%`-ES7h1`xYeyH$U^oS=2u1>6sT7umOh%Mh+i24dAcHNbb zmZshY=A2)vBNAZwjGtMI-pAKqwZjnUCF;s$#|fm){z-?`{eD~Ah_ijoIk3QOOK?1w z9r4+}X$?-D0Z@i?O~Xv$q|bg|e{nDXc&i3E{#||3d;Mt!lA7&ztLLb^`#1}YSS8aY zj3@I#&Bg66nT&H`NshA&wpF{4;2(#b>u7V;?E+`YeuX)0LMS| z?qS$j4#eN*_zqLFM_$iCNfPG$Jqi2p)3(IIg+oyjbvIxj5qlc|hX`N$)K7|AJN~R7 z$c_moiOEWfYHw^DBW2JdaG6T&N;nv1*FR4I^Kc9K?hvn#Le8~J`pfMgD7(=e^D%6y z{(>>JW$V;4Du!!9Lp6(E6hiD@kTZ}eck*f5rsx^{_{g`*jVfmlRcROlEl71F!0c~x zg9LvOkt&T(U?92=q z!y}8KGW51bcFz$$3jwjadYqBVLH_#VXA zL6_9U9p!#)o?i6fpqI=A-U!4RHO+uQJNw%TI3F%D%{;Nd=TSsIlOO4$MS)XRX$Lh= z*-9T9Tz7^50m}RR)jy!mf@gkw+{(Dr;Nk&26496*_b;1uYD{)X2ghu@kW9e2#2c6- zWFpnm)C`P7;O+4wy;;wm;@@BQ^>rk`RZLvWc6?_snkKY`IQrZ?F!W5o9I@Wx9%DlY zaE#AarLEH12m|pn`XKWa*EzsWeRUx6$&RROvV&k4AU=XCYF=4C;HCI%3S3w(zp`RH z!G{`hu?}CpHF0}JzNv9;hw&t}f~e!VGl?k5Xm%j;MzrGsWsS%kJ)8%`C^sb2X5b@Hi4(T7l+p=uK{zsW+5i6Jg1 z>9Rc&4MnUoFd#m9N!;5jPZ5n6_9ZLZGb8_IV@Bg9H-KWtU%7ywF0?*(dU z1OIiv5GKW8e>@+?@e(;lU(3MTPil2Ff=&`>+RP0ojTD`DedVg{r6WW^EDu#@|I2_ylU~l)M?# z9Dv7>|8x%*_E2u^X>@wG>{4(f71`gW!z{m&Z_)AR`2-NLZDCxY0^}(H4U@7O34xpb za-iG_I$&sa7mPwdB>DL*K7f}7wm@h**5)&fr_@T|x4{*`qTYux|aTdbK zk3|c?I;JQb`jd)Nr)qls+QB0Zs2=D-7OpZ8+y>6}th+T)1W??0;f(ovY-CoZ3M?)k z0$w#AoZ%@U$spHu$@+U1+g2_={v6mxq(S>~mwIC}w3?jv<`@Ccd4+KQXH^PUaL$En z1gH@OlGMT1Sq->gt8S9g5iY#FVWeTSl=rjIrs{7%LHR?mQo$BAq9P1nfEtcQLFpZs z#3mc>!@XP71y*;yv*wi$)VG~kXXf4G{|->)Rzxwa2DZ(C5R&|T?2s%yyK_7J-PZ;*UF2?1T3V27EBxAzCP9SUEYH5prN?kr< zuh3D5CcQkE@HsTpp9ttsH+n*s#aUvMGO-~y-d~1kGj-8de004r2KQPCH=QJ-BV(-j zG{$lk;%F`;>jd+`o;GP!{8_Z+&_-n&v$Ys2)5k3hwb{)Pj%u@Y{WK;aG3>X5A&Z!AK4vsjgSio* zu8&Yb*$NE8eqqqv3Cdk`c)0^7NpL66W&1*uZxiL7zX!pnOCj39P6onF$DjAbYW}0E zorUzzAP)uRLx@T|oF;VyG#e}|+-h(SS`CS;z2?H@tW!A3?@HLyAlKU~2@QS)F-O^1 zUs2!_(xO^2EOoYK?*n$L)2Uc?6Or_EQi6pb9(5s4sD$t7x9v_#ea=sUTs0UbJqVqEsU91I&UU{;9NFaqb z@Ua0khh;>qjc(gEtF;w($_%raRf z6|qxXbq|uCk$Ca#gt%lD9GExGMhO|ooE40|A&;PTB1J>4s_nUbMZ|;v7p#MkCavy% zktxW0kV{vHrWl%77L83iYKk~h1zYApB)D0_IE{V?Vrk4SO?M+;P z+v~c$aJz8tO{zqlgLc&%Zy;Ssp)1)PZc$oaFY)m-3mNnY|Fl9Uo0QtGbnF zNSv|anB{v_SM)cAJlE{dND$Ei8Rd*{xqH{>lx-kfvvU4@fo2Jv@4YPYt3F)2s-T%1 z>iKGq^VX6L{Ok5$ig)(V6UsM>79(Un_2hCEt-W^CENnFG`j_w1c%A%$X~SoE2N3~q z7QS<#7;`XZfZ3yMK}njNZ2k+?c?pV(>LF7{`GiWnFKN%)?7_tF2_t}Z*8VWw8;s37 zkim#Nhf)wN^u8KN=tDVTYJTxt?zPK-$t^wxO-KB~0YmIOeq1^^9xEK$pba zKH2)Xkad&yVx)GEh^(Y3sApOlafDgtd}JRhZK+jDZ~g)~fPXm?Ai5NDE`g=gv}^gZ zzl-nI{AN_r6WBFcPJUg%cK8V2ft_{txRzJ3G+tU}F8CkA2Tb@ubfly{2S0~jOOzj` z`fO+Lz-5pHninqyhw7I@qVI}`nLO2GFdTzFvY61$1m2yNVC{t|5z37BtbqBre3Luh zZNH6jNN&oLsmvc3OcBoBvIC{yDi=YFSD4Xr;*; z(jj5h^6K?+ z&YhiHL!Qoz72Yy~;@Scc4Lle{%&$1f014iuq51l;=BoRoC~B#%l2FK3mO0HHsyyvnG&2h&S0Uf9Gl;s*aD*Ajs{d`8L8*IoZC0Z|$@D1kb zQvS8{tah2Fdu>-6WCjGpNirsdxSGOy?(Q_Zrp(Sle(zRNJqt*XcmEa8 z8o?Y<+SAkX9eO2E@$%Z^xr~Q)B#98{vT12-zI2xO$_I6-Fvf$cj3%TE{Es9{ zDH5XH>`hbm&q*vLv_eef`8bXGfgJ}v7q4_gzI2l=K9`8uwdh+Ut9SIjzJwY=+(%H} z&kHyjvlYPC=9<4Vr{9!k4SvLEJ4qp;rP$fLhXMVpt?yK9gZ`18vyr(rRo9dfba87J zBu#O5i@Cr4D96&Z4&aH*3H{ko$TxUZ;@wqv ztvmF~t>2!}CI6E6RMFGZx^n_&MG^Ef?6iD4{(62h++wh3I%mcsGHW zUSXioDMnMT@0A5zz_l)A-MC#|)E5|2qRqQV`0y}olmpL@Jef`%+g~#%WC_}ZqO=Fq z)Q!lq#zY$ls!88`DH%}XRJ)L z&YPZ-uqXF&*IvnKN%t>?7P);WkAQo5s?inTIE!DGOK=jbYbvd$qljHp`z)`nJ{S^bSr*~WT;AaQ)*w$KWFQ4|_TOf($ zz4*M(I6>yvN4Bw{fj>SXFQDWeJfASDLY#jO^|60=GxWeNz;pEC6xYQOdm&Dql)%!YaSFwwyU&&RL<(E=fOq5^5W7Ko;~ooplBBub9c zhiLsc^~JV+rHgscw-EI2w_<7HL3xvlkdS-VAGhq5Ql7<)A{es*Mz)mBDW0757TSM3 zTppVc5qNkpNK@F(Q{P%~ z2ZJ5-ssLA(f8<};ZXU`4`{J5q$$uYE-`N%+ylrlikt6u8% z;ul}uuB_`|+0I-l3rt|gweBdp{4NZ_;(!?a=+_)+$-H;S{s+JEtLZmO_sN06pUC(Y zhT&v~O=W$I=+r(m>!N;BqO%PEKKQ`DOWy4!-gxytP+ZIc$I|EVJ5$~VhL($uY1S>- zWySgnmqr#dx}msnAO=jat_p3pWL- z=Gz~{(Pze# zk&ga5mspc8Dh02EH%*&s$O6LXD1y&FXH#i4a(e>YcjZqz3D3{|gP|Z_5eLA5ZP46EcfZX~5zLD2lsC#aP)F)&<_|D@9470QnIt~BOLuH`3S>);IM&uJ3rM~e&XM{= zTyAyEA>26Q*cvEH-S-vc40?$ev|i0P4dhhl9%w&y$5&tn&f9$_W1T?pGnh@o5R3VX zOG%R3W;X%@YBxsad_he8D0#romh>kwXAWGt5V(6=d8A~6ZY_Iv2&QRX9tTP(MVG6` zJ#3&5cwaE`>|f)~#};gJq2K?b>CEGy?%w}DLyQo*BNRrvt!#yCL+(_RQOK4(v?x-x zvCJUpwpZ4~C}o$VELp~qCEJjFC%eJSm|@I}nfaYQ-^cIY9&O(5_c`Y}*Y$cmUnadx z`@Xe|j@o+ae=%26iH7}rejOsDEk}y^Z3^XfE&qU6yYuwqJE-9;g9rTG?{D7O#B%YW zMjn)_ww~#j))M7Yy_^W;1Xd^>h3WJJK9llN8ob}$Cd+8YC}$7EbzrZQ6``fdX$zlX zvUkchg9+cbo!@+DD}GlbwN7#T)ZX|+0cJ&g+=5Gwlxms56Qz8VOW7v&X1d-sRo%p*43v@BtZ3Fyw-0!t32|yT!PJbRE*eZlz=s zQr#2t%ZpJ+w%Fc{?G(?diaSC68U#TkCurv!Q(hi*B)O1lZE50&F4HlRXZoz-WNLdC z$Xawmn|jyJ`R&Wks(_9D2h-buNlNquD-YN!9o_-nxN*O46(DeM&|CWPIr+Y={iK_# z&#^Uq8Z%AGfc#bU7kTs^ZksA*3aJ~9Yo4tfA*cAs`PRj!8*EqvM>|;~`ptt#- zp6(m3Kn?>ZHwz{a9-!*;`hy7wK>xRB!pvfm9Hx~cn4Eu#H>Vw=AfHpZje-dRm1bsV z^yNsxgRM!}W+z2=Fvtq}mMnIO;rMA8$`0C_XQx0HgD^&pI=sHupmQG~lYxRcFih&# zCxII_W*ONHnmjgtdag(}d|U~~nUO5b^m*3!mrsa!FoYKW5QC7Bp%`Q9S{@~Z`{K3__9v6us)r( z0GZzwYVGS);(hTVE6^TLRRD+H)*0QTw4+FMz8>yu;U8SRHQDXA)`ZSW`)vfq?mSwS zD0xI8d{-|{IIl{1C0H`a=g{@5T^4*Ii-ZpPGVP&cZl@{9n{r+yCm~-+Bu5fWK3(XDo^SU zRVuMwv^%Brw#<{mkl!gL?wxJ7Q#CA?`-xL2(+=?Xh|LLfV!q!5#Z%sK-4stS%__go z482wRSlvnfqFin$+;?t6_y>K+mc!gBesG<3nW(W>t>{GDVktPT>r7iSym8C=+cS^G zIVvk40>s0q0X#N1l0|dg3B18f;w-b%#z@Q#P-vF*qRuiMZ8LvRA2XB5`JWM0Weq81sPGV>0@Jr2yb3`fNwxkWGE2iI-S(CJ19jdd(&k}g|9lA-Y5yn$^37nOqzFBpKyPkT5u_g6fBgnT z(^*QT@%`^Eif&P1Fi^+3qZhsNoUKuiM7kodl>cq{F7dNXSdHKla_G*wsjo3{58lkKv8p;ut||nt$@R@ri%@<-}&MaG%whqwU%4e!XM1pqJBHm1xQH z#Gtl!U~d&W?E*>92qoCh#2n_nqVRnh%Mm&a{N!sF?wMq+24e5`fv{7{Kw>=&1b6eM znqy$HlfLn=k?fo-E!_2)JD)H_FNY?!F-* zY4@K}e^w%1c2gujAa491VeanCyY+ zE`vz^f@Z47)mi^ePhr03c)Kz*|8qW34<4J}6DKA3u0vaN4eHel;2R(vmivJvMt@PA zk~lz3!FM7)8u-Q+j3BZSzdpGapREaZ)Y*V1ws2>==A6h%)DAf}59j`@>MYb{IuzK2 z$?DvFz2-DUH+Qa8W6LLrbU`%+lItwVwhzaP$HBR3MX-LDO-u1~@b+8EO^{lz&05xl&)5%e8J;%YpM8yd2ez=GkZRm~UDN%ks^dKgnO-hNrC!<^22BgIp= zFZ1DMP21D}8ju6~K*k1tW3UXySyC@`AUVthVz`5_6r!H~s(|2OHE9jv-Mk<>Re^Oe z#~Qba**UHUN=7mt9-ILnua1#elNot~k7l*vN+hA#dcpT!y)Y~4?57R#t(kshExGG+5Smqj5b@MQ_si^<_7MHuwj7BD(SIHtCOtOZT)I(GxTS+TBA z6QNE_?JbrCJ0;$FJGR$*OsieKsv~LO`GP|2uy0u&J=QG@OTRB{UpFq`6FsI5#!fX9b!5s@U{a!h4ORKs|yX zMcG+B8>9QJQT*38d%SHqmYW&bG{*x9a#ze z-B&5F=d7kmKj%VWt+TO@c6Kuiv9pQZCSSD zp;13G`1PdU&d?$gB5mb~ak!>AA0JW(_pm-89IA(b@g3o2tJ4`oA5}-?fTYLW3 z%w08kDzYL5wEmK1aN@o>TXlA&$Jtgr%EMP;98K7ymAy-jos7TRAPOW~>8o>WoHo>P zHt-y4-ggTIe63L$4{wTAO$eX3hK{jt6w+k{*wZJjaI98~L#a;E zC}n%jC(OqGU&h5{0DSget-b;Ay+}=+vmKZ{g4UxPQ(_)iG|*bA%a)JgZbGr!7$hqy z8I;@-mEv`v?Y8y_ggee)S*nzQ#J5WviEd4f%@KThNLeR7UmSRuOPkV{l>HF zGI$HzLv$T+Q^((b_oBo?Pte$IO0>J1$9QMiSJkwhD{CxwO4c8Hg+uKGWEQ<-Et=+_ z+|iC!Jc`bu1T<1MD#*^_tnnz8z6Ox$pg^f&J2N7|}rd6+S{6+_l(pY860k(xlNDb%PnS#0oa0 z%}E39hyCADGp%P{G312evUU5*LKist>xeLKX*yU~k1=OHfncMeCB(KSlKuTgik{;I zF{97=gP=672!pj4V~?+10mPG4 zrqH``IZ?(f)l0nJ4wf#EeRV3NXJdDS=ND;9L5>}$*=JgP#atf^In|$EFxw%TSC(+1r6IQ~jE}(nsM8cv1{;8(>g;UB* zF3Z)WCYC8VQT4dZXWgKs?VHx@>W`nU|HWz2DuFd<_$c>w;8q$}@{iKG6^U2ccGjCI z=s+Ou6{6e}-(5eqSNyj>JB~}%U)*jwbE$4RXJi*>%vuKUwyBr*ELiP{YlIVf8u~8qT)D=?oI>JA-YUcMXjFd%Woc&MTyB=w=IJTf9GEp4l~FI#Z%h$ zOn(VL_Pr|C#e$LEk=^cj=g?LLk|nCHcvrwj(lDFZ7Fsz`SDC&R8D~h*uDEyLjnzot=@tWuI+8fnnfHeIRqe@uCek>$#Bi*q`8ltKiw(=dQ+$3Y^q_rxd{0HkWAMc7Yen`32cqAScg1<2|{!g5PKPwiaKL7 zu6>iYafFn{hkZ@m>*`qg^?xfwAiGPNxQu6O8P(bpRA-r4a1%Y>zk5*BAq4j3KU_U+ zI+*8-efZII7u^g&iKdOg8kpYavo0tACI*zDzVKC-gP%tT&8~C%9ZPQ?G?%&3PI9#R zM^Lb!-_}3-iCyUhT@l&3G~{>SxWmu_&z1A_izkG+O4;NH^8Lv=y}GmlEdu%Ujh<7_ zNRBem(`t>nE^Y=Xipu(Z_UF=gP%@k^&SKTYYxVqI&6$bQjK&yDN^t6@@aMAD(|f7? z19H`!@-!q8_N;CNYwh-Ho`+MtWIkc&IJkRRr@^ne`#4IzX8Da^{7!_7{s6n&Yc(Vp zYU?5;Gb_^NWa4Neyc)8yn%El+3ykvnNv+Gt+wrcs^P~5w$)<(D&F-{h-D0W0t!4%f z>UX!vve5`w_vcnD{Dlk>x8DLOCpb&*T)du_%b*iRXxrTJsq*v&{p z0i#UFd>(WrOgN!Zf0J?ueAKYDM9ze;uR!B^OWA}nd)(VNjCW$U;1lv!>>5H@BA4=l zh_cn272tjoj5_6IXZBf3Iz$OcqId-y#??$E$_n^J$sS&yaZnvz%U>J^#y<9K6s2-`m(ULVY= z$AlVl*Xw5y(?A(}x0@8AXr9O=LDm9b)O{yE8jCX8=Oq%`EA2ijRfW8HBQ__*isL{Ns{xdzWmO8^Z#Zt zk6dxMSWO7A+%7XQdyk~qddsL}c0M%`vUJ??d(3LOjWx^rMK9=D-bOi$;Y2|+SI@v3 zzeU^Ss)R}F9@qediXFkhPqH-G=>%MISkT}79nnGApw9F}5)ge8WMVjpt1`q}BU5K0 z>>>AO>!ZO^l&)wS-BeMZ?+kfe$L{ZWqzb2S=WuH^Zd8XQX@Q^RHmj!|Yw~*R=2?oO zjW|YzJNp4A$7#17wenvyOOsU7S=K?ByfNoVw`fFcz(bUzZWmF?Sb#hTdxu75Z51Pm zHg*G?_3n|5AD%lt9X{e1x@^4msW3c6d(AkXr3`JUFmpp)IpdFK$e{?T)6V~{@27|po-B^@Do*zzJFS$Xe^_`dLV+V6#L&W{rJ2_4 zmL8n6QZ(!H$mh-7$42l(N98g~$`KrGT`@D`(G1Huz;=*O^?5m!7NrI&OTIQSFrbSs z1tu6qLfVsAKN*v_39`q}`;s1qhn}R{Cf{!~2)mQpe5v)qiQR+@u@6@TLtH$fesfcW z7ojhuj`=QK4u3V=Ox1Efji(eCi^yL(64gaW{rd!&6s7xh*eih`{5zvhY?;hvtC`(fQuuu+Zn3m2*PcgNfq2bf^0w%Mz@7o#Rm zOex_hm!wa1J(YxrRw;6ik4Gz8v5LD8*-lH?yf!j}gc(eFP>I)SY*D}{BsyAgHaiiH z@Vawg4zyAzbE7`MDX8#|(-eCu72K*L7cuRxUPu0**jG9H{hhd??VG3YR)0I>0S>r; z#lJmLuoL07oh0i)a|ywM)t*baK~aMXz5X((?jzOKv}5P<(FAg)Yu(~q+z8K(C2JWP zQ^d9}8+pa@@;KNhnqsW84je}PC)Ip-x!L5C$5k-?KsvNx zz)dAdj%=yx@vO}`a~<}`Zf_L72aCcRh{gR*yqtqU-7#J4pQkC9oPLM?$P+HZ&A?>C z?#u%nVGm3ObA3qbn}e9_4cl5ZNbXmE8FSGQXH?sH{bjp`B7YfdG349ke7)61x9fEt zp0`1^#3BE>X_?o`fp(?0PtyEmm|sD`+!fjbJL*5p2pnTE!zhx3f0(aeHZ(P6l`z(+ z?MDe$9ZK$E=>KXyQ2s?DIr441y;5NyCwLo@-!&bfRi--8x0z#tDyk9$|p2+E8 z{V2G(`%KyG;)u{PstQ~t2@7j1Wy1#CYLp4^iPmgHOPDb58cU?V>w2Y!h=TTaO&4#> z;tHMegaFR&vsXJ+pZ*JJ{MFKLwsb>FB&pNK-0Om6+rn+HGGgEI-=lxQTNBO5|2sVJ z3Wh?IZnL|eu8;#Nw6>33M&j`I6$)hyQy)b@c9|fJ!bxkReRk~r$koJ3BN5rIuX05n z4<6zD=DdtuEl*M;@yH0L8zIRTxfc2@WVJPVZ;fmuL+=JQ`tv`x;CcD;AfgOCZk8Lq z=eTGpR?h_BlSlIAmXc03LeHeEAWquIhz)fP()N)nA$ivNFA-N0ce46+3h+ zb3pj1K;xSm5Qsik9~%T?LU$)B4iO&&e1$ijA!TRTT*g1NUQ+(Txw+%`2-HrMk#MUe znt}L0FBG^#|d|*%HAiA`JR4up3VC6`NaW7g%hhAtA;!nNEm&7ml zoH*4?$5V8xDPT6TE$e=~O z18$_MyZb=K*#Q<<&C1 zblD9Kf_JBMoDRo+%D4eK8upcsfL=h;clK8-x7J5S=bPnZDa-!gF<%i#&Q*@B5CPKn&%BkzZ=JqTAT^JTh|{3Gdxhcs{Z5n@4lc$L zZ+qLmp`XAYI)Y!XvKhCe&iIy3c7&f%M*PE2X1?!3JJterY(IKTC@?70f^c%%QRZF2 zQmvx(EB#){p1`8@-idGO71BA=cOMk{ea~{pD|7a={-qA-?nfXK)1at_9LO`EA|}ub zaOt*#LgCPC3ed__WM=pUFNX0O?4L^uIt9&%p5-rn!;S zPZSE1`=CV2R*r-14u(Au?48?t+%#N2S#LdXjp$D7r-`lkJ}x}8mgjyC?QK-nOEYbs z=}>w&NDMet|5jFl*=sG9rL$dib805-0(;QY>U=V2R?4%t(&wn<tcOyt}I;5uAE6=WpxYR&Lwu1Xax=I&|-oOYl&u#jp|bh-B~(Z7psr zIJ%hgjyxZbjrP7%CCzyhbklmcco-e2Hu?3%DV)=V2Brk(QJ~d#&JcKji8<_fRnHk9 zIf2(zm$JL0SZS;d0>bn+V{QPwTeCrw9&y{q|8sYzA^XR-^RtVghzlIrDGmTEZ9Glk z*R@Wmjr%Sny}(2Z@JEEUlzZw zvYXY!F&AiRuCr0%l8roK42gi)7=b#TNET( zHtXNqJ9kV0D)P7aJn#Lpz~UYA6Y9KgLrlWlRJ3U2Ns+{gYU6>nS`YvdM;ibNm;{k zeY7GAQ^E)JQV=}jf3^kK$EV^ah8D5I0@L5oGLW&*E#ycUU^wLpaRTd@)Ur)R!JnB1 z#^n)Zvy(o}DX*EL92q;#lobxla)uZHQ3HAb@Gw@p2GfXupdP%xB+SG8^5BVWILq)Y zZhW5q%l_^%1?D$Fm4kIXlsZUVKB0$u#m&it9tVz`sB?dB9v~qa-DaPrEA+0z8jPVJ zD)8N-H|fIm;g_lckvI2PDrRyd{cpZCvCr<{~}W$p!GV>2-R#0KW)jEx7Brhg&Eaz5P8 zf7^$o&w`2Ne%SNugKR_L?;3$$u3jwVY3@3j%XQ!9hEV>tT#gLm`Q;vWA^xi!qtIFD zX%H%PqCGYId>?LQ;pIpq<0g85LN5R1;d`;W+)%WNenDZI$ zr>;p?h0Wcyq<(;#&F%-xe_e~efl&}#y&J{7>*OJl(>BEz4~Z`z$k;cB(#GQEV4Aym zyHWK*d*Hm}Zf>HDt~i$ZHzMS7j5o2p%EK^9)I|9ma@~7Gv6WzBN2aF(;0Y%*h&NtK zQuKN`+x2Jx^YBa;W~^vfnId^VA}LaP&kb}25`dyrab;wpvtASDw}@=9772_AE z+(wSVa;jwZ?ISJyUn}4OP&B^E^{7b_Iz9oki|KKztK z7ae6DMdy7xA9_mcUL!T;?DHGYeJL_JV-m3*!akfY)w`lI+`lou_nX{Bxe;^|Y%cxc3cMV-ALPLD z2)j4G>iS`zr7I*|#+B*3Y58AJ)!{&v(Z6**H-2kZ`88CAm3h-qPsJ8<5MNf~h5MQf zPUb|*$xjQo|Mg88`-(Yf@%IupXw12KN2-J7&2OeqLL=Y(y9bU6!ZMG1U95C?T-h5s z3-{VA5gDt#T5r8vYQ||q5Wig*>V2cQ^fcVD;hLmIa zN%$;GOny1yZ6fq6G!SB{pv-cd0ouPKwgbF@MBkJJ5O&$rF+cD&c`pSjZMB`a*lA=> zTaaWGpS3Q?n%oQ^ggh!98fUPM`}}kCqKb{>=gy_72cbS38+gIwQy=y3`khqMlgh<@ zeP{_{j+1UYH%H>jwQZ*dVNNgD#ayYNZUhEsI{0=@6o77eVJR8|gf8H4XT6(V>JIRDAz)GTZF@BZpdd`htIX~D0+UG^Wqgp@E#$g$ma}h7A7$R4O z@J25h^Yyn2FWD=LV-Sy6bDnYzgIGt^%%&QQLMTZ_(BM zF0T{Gz>|WS%C_~;sLdGDo^g;5Z&1fLg9L+EgP@NP8JmyV{*WSri{!jqH!~=aoG#}4 z{KQXPK!HWU7G4uESA8zKHT0f+D7s3%CL*9V4)wWu^I^?jSP0kFKysc^SF^kk`paAw z)njdXMzsXNPMu61`d}p9wf=(Vj)+6F8h|+b`zvdQI0E|8_cV-{q zW~z*H55|p`lrK8Coxua`W?fpmQ@1kvKuyfbMS!D2xv>mqlx83!B_jmq=eKu|E5L?# ziF5u_!XntjUNk%~@dN_!Ar$C3ZHM0&&J^y8JoJ%D`pkFrQSC3@)``(yhVC4xn&>^U zZbjW)+rz^LJuem3oj(#k6?oLvWqxPLsJ)YL;zRqZ<;e&sgU$AN25aCS#SN#_4alS= z93*9Af&gfIwyrmINGLF7F~=*+@F=Sg(B=Hn(JQzge^pv-UB=oV$kb#zmOJO|Z{_qv zHPj*l500W=J)lak_YRMFRLjXcOElz^&+ULii zCqo#s(v34vo~g7iQ^GC}uRd05urOHP?dHaee7}gr8TQXvy0vY7QH6 zO4J{Q;A+>HGNoVnV#I^ya4xq#G^qXt)rkCa=XW&~cAZJ2*wEBL{{e$tN!mj|4F}6*Ohl%5!5uvXyLB*fQZA zQ^CZl>il`x+pm&qAANV`E>U#8un(H!oI@qj%Hl3kEo2NN1i!+%x^yNKHZ}%HNZ}L8$q#*w` z$AjgrtuZ!=!;IsH{SOJ$kXM3SG<8myQjdV|=x$iK(MvQk9-G3_pC7?j|J;3#bCdC7 z+p;62?k>`oL0PGXSqqodV5bY_x4~o0w%UllVt1;>yk3COfTDzCA>Exjk`CsaXT>r( zp>0mzEA`5rdDVYu_(K91bkz z>rtnlV_>iK7o)2&Oro4*2Cz@3F0{+*$Zgj$9ekfH&?t%6!e)xCm8-Uj#z=X2bWQ3R z9=p9(*@C-$6_B78p)qp`yW{;}nA>(xQLwCZ^mxZthjSfMQ&}0d`>Vqzj7AY#dRk{- z^LM>4N?rUpV%HN}oVrVrJtLZ3I3Bn8uDQ53x{y5FF|yz6d3M`3)C>fU^9~XUAScTE zPWHM`$1lU15S#Ge<{r|5#roZlT}eO5OPu+(e25s$1F4VI070mNGucPDXCm}(;=q4i&T6YL+} z?B*ZOrM?KwpFi9Izw$ljTy%fi0)TdKJD|Xf{-^J2ZABmvuL+Dp<`5RhL~?%WH|kW z>El{cg$t<{tFpE~<~!Yj#A(B`_sZYrHICQi?F!Z>vQ44XCmdIUFGZZeP4besKZFnu zJ{FXeG??)igngm7?xcc__`H>Kz$g$82+Adf$w{0}tX&HrdY9mJubkHr)>lN|%i$=g6y#$L^Pex+RypU`odZ^e2~}4%zQ-diwrxWpNo0Jn zwJ}p?z`{98LggU${&Lk4$O$WhE4o6Z)-Xs+IIkEaD*TNrRn+-fIPZ4{QdGE49T^1z zWDoKDgW^+3Au@>c;WZ$^YMW0vK#;h zZ$uU(pg#z3lD)PP{bMh({1?R7#=D&TX_sbhP+b%htN_?;JbHT9)$2hut0#m~#pom1 zu7sX9xO8@L7cT!dS~Yb0HfLxAo&Bz12<^Q+BW}wnms+U_1cn_aRwk#OH3-84wy^+i zj{tgl5mVvfP)K^uvL{btEa1iIwo_BIgO3H5)BF7P>AO7+u(DFNXpEs>iOjDQN;$7hO>iUPp5|qIv3PE~OQB=E zggMem@AhWV`JlP2_b=KHW+pDL&A3f$XE*)snc$XnLm@B1?GkUc+FJiyP&O9!E!)=8 zO@zLBW)WAKm@iW{Y;@!X;HW?f@*jwYkh7lv*I!aberoUr+`PoP*y`BAZu!P$F~Yh4tRF%nv>D2`iKXn|VotUNr>SFcMP!ihOnV2rC(fCwsN?#w zyI!>+9!A%Uct7H$5lO}?r|MECGqj0CVRQGS-%ZfJs^xKV1YAQBRk2e4e@FIQJXuesf{Xpc5;DLfwFnD*6;=PE zm)o$Wo@_JDg+2p#>UL+tA#GbuyPR_KFm@*Uv)@J7=X9fgh*~py5BG8D8_Dq^g#=z? zMEQt|sZG}bdKyGzFv&~f8PveVqsi@)d&L-+u?oqt1T8a*9RYip(OUN=v}O}()m`#$ z;>04`rB0!)c&G@%_aXE6fIy?lf8+?6wL-PHev3uBAw-!2kJg}wR>g4@=NK7oDG%G* zTzp)5-uf~V2&rCORNa$c7G*&cbHn3y;8t`{&pa5R=n0}IhcjnJ1KmP+fyVat0XzXt z`T00!cI-Batk?LaSn9XX0J;*8n^zudc@u$B26jV#2@tl?bw z82{S@t+tgbS3>v-F?+R=w^39ajDdrnz=*&(WBx4y1i7FeNO_{U)RMvy20S=^W2dVpnl^GcJE zKo#MDvF4;^zvIxp);1wFkI2gq+L#+7`pM>mvUgmewqKjm;uC(pH}u0&XSgqE@9E(` z_R;3z6KXbh9m0+co%R&D4WB*P+HT3o_SMxQ-GAQU*6!4C!L?iTVveeEwyUn6UXk7M zv3VMk+frgLyLR5%(XxkVv`}H@V)Qy5153m%Arwg;wAjfBGl?^a#duAn?%3$x_-o6{ zy>>4@bqq~a6G-de&kIRd%_GY=Qv(uyRHva`oG!!r3?*o;LThCx@in_^dJRXS#O85a z#jSQHELIRXmgAw8w#o;{v<$We-ja-yX6X3%~`& zP`t~v=3`4ZnzpyvNMZBW(86vJ6v47fKifDW`s+_M3O;o0=$RCgV2b?DKcuy3|C7Dx z=7xOkQZe>E+E_;}CS2@k3EQ{knFXZVzwrQR0UC%TK#d><@afD~K*W8}M0gKC;D$F+ zfW!>N_eNEbyV)g9iXGwK(+QCgJl}Fm%g|tdupv~_mFjAs_4c)@grHZLkwMr?u8x>_ zcg!mgwak5}6=L-b?fpaMu*5PSgIf8z@4@$y5#p(dsC@E`1fy_t-=;->WW&A6P3Yst zAq~$_qLuX1%kkc;y7XXmDrvz}=HxLR5li#73vCmCl>*E{fU$=!0nWuSKoTu9IPZpQuJ$~VM zLAI2rs?gfI05?KBz4`t=c~snL%4>0+BX@K9EIF<_mnv#Z2_2L=(HK0X7_;*7d>>GW zfC>t-3yL~_Nxbxq^B@KD2l!yR%+x-&KRuMq^ZbNdEly1m$QX_f@HD9ax?euAdf=l;RegZGs5jGkwLp ziT4us=ba<3l;2vIl;S(QJQ*B|foh5x7_ZKG3noEP4@m787uQBb6J+=YU4xIHgsk~* zT8r9O0FgsN@5~QH-tqaIvGf3hATZhuB2`gV^H-sVHUft8`5qX?yo&MdBrp>a|lSMGBF!w+zC#(cEC0S7uD4ZUb_(Xu?B+2fpajJmtI zxp|HL&ww?)loMv-D>8rsX8?U@tEIfG8RCB89sUjT9jB;w-VTY! z%R>yi-ApzG$`tvqdcn{rCX5B@t%%T{zMpnrRbBJ$f>6gRZ_Qc~lG3Mg4c0vlGx8ZR zPwC`~+>M!H@#xa_ouj1V4UC~OW23!#KE*rf?H{na7196l8s}DQt}5_04nr}0?p-ur zNWuHfp;CLKw17%4ox=dW?k|YlNCaP`yDUOuSgeuT41x?ah)t>0-k+R3>_(IxcrMb4 z;XS4#81f!s{w|m6R8uVS=~Ej?^)GK=S3BlOm>UMd(O2-h(N|)G53JJ{TT_=OCb)RN z#z48%uya!{UeCXik}1>Hc{aVn(@lP-qdQ&1b^+W)U2i`O>ilw2N~NYyDtF*FRh$gw zX33O<9*z8f4U5paOS%u6^91#k2gX9kGZPteQ>F+GU3B~Olq0*=o5RvpZu?!=4pgu49 ztOFcS#Ef%a`PDiAtVIHslAbY#Y&cuWW>N|{Ni*HP7~MJL4{W!F^)AGaHK-Tox1GRy zo%69tVuH9bAQnks4Qw}=@qg=TBRDbb(VQ_U2#%_VvsKv~-7!e0Yq0xL#vXWD4r|;P za;v$;il97|uJMEzY77U3fdUA++aIfD!1Un)^rt%gx)u5FUESRqaGm$Z(4cnxo-0a9 z+}3&r0YbZtrXCNA2LWIl=EN{X7s{F*ImZ2Cebkv;`&4kS1W-NqrLKmxjMo^ky&AUm2iD$1GQgIfl>n|Zlq#cyj|7lxbw z*?lf#5bgE65)Ar$yi^)rYO4n7Lu4z)yu9?WFck&fLM~3aOtNB^NJH^W>45S$ zjB&6uOH52Ost05AOz~}eo%^UNwfz^GB?H3CbVA{AOamY4k3-P>d3IHqg62O*O zk@$_w2z``Y@i&0*S3E+nt(rJM5K{{c3Go8WazOGj-AZ$}P2%p5*RUPh?*~0&mHpnx z#@Zme7*p~MZI{^o9&;mm5BS-S3i4Lkm6~8afW&N^bC$QpQP4~R)&4rb3}}1ro|F2Z z!~qB~L$+*wwpaNi017p`$l)nT*-2c7TeOxaLDi*qN^kf3AHxGrDcdmHKp6F!x%|mo zKFKPDP1yyAV8Dlijky?{)bB1}bN3yDzXld=lP#|u6_&L)X1$zRhgus%mI{Nw$KWJ( zOSrAKt?otVnm;u!Ch^OZf<2HA0icowm2DRdy1?mSm~CHrd$lBr#qApvDc|+*I%l<1 z1QIS;t(b?L`Np2`@<;x0eP?sXiox^D*2#qvr3-p-3qa?te3}MS)qhDlOSvGu>+btr z25H9$Vu9MDP{khm1E=@gBW7;y2_Sy>ONf!aBF&0^c5piJS;;se72(Zt)z`?pF^Vsa z%g8^c6->T^QI2hG22%;ZrjB@0x;H@IrpoUMp5Z4PphA6pf`gA9r@QX8WYqKq^(Y;v zgVjcd!^M(RjFB`=jl1Hpm*?($kpG#asHLY8Rx$;Q+Fq~{w-U5jsfVMYbFkpOq^#7H z;@^>PV4g-){JiPz^wP9h?~%%1p>fjL?L{BVps9s62-jy3>mD>&OnJh+>Ik6-u{=-E zuPr9b6&$%LjgPUua(|A;%h0BN%(UWufm}Ssg{;DZ_pXjKBo_`Q zyl0#3wh^>t9j$C9Vpo`buOf^5;>Mx51wPgYy>Sk>>a~A3$||cks{>S8hAnPHIH+!| zv4vO-HLqFr_45<+C4SpTXB%lpF6UgfADsndMDUmG;R%n5a=_5}4ZXp9W9O~S+nvUi zj-CW+vv)mvZQqu!wjYza_}wwskDAhnwMN5Hs*bHIKNs|k%Zdhv&_G_>p$eji0Bk6Xy8{&M08 zJd}|~1>5HVrb2Iabx@?sY!A%Di*sRO4c;pCGV4mw@FDyN0FnW%>UdOnMBSpOQ?ldG zyH87z(rb1;c~OTR0=`p-zVLlG@;&EPs98Lr<^U_yB#YwFy?HeY>4q*FfP3rj=HYtj zXe{N{5M%j?^)F0SLb}Z3S@8dDgqi1a^=em(*45U=j*DB>#m5&5p#!@=-#Nr<5`z_% zcf{2{{XmmW!QPHJIL#@C8XBs%?CSiuFRzzve*Jvd$o{??eGlKX=yof4i5~d}ZxA+W z&@WV%2ci;lYc3dbnP0AT>l*rf!Df7;(!s$Y>dPUXJ#M_jZgVj6pKXyg;9#r=WZSsN zpbwbmfcY`J;SX3o9}LuaRGRk|-pPIz*A313d;_?sra_uWw;JJD?8S?-H_ApTT3U=i zx%qANnH^u&pUcm`C`dVedG$d?#{pQ-gsWdb_gy?0BmRxc_I^QDJA#T7;~5{KxAv%t zw}pXP5VF_NtC1}{2s|SE3+;`Gz&{8|oH><70NbvE6hv^VPm60*)I&0T9%gVo`y1xr z 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�-FkcDU6oAsL+7@_aot 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⪙;{87a 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 >0{7 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

LQ*U!cyLxK?k_s2O|C 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 ^0~exF@G8AS-O4r#`w_CICAd( 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

fq?jPh^P=-a&7 z%>)&)SX)+b#-OhUT1U=r#fPeFFdnm-W$&3UHIvL#Z|=P8P0`it8R8bUsWAWZUT&h_ zQA~^>5Y<1i9&aD^LMq^CIM+JW$&K3GfLUNjG*fTpVsRF_&ZFd%8BPX*D>D}fd~^K2=zWR7bg zK-j9`7&zCF?i;%l!km5J76O8@z=IYJO$mi=*(<)latl+n)q17I!_fsz6gCn;#bXmirGiH8oi3{c@M6Bpw_{ zlP?m@MA@ZQ#h=MYvW{HkOzJ9xzwBtHk<_ttxM|m-$yO5apg#n)?~4X4jYO7;#J|{y z3wD^yQ>*YOYs&o>sETV)?i7;o!tL(s2R#e)hiJry`&}|eohLwn;1Zk;)`^Dm)T5sv z79d)J2<36D7x6?_60>=~Kt{PN^BKn@Xsa;vZ1Dh3d8VU6v(*>Ldygc%X*;=)zCuz8`8 zLH1sRWF5R~ZyC&wJKNq7TebvP;{HQP;eb$N!47BGRkStRMon;gGV8^hJ&=p}a{XKW zg{3QUa>UN->oj7XvGBhMmyj- zw4Ez6zK!z>P3#KAppm?rN?}P+99uUD zB`f_HiBt0ZDlY&3s z7GxHu39sKRROBr`Oq7uQ#ft;OKzp0;?1NI^SBIOc42ZT7c$V!sha{BoxL4fwY8!^PYw9gap+$p@Qx~K?1N_ zJymR;5p0$NmdXnjFWn>^g%GN;pHS)qtB*yz;qSM!`XjoY$sc&am|s6iW`-$a^jlx; zZ939Ap#1!UbqPyGGVBk9DH8HixU`Yerv^yo%ybP3bVEQe_fcK)v-+vg0*Ux?_Zhk}91eq@+WX29b`D0t2bhA+^zLznkyx91efL&LQ?Z&;5?; zdR?(klL?4z!Y?M&H{0N`RUWaY&w zbgt+75`V#D9A5m1V|`qQfd9uA*~^_ zrRQR{*u%!X1Hmzb>;i)?wJp|5!`TFJM+SAUxhrDh#j^|80AmDOvH|WP@)=p->h9dP zd<%z5{*+#h=R77%EW28D-}>!;oIdtMn^^|QVyeVQ$y5^b?QpPZlMScqo!T$zWP@eJ zBL{q~kbV6I(i1#ivK^T3@%!^zK$3gBkspr)3e*SwM#08~`rUQS!6zJ|yn_>*SHn;KrdkR>NzBv;*akoCE zEZ;teKO59k5Iajl7;!b%Oy5(GqE`LT;{!Y-$**!z!r+bFI1qpoDY-YWG(n%#G} zHhwB*-?ijijh24s>#8C#z(-)TTBp^cy$aD3g9^DO!hnI`=mYyc$)Rp?0qDyNWH{6R z8$KL7`VUhrE6VZTN<5<4;R4woIwij|$6=ii-&xF3SN=$(pW|Ab`q*&I@3&07v|#?R zGUl7?c2i?OSVM|vyd~OQidx(AgZ5f6d^;TNYe402rY&=1E6-YSd-q7K?SH>c=F zVf+`<e&kjr$Z6tP6XLyEo3>*&>l41YWgNNS_bm~E~E-{&`IONHnYE2zFTTO9? z67rB9S#R$Hm?R4lWbbYAz4vRHkL$d8D0*Ryy*|>9KWYW$X$};Ivei+Q-@o;DiKoa^ zKmOku|AM>x$vY=8rWyDtE$kNnbQGPY9QmT?5BMf4{p6*r=;btSKBWGfs<-*GwZ1vC z01mYIRtS3&wzl+cVjUlJ7QM{s4VCXwk zz0idN_U^FYH97Tg%B4)@JT)8LOMR&mwCK@;TYM)QoaNcD7ok-c-wAm#`3P;B#9To4!oJ&f6dG_PMv+K>q^*(H?8MZ?1SEskF zwn}a?Xy_B9P-9EJ4xK#V&N>I7z=p%np%h#Yh_ySkJq#*tv+!Mt(91T-qW*VLU;sTk z*}BMUmL!IxT%UB;VYM(^aQ))w5kO-6Op}YJ1_~sAP#L-2pcz;=*qT8R4^ct?q+&Gs zOZWyjCgrc1fTuO-zM<2#$pFAE3PSzEdPciz$_RX2xwH`b`^FrthXkLkA8?lV-^$S% z$aN-D`enQ5>m>D17wdWw8Ss8EP* zt{oh-U5hp!{k7;VIS}Q@dUMluu}ZT@kC6;$*rfM*Z6!zPzp`#IzVK%HEP$}xJIi!8 z&W4{EHZ14gEY`#0k;`WYRAiUZ7-puX4*9&9Yrg+1G*uT}SNX|y#46;8IPWReGN!VK zStx~pH)^)$NQ^ zc!1K%CCCpOG2}<2_YX7~@C(XL(U>mB-0uzLL1fFX9yLYD@W@|h2B-_ipa3x|2FpUq(P|TxN3OeRL^iz&bIsaz+R15v_XK}iH)kEBb zUr{1^g#1@7dg*(f7@sU8_Xh@!n51f;FcCnb*}D@jWvlOdUe}H_3A%?|ie6y-FD~4D_=6iu+Xl6)hQH zxE@K8*>^2QdKm*7g0C9oF84e8Ag@*e*NM6G z76RG~LkaJ{oPv+D#m`^+zSu9Od+KIzk1`JW+cF-xAi(tSi6Vn^Z1MZ zeIjj=SiC0Gb~C%Yv#%{FdN2S3J3Tnxz~QTjAAkl301NU3Z}05ovNGfZC!fnlCZA|- zUFZ`Ee~TOt5EL~0K?pdyKNZ+rv3|LK)M8n+fjDb6-?lgBR4zpRg+xw~I=<~TodR(j zF+q+HS<8&nf8v6&{>e1zz&d_9C$e{2XzTub&+FyMf%hr+mC*iA67twyhyEae8JUDgYvR+f(7M^D4=TnzH3Gbozrwn}h zQlT>e`nFa@Yc+e7;1J*HOIE`NSQ)jit$NmL;@x-I`VEh_#ACE8S+?7Nyb0$1_7#wEk4GzI#MGB`2vkUZH`2GB<9|qqUp-)S(QtFYmweMi2)l1# zxvmW9?WYI$lK|DwOFAQ+-A0xR>Rs)C@Oa&l;8$fgR@rA?eP&TQ3db<5-Af_xCOi3Y zgClc*4~vi5bltDG@u?9!z5uR3?rbGNg2{lV!7*OC@AJ{$mBgYnZ|tiXC$|{`RxTj)eE10R>-+FvxkaeyY z;|W?kwY(swKp{&8<~j#1KU>Iow!jD%sY$b`v7Q1ESS)N;B?X|TB6x)Olx`%^T5iE8s^S-=DaRjv%RbqC(DD(QI z>pn8!zS(RN3|QHg&Ig7I$E@U^%o|Zn-}$&QQ#wVEIf!?@YAN+cjx|1y*I}68gn;qC zZ#c=SJa^<*ExD@{(bgT+0CytOn*~!}Eo57m%hyZX8_@25g5>__CexFsuVtu;^?s;6 zuHw=~r*A2bd~#NAE%;r#?Y;x;6**#*9k=`zN3s@1&xHx|)!62keX>|kA-Y8(hW9R< zt-Zw9;?>`^`#N_aiiG6geU$^|=WEc$gowc1Na^(>edE2q#m^@Nd93I2Z+%y8(_@Z> z7Zlw4|2AQxR%Gv%@&Od!s;=JQULF;lUBJ)M;MHK^{1x#HjUJ_dh{_P)QLv0Y2n&6J z8*&LA2cj$&F{#V%dwl9gMMF`z`KX$g$wjAxC;$G|Rt95Alk#+kHz&Cp(jcd4WE3le zl)8BD=A7QmHAXMf^{xagT$p=lJpwYq-))&w83FHM zZsONaur?K}pnGk_M9z^C{(7=YX|_l~G`m?vK~(w=n9()5uyx-gAXUCvL<_IQ|0&&l z0{zY&NE!F9Ub#KW)VwGEBTU(is%#@GEt2#1Fc(Q;^Koc)e`q~0u>}&3=;%S44;J0J zhD8a~U&VL{+l|Xt81@i&U3&|kN-MN7XaF>7o}1pHx&TSf0*c%&;PPlCWE|B3R8-k6 z(mkW{k~30=d50_qf-2^q`OQNsF22b=Yz8=J{Vk;hPK63?tel;nW*<2S zTs)_K|Gi%%2CZ3ys;Bk{*|z3rjNWJidSe4`hzui3ncbK5iA#;X=ozsp)=Eqn4}e_3 z>mF5^*T~)tC@5h+0&#GHWj}th10I&1w>B*fIJ1X8)4%z>#7j6EX|w)Ad@v8^JN_}; z$mmggeEfPI4(JvBc+6kw$dtui{R-^x<;7Bx{7B!?Gws;HBXwvYZC-)Mqj-z@$z`^9 zQyka{q}>-Gs8=@MQE!=^Yx{$pl{cz8wuB-!F@Hgy`@BM9kz?I<)_b*i0j#r=49!c> zM~tu@n`0Trs|zI$#HX`8k9Yr(FNK4zCnSy-|^e0${veV-~7 zJCavzO+{%zk5uF81RLN^lY1`mqC*z_?5$tYrYf~-gMQGQ&(MyY$ya0?OzfYA7U0PW z3!Z|oO3p9gswW_IDzrp)cr#_IsW_`4W3zc=FN_wRS8a>+lLc(-OtW6< zSy3qz+axoFy)ED}w&uBTkJk^euC_$EwDC&6ij+C;)^Ai$savv4I8|H$l741P>hh;5 zP7ehiv#?p8seK?gS{Oe?TrcPDE8+-CZ+#{g7%LS2k>rrM1qWO$v$R^W!d^~w<(0IX zkrM$9R_h}Nr?qbOi`}sdqkMWg#lYE9T zE1@==o5XS}CUoWukymv+MsTcbc`^I_grYYGTbVY)Gq}STSk>6*0HDqDK_`E|x>|72 zS|*?5?_oU9kHo9Vjy6@Uu6+Pt^P2IT8)yj)8A;22yUIdrQ}ykJUMtWTy!P+rB@)VO z7t&iD4hGZ4s{BqX8AkZ@uXYmkQBi}yHGt4nX>vQxzB@K3(-LoXH`Tm_LbbS?I`6pG zVG(WrLYEhCaV=2^M;ExB7D?Yco`+}dl0Ma-NNuA{-Q(1a!#H)M8!{U zI}&nUwR6DO4Mb)bqLzK6_+ zA~S;J3QQq}F&693w`Ti}9&E1yl?U@>s4NH)l(tR5vz1|Rk2q+^`a|esWMW5cokvhlY@t*1(Wdz^a@vf&m9j*fzHF2>NWSM zv(-`2+H}+0EQ-?upQIRr z5Kfy>Sp1NcJnktes~y(>xf|$B`V^ASnvr%ZD^L9=Rhw#^I0c@QIZ!d`Dk#+zIS1@nZuulw}_Q%dcy)t)V=@ zj{0VGwQjP!rIBa%%S}ar$qfg57Ilna7JY5w_^);~@M47*Y_5iSP_Vew==W~`v_XE~ z9t$*f|LT%cJcCkc{)SFI1sa0?dw17US}(Aqdr19$lzkDAJK=ibg$|vv zb)qm%_i(un@BH(ZfOxjH%H1c(N5~>f;f6;4TJZj7Qms9AsU#@E{(ZLX6~+2P@dZw7 z!3t1tOi@dQF^M_h%O63eCZu8^L+)t2c)=rZD{y1jH?GMfRhA>I0G-G`GW7!Yiq)`n zv6i&>&-R|3*f+d%H+_*?REjjD!MY+g!I&5muAnwULo$AP*E+%02W2?(iRNZ*IqtF`CJiilqazQ+D>155@I@o1~R+BU*TZw>Lq&d%%(ny zGHmF625{F{fm2#k=Dg&vq3P=K2YsJfO9DSFk$7IDk0HR%-w&Y+Q9O7{$$VueNb#Sy z-HhZDRz8R#F~h5S_$t~1%I(tM=w59+T}@6&DLr=kZ65lLGe=~NU8YL|1HzTa(8HAxs{4m9qYe zGHit;EO>IIBs_eR)JmH(GtT1{JJQwWqa4}NLC)QVvqg$xF$UwZ%l?dn36%5No&zQqnJq5^P?S8bFYWpzl-rV~1&4%OjI28f8hdoBL z>1tb>(2?;Wfj=h>d;Z6wDS8((gZzP_-rYBOo$)vH{K*Cf9^olL!T|Fs+jsd!0D4sA zZwy@!r>#krFLvH%f7`K|_~t%iCC;SCFtYyT#q0$ALl0Cp<;8Cv`CLz!oeivi@ZU5A zf=B+~M!;d;%c8@7Z>AB4zKoErsn+A~X*cTqTF)mdk<2d5Iv$BF`d=3>v@&K4hn#Mp zyHV9aSKAgpWPCKw$k&(i6d^X+`Y#5=MhA133V!-u8)VxDeCGXnu3=mzb(yic#OIc| zYog^8EMM>^^g?d(s!-EVt%hJ(MhEaD@N($3x~LLKnp4QdQu#^J(2&Yhl6j*;&VicY zCjCW^Z$V@9W0b;VhgBXmJoxxLg4f~D7G!e!ksR%m(fe#^rvi{~Hxf&O;kdXsl zS+80332HV$fk=tLUnz5E1Jo9uBL?IAVwhK?d}I^ZyuTY`2M4`k$DXtSjBQu% zBn(71={2L=g%&eTYru}y<6I$Qp>Nd#Xxl`BQ?rS0bDo8VFW~`5+^)gYz<0(+$&98) z0AH`+9_0>smth^8Q@LTNj`Kr*QoChV%Q`u5Ob2pa;#?@xBM{l9ZZ`NolBO(L44z^v z5?Z>q`TLj5zUyUdylS42my?&L+K$`NBQ)L@T7(nZCS{Y9QL0!BD4Oe{a*u!F7lg|@ zF?(T~{#KX)B?tH<5wY}+=lk|v(6H8u(K+KKxG66Q0p3RMuTHpNIx>DS!e3#}rSsCEHTO527LS2w0WhyA$@)u5lx4C(2j%U84;2l!o&4=pwFvqu{Ng;Qk8p z789AN2`-M$x*yvs@_Jq>=mj137qU?XR&m<-+sJMG$JZvYi}+k55$|I&JUG{`@Grbq z;&xZP*2-muvGODF9^GBMSP83Q&vn0vl8^C?9=Xo_n>dmKCCx_qiNk(Bg&@~|%{-GZ z@xXnh_b&euzEpyAC0}LuEV#$vv$x~vj~FVWdlw(#v~RxFg)i-T4 zhbZd=mOdD`-qnF9WmE7*%=>Sb^ZzwYE2o$WRSmiwl+rY7ab<>-y8ED_$FYg5>F|C( zjU~z!*zT`KM<7UXeturxwB8a5z1Z5%(ny zSG?7s`8|G9n1%`}Y2^nD%T2K9{K)zYW6A)$g}XK7SH1S|Y|7_JPqw(A*2cr8F8@yb zsn;@iNSwE-6n#BPc8y=349N=m_22+e1vq$Fq5x>m5BxK}e#24SG(U z3jO?nZzt+~)?aRa`dyMSyO!ENs@o?UAoZi6J%X)jS^2DNmF=r6YV+g*C@zZDZjyB9 z?T$N+FaO}@r}@Q8u33r4R%Z2P2ISXaeP zGeqB3J@J%_%)H-X$GTz$+g}9`ER%R-89C~}*Wo0o=b^1xm$33)J!x5K!_kNMfROjd zSJDW^3C&e&F#N{&C-V1%Ae#NU4!v|_Vs@c&-Xb9Mpmo3c%LlfV)LrgEl7{FVz3(zQ zDa33u!+#RJHi*9av@D8jtJPnF-vZJ~urG`r_WqYli$vPISV_D5*6%4@wV0B9kkw@4eY9NJqu3F z)dz{>6dQPp1^s*$RSX^tnZVbQS?KPhFEsMpI9X3!IaaZkROnW-e*-(PqTL-9ZLGHZ zHL~j6{$afuy(M1zp#8Tg2v*OW*>od%2yEW#=7Q|cLO%DA|F?EC6H^b0Ty`L{{us)4 z2W)6v`7voa1xak(KOb5cO}R4X*%3UA`4pE|)PMwws z1dd!gwj0bXav=n}-+0p4W>Mx+Z`qyvfZ5OVTA^}1ApjASzIsL#3IAFh$5%NUHDD^v z?b9{vv_!*2ef>!MqaXO1LyUQHu*x#n(lcD z6!&qV$>Mx0XZR2PLJg?w~LHw3wkx9v*EbQKFZpDtFz&|AfueIz}N z#EbmNGGMO>)i(EO#_W7ucQU0*?H%O5tLd|7o0~E&e_3&5eK#Hvb)VxuZ*?!W?|8>= z&Yoey2MSgqW{bLKAE0brv^~UIT@4?H010gE46ixN*d9rCk{;gq6nB~i{e1LCVNNsxNxmINqv0Qymb#<476cXZ}J`+vStOHRLt-WS`pyHu#L0R{` zObBt~4|eNBV{a{xUFz>>fO8mK!>-nqJOjnfwVi3nwV3J>DpK2qT(hHs!p|p)t|1`L zlhYz`9rfte6&w=!zS>B>o@1a9n3OM{dgk&vM2wK*_K6D##-Ht3Y$| zijOw?=S zA#yD>4ZAOmjO@(z9;}|$f2zL(x(?|Lqs6qS*j==Zp=`r(XzI9#sY_9hR-H z%x=+FW@g`k8<;mA5B1aUPy{$y>s@eEe!lGRvmck=XIO3auYR8s)ZA)6yLLy=^^HKy z+mfRNeHRBaB00gV;N;`j9@NuCxp={-p7Hv504MsJJytkh%(6q-ippMRmbgvBu>6u- zXxM0A{kx{ed)j{GxEy5GwEq4U1{_#bEstdO_hA) zx%|rcLdQZVx%nvHy1CvlO9!Uwp0gXBsD}Q!wSUgeCs-IB(41dfQB-xNxRNf)faGPV zWdF%*V$GStjr@IchaHoUenjt=ZYTdiI!S(*aqWesbncL7+Vi=bg6R;0~6hx}fO@9g723Z8__UAJw>Ns_wmBy51m#$l0}-j_V!xb$S3e5Wb^w z98SJR0)1oQT^2b7#QcJu{Ox;P|7a> zmBtR>rg#R)7pxN;@LV3fKc-WD^*?~7+IwZf=)B@g^Hbbd_7>~jCct-HH!vXTH5{45 zD}J6#p^%w61C^+S3)eF9Hi3YqYgh$4c0Y3cm#N9!t3pTh!C5BDGwN@>(Ex{w4^BJc=NgyaUyt zM$mQ^#ZLSbc6E))j#GJq<8v+KA^1d4upTQY6v%Nh zk4(nD1j)nrH~22Vyzm98(Dt-J@PVMtS}8sy=MXy@47ILp50huXRPtY0^s=p_;@VDp zGZJsIW)!_t~L!z;^i$hs{TG+*%{e8|GUlCeN6%PHdQ*?ZuTxOX12MS%b_W zPIBmxC*Z}aOuD>+-P*3IyWL!qwTDiw--K7Q`Y<7{BvmbK^wg8LSKS?U6pwwYpGfgq zdB4L9!i_%_6DH&Z1M9cJVN;KqO$JpI{=NN2>(*qff2t1WJTj*`xWWNX-##M`>AQHpSOw8ze$GJ?y3Bg zY*U&2iLydS*Opcix_ z8f-WE^`&P5o$Fjvx{Ku|59PH~Nus)n2>ajL|!N%Sd;Iw2mEa$P7De8e3l=Apz>M>WUoQPBup}(`{ zt8=*Jzl4t5J{!sUuYf?@ds2#X&G$ggr4Tzf-ZS~OB)B31TaoWzD78?(_`zglQ#0k4 z9!dqO{8v2NppEaM$TJt6cj5x{so&N+Sx73d2EJ>Y<_E=xUrSA%78m~CWEVvrq4R@!~xG0L(%Pv^>?hKIGxOTrU8In{3*I`bCFde> zvCe$*4K~@FBXQ$-OYsnmChXlblwK|T~IV|HBiyz|q zyT6cGQ~MV;Es2SV$;iyi$JW-?jjTICB!-VP&zDW1B}Pj>_dVx5t%^u!2Zg_C-9CR) z#9S@ryN0KD&N&@X1Vms$8DBKuztOfT@WAJ?@aFpPc_$Le^u5r?H+EPB z!H|B_`SSCH2H~DcEh^0>0olKs<6e)K?yYKVYAqa$U~G>g{aYnTKHVFQmdYN=(p>Oe zICca~n_t}swUQ6k)Tm4YA+ zLGIHL(Nn@-goa9-H(G;XzP=1v&@0a>5%CR@{Rbh6Ev|uqEC?traEC*bU)_pdpXA%1 zHzLB;abdmPBaE0O*zC{)IeOu0V?&&upU=R`+BH4R03l>|%2W9kicAy~klW&5X@L$A z7&xKPb``&BmG2ld8MC4bPsgcspFKwW28}>?V$Irpf=1ajMU@I{@3}&)HumxC_ZjBz z&$@Q0?g7wSOPL#sR*+$iJ97Y&KmF4!f3kIB@i0Z|L<(&( zLCLCSn6CDTbGYM?%u`!COG^ky6YnAyY^G^`W)>j|`G>!cgUo#;170Jy#dbVd+~v{e zkFQed<9=eRu9F4W`tOQKI)SNydSZjvDom+yN++C#^EL)3C6%?bsNd0~rlz(}Owbh; z779sAGX?n|yG6y>oc#X~h}4s`6B=@jlGIx!yEHd(JcLaUyd5j*&X1K>Vf%OVFTCzj z2aj)7bct#G&hdRE3zjqIOE>PPao9kFO7Yc;=s5pA_I`LJEC`{JjxE}Mg8rNgt+>k1 zj^{$adVQCA;qTk#ux9Y%_yLRjU3Qh=h0K3npyU@SqmMSvGNs^`EP?c?%^TKp$LQd< z-55CamuV=Odcl9v($ZD#tLkN@4gY}wQv7J`=;Fp?vb8css~EM{w3oMDiek>sY)l+R zB9X4(A5vyi{fi64EoU7+Y4Q%qLOy2NjObC!V$*iL ze0;3lzNKOh+z&N?yyPjRJL1P$^R4>4qd6hi(DU6A5BFFfo@9}K$~WZ$U+(ipD9a^XTQ5x{q8YT73zp+3p{gYk#vQC7Zp~bqY@A0@BEf}3Hd?* z{2aeWMrby1g+${EYlL*aK`Bna6Q-wdLjj`u?Gf#qE$Qh->GoZfxJ6)a_k0>CS49ls z-1$znFqP&lQQ+&Afq|K;`+7Hx9RF@zFiiy2WYav5C3@N(p4c(xhVFZ|+3xjFJLGIr z#f%#C75*3p&%C3d4Ntv(D7xS_aNsUG_0xqL>)yUD% zy@s?r$;&0Dg;rK@ci-Ea-H5OuJ#A0^%LynI#*Xb^PM)53O!uI-a`< z`9B_$9ti68hx-SJii-MzMpQ^dn}bwl_o1#>eM1P9;u3re&AO%^WFyEELhw-{WIce zFZDZ>_9wH#mGn%Hox3o^v0FHs2>*eFGSoabO!R1m^ehw&LS!#uN9@1Qtbx*(4CG;@;66C{)g3k!!n z%TEc@WfEI&cu;T|aObx<-zp_pkZy_ zQAjpaRi10(B%njZn({)I)dQ1^ZjF0F@_iKjqRi z_;D6an`gnGvaOBXXU@_ztfHf_UAKjBf?il3vN z5Vm_Obots!^_y_}20v*ITm%lOz&n))c?sFkj)-`S2cAKxSy^2L&r($HZMMlrH1-b$ zY^5XB@{nKcGBj%`iy@&dDGT?)wFLD8B(jSwL&{^u48Qc_6~Fye z?=W&?xfjG4)H^c+W+--FkRKg9F)Kpvb^+~ zwa@Tp2$M&Ya!;e)FpXRc+=CToJ0A<);94;DJhJV#pix%n|8|LW;);{6Wx?5Zlc!i1 z`D#u5Yj(a-U_1UqZpQ+7;4;pu8+S+VtsYkFFg<4n?*Dom3C(hulHKT!S&{y-wqR_n z{*L&ilh@B}C?6^^aMrGA<=FbJ`@my~qCiXp%_k2Ny`|PV2t=eqO-WH-NTqQd@87>i zKlY?hT`Vt?;AcLU3Hv<_?7v_ip4VSICZ(XHdu`c(^Yst0Hrl} zhCsrH@uS)fODxn93>M!zY^jU2#uA_;wR!2P?8mt?p)fWe0dqU-R=`N|;5Z9dZaxk) zRX5f?Eqzh`7-YE)!=daKT<;qzaWAkRXvKYAIk1=m2H!bC$bP-79#%709Ps>QM|d}hu&&}yK6Gn zdWi4tcZXJdFp(PHko}2^#a7A9>UP8ZQs(NYmS1NeU=vhDd+p38LvL`L8HQH4<>=F= zGi_&B*V#4`p78n5c$B!{n=UK6s;)BT-G93-jnn!@%W7)kBGJ; z@cR-t+Bs+RgN zCnpNQ7W99h2y9k_^rx*$FVYG8s4%wZTl5$)v*$Er$Fw$houy@@HmlB2q7Wrtbgo|*JxhN!(_6-Jx%*2 zFZ{2pH;gSCy+fYR>vFSyV>N_?FMDLSo&A-}GK_*6Hc7B5A9uaNJ@IZc+ilo56QO(E zXnDB4tio=nw%*1eMSA7u=G1Iw-FjflY{-3eR=25+heZA^hMry zMFXyMetG#2-5yH_j;kQ>-UNJNuhOE8?b@@nMol|7jibc0NgcPj6Nj{4DlJ+X`A`Kl zwd(|7?#I*+;@=`8a++^uq!%>*eR}F!g)e??3%SfsJPf|`TY9qf{Bir>AjMM^l^K~o zYYTT6ArfY;TiP-Q@*p)7 zWIB?}t00i?*KnujaKW~3DeXEx=6-x%Z}g6Bpt*V{iDfyH45hs?foaUzW?;4-zO1(d zrUpBEd*Qt{{sLLT#dm7aO^jsvRF~0GIE6K=U{|!Gp5B#-85|8%WO&=o{8Sp(6SH@k2!ub`)PKfxwda|D{lL@(YhdPI{s?<#(-nd6N51w|s zcOg!DZff{-(%RIjaUvVW{MR?pC_jzkSDKPwV#UvG8=HG#z>LgmNobRgrmQV`D zY?IU6o2-m&6=>ti#+7B~(qMUmnpk!?1NduBz?sdW2ucFTx^soR0o@tlF!F6 z-}B*pSD%s??5QF3JoFQorBw#uy{Xmo4L7Pe7VL)89Z|OmV;e%7ADrna$l?4$5>P*N z(HQwhKEB}_Uw`L@MOHw_eo!)J*IHORe;Qw>X+l;n6=UF7MipAP$@V9_{!bw##%z>9 zKCbQbVy@qpYHrA1&c1D;oc-bQV-m*$fs%6slLc}(%`_AFur`x-CBOcAWx;A8h^n)l zhi7Ig9bBFr{RFHV#+#RtimP1u6|sw<#KI~F*)wf~G%1ZXX(;f^zjkmS19!>uaUW|4 zEWUpoe-Do)sI0oQlpH7#L4kq~6j?S&eA73lv@VrHJ?lz( zOg$)(GQ7hrzVszfDukNljYxx@FyDvH30w?dAN3m=!-Yws5ILI4uaIBiv zS(ZssC5bpxZ*5WY3$2-4^2?4d>T2p{;(lsc?M5NJ9dCaf9TajQUxVL(!X)I;C*+vM zdhFtcGRcw5=$1*42oHaB0b2cjd}9J{Ovud?=?H+t-); zk&Nlh-KBkPH{c#k87 z{%XpJ|8%r77_Y++6(H=+SfCZP&kyWVO1*O*A3Pnc`%@xN{MeT&iHFa{v@_#f%BOSv zx@IqGa-F0HAG_A})9UU9?1)_7dg)BB+Os+R9oQ;uzMP!gbQ=r`W|8(U znjrsI*O!Mw^@e{R`@W=5*|Sp!*%?s@S)xK{Bx}gNh8ZH2EQRbQ*&}3^we0)8%bI=P z2eZ7-e1E_9kN1!FI&)pFYs{HB&v~Bn-1q(YeD3?6yA9zfgy*x9U;U{MI0vrfwLr(? zhh(&+hlrjdhBD;$4XLB=xXSvY8%o&2At8{(v3N8FZ_Cz6mXMHW6j0Uq4tD+xX3FBL zx{}aC#?_sjuvn&*K2#+=V|*|jno48>@+KMoN)2=*#m}3_0elJKh5lBK@{7jpv(vAS z9V~-3?G&GgZJh`e>wM&Ks}VTV*AJ(xD2S9SoG*>AEo4tGNun8+o-?(pp6vVPbb#tL zq?iBK&mIknk^dJ>H=c6S2+EtO&GbAI_PdmD+ZfffNIW&~VWuKne^ikNeLL0O+iPHy*ra!(e33IUMUMs0yfDLLp-(GtcL_%1Q=iUURRSVe>R zew9_Gi*RaQg&B$AVy7=GPraul{afrKWTWi!s!sV&cj+6{s@XMF_qin;JkKDHhv*BX>j z+cspoB|`xZ5|wIc3F~XPxf4bTIZFFSmN+SMNQw#huE)_?EY5-og=aN&bsQix0RcYS z%YV#jn7G*el~6|BX%27dh(G$LO$8Cg&H?$kk~7yuCtqXoa$hH@P2+1Y&D**uLiW(_sO6ge?2IDvy|QWdEQO`s`tvr_bDxi6MR5%JuE9t?_QP3u8jTab3vc6MV{0NPBh2dk<^Q}VhE$gxH7>SAEpFHBq``)f6GZIf{ue%%6~7!2 zDF99&p}x?ic}mSZi8*U%maLdn6_HuIoBlyavfIs$IDwwPxouL{U334p+m6E*{lgiJhE+CXs?RzMw)=7SJ5k!GVNYJ~1GAG{ zSCkdTedXnRO+ZAlZ;XWjK>es{hJkSKMmMz`PLH%cyQP7STacUdceK2ihZ)xiq@gLpy4 z%gZYla3)R9sdSm+l`545PAay~GJ%a~eh?1sJ2^SI%kiek13kSQCj@CDo<;3a2qOh_ zX*ht{@iLen&^9KuW?yV&oIhTiEbVMcQ0nB_eUaEgb+`o5^vkGbmPaC=8tWg{_?&xV zebiOtUD7V~RO1!ux96+v68zW8%=a_R8z)yM&@Ox0angA8 zAsfn1aN?cBnDeTy4pMT`E4}8_O-oMw2h~$fCmL^aG*~ zksTQ(t+)I%4SN0kGA8Hx7gopb@va5GX$lj!h$XYSEgtbES{>~3(M<~>HlAwnS6xV! z3(xGQ7);LfoeZq&=c2U*+2z%{bn5+sHp`scJ(j2ys;zd{`j0CkD&FTeJe$wZ7^v*X zTBPD}>AF!lH)`s9H}8?;1cD;Y5Z6G)UH)l(ZSD7bQ`qxYv4TPOP8$UL7ujYTPa5z6 z4u6G68Vk_ijC8OAf^z@vFUd;`j482SzOc~J(_30v5(8Syr1(G#=}df?boWAP+bxID zuSG=+;O(CUBtv=G-<13=wR`l&cQG7cAs!s3dKs2!vbyF`nmMs~$Rf3K)PHx9%#U|9akiq5Dfh0~ zpjT3AT0Tc3R*RcVW_lWTOHlcHgiR118w-2V@MP!cD@v~6?AV@X{GQ7JCY0$N2eij*V$y3q_c??n}RiEm+W)gXW+rd0b;{a%#YOsN=@!|-^@ z6A`@%FhUqgf8G}fX#{4>b;_wS9R%Uie2NrvhHCF%u?D*C@I=>BMCELt;&#6|E|yDvr3 zSk7iK$b0@<4Yg=|{;k|BNAmsRj$6M|W5o3u?q*}RZv&b>bHPrM$9sRw%UtNb8!fMU z+m1*T6^>NeIhlz0U1=$D8hqK>5^n_aed%Ow@pCP%YsWH1H0-SLNRs|4f0zTSfq9sM z%k|TQ1C;1g%pj|GeObr+XW6aVb<>M(tFGt4r7H7Qr20M;=hL1~a<8j!n(4~M>n1hi ziJQt<#}SK&&c4<7kv>*n@<#dfakI)!jw(zrV^EkO|@N-0&spzP)?$a9YWkMkZk%+Bd^1alK3NF^^314C7JxNT- z_ZS3VG%ax6sRhyiw%;hxjogQGgLmuD4sTs|p8gYWu7bbY+Y!xYMfBLp`qm>o zbRY4PA5TL8+^^h8OO#O`Dg8dA79LaGXwTb|Pbro*SoVTgP$9)?@7vC!Fys#QC;E!u z=eyybHRr29gNtIHE*|9&t9RpttfDSfx+LNDf--kl$GYU^HhpA>SvmvV*n_j6Xp?c~$Rx)bm9^2SH+j!C4toDs!kmf(_Jsa?|36~Uzb=X6QKl}9# zILTEuG0FRX3*bb>j}uZ-ng=p8TzBVwuj-Q)sbx}5rk|+kG?PR#aVJ-LSfuMW&dqUC zhZ6UuD#kxHG9%gLL++$Ak**rberUM{ys}cx$d9{zqYt#d*5>Y2c|1a z4^Rl0auHGGcnqVTz%aS~_X^F$G3z4q{=wlD0mKbu5$^V$Z^Z+B_X1Pl4`olQ4;|$+ zR|P-8Ja8H4nEux9x1*9T7)jAv9yH)jwXPwQ+Yl1U66dfyG|TIf=>6ozpNQ~0d}#^7 z;ECqd!#68ld04k>I8DQ{0{7b4wf94PSzVt+O9Wldo!wQB=q~G02T(fqDx`7v=_=X> zd)*E~+7+B}AYS6!x7PEG%>DNPKTk~9*2pO+9$shB88(8HpgCvAOiH#fB)8s@_mA!b z9)vR=0$!gyo-9?uUs7(shyOZnP^bgefANzBXP*2{@6ymGFconTQBjNIKVMXB6xLYY zhM1HT4}V|K{t@#ytPlS*$@>nHaI?Ygm!kYyMr)vt`;R+)+!)bYqD``5wZC@G&TWm2 z1fZFqgLo~=tNEcW?}gaTG`D)Y)ylef1v|354m~S*ESlv}@oDtAb93a3+8yQ<>zCcz zQIGJNTVn@(J>F>gYn8Qpp)91zbV(q?I8vwmc&l zvtv~0l+L~tsbl6(`9GfoJ;LDc(88FCGae$EQkA95bC15Cx9b&nf<7ALg_ypoCR0~e z9}uf;#mhse3u>68*nM`vj22q-_}3pl=meY!e&HF!ypAmkJ1HFPJvfZz`TORh!hzk= zZ`O?tJm{CUFQICzFzu#$8b;2?Vjx!6Z6xmWS~d9Nm2UWk^ri6>)9()&p3uwMVpn1` z#a9aWosNz;Y~WMr);3TJ>x1^my^}p-z;}6WJlUM7V*{xMGB9n^F9s@NA?Uk2%@?vn zsnysIfii+!#s4zky^`8~%57eYXiDqElO=w#>huQrl!OSuXX6KYj6psS-eUyG#ofDi z&t;*Rie1Tv5u}*8+};ejH9I6>=wsl8bcV*aD}nOQ#f9)MIqz*V5kGQ-HBWPlL1zQ2 z8ZA`CuT>+&^3!YUDS@e5a+9Z4(LYB}Li_tNueX&ofUiyI;W%qLNG_FABb(k~Cd@Z3(^MHsvBGcxLDnGM7xq zq+N_u+*XCdxu`?c93wwk+pUd&wy8(Ah%cb`7OiRuB{ys#`M5q5EDG!zY_KCk7;|0z{Nn`GLq+`B zMdLk_!;c?{4oXF)iHIMmFptm9Mghgnb3ebUCaQ7AV0J2rlx}3znp6JN?HHPz{7_%7 za(H|UG?h$1>+QN;TLCA{-P1VYS!#U9z&bWjs`H>wHRuM@=AUwv?gTE1irBkw@(}q? z!z(j1ho|?Y}iYeGit$$=%A~aPVl_LU?s8-+`6ge7H!BS{P8iFVvrJH_gp` zWuC1}-)v&oLyY7FMt38D8t^>GtG5zQ@X6qknO@Ap1y3Pha4XN1qsxSz;F_-3H)fg zs%m?$V);hTl6+>GxFRy9LOp0rx{Y%eITyCYDf`D>SBU2dMSA$x=u5nHx=A+|&Xb=a zSAB-n8U<*Wt@g?I{Lj)SOROV6qGD+OyRx0Y_K?N_l+H7AhLrbGH>@TaG>JWir7oPM zyj{<|fOVj$a!X_QUU%K|)8T248lqyQaTIUwjc8!2<_|Rrk ziV#cve8zmNaLGzoN~507Z)gmEFZ}VHJM@o*8Z-}odm@F;yO%<{cx{#Ys6s*%&eDIs z0p@sfvYZCs{ZRorg_8|}nXxDqHO$-CeRD0;)xe0&!gJFK$KTkKS+4VDxE=KS&`2JA z=KKY>18^onCjA^pK(LA+>lD8TV9kPF_qbV5i3a^+_UuMZ&@Hlxzuv;N1Bbe4O7DSy z=?(>{4eebBMY>A{y%9hVn6r);!JCqj3!BaQf~i*Vma+m^sFtH{Qj6|LM&Mw2-Hwm2kDTH&TvRjb4tv-dh(>ahf2=X$8}9~_!f0Ra948$h5oIL>Z=}m^ z?lJJ+4c%2O-f}-Y&1@MXN+EI)MT&Wrf`AwJ;j7!*tpEd+gKIa>0Ykh2@ceitN>{#Qts>p_R03aTY09qrpcvA0Bal4gE=jQE_@ORmxMgh zb$03a$bg$F8+ag#kW#qF9sbUba@Zkk@n1&_D22)jJn%QyR8@S-&-fw09b!@#zs=Ud z6cj!f=IG8(SG#*?NKzmj8rPiMChsrwyZbEnyXoX=`g+_TKOE8&_U}wD8A%sNXWSh~ zZoM zy%_9VH=opJe*5)~KW9L?DE2HhsjZrgFTG3{pRF$x9X3B<=jORwv-8yOE$Mx;s(RHB zZ5Vsb>~%QMCs#O51cQm6vQp&D!dyc(FafYcYW9#|ybolVg~`l;O*ao-IKA*BQn&fc_p-+XtX z)F%A{31qlIC!9$QBMVg~o)F}P;NCn3GG!1;^D4@C*mlbBpwSFe0eU0=fZOoNUgw@31;Jv&mUp#ODdkWIDNtFZXFiH;`XR>s4BoLh z)No5kkc@j-N@e+<*@HkW#3KaStKEN5wPRuG#={dGoDfzRJKUcf^O8DOg#6}dfTEWS z&K#4t7%GJdQNm~AY8UmaWgmx+piwaou<~BFoX&<^&9Fr$TqA{pMGlzcv;1@;I<-#u zD;*457G|A4ca<5Y_iP6beo&NDAhd8*SW#8W-pOUlazusSFHHDf+(YbqD&p2@mPunS zYNVBowQ4JCK|9zCFFILh0p$b?1x~c)^{r*2AC}4WKF=LOwGN!DeJ?L(W|Mu@3@Ddx ze*<4&>WJr}h%g*T6T@dTf!~ho5C|Ahs_BmRR%kEcUAc$T89tqWYNqH6*cmUoyj$j5 z^1I28N2jLPq>)0uJwcx>Swer2Z;wQ>){$k@1sd4O89$(L-X*rNv5};-kUN#<6TLzd zrsG#yT6&q2vo+5!hsj?aDYo*!Lxw_JTSG;<*kXTvAnLg()M=_mW9^a9RhyCw?aBZL6Y&78tSr^bYcVl<|j!y|Hi*@=n=_WsDgM|GU z+F49o91dG3tE_wh{4OxqJ3o!fPGNe~Je(A}k8+zhm>}TRwxlV)E(X3!b^tD>!bmKB zj{qBJL~;H|*C=ngaS`uMT+?xTaq~&Z?FI)I)qUIp-##Lzge-^$fmrN&pByCM3J1;W$G>^g>8RzI)a~E z{p!(kt9SU|6Mr4MTRTq}yPKUf-$YioC8x(o$J6@jhcBK9rlUgQudj_sU2aUjvJe$I zthumq1RS2BY#rkouOBzwatKD;%Mc@N4yJ4`8Dp!nc zapw?*92xd~>?SBv)jCmXds9j2V@F3vl9%I{OrS@!WEw7^`F+ku#2^y#gst@|QVc32 znkeR}_}QrDa7HW6$Xn5A`<^)Esm`>OM{n>^h+Y3D_mfP_QE@UNHtX4zt7`zgLcBov zvG*yw&@qh9TBV^dBZGu6Q(*ahxnXLfu1ql}{_u4ARNjaC2Yz&9Boupo@&b@Y@7HA& zAL!~XFyQ7GfYbf{YTX2K5i^GN@Pkx&5~2kt3BEmMW(Ug&7|H56`qx4(Xn>NmfMRoR z2^gc7SH%TKW+Dtb5>Dna{uV@xALi$u*8(u^mQt4MpC0egLAmv5w~K8{b1_?aMvDp2 z(sVG*Llp;=+CypcaY>57J9eyOq>*Ie)hz;uH{1?&|NL~RXr#9fT#F@C*M%z)bU}Vm zuX|tpI?C5i^ZpmJ|AZm;B(i~Fw)}NpUUCQp=tWSC3Kbt491I2?EI_j@M!r9ObfEWb z;Sj+va&o>w)na)8JVT;h+tXJ#b_zjs())zS$?II2PzK}7l_lHfN%%8IVm3DGFeff|0`xTa#6?@wY z5y|@~GR`9m)n@~Do@R+4UE5owEaV1MrvRS{HO69kjQX$c2*3+pLNv}DF{a$$AOo+ z4{2ghI>|E6XX^vv)Nx7e_%0?f^IstvoW7(4BC9~jVTFqua9+oW5b)D{(DPw8B_#TV zl(Wf&iFly)^>$0zV#2JV7sB7eXCoNP{9c=qwPJJQ@YKXBa@+bV+++W-2kP`kNE?^QWa94| zX&)4l4ho3GbnmbGv(#pLqGR?s7MjY-$}B)3j@69~b zT3`P|*mPVMTf6OJiXo!6QntNwpu0^AVHTE-TyR9HfC&_fA!^Q>9T*6j#r~abiR4iH zY%f@>F3I)v;rTYQaeA5^lswR>#q4)g`5lR9_Qo@Pmf)`u3PE3i8icYiA&lR;G6l1m zTf$jgaTs4fk6XC84PM=1=%Cj3;d#^N9Tgtqsn1P|z?B-BsFuo?^|a~{m=VGNkx54@ zY82N?Ud?LvmE!c81Q|4LKKJe~_0i#WfIYYkvLSxe)C>#_0Y`h=4*LpC^Fr<24iUN{ zb{`(fSXxgjUuedTx1A`lMiX$Kt*OckZfczc{9`sFltr)Id(7EJ(ISD>ZEn63ktT%Y zzhSs!32xV?5=ZLHOUaiifoVeF4s$>@Oi%&)Otz;1upurOv}^6zdVZDH)>Xw8X?5PG z#Jf^ZAXOuY+B@coV?YtP>@5&f02W|HgZOzt@3w(p%6dk>5xv|=u9q5jhq2a~h?;Vn zSlnQWI=zWnX=cUpf1_ojkEodC+2S|n3aj`OcRgL#hmyfQpbR+1guDo#<^hiDJyTP* ztUf9TZ$!E0{Wzzg!0y)}Y7{ZFQwe6;&W;k~LELe05Y5L~l9;D~W`FeX^T{#G#0jl? zT4S1BhxpZm)WmTJtN1Vp*&Ank5)k*)JDy_Jge(1DwB1CZxfG;`Mg*zfI zGAad|G2V-b3|2L<`_YUG#j*PrA#&j>pmWhjP~P>qhsPxVV*`OawO4DNq~zbU3l?*S zkCjV_K95qx@z~e&yy8v{jrzX^g>QAEtc6`p=ZsUuR{3+eJ1RRe;)F5D9xi;}6qNdj zEG!fQs!R|Tu!%k?$dzw5edDb!-@Ky<=@C^ieb2crBOS_EwU(Xi0!R%qgj!%awjmR( zr?f|kJ1fFZt_vC}Xg#(0(nbt@u-8h+w0?9-!k~l%B{_0maYVC}a7utnmGe6k(oI#c zZgEz(@nj(LjQ5YN&GK>@z2Y{&n z2vj=A)5tRDXxV3e#Eunw=!%)$Tg#fkbpYE^43xKE+@H=&x^XBS#4Ng1cDE0Y>3d@C zeun(Bbav|&5!7;-Uw^cU;CJ6B!g|o;UzZN+#jww_VSVP&u18IAV_9L+ z`!0J!GqOjlBF+Y1{7i<8_U&2%zv-kb{{B|e$0$ISFw-&9PA)ja~^@dt?BZdp_rpy53W^X;eXyHfY z%%9CoM@wJ-XgA_tnp(a&jFv^QZj_CTNHJE}(bHY=XpGL{?!WyNaKQ2V8~({o*U3)f z{qTf02#3@p8_Dj=qgk5V&3%;Jy;GV{;#akM_XxlUNaOMxv3=^7ewP0Oc@@7y2<+qQ z5BdFfe^cD5eW>K#rEU))f%W2L&JF=rJvZ421R{ahF$9PAUr$!;-?uo3iKt9Y0~Mv0 zXoz9a^*TR!NcxQsfWvmK-6NmzS)_~YS{f#i97nd27qHZ2wDoZVV3-F|H|XTyX^t$Q z?f%mlW!(Ik#Dr};^fSEkWjtG7pTQ^Cn(ebfal#swVN8^3o+0)9(=x_oN(P{E|yoX!&>2mn>F|YNlM(5ydfcTLsI_H zO(_LQX@#4&L?t8@BqTx|Tn_)A6P%o_>}`Di|0f*EwBH9OTp|2|p|g#L_j5OE=(d%! hr8T#v({o#E1MBBjzOEhCO5j6~=3U)8g=!YT{|B7`kahq7 literal 558179 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

!qZ12U} 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

7LD4j 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%0AhLi_> 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 X^?qyUIGK(H1Ron~`xDhxUdjIhM*7U^ diff --git a/Resources/social-facebook.png b/Resources/social-facebook.png new file mode 100644 index 0000000000000000000000000000000000000000..5cbebd0b01987e48bb7871ed67e713c713be9e59 GIT binary patch literal 1223 zcmbVMU2NM_6n0n9PNhTJ1QV^a>dHl9lbYDqj-ABRbcvmGnVK%7k*LN?9s9QNTK~+x zC2o0X=`?jP4XHf9!+5Bwq4EMnn$V;@R8uAdJVGB3LZV_4hzGPz0#trPxK5M8L$wDi z+xN%k`_6aHJ;&Dyqr*qKdb=o!I+8o57RfjeK8HKVyYI@yHZt_!%s3u%CUI5s5S22V zG6FeEn?gmT8FQCEM}rjAUNKAKcsxHM>5diELYrt{xdcs7gF}I<>C*^DaWXDwvooGR1gOVlt8Nl`?B7x`2=%Rw;#VS-KY35Act zILERuk#2DugcZ~b&nwwXMvNsP%n)o^$;Lz|WYQ|Ds!9u+vwf`DI%@efiQgtxeJoZ| zJfvaAD>=?gs{#rY2RnYnae*=>g420TH|=oaOn5+h@v6u(UqwdNb1cxvuw)*fAg-na zA)e$Q$FYsb6&O>wR5BaOW)(gr&`qrIf3n69F-%w<|0$Q&7OBB-x?lWcvEM$(COzYk z=8*pW;~mmizvk3bDfp)RSG_(|D;yf>R=TfC!PdRCr}}1h)|Wa@Y!trQxVduajbASO zWZwE{=^AzY?7+gQ-+Gqo-Jd*nukHTZi@W_tHbsT04;Yx0ek zI^Wup{QfJiJ-hX2@Xh<1{MRSDFMa!N!MZttznIt$XZYku7j>AWF6yTr^e3J;AO2c$ MnNjt_^u+7`03#fj$p8QV literal 0 HcmV?d00001 diff --git a/Resources/social-facebook@2x.png b/Resources/social-facebook@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..999b26bcbb10061e5c4d89faadb173a7c63c8b6e GIT binary patch literal 1414 zcmbVMZ%7+w7{4r;w4!d*wX>txExEf~a!GE9CAmwQtc`U^z=(A1nY`-N++BKi zHZi(Q)@>kev@k|n(G4u@%hq;(IvI$>7KX@hrC1zHEtb;xVbZRX!dzRs_o8tvNI&d& z@80*Gdw##?d4BKnUSC7~-ty9yN)ZGp4+Xghoa6evr35~Yen!~fv{UoPwW!>xWq1W3 z-lW_D(2&Ttfe7G}T}LN@8$pciLM*Pu!~2h5{N+K(X5z~R3_`e3cL(l z>t-B73ocrR2U|-j9&SKcSplfsLYWf;Nuo4uA#HY=CSOOb1Zl+yIA}9zW9&3zb)f4P z2BRs-Rwlv))?>jp57w?}X$HqLnT#bvS!AURCtWU=&SABhp@&)Rk~BVRmeiUe0|(TE zBBV7zmQbCMZ;?AS4+b+`D?v<$!yCksx-Jxy4A1guoU{P`#!hAxIbVIGaL2LDLKoO3C zWI&Ncw4g8}Y?6V4^V;nWmzA_yi9+QpY2&P3SHKnsu$0Y?tz(n_M>QNKgX`__Si2NW zum|^vEKP&Ig^(h*c|54@evU75c>)N`s%9Bdqz zP~Uo$uPRA4K4(IV`w?RqVJIWUO@)C}ju&l9>R4BP{D*r}?>)?QkIvqD=9l;vt+DAx ze|(#nYMx%6YkTqYeJd5xSwoop{_8X1-R_>NA0va;FaF*@O;*pX%)RkvJi7P-KV5%4 z-EVS#*>q!9>etA0$goi1m>3!qZ<^hU(dD0NhsQpO%pRacq~`sO%JU~q z-+Osv%K>B6;ohwaw{QJi+wx{~Uwn6ov-$qOO4)_Xh44Se$GfLY%^w_WTe>tdWK7LI zJATY_L^6!bSNnQBbJYmFYFM0hWncSyWo-7)xg$F&XJp%6^2F%58>I`VGu(72*p#11 zX*VzTf9JpUSB_u0RIL07HBOx!?z#MsTORo4-L2`7is8wF+gC$%-A}0XxQO6RbFTq$ W|41Cqb7z45XAJr4x%0lm@Ba%X66vG> literal 0 HcmV?d00001 diff --git a/Resources/social-google+.png b/Resources/social-google+.png new file mode 100644 index 0000000000000000000000000000000000000000..8dbdbfc9b003aa68bfd97664df22bc27ca5c38ca GIT binary patch literal 1586 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 TCx3Re{fLC|BDmGT;@tlL=|HBw literal 0 HcmV?d00001 diff --git a/Resources/social-twitter.png b/Resources/social-twitter.png new file mode 100644 index 0000000000000000000000000000000000000000..754a51b8f783d163dc513a3598ff50969dcccb74 GIT binary patch literal 1526 zcmeAS@N?(olHy`uVBq!ia0vp^Iv~u!1|;QLq8NdcWQl7;NpOBzNqJ&XDuZK6ep0G} zXKrG8YEWuoN@d~6R2v2c=8Vjch>{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR^Z`oay)D~1LXFv#>P5)1SV^$hfLb3y(Bt1d1HN<}yWtLoyA%7Rq=pw#00 z(xPNwe55JEGy}s9zeOO0K-XCL7i9t?B{9b(Ke;qFHLt|e#a0O@qnDDIV&&{?W@>C^ z?C9iXWN2n#XlP+zVQk@SY;I_7WME)u;RG`Sn_hEQBLib+Gha}t%N=+=uFAB-e&w-_YfQY0ng`4?MZnA< zW@NF1fq_ZI)5S5Q;?|oPz8WrpBFB$QbZrs{QsJ7|pQgAmKxJA>>!i8;n*_ur-Pj=E zy7`hvn1-~f%PFTRttY~RMNYbJ3OEyBa_ahz`&Qka#?S73zbAXe_Ur0O;xZxBnMe%;gOqXD*m?xm(Ae@FhWP{!`nx)8k=6mIf(nOyONN;iR<_zmW|>M{H8r{oLKRA zOX$p{GgF(jCeC=gA#!GuZ%CH*0iKHMn$xB}@tr8Wr6haJqqPBAm$R8S?KVwYzaV&n z!H>@*54+D>Vj6QGppI1iU)!BZbH7wc( iy*27;lj9)_gL3mq>^Jyj1Xi9KEYT-G@yGywo*vL)*P literal 0 HcmV?d00001 diff --git a/Resources/social-twitter@2x.png b/Resources/social-twitter@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a75452d0ed4d223a7bb48762859173af43ee3946 GIT binary patch literal 2122 zcmbVNdsGu=77q_mAP{tcJ)&qDDWWxx$zwtSf#wOR1eAm}Dpo=mAV4xhGC+8!S!2-J z3blo!b!n{%Qmieg6lh^fTzmj7u#|eJU|FJ~ASzkdBcO}!1i|(XPyg6CGxL4-&i&oj zcYkL-*b*D%4RXUz!ZrD4!oW{hKm8e*W%HdQrPo;-&{1iADB1*NY zG$L0Z8thP1St3}SqlI*+RKz1; zUnnV>6s}MRvKSzPFObjyFcbhnX`zfzA%hLD=`UKIxJgEr!j;eTMRNe03gP& z0-=Nn0xYpWL=%aGi&&}7fU0zAXfdt^i@SgY{}9U+>LC>h>lHAZwKxG=(qR-fq{9eN zC4Rb0{`A4(MgQB1o^vg;FGXSWBGmFjw=s3`Beui_M_}bUJOmav{JJ(fJ$+ zQz8*Em@Lu)Hs$~68Wl^1>KKpTjmx46n?c9+)$n7&EBZh>j5B(S9RDTk^}^v?jZzU` zVH|i^p@~l5`(C@Y=_IML-GAWp!E+z`AM)RU-}q5T$iUmnP7$`PJ+%K^$Yr{@(&8~- z-z+)lqgpAtImtgr&pL0RyAOT@)}#w}&k?4Vl^&=q>Is|f9-VDldm`@h!ikA)o+0&K zxZ3$IrWIrIrF^1kNnJF~Gs$Vw3ahgc_n~VY&fguAOkzy(Oge(|w?5h#_-jV`?yC(T zVH|nCWUtAqfRuL0b2zApkVt5?T(^1J$!`_bIc;~IC_ccRy4Y)9ZG6kzZGww6)t)U* zKN5}}TVvj!yPOdrSwG{N=i^E3`8ZIQ3Hu`E@6LTT-F;~mtkiVyYc(@n zx!=!q*d<2?Tb!!@Jw9Y7ed<(-pWPEybookkaQ_uU)zkBGd&G~LDugxI?$b+-85~P*quCUT0|ZB*MG zyYWQozWX*opdoK3*QH-ohc?~VlJ*SQy@?!X5Jjwrg^%EvO4>ywV- zSJ$~BHHS^oFk4u0Th%uwH#ayxcj-B>b`^f+!kL=J^(N`s;jvB&8Ig7N-)wrXN`9hD zju(WjjKlBSar)WS!X?KV9#?NjTW@Yi*5f;9Pp0-q|Fz}p!;_-t$LU{xG8$MEGtF;# zaH;;XGD-QcEB?h$SiJ{L^I>-{SFqJ-SW5N2`{wZWl2)&XwyK|xX=j{5WR@wPF)6|_W zI%{J3Syg8qbl-fZ?~}?JlbNODSn@sy7}!%=v9mlNlJXDO`nO?W=eF#=t=7+qBcS>EM01<4T(0LPaQwzxnAe^JcGm2H z|1;~J6Ns#vKAz>aYN8E)IN}1*Q#RW)2sG8iSDZ!Cn@7Kn>fd^WoqI@%$-F# yGO4k&=ECntJWpvW38VBP)0h25@~vaFI2Rl+)8k?j8GIancd0m5^sOLi-~Ry3yi^eY literal 0 HcmV?d00001

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�i`A1z$ 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