From 99456a35ab3461d35760d74655925860d8a5c296 Mon Sep 17 00:00:00 2001 From: Maarten Billemont Date: Thu, 24 Apr 2014 22:12:18 -0400 Subject: [PATCH] Remove Google+, DCIntrospect. --- .gitmodules | 6 - External/DCIntrospect | 1 - External/GoogleOpenSource.framework | 1 - External/GooglePlus.framework | 1 - External/google-plus-ios-sdk/Changelog | 20 - .../GoogleOpenSource | 1 - .../GoogleOpenSource.framework/Headers | 1 - .../Versions/A/GoogleOpenSource | Bin 2342020 -> 0 bytes .../Versions/A/Headers/GTLBase64.h | 25 - .../Versions/A/Headers/GTLBatchQuery.h | 57 - .../Versions/A/Headers/GTLBatchResult.h | 58 - .../Versions/A/Headers/GTLDateTime.h | 60 - .../Versions/A/Headers/GTLDefines.h | 144 - .../Versions/A/Headers/GTLErrorObject.h | 45 - .../Versions/A/Headers/GTLFramework.h | 35 - .../Versions/A/Headers/GTLJSONParser.h | 41 - .../Versions/A/Headers/GTLObject.h | 208 -- .../Versions/A/Headers/GTLPlus.h | 44 - .../Versions/A/Headers/GTLPlusAcl.h | 60 - .../A/Headers/GTLPlusAclentryResource.h | 61 - .../Versions/A/Headers/GTLPlusActivity.h | 493 ---- .../Versions/A/Headers/GTLPlusActivityFeed.h | 81 - .../Versions/A/Headers/GTLPlusComment.h | 183 -- .../Versions/A/Headers/GTLPlusCommentFeed.h | 78 - .../Versions/A/Headers/GTLPlusConstants.h | 57 - .../Versions/A/Headers/GTLPlusItemScope.h | 225 -- .../Versions/A/Headers/GTLPlusMoment.h | 65 - .../Versions/A/Headers/GTLPlusMomentsFeed.h | 76 - .../Versions/A/Headers/GTLPlusPeopleFeed.h | 76 - .../Versions/A/Headers/GTLPlusPerson.h | 388 --- .../Versions/A/Headers/GTLQuery.h | 136 - .../Versions/A/Headers/GTLQueryPlus.h | 297 -- .../Versions/A/Headers/GTLRuntimeCommon.h | 57 - .../Versions/A/Headers/GTLService.h | 607 ----- .../Versions/A/Headers/GTLServicePlus.h | 61 - .../Versions/A/Headers/GTLTargetNamespace.h | 58 - .../Versions/A/Headers/GTLUploadParameters.h | 60 - .../Versions/A/Headers/GTLUtilities.h | 93 - .../Versions/A/Headers/GTMDefines.h | 441 --- .../Versions/A/Headers/GTMGarbageCollection.h | 72 - .../Versions/A/Headers/GTMHTTPFetchHistory.h | 187 -- .../Versions/A/Headers/GTMHTTPFetcher.h | 765 ------ .../A/Headers/GTMHTTPFetcherService.h | 125 - .../Versions/A/Headers/GTMLogger.h | 504 ---- .../Versions/A/Headers/GTMMethodCheck.h | 88 - .../A/Headers/GTMNSDictionary+URLArguments.h | 36 - .../A/Headers/GTMNSString+URLArguments.h | 41 - .../A/Headers/GTMOAuth2Authentication.h | 356 --- .../Versions/A/Headers/GTMOAuth2SignIn.h | 187 -- .../A/Headers/GTMOAuth2ViewControllerTouch.h | 366 --- .../Versions/A/Headers/GTMObjC2Runtime.h | 113 - .../Versions/A/Headers/GoogleOpenSource.h | 44 - .../A/Headers/OpenInChromeController.h | 54 - .../Versions/Current | 1 - .../GooglePlus.bundle/GooglePlus | Bin 16440 -> 0 bytes .../GooglePlus.bundle/Info.plist | Bin 978 -> 0 bytes .../af.lproj/GooglePlusPlatform.strings | Bin 111 -> 0 bytes .../am.lproj/GooglePlusPlatform.strings | Bin 110 -> 0 bytes .../ar.lproj/GooglePlusPlatform.strings | Bin 164 -> 0 bytes .../be.lproj/GooglePlusPlatform.strings | Bin 130 -> 0 bytes .../bg.lproj/GooglePlusPlatform.strings | Bin 116 -> 0 bytes .../ca.lproj/GooglePlusPlatform.strings | Bin 147 -> 0 bytes .../cs.lproj/GooglePlusPlatform.strings | Bin 160 -> 0 bytes .../da.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../de.lproj/GooglePlusPlatform.strings | Bin 132 -> 0 bytes .../de_AT.lproj/GooglePlusPlatform.strings | Bin 132 -> 0 bytes .../de_CH.lproj/GooglePlusPlatform.strings | Bin 132 -> 0 bytes .../el.lproj/GooglePlusPlatform.strings | Bin 140 -> 0 bytes .../en.lproj/GooglePlusPlatform.strings | Bin 78 -> 0 bytes .../en_GB.lproj/GooglePlusPlatform.strings | Bin 78 -> 0 bytes .../en_IE.lproj/GooglePlusPlatform.strings | Bin 78 -> 0 bytes .../en_IN.lproj/GooglePlusPlatform.strings | Bin 78 -> 0 bytes .../en_SG.lproj/GooglePlusPlatform.strings | Bin 78 -> 0 bytes .../en_ZA.lproj/GooglePlusPlatform.strings | Bin 78 -> 0 bytes .../es.lproj/GooglePlusPlatform.strings | Bin 162 -> 0 bytes .../es_419.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_AR.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_BO.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_CL.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_CO.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_CR.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_DO.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_EC.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_GT.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_HN.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_MX.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_NI.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_PA.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_PE.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_PR.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_PY.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_SV.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_US.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_UY.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../es_VE.lproj/GooglePlusPlatform.strings | Bin 109 -> 0 bytes .../et.lproj/GooglePlusPlatform.strings | Bin 115 -> 0 bytes .../fa.lproj/GooglePlusPlatform.strings | Bin 158 -> 0 bytes .../fi.lproj/GooglePlusPlatform.strings | Bin 114 -> 0 bytes .../fil.lproj/GooglePlusPlatform.strings | Bin 103 -> 0 bytes .../fr.lproj/GooglePlusPlatform.strings | Bin 116 -> 0 bytes .../fr_CH.lproj/GooglePlusPlatform.strings | Bin 116 -> 0 bytes .../gpp_sign_in_dark_button_disabled.png | Bin 2132 -> 0 bytes .../gpp_sign_in_dark_button_disabled@2x.png | Bin 3318 -> 0 bytes .../gpp_sign_in_dark_button_normal.png | Bin 2172 -> 0 bytes .../gpp_sign_in_dark_button_normal@2x.png | Bin 3332 -> 0 bytes .../gpp_sign_in_dark_button_pressed.png | Bin 2222 -> 0 bytes .../gpp_sign_in_dark_button_pressed@2x.png | Bin 3414 -> 0 bytes .../gpp_sign_in_dark_icon_disabled.png | Bin 1840 -> 0 bytes .../gpp_sign_in_dark_icon_disabled@2x.png | Bin 2969 -> 0 bytes .../gpp_sign_in_dark_icon_normal.png | Bin 1932 -> 0 bytes .../gpp_sign_in_dark_icon_normal@2x.png | Bin 3118 -> 0 bytes .../gpp_sign_in_dark_icon_pressed.png | Bin 1985 -> 0 bytes .../gpp_sign_in_dark_icon_pressed@2x.png | Bin 3184 -> 0 bytes .../gpp_sign_in_light_button_disabled.png | Bin 2104 -> 0 bytes .../gpp_sign_in_light_button_disabled@2x.png | Bin 3169 -> 0 bytes .../gpp_sign_in_light_button_normal.png | Bin 2244 -> 0 bytes .../gpp_sign_in_light_button_normal@2x.png | Bin 3528 -> 0 bytes .../gpp_sign_in_light_button_pressed.png | Bin 2221 -> 0 bytes .../gpp_sign_in_light_button_pressed@2x.png | Bin 3452 -> 0 bytes .../gpp_sign_in_light_icon_disabled.png | Bin 1806 -> 0 bytes .../gpp_sign_in_light_icon_disabled@2x.png | Bin 2930 -> 0 bytes .../gpp_sign_in_light_icon_normal.png | Bin 1985 -> 0 bytes .../gpp_sign_in_light_icon_normal@2x.png | Bin 3276 -> 0 bytes .../gpp_sign_in_light_icon_pressed.png | Bin 1961 -> 0 bytes .../gpp_sign_in_light_icon_pressed@2x.png | Bin 3205 -> 0 bytes .../gsw.lproj/GooglePlusPlatform.strings | Bin 132 -> 0 bytes .../he.lproj/GooglePlusPlatform.strings | Bin 134 -> 0 bytes .../hi.lproj/GooglePlusPlatform.strings | Bin 152 -> 0 bytes .../hr.lproj/GooglePlusPlatform.strings | Bin 113 -> 0 bytes .../hu.lproj/GooglePlusPlatform.strings | Bin 138 -> 0 bytes .../id.lproj/GooglePlusPlatform.strings | Bin 108 -> 0 bytes .../in.lproj/GooglePlusPlatform.strings | Bin 108 -> 0 bytes .../it.lproj/GooglePlusPlatform.strings | Bin 107 -> 0 bytes .../iw.lproj/GooglePlusPlatform.strings | Bin 134 -> 0 bytes .../ja.lproj/GooglePlusPlatform.strings | Bin 112 -> 0 bytes .../ko.lproj/GooglePlusPlatform.strings | Bin 120 -> 0 bytes .../ln.lproj/GooglePlusPlatform.strings | Bin 116 -> 0 bytes .../lt.lproj/GooglePlusPlatform.strings | Bin 135 -> 0 bytes .../lv.lproj/GooglePlusPlatform.strings | Bin 133 -> 0 bytes .../mo.lproj/GooglePlusPlatform.strings | Bin 146 -> 0 bytes .../ms.lproj/GooglePlusPlatform.strings | Bin 116 -> 0 bytes .../nb.lproj/GooglePlusPlatform.strings | Bin 134 -> 0 bytes .../nl.lproj/GooglePlusPlatform.strings | Bin 113 -> 0 bytes .../no.lproj/GooglePlusPlatform.strings | Bin 134 -> 0 bytes .../pl.lproj/GooglePlusPlatform.strings | Bin 154 -> 0 bytes .../pt.lproj/GooglePlusPlatform.strings | Bin 113 -> 0 bytes .../pt_BR.lproj/GooglePlusPlatform.strings | Bin 113 -> 0 bytes .../pt_PT.lproj/GooglePlusPlatform.strings | Bin 144 -> 0 bytes .../ro.lproj/GooglePlusPlatform.strings | Bin 146 -> 0 bytes .../ru.lproj/GooglePlusPlatform.strings | Bin 138 -> 0 bytes .../sk.lproj/GooglePlusPlatform.strings | Bin 162 -> 0 bytes .../sl.lproj/GooglePlusPlatform.strings | Bin 112 -> 0 bytes .../sr.lproj/GooglePlusPlatform.strings | Bin 154 -> 0 bytes .../sv.lproj/GooglePlusPlatform.strings | Bin 111 -> 0 bytes .../sw.lproj/GooglePlusPlatform.strings | Bin 110 -> 0 bytes .../th.lproj/GooglePlusPlatform.strings | Bin 150 -> 0 bytes .../tl.lproj/GooglePlusPlatform.strings | Bin 103 -> 0 bytes .../tr.lproj/GooglePlusPlatform.strings | Bin 140 -> 0 bytes .../uk.lproj/GooglePlusPlatform.strings | Bin 146 -> 0 bytes .../vi.lproj/GooglePlusPlatform.strings | Bin 148 -> 0 bytes .../zh.lproj/GooglePlusPlatform.strings | Bin 114 -> 0 bytes .../zh_CN.lproj/GooglePlusPlatform.strings | Bin 114 -> 0 bytes .../zh_HK.lproj/GooglePlusPlatform.strings | Bin 104 -> 0 bytes .../zh_TW.lproj/GooglePlusPlatform.strings | Bin 114 -> 0 bytes .../zu.lproj/GooglePlusPlatform.strings | Bin 123 -> 0 bytes .../GooglePlus.framework/GooglePlus | 1 - .../GooglePlus.framework/Headers | 1 - .../Versions/A/GooglePlus | Bin 328156 -> 0 bytes .../Versions/A/Headers/GPPDeepLink.h | 59 - .../Versions/A/Headers/GPPShare.h | 152 -- .../Versions/A/Headers/GPPSignIn.h | 158 -- .../Versions/A/Headers/GPPSignInButton.h | 44 - .../Versions/A/Headers/GPPURLHandler.h | 25 - .../Versions/A/Headers/GooglePlus.h | 16 - .../GooglePlus.framework/Versions/Current | 1 - .../OpenSource/GTL/GTLBase64.h | 25 - .../OpenSource/GTL/GTLBase64.m | 139 - .../OpenSource/GTL/GTLBatchQuery.h | 57 - .../OpenSource/GTL/GTLBatchQuery.m | 135 - .../OpenSource/GTL/GTLBatchResult.h | 58 - .../OpenSource/GTL/GTLBatchResult.m | 92 - .../OpenSource/GTL/GTLDateTime.h | 60 - .../OpenSource/GTL/GTLDateTime.m | 471 ---- .../OpenSource/GTL/GTLDefines.h | 144 - .../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 | 208 -- .../OpenSource/GTL/GTLObject.m | 722 ----- .../OpenSource/GTL/GTLPlus/GTLPlus.h | 44 - .../OpenSource/GTL/GTLPlus/GTLPlusAcl.h | 60 - .../OpenSource/GTL/GTLPlus/GTLPlusAcl.m | 61 - .../GTL/GTLPlus/GTLPlusAclentryResource.h | 61 - .../GTL/GTLPlus/GTLPlusAclentryResource.m | 48 - .../OpenSource/GTL/GTLPlus/GTLPlusActivity.h | 493 ---- .../OpenSource/GTL/GTLPlus/GTLPlusActivity.m | 290 -- .../GTL/GTLPlus/GTLPlusActivityFeed.h | 81 - .../GTL/GTLPlus/GTLPlusActivityFeed.m | 64 - .../OpenSource/GTL/GTLPlus/GTLPlusComment.h | 183 -- .../OpenSource/GTL/GTLPlus/GTLPlusComment.m | 133 - .../GTL/GTLPlus/GTLPlusCommentFeed.h | 78 - .../GTL/GTLPlus/GTLPlusCommentFeed.m | 63 - .../OpenSource/GTL/GTLPlus/GTLPlusConstants.h | 57 - .../OpenSource/GTL/GTLPlus/GTLPlusConstants.m | 49 - .../OpenSource/GTL/GTLPlus/GTLPlusItemScope.h | 225 -- .../OpenSource/GTL/GTLPlus/GTLPlusItemScope.m | 77 - .../OpenSource/GTL/GTLPlus/GTLPlusMoment.h | 65 - .../OpenSource/GTL/GTLPlus/GTLPlusMoment.m | 54 - .../GTL/GTLPlus/GTLPlusMomentsFeed.h | 76 - .../GTL/GTLPlus/GTLPlusMomentsFeed.m | 61 - .../GTL/GTLPlus/GTLPlusPeopleFeed.h | 76 - .../GTL/GTLPlus/GTLPlusPeopleFeed.m | 61 - .../OpenSource/GTL/GTLPlus/GTLPlusPerson.h | 388 --- .../OpenSource/GTL/GTLPlus/GTLPlusPerson.m | 189 -- .../OpenSource/GTL/GTLPlus/GTLQueryPlus.h | 297 -- .../OpenSource/GTL/GTLPlus/GTLQueryPlus.m | 182 -- .../OpenSource/GTL/GTLPlus/GTLServicePlus.h | 61 - .../OpenSource/GTL/GTLPlus/GTLServicePlus.m | 71 - .../OpenSource/GTL/GTLQuery.h | 136 - .../OpenSource/GTL/GTLQuery.m | 267 -- .../OpenSource/GTL/GTLRuntimeCommon.h | 57 - .../OpenSource/GTL/GTLRuntimeCommon.m | 1141 -------- .../OpenSource/GTL/GTLService.h | 607 ----- .../OpenSource/GTL/GTLService.m | 2417 ----------------- .../OpenSource/GTL/GTLTargetNamespace.h | 58 - .../OpenSource/GTL/GTLUploadParameters.h | 60 - .../OpenSource/GTL/GTLUploadParameters.m | 107 - .../OpenSource/GTL/GTLUtilities.h | 93 - .../OpenSource/GTL/GTLUtilities.m | 358 --- .../OpenSource/GTMDefines.h | 441 --- .../OpenSource/GTMGarbageCollection.h | 72 - .../OpenSource/GTMHTTPFetchHistory.h | 187 -- .../OpenSource/GTMHTTPFetchHistory.m | 605 ----- .../OpenSource/GTMHTTPFetcher.h | 765 ------ .../OpenSource/GTMHTTPFetcher.m | 1955 ------------- .../OpenSource/GTMHTTPFetcherService.h | 125 - .../OpenSource/GTMHTTPFetcherService.m | 490 ---- .../OpenSource/GTMLogger.h | 504 ---- .../OpenSource/GTMLogger.m | 612 ----- .../OpenSource/GTMMethodCheck.h | 88 - .../OpenSource/GTMMethodCheck.m | 174 -- .../OpenSource/GTMNSDictionary+URLArguments.h | 36 - .../OpenSource/GTMNSDictionary+URLArguments.m | 71 - .../OpenSource/GTMNSString+URLArguments.h | 41 - .../OpenSource/GTMNSString+URLArguments.m | 45 - .../OpenSource/GTMOAuth2Authentication.h | 356 --- .../OpenSource/GTMOAuth2Authentication.m | 1275 --------- .../OpenSource/GTMOAuth2SignIn.h | 187 -- .../OpenSource/GTMOAuth2SignIn.m | 936 ------- .../OpenSource/GTMOAuth2ViewControllerTouch.h | 366 --- .../OpenSource/GTMOAuth2ViewControllerTouch.m | 1047 ------- .../OpenSource/GTMObjC2Runtime.h | 113 - .../OpenSource/GTMObjC2Runtime.m | 163 -- .../OpenSource/GoogleOpenSource.h | 44 - .../OpenSource/OpenInChromeController.h | 54 - .../OpenSource/OpenInChromeController.m | 135 - External/google-plus-ios-sdk/README | 27 - .../SampleCode/AppDelegate.h | 30 - .../SampleCode/AppDelegate.m | 90 - .../SampleCode/GooglePlusSample-Info.plist | 78 - .../SampleCode/GooglePlusSample-Prefix.pch | 14 - .../project.pbxproj | 503 ---- .../SampleCode/ListMomentsViewController.h | 48 - .../SampleCode/ListMomentsViewController.m | 216 -- .../SampleCode/ListMomentsViewController.xib | 429 --- .../SampleCode/ListPeopleViewController.h | 38 - .../SampleCode/ListPeopleViewController.m | 186 -- .../SampleCode/ListPeopleViewController.xib | 300 -- .../SampleCode/MasterViewController.h | 23 - .../SampleCode/MasterViewController.m | 135 - .../SampleCode/MasterViewController.xib | 251 -- .../SampleCode/MomentsViewController.h | 47 - .../SampleCode/MomentsViewController.m | 332 --- .../SampleCode/MomentsViewController.xib | 479 ---- .../SampleCode/Resources/Default-568h@2x.png | Bin 18594 -> 0 bytes .../Resources/Default@2x~iphone.png | Bin 16075 -> 0 bytes .../SampleCode/Resources/Default~iphone.png | Bin 6365 -> 0 bytes .../SampleCode/Resources/Icon-144.png | Bin 22317 -> 0 bytes .../SampleCode/Resources/Icon-72.png | Bin 8666 -> 0 bytes .../SampleCode/Resources/Icon.png | Bin 4179 -> 0 bytes .../SampleCode/Resources/Icon@2x.png | Bin 10599 -> 0 bytes .../Resources/button_background.png | Bin 6039 -> 0 bytes .../SampleCode/ShareViewController.h | 87 - .../SampleCode/ShareViewController.m | 702 ----- .../SampleCode/ShareViewController.xib | 1231 --------- .../SampleCode/SignInViewController.h | 51 - .../SampleCode/SignInViewController.m | 168 -- .../SampleCode/SignInViewController.xib | 514 ---- .../SampleCode/en.lproj/InfoPlist.strings | 2 - .../google-plus-ios-sdk/SampleCode/main.m | 28 - .../ObjC/iOS/MPUnlockViewController.m | 6 +- MasterPassword/ObjC/iOS/MPiOSAppDelegate.h | 1 - MasterPassword/ObjC/iOS/MPiOSAppDelegate.m | 96 - .../project.pbxproj | 173 +- .../MasterPassword iOS (Development).xcscheme | 6 +- 298 files changed, 14 insertions(+), 36410 deletions(-) delete mode 160000 External/DCIntrospect delete mode 120000 External/GoogleOpenSource.framework delete mode 120000 External/GooglePlus.framework delete mode 100644 External/google-plus-ios-sdk/Changelog delete mode 120000 External/google-plus-ios-sdk/GoogleOpenSource.framework/GoogleOpenSource delete mode 120000 External/google-plus-ios-sdk/GoogleOpenSource.framework/Headers delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/GoogleOpenSource delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLBase64.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchQuery.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchResult.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLDateTime.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLDefines.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLErrorObject.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLFramework.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLJSONParser.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLObject.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlus.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAcl.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAclentryResource.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivity.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivityFeed.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusComment.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusCommentFeed.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusConstants.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusItemScope.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMoment.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMomentsFeed.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPeopleFeed.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPerson.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLQuery.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLQueryPlus.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLRuntimeCommon.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLService.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLServicePlus.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLTargetNamespace.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLUploadParameters.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLUtilities.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMDefines.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMGarbageCollection.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetchHistory.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcher.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcherService.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMLogger.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMMethodCheck.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMNSDictionary+URLArguments.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMNSString+URLArguments.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2Authentication.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2SignIn.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2ViewControllerTouch.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMObjC2Runtime.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GoogleOpenSource.h delete mode 100644 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/OpenInChromeController.h delete mode 120000 External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/Current delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/GooglePlus delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/Info.plist delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/af.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/am.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/ar.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/be.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/bg.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/ca.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/cs.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/da.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/de.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/de_AT.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/de_CH.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/el.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/en.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/en_GB.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/en_IE.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/en_IN.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/en_SG.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/en_ZA.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_419.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_AR.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_BO.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_CL.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_CO.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_CR.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_DO.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_EC.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_GT.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_HN.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_MX.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_NI.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_PA.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_PE.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_PR.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_PY.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_SV.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_US.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_UY.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/es_VE.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/et.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/fa.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/fi.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/fil.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/fr.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/fr_CH.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_disabled.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_disabled@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_normal.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_normal@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_pressed.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_pressed@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_disabled.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_disabled@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_normal.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_normal@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_disabled.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_disabled@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_normal.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_normal@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_disabled.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_disabled@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_normal.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_normal@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed@2x.png delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/gsw.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/he.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/hi.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/hr.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/hu.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/id.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/in.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/it.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/iw.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/ja.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/ko.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/ln.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/lt.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/lv.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/mo.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/ms.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/nb.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/nl.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/no.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/pl.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/pt.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/pt_BR.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/pt_PT.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/ro.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/ru.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/sk.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/sl.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/sr.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/sv.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/sw.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/th.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/tl.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/tr.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/uk.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/vi.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/zh.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/zh_CN.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/zh_HK.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/zh_TW.lproj/GooglePlusPlatform.strings delete mode 100644 External/google-plus-ios-sdk/GooglePlus.bundle/zu.lproj/GooglePlusPlatform.strings delete mode 120000 External/google-plus-ios-sdk/GooglePlus.framework/GooglePlus delete mode 120000 External/google-plus-ios-sdk/GooglePlus.framework/Headers delete mode 100644 External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/GooglePlus delete mode 100644 External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPDeepLink.h delete mode 100644 External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPShare.h delete mode 100644 External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPSignIn.h delete mode 100644 External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPSignInButton.h delete mode 100644 External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPURLHandler.h delete mode 100644 External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GooglePlus.h delete mode 120000 External/google-plus-ios-sdk/GooglePlus.framework/Versions/Current delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLDefines.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlus.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAcl.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAcl.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAclentryResource.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAclentryResource.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivity.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivity.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivityFeed.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivityFeed.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusComment.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusComment.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusCommentFeed.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusCommentFeed.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMomentsFeed.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMomentsFeed.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPeopleFeed.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPeopleFeed.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLService.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLService.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLTargetNamespace.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMDefines.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMGarbageCollection.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMLogger.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMLogger.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.m delete mode 100644 External/google-plus-ios-sdk/OpenSource/GoogleOpenSource.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/OpenInChromeController.h delete mode 100644 External/google-plus-ios-sdk/OpenSource/OpenInChromeController.m delete mode 100644 External/google-plus-ios-sdk/README delete mode 100644 External/google-plus-ios-sdk/SampleCode/AppDelegate.h delete mode 100644 External/google-plus-ios-sdk/SampleCode/AppDelegate.m delete mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist delete mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Prefix.pch delete mode 100644 External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.pbxproj delete mode 100644 External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.h delete mode 100644 External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.m delete mode 100644 External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.xib delete mode 100644 External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.h delete mode 100644 External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.m delete mode 100644 External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.xib delete mode 100644 External/google-plus-ios-sdk/SampleCode/MasterViewController.h delete mode 100644 External/google-plus-ios-sdk/SampleCode/MasterViewController.m delete mode 100644 External/google-plus-ios-sdk/SampleCode/MasterViewController.xib delete mode 100644 External/google-plus-ios-sdk/SampleCode/MomentsViewController.h delete mode 100644 External/google-plus-ios-sdk/SampleCode/MomentsViewController.m delete mode 100644 External/google-plus-ios-sdk/SampleCode/MomentsViewController.xib delete mode 100644 External/google-plus-ios-sdk/SampleCode/Resources/Default-568h@2x.png delete mode 100644 External/google-plus-ios-sdk/SampleCode/Resources/Default@2x~iphone.png delete mode 100644 External/google-plus-ios-sdk/SampleCode/Resources/Default~iphone.png delete mode 100644 External/google-plus-ios-sdk/SampleCode/Resources/Icon-144.png delete mode 100644 External/google-plus-ios-sdk/SampleCode/Resources/Icon-72.png delete mode 100644 External/google-plus-ios-sdk/SampleCode/Resources/Icon.png delete mode 100644 External/google-plus-ios-sdk/SampleCode/Resources/Icon@2x.png delete mode 100644 External/google-plus-ios-sdk/SampleCode/Resources/button_background.png delete mode 100644 External/google-plus-ios-sdk/SampleCode/ShareViewController.h delete mode 100644 External/google-plus-ios-sdk/SampleCode/ShareViewController.m delete mode 100644 External/google-plus-ios-sdk/SampleCode/ShareViewController.xib delete mode 100644 External/google-plus-ios-sdk/SampleCode/SignInViewController.h delete mode 100644 External/google-plus-ios-sdk/SampleCode/SignInViewController.m delete mode 100644 External/google-plus-ios-sdk/SampleCode/SignInViewController.xib delete mode 100644 External/google-plus-ios-sdk/SampleCode/en.lproj/InfoPlist.strings delete mode 100644 External/google-plus-ios-sdk/SampleCode/main.m diff --git a/.gitmodules b/.gitmodules index 68f8e67a..c7965d7e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,6 @@ [submodule "External/InAppSettingsKit"] path = External/InAppSettingsKit url = git://github.com/lhunath/InAppSettingsKit.git -[submodule "External/FontReplacer"] - path = External/FontReplacer - url = git://github.com/0xced/FontReplacer.git [submodule "External/UbiquityStoreManager"] path = External/UbiquityStoreManager url = git://github.com/lhunath/UbiquityStoreManager.git @@ -16,6 +13,3 @@ [submodule "External/LoveLyndir"] path = External/LoveLyndir url = git://github.com/Lyndir/love-lyndir.client.git -[submodule "External/DCIntrospect"] - path = External/DCIntrospect - url = https://github.com/lhunath/DCIntrospect.git diff --git a/External/DCIntrospect b/External/DCIntrospect deleted file mode 160000 index 3aa31226..00000000 --- a/External/DCIntrospect +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3aa3122645afa96c2354124b96bb714de9ad2d69 diff --git a/External/GoogleOpenSource.framework b/External/GoogleOpenSource.framework deleted file mode 120000 index c8c85aaa..00000000 --- a/External/GoogleOpenSource.framework +++ /dev/null @@ -1 +0,0 @@ -google-plus-ios-sdk/GoogleOpenSource.framework \ No newline at end of file diff --git a/External/GooglePlus.framework b/External/GooglePlus.framework deleted file mode 120000 index 42537e6f..00000000 --- a/External/GooglePlus.framework +++ /dev/null @@ -1 +0,0 @@ -google-plus-ios-sdk/GooglePlus.framework \ No newline at end of file diff --git a/External/google-plus-ios-sdk/Changelog b/External/google-plus-ios-sdk/Changelog deleted file mode 100644 index 2e3c650e..00000000 --- a/External/google-plus-ios-sdk/Changelog +++ /dev/null @@ -1,20 +0,0 @@ -2013-05-07 -- v1.3.0 -- Packaged as framework -- Bug fixes - -2013-02-26 -- v1.2.1 -- Interactive posts on Google+ share -- Improved sign-in and share APIs to use shared instances -- Automatic retrieval of user identity upon sign-in -- Expanded Google+ moments API support -- Updated sample app - -2012-10-12 -- v1.1.0 -- Content deep linking on Google+ share -- iOS6 support -- Shortened class names -- Bug fixes - -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/GoogleOpenSource.framework/GoogleOpenSource b/External/google-plus-ios-sdk/GoogleOpenSource.framework/GoogleOpenSource deleted file mode 120000 index aaccac7a..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/GoogleOpenSource +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/GoogleOpenSource \ No newline at end of file diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Headers b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Headers deleted file mode 120000 index a177d2a6..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/GoogleOpenSource b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/GoogleOpenSource deleted file mode 100644 index 794b8a772467d16af11c6c935b6406d7e3acd86d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2342020 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 z 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⁢@%y%E8xjzCMa~ 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

;s=T;-COUf?V2CAkHsYPejF}&HuAigCy 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

vb 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%0A~6w;1~rZb1k;)+%rdFTOG3~*1W`@ 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

#XIDJZ@yl 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

0ygU|0Z!{~n$jsUzqXhS*1r>wJ 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 z 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 ijkj)Beh>RJ2iGdkLTh_GLaupf@FS47z7 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ð) zW(ul?$j%vcrwa~#i2lVY_@9G!>X1E1C!9psfc;~qac_%Xj@dp(@1NtX2N``!UO%So zeK_4YqOI?kw%2L61wt8C*r5A(VNRO>wq7T$Av z$v$6Ry!VjhdlvU+n|B1DZN4+aJ#y1L{m8g{Ndw%mDD!stmQF)`e0M#7wlxK~gD!b( z$6Vca%sF`jm^S;Cu4DQVFS4zi-VVpOmD4vvIPYP>T-6o1fCi^BJ37TNZJS{F^0snD zt-hr{bV4lRoR>c0=q=DQzM#kS)`_v+qufA)|6)(d+u}>=@#Q5t^ylH^ESHySrgYUsO-z& z@05K>6&!qOrwj6SHIMS;wSA|bE$KAv;0$KWm?l2?-^{>Gb}j=ttSdC6Pe z6MRb_#POYTfr!P&yD!+A@hH9jgjMhoy3V)wbe6%Xv9pBi#jtoE2AAbdCHJ=&GWHGr zl<-iNd97?Eu1IxGx8|uvr`bJd zpSHf{tf><}YkWSmbpuNwsCCbA3Y4)ArzG$2sfKLZqnGcooAxvGNHndrT3_e8E&e+{ z`x>(I*F4F$_#V{3=ldMn?v>x;3xk{%R?%K&kM{ioX{N9}TxS(|B?4T@L65;9si@ITU1=5Lx+kQHLaOq z8z`+2sfH3NRa(+QU1q5yO&&;WNYdn?4HaE1v<-bo$&|HdaZ6{M%%LKpqD4(DDpRJY zsHixZvMp9r+;B2Q`F-B!e(&>~d!KvrgjQes{a(KVC!g>4-0%6GKlj{o&%gV9+zo6) zncD0}pP-wOcUoyv?y~Bsk!X?7{MtiwcQ4b0FD^Ps3BI`KL;&uo{NkeH0e38bqX8TV z;4qMX;5;QZY#k%UUzE~!)ie0Xhje$ny#)f1wgm0xsJ zU7)CGv&ZvSAI@KY2>i+*$7dQQ8(|cS`_|QGH z0c_i>ozATqlu$nZM?|AyX;-T6H>3N`F4Ercl;E1PL3N#zeuhHw?__brZ;O|?ICNkB zbDaMnxgKs(@bL9RENKs4f53~zt3eSn6ThPMxo(#{uT%vE{pp<@2p32ozlAEv-|udSZ2NqM zrQFMvlfT+~A}!{>BU0q7eU$wBbZx zRqKZQ+L=5MIbvKrJ-=Z*h~(b;TzG>nxOdE*e0rljsQiZgo`@blZV{Hh7;L=jdI&$aCC78XKl5(|3;Z4jv;H`GcBIg{5DN zM4rvx;dib;hiAiX7J6Lle0~Qp-^m8Aay!jckTv~3Lh2DxgZl9UYS{S=m=_z)ccIYB z_4jlG)M_ryKeQ8d8(IQ&u1o%`yE$0>qH_(aL~4JsNG*^Y)4WtY_eoGKR2{DSd{W4e zJTo!u6gb5Xu>o9ALw#!$_a@>!a_9HXU-aL_JE*CZGJZ9er1~YovkyEnn0e9yRKA!$ zIEa4vZ7}!AYZ?@|4+{3myDM4UFpZ=GclLolf6_}JAG82RG>O?EvCJ>z|2e!8EE8X` z4$J7>tDCZYZ89XZsK2eXH`^cEZuIvni>u4FIT+d|>dW?awYFuKwzcVphPBt3?O(de zL~he&sgdD^WM6CdYT04Be)*O4!IjvK=@r=BnHQKnn&<7D_V&uiQo%ryGn~}cv$i{T z#kxh^`Zei3t=b1CrIyKRbaq~_)Y?DK$;`{#+S;`?tJwNc^`_QbN5sTZTZgPAwP~GT zS=Q~WE)4nptGdIY%64&UXLm-G)ZLwRzl;`M(K*s$gylU~WS8CCsl2w!Hk5>~>Xtbt zmxsXE6Z^9ZTYFpEI&J2J% zUPeZBSIKl$F?*f;i*8xl+BGi|{D#s(%n&zrwqaST)%`qkL9{>D+Lv?J=kbf){j%{D zaBZz^9jb!%LM-x7)Zt&jUe=;+RYJD^%D$d8zL4(DQnzJ3PZ?BQhZT`fS&5fa!t1ZQ zs(2}UT5Lm}RxFXQYOK+b33t=x-KIRhfu?842W@XvXJ3D4jl7H~H%U#w4zSJ3^@LRH zt~f*Jh1=afFVmg9jR&E#tymjo5UsQS^_|`AOIHQeTsWz~iRG^BRqg5vI#+dO`&7Z% zHmw78U9)!0O_3(w_&ms^L-8BW&!ZT9NyXB`wn$BpCqS7Q7j@vKwgxc+VN ztX1ORzZ;W3Dn4{v|GxNeTL=C}G5LRw@&75_Pw!{3_@_*sJ&4I1Yw~edRd|a9S8BDs zRpJz;9n$N=y{piAmuzzt4w+!kOJ__vqei}bi(h8lYtCFwrOc~;@$5M-mau-$)~y5U zb)0##?m6rAxI2y39dzx7a9+ow7S4B;Ul9E&h2N^m|EbY4G(wo6w()v}&sHVR5#1~r z+dJ2a&Wc{6#At6_qCX&7Q6uMB*mq#fKkgL8t>L>th-l=JoL|pjm8YEp-uUCQXDMUh ze2U1K^7Zof=~{=daLuz9)vVxu)%E@UbT)-D(>ylQSky9 zbqe)c`p7Jnf8D9GXFr9^!cv(8(_T{vlGdU-rCF2O)p;ijzh?O9r)9?W1kdS%OEg&5 zlyK~H&`2Er5tDnD;jpex_vCLCzsuu$O|D(xJH7BX#q=&WxkiPX4Rn{@tHtl|;$32L ze{T3pT_5wVpD+HDm)|FgZ>GU$^hA}_;_47T2&+x*(DgLAv z@5|zS{hzmZ4;g+~*C#yrzqRmt6~5RD9}>?ZX_(L3O>VWqw|n8O7Jj|Lw|U`9#UJ(b zv1CL3pKADvr)I{sn*3h%DL>W(iR<4{_>dR=4e=*T4|4xva-UN8h$pwx!neobzeD_S zFaBned$Ynfdhy%EhxI}_Z!$S-=8>=08_qMlNb;M#__DDVN$2?{_f&-sdU9uj{`0&O zPtln-FZ??e{?7^@@WQcmK>DMGTXj8W*VifRUJJiN;bFTVT;J#y@&n&#a!U+lXKAe0 z^jxXF{xb2$te)U6GP&m~e47{k>nH2%n-}kt`0zdx?`JwAO@6tI`4YD>8(2#d@y#CpeUp<-jIky!{PPz6F@-Pj z!ar=`qY6LdmE#@@mmR&a#h!epg}+hZ)4Xum)f;=g^*`K)|I$Fo-7mxah95M1x8Vju zzAr%jdc!OJNH)Gq|7$dUsIc%~oTu_zI)wj3-lY=@|EBl`FaAN3`;@|uSUHKm$HKQO ze7+}tUra79zS)a+r+7afe`R|56<+V@S!3ZhDm?55N%t?r&-LVFr(}%ZqM%>o`XceZ z{+FAc(01R~HTcnM^Snodl>hyP!xgeQW_tfzVQVdXvBJalMEET6;r)Vts>%IEHsZp5 z<%b#I}8U5ZxE9H660TPSf%)3`gd#GQ6WBT-|#2o(f6=yuZ8&`{DT($pu%e` z|AapvK5Uop_lOVk4S%i0n`QVs!_b!737zfbEDrVBp$vane7(niPJFG$e^Pwd-yy$C z{7lOayv}`(Re1d0im&!~#ygbnW`$4p!k1Y11qz>G>5VB<&lO)~a`4YIxhE?;e7*?R z8D*#Ue?_DJ$2tRC>Bakz_^_PFf7|3fukfYzyb%5o;(6)6U;JrL&)pX9Eea3I`6`92 zweU{ErJi1{>)cjB5Bvotr>W~$#`NpeK2kqv4?8dcy(3oMEqFmtlutyJ3sr3d3f@<%Ug$OAHqqHX1e<&Nr+#oNHKTILols zu*R_3aHio5!|8@qhSLly4J!-))pb;i3m0mNx7YYx#_uqG)c9@2j~G8>{Gjmz z#`hZEVSJ16&Biwwzu5Q&a)E6jycFO*B*?u&M5$2fZ?_uxZX+n*!i5_!_ULVl6_Rr0TwUm}0C{5A6G zcbpBgD}}F<@0QZ=T>ra_W*)!aXx1uD8_in9Malv4tW{)Xx1ve1g&u(@8928 zIO`TK)ivU>Zh;M6Xx1(M4qEy+i@O_IahWT9)xsOp3H}gTey{q%9~*s8w8k?ooVBh0 zHTsa~C#sPn&zja#jb=S-y3t2PKhJ2^u`V>4HLQz`X8o$(Xx6S4Kr4@|EwvcU`pQP5 zGYWsd$+Ncg5u;Cueh6AOm2->OYJ<*+{%@m4M88mVMEEYzY+FGe68+akpA`LNqi5-! zKUs|enI)nxGrCK3htZowZ!wxfdG9j%fM}Wy-$=7jC~)+*be~_Y`|twktdh*jEd14y zd98(?Q1~T^@B-a8)`zY!n)SC<V-ec=@0Z^=T-lm`-=XC^nZBtZ$0`8p8RnypKPj!ao^Do zXZL$LvHKU+3Ez-~I-l!>U+U2dJ(}-a!no}o?LJ3exu7rW_DYuaUD1>4xTdqK5PU^X zPgk&y5(F*k?qA!Ny=GakAg|-CWj{^7nVqTrXv+pWd?mKTu3qbYY%bWsNW1EG zGfFNN_Pw-mR&sHfcE7Y$RvI4sf=T=X7i}_?h+5XX9gJwK$bxX`_c#fci{AkSyF%d^ z^6Z-4+`5%+%PAUkYw$~a(R8m_R+1(EJE5W_v)D&Q!4^wNF&q7TmXfRC-BxKz+X|n9 zVANn`v~9RxI}WbBxqj`sb!o$K<*jwJ8g03?-Mq4`4CqILRM@^;&)Tjov$PcMAK1q~N!x&-1-QvXZCh|EqCxc(w&r95EU@`hqJGk? z#gbT4+iEO{HubH?lBlU$k>?)}aw)YkUfV_hOYCu;BG5@SPCZL>pDZF9mamxSir=7t8|oE0~0!Ce*#zakWV z1$w*=Cj9iRxJ8!!iCu|IvHMC=Lk4Eg3G+02PQ7QjBz7kysbd(4k5%C#w?gVk4`KLZ zO-;Jw;hH4cv2{F&%DNBf*{-7lYmw9v&VkA91h=m_Y&W=BwkNZ(VyWF{c zw|L2Am(G##GCB9%VpG@J{snDa;a7{=6Hoa4?(LehWU7Pl*<9!Z*Q+tuUR?t<z8kf7zx+32#s^v`becXP+m`tKE4jT^7UJR5W;y~Ys3+#uD^yON>8-km4Mf^ilL^sJ;1$eTw6i}a zNOaA``ifllk6+7J++JPG-!q}RGrYS|e|6e*+VDF#fZ(5w{j5?f9KiN}GW!z)#J`)x zwEUKx#Ilpdn7Gex*@52sIqpz6p~`g~KV9QAhChEDetjsjIDADgyy+WK7@npL?FG3Q zGRvb&=KLRp^yq>a=FVJpO@F3WUH6My+q!h5tYAyDAQJmE#Kuez#|682CqG-*n7LWA zh%nXQj1zqz_XfuqrX#}eS%W_zp0(M+Vw{Ce4wghyh@aopy;BaSHq~$#>2H{;jtuEK}lkbs#ue=74_AV>@ z&|q*diHyq87t(ipRL)p>$8~O94 zqgwt#`ODChjmKoSiO0?rK6K^m<&Z9Gs>ja6?AqA5n|fV) zl5E~ALt%KP#YS zqOdjMc}K}T2)|k$xf>MD+LxRQzh3+S#|HdT@%ueqYwa%H1qyGlc--sfif{6GEyoqo z)Y!eI9*X3I{t3+YMU`8-&E4FC>1gP{pjM5h@QZf26}bC!Bl|PJ1St{1Q$< z372=_#7A$nP;uP;gqAj4IrTia{RwrwEQ8m;5P1c=^?8|3aJDE| z)U#IWn3hCw%IZrd zT#PNp#p2llmzI`-zFs2MXpY(g%Uwm5y1ph^Uq5z3nrBAZ#nzfb6)XE6Zhwzk+xWzjOuwv znvXWqt5gTi)=531Nsi|~Cpl34r1Q)}a8sF&(k~Go*RFYox(|A@K>+8^6_V^}H%Nx) zd-O-$g`0;dD>%Af=gQ4T8zsfrhj3mT#0vC58bZnIl>QpXXr>S#ECO5pptED66JROtICHF`N)ma zS8{b$7UJQO=8~f-Cv%dGN}xdn_vey4r+DgvaLShEwioLwA`+WRlCAtb2lRJ%H{}WD zk~t{vOG^eZ!CX=obdI%M|HIFIG&}0o=X~p~Y1M8`>C~(!=S&^B_{^;uMNtkM{A-1@ zkxA!TNpCyF8I>=-P$T_qIAL;wHkBgtX?dO#TzoFXGf4YSa?~}?!*%j+lJ7CR-H-+~ z-MqlfEkWPalYy9V-{p9#o^x&FR|!Z9 zG5rX0HAP#b+$e zeP_%KjlL7217hej}a!4I=+s?PZ?~NjG5h>Bz=q=(HRb@i&YpKFegeUkDe1n6Nl1K$>ec$L?*fD zjFQ9OA*erxaq{f?dK*`J<79outP=-i$H!CIubHJuJL5`FeTVbvo1B}<__#~YWjHQ9 zu8#6Ahbmhj!m?apI@Sr+E zbyt}^$_M?L@5+sjIh(dc5$reW3sIx_a1T)G_;^A(DEO!a<;DdDQfT zP;Pw88TK7Yl(TuHz2`!mjSM3jmKz`M)eD<0(7_>J#xrv9I!)cLIU^n1hdria zvvk<|C9WfNjLm`|@6x?&fJB|AWAZU}rF3Y_kQtBZklu}`Uqn>8SZ&Nw{O1OEB-mi+sSh`6bcfI)+32&39Y-w(5vA!ZA!5F({fFkW3(f;ViYwM|wt`kAT~=S;zlnQWT$^hGWNQ5FzxBJJ&c z7CZdOqZiFusNFW5-R!XwcWr$={r$Z?{kdhq@~g|y>TFM2PkYv%IJylw_4+z4n2_jF zcOgjCnTxrqUE6{(8{;OLnhD;jIcQRDwbbb@S=6;RX?dX|+ipq7Hgf{I+et~ZFZqGsS}(F?GpFDM@MVZ(_)p> zNm#YWK#y#rB$Ok_+I7M8P`F=*h9}dmh4?@sh_I@4O=nlIUa(rmYr4aggF0^t_}4s=x)a((!9($Z^65*_DR>9+-Nj)tKNOLajWvbQ~sajV+}aYy9YWR z7(7t%(6A4ShZlRB#4GMeisi!VOyY6uQnaxr3l%zu>13spla2z)VSbG)jvEe|;JKY57lzhXK%d{!xV*ka&Y&3}{++ab@*55$M<@#%Um(_Yi^Pr7lpL-~l`x6dTV5szT*8+(AHPX}rjrzZh6)`o&$GFC36A7xuW9!sDc)d${#Q<- zpZmf$vfP)nbdus9OGu|}l5}`(uC)6ePw(oK_K>7+u_`ZKe}DaZPB%&4xDw@g<$i?k zb-ufe=j9>gr7FHSt2j9BryjjbztuO-;oYLs>K$Ei*CgHXG=G*LM?BJdEcKqGk6*cn zJI*V)^>3Wb?{n1bA1g*7pF@Z9NyzKu%HF$nV9AU7iBb|`FnOzv2MT&4Q< z{V}#klU-UidflBC&*Q+kwVh>p-rb>IGw zY$7tg_xJ5t_^p>eU-l5|{A;4Qwp{+jy7n6Xn)ds-)+>Ky!Zr4WH_LbG+A?7wJ?~8P zP6cmIh>P9>@}Et(hTh}yKb%A_3$@Rb?Z$Y1Z&F{V=6v3DvQ<W#UUo4H`r*&2fW-T`nsr#-Zz=5G z#fRmE|AF|hyzt)>oTm@S~m{_;-7H;O~$}PmjVYt-Pxg)+zpk z$6sr5vQIO{{->Nf?{cwtzOf4V3&e-zqPyojOjs^>J<4MfrWan_VWC{`yd(7*tKdBe z3NizF)ei~vdaf80zD2yk9M3Ze-(h@<@y*6J8Nb;02IK3EuQR^Z_-f;47++<4rSSrn z9(mP}y>J$ujKXsr!Q@5mh&qW_rTQNtsKhYb%I9yB~) zxZiNxaG&8`!##$(40jstFdQ=+HQa8v&2X#Xh~Z|#A;XP^gNEx32MlwDy@p+e9fs|O zEru%$n+=y6HW|(pQh#+q>TjlydY&Py6iydX&s7#a&BAppXa{Ov#2*#DRquPg2Ueb^ zZ4=%m+$vM6OAQ+!7&ji-qWG6r!&|h}?W3a`i&w<_ghQCq&;YA#$}sLWtai5V_+*^c@qT z@2C*DBSPd33z0h{MBhOn`VI(@F?&1lYFOgH)t(KC(a+(nJiBcf+P%d#*%cv;O)3wDQT>jxh^ACYi4p%^m%%(d<25 zsB7pP6n%}+ti`T3n*GD~8+}al*NkQz_6g#N%O2oGMza?CMx$AS-DEWTcONsFby#!} zm%X}Y$V0OhyU=L%*KRSI_1M2PnswM8L92|MSK&7@h}$BWT6yR}VVlwHb3I^mwH6N! z8O^>Fzfa`i3NJC5b=g%$v!`^Q(X7pW-e}fje{D4TL9^u1!@BH^MzbFKPNUh=;pa<{ zVNI6xR_MLLdaad0vmdk8Xs&<6Xx3qWX*7E$m#O^7vle@+(X7FK+~{%9{LC>ixWc zbx`VxvplTfLvxO20kmY;>&P3;8tq}D*{67p9!_Lfr|mGBeFTnyI{l*gNoT%q=iKif zYq16zTdi}9ZWMjB(Ji9iYV>;1A2NEI=pP!rSM&^d^c)s88;u>-2aLu}>Sy#k^KB06 zywBCM3eB2vubww(){Gx9nziFYCc~QYpQ#RzVLcgpwa~01zuIKn8ncD7w#=Lz8Mnr) zx`Sq|xxw_X=KQFIv-bQe3um2rnVv)BS+D-E(X3lP-}1)#_N%Qd?8TfintR0HiXZAftEu6La zFIYHx8qB515BnBxGn&1LQyyJ^BM4&05bN{5z@O z1mQWGA+U2}_L;zAG(HeXJK?)1_a#&D(l z(x<0Hy1f4A{SOX$PN5*NTkgj@*EFvTPkK+Ke~6_Uk9)3ZPvN;w>?!?t=bC2p@$fZG zes809Dp5-hCM^?e)&y^klV`!*m!MlLpNUf8^lX&MP9Y<1cs9j+__AfP z;ft1eLW0{DX|0pzJ0U{ZRuoa6p7#XRWrZi}^Xxft_R^>R9L4(Zb9t;%qL#0pXerJm z$>LbGd@~B_wpFb0pd|idC`9Cb zmv17`8jM6f$IORu85+Ja9235Bs)Iu7)T7yn&M(fTzl*i1WJTv%JIPue!##>B3M0F|!pbpLJG;IvF#l9y&*{o+w!L7}DaqdHcCF`Us)Mz7 z&d?>f28HjH2el;cytZkan~FWBf0ZQhar}11^C2oSg8J=VG_O9Kj#PV2>?>&tC)30Y^;|+eQth4Y zl(4o{GwtPdq}p>DmyScyF(4h@*-EHCi#18H@dYVUMJ5o;yKS!eR!tG#Nei8#NF zCD}XOD;?A!=cmyzE*-W%6|d7&drq7UMMutb97xyEiN%u6?o~Y{za=6aik=zZPt^W@@C>d7T3{|v4 zRIumNuS^!~IYkT#4WQe8n}eftp+TVqijm*KA-m!GdjqWzgF-KK8bb?7-fwe!Pr}2S zE+$IUMAXlv%bAEO7B$U&Q1JU2y}lJ8`t`un&}1fGgNROI0anNZ>n6_bPj_}8=j@b2qTf&}9$ zcTY;KN(6_g)IKuTD-L}o?#)JXZizEQAC>3*M7img@i_YFarq>tN7Fq|ob7v_{6&VZ z6uw4&sqvgSpyx$X9s%y*qYu>kW%?iIm*X#W2qQ5Dx_tbfxQ+6g)PPqp^sXzO~Zw<=m z`1dLdIlZ69j+h*s-6rvz=aPF6euF%6I!`yY*$cl#{BfjA?q>1F92>;DRy6Tmsqk&4 zpYg-R;yK$P=f0J?K>S{hf3Elg97b8iPwmGIO(g5i9zIFIO$yh& zowisA-(Y;b@zfjFYmKiqUSUq&+J`$UNPGo5c@om|oBEB@L0wnB?|xTYk9WnGc;b&5 zZa3U!xYcmPaI@i%;YPzj!}W#(hB?Dt!!ASa9qG0kwiq@D$=`e-`J?=*?%(V0o;*kO zI#YU|Eu=p6E=)X&iCm@0QNcR;MD@DgK>=;3=TPk;GhZ1E&q8(>&9igA(H|21QD_x> zLiDGMrjP!d(e%$>GMc{m>qb)vyuXM`pL`rz6-9q^zC1L~K7AoHeM5`UJpXq=t8p@x z;Q4``5Y10xL37CS7e;f&=uxH3IV1Xv6-Lvqa7J1Go#V_@NP{8$9*@4mqp9;y<`Iwn zmPgZX{yxtc1vCDV(>mpkP`Ecpu!&S$&Zt>AxuxdPpDTG>KZxSJ%S!hCOOtYwjMQCb z%9A|PE#1X+vMKN1$Zw?-GguvLPETo9batKXFU+1BE?||}YjHQjRv?RaBWah;mz-oV z%NI*u6mn9NEckFexlR)oQJi>MwWh}?EER?JrEP&B`a3L_R##tIH(OzI+~wJIb(hVZ zTU}jWcUgQrVqwo3tStsh5s!5pqDy@Y>j)sjM!dQa=ccj_!I|%H9im1rV%~Rpiw!yj z`s2?Llhz@KPv1OUb9Z%HnK2~}%JFJ+uG~6AyL4=l=Q~l~nVwL`q`w1tQo=2g+@T6k z_n6tEe7Ki{iyizaw+_*yh+8CDNr5~U&Bx^H5XYp0g7Ymh@urK>?O`n7)rZrOI(I)Q z9VZoMhv}HBn7oI5=iirZ+3;Msa`~d>#+te<6mr$0}wT!GXttOFqUN|u^ zMF~1m*D?mAqgv&ulMX>A`56-JmnCT(g1TgU(4@IEX>Zj)&YDWRPE*$*c1Z{K zfphri*e@Mwa=5sT)OCnG(xLyEF6oFlPsilz5c{M+Rg%fYbSQWuI=NPE9b&(PcSvr% zm4$dXEfsVGR8U6h?2yViPdKD=;z#vt`0EfCDjd&qGDlu&Q{BO0eMMwq>kv(<)BHUc z0~+2vU4Mghh>C#HI>af}eP9pyI8?$q#A@Xtc^%@E63*X!n!j7tqtOf-U#b}SErXz}5Z3u^z)ai~a-$-x=e(#p^~p$MsvphutXrdhub`41bq+ zp2MWIoBzx89o~uE@;UjxmR}wg+RDayd)$qw6Js9ZJ8VJ3U6;aU#pK2l@E1NDxssRS6Da>3T0XMw)HG)Q!&;(Qn9eB!bb|`SKBzyur*WS%nz=5vMESim=DP9qGsXtImy;Y-!#m=gYLD-d|Cl`U z<1ZV2OL$EFr18HLo{@jH8vBdo7s_8P-zrZ$*7V@}jORtES4m+lkG#a)A?1zoDSDxN z?3cyM@pHv(PG}qGqa3Kd&C(6?zd`&a`46Pz2c2=ZO=-mQ!`fjyKTlG=&3;c@h0BkU zEYxFK`sj$eTD9SLTG$Oua+I5P@gXbU#|l~{u*+Fr5COtV>?E!WDU8_!aHKI%Rh3gA&2>Zzt-ZhhRi%ru3%rwJq+F&a#(LX&#WPb<%MSr z`Iw~(uPJ099eA3K9u3!mG?t63Azvnbv92q6MS~E&-gxdme68`-#&fTc=b7PprSSsC zlcpYv)HUQ2y8aYhpAaf7XJ_CQ!ein!o_BTz$nO!8J8W`?gvcEf&J`XIUMk!#MBlg& zefxyS?G>VLj}U#kgvjj_BDX_`+?Wu3qeAp;7b3S!h}>2oaw9_YZ5E<$NQm4Y;bzUe~rRSA)sCPc1Mh+KsbeFCR% zrWyxwl|so>FnOZA(8j?-Lc;e6k=tQB`!`%4G3>SQ6++||8$Z{s*BQ<-tTkk_7d_R6 z3}{L3gq}t8upb1!Ux?he;XXt5YY5*aM1HFf`9Y!nJ9|VL13P;}wDT^LYc{z?A@Lgw z=Nr}=&NZwvR6pnBYYi)fq+1~*-IJ3OhAoB-Lh?UfNd9Yul(R-i{Z6@~)Ghp2uy!yaI`2g5!tG~?3m8_l?s_Dncq zyJ}T9G~=q}(DKZ&ZZMkp6}J5e?-qTt(aftjy6`8efCgpiK?`56aBTl0&)n*xCd0V* zJ4Q24`JK^>IjdD5^e|UhU^L^)E~A;R+-Edn!cQB`oaIMGGyZ#)bfJfN3%|b%%^2=B zqnW$>z0r)dzGO7>mtPpoyyXRoPh4*5>x^dZk~5k)%X^J(5&c!8nYa8JS}!oxiYlZF z`l#rOj6N;;2BT-_rmr=6u4wENBHtwX<*K_Eh-ci?YjlI?ztFuSoG}&qPtc6DK4~(H zx&Fvx7<+xwWN0+6GnrYU>2rw7+^fT6m}9=fWSHX}HJW+ceUcID92nA17ZK9`t+ydvBuw2uZrf?htrYz9Rc(1KP4_V)N={>NZosXuY|Q0 z=EmrritygJpzz-IboVo5)V*$8uzW#LdaraG5ZkMKP^TR#%kzqt9c4OF&ms&eVyz^Z zYmomYZ4NLc@m-jYuGaqkr2YFH(m@?EM?uG^bm&&$;&qz3f4|dow406{={i#P?{`Uu zqGvkz6LnrbCf~p3n+TdYb1dJ9-3ZUMa{Kq=($Ooq0Y#!dLZ>2igf!vI)AuNlIZTE2 z`q@SoTR1<#8af_X+M6ETRJW^GUlEzu{{3NH%-@rf#^K$2bdQ4l`>}x1{yj@L!M62A zsD%A{Ch5uh_bhLO-w|+JJlrpztr+<&)ueep$2FxjvVZ?{r!isw{u>e=-t-cpMECE1 zAYJGF9YI^Le;yn*;}?r3-61djO6r2CeMS)dLErSR2ZH_N2~`%)4DNuQU#-1I`2P~G zQaZ==Uy2H!OL!izuseq5tSXKC|84ur^x67-l+1Mb+49jjqPrIfyPv@#soI6xTcoeV z-6Vu&o#}QVdq&Lpc}7^v!sFfTlLB;O6JEc4yKJIZ`Fa7^WtD||P= znqSDjSA^bQ?z@3QCP(MCNkfGplY`%2aCBDX9g>>L~2GwrdP(-qkJs;iM$es^;z2u*yXmvvP zTH~vYSD3qQ?IW`1gFFf8xh<^0l0Lk^;eMg|dAByL$J*I)CcSM62e%rI7;ZKkGTdl5 zXt>^Rz%XanYuIJTy+VJxVT)mdko?RSk{`;e>iz%3cLID9#F{gXwPtAg4%Qx_={r6M zt%6U8=7k7NU%by~`r-XX(+3|kno9Vl(e%Cl3ayHw->H;`=2@rDgQhQFO% zTYGOzT9k0o=dz07A{16K((M$atS`)|3%(Pmt}fUqSjc>?wL8~eTwTZ{t}mS80j>_7 z&WGL`{!MJ@ol%=cG2pdp4DC1*51zki`shDT->@g*Ku*L zc498->RH{{otcv8nyfoS+|!-y>(96oxow%gY-kMX*4DLMxy-Gd{hc>;Wizc^y&bJL zWpkZvtzDU$vRZuT%eJ|b$Nhr#&hFKj_H2PH7R}8|#J<#m;9n;CB_6*_v|fSEas5V7 z;c^Z<;}8FOxA?FnhD$BA<@U= zPs(%Ss^qKX>*O2co8(*ML$_Ci+Jqag>0Z0DGVr4chu>z`M~ojbe$e;<<9m(oFuuk3 zX5*WTUu=AX@%6^n8DDFBwed5IuQI;Uc!A5`ETNja8`ps~##b9MMj#wL;B-Uu!Bh7j zdO_+Q6gYgN>WcXvuGMJT1pEDj(;nF4ho&v8GrC>$+l{6TY%-er@5XPE=ic)>7R2Sg zvy1`FJ$K_e(cJHkTR8Xn#quvu?&vRGWpqw7^-DN&yER6y7k#(UgQCZbW@+TpMh}TT zVl;g;V?^|fh<=JZ^j6^ujov1_-01B>{dZo#!qUoxSB9^LWw|~*X$x6&yDqyb+n4Qb z%Vt*ItO@i2bpXrS^ul9{VTtPlO2e-5_SJ2(nBMz3k+gomYFcmvS z_3G@{KLFJoIufNP#ug*cvSU3`p1+H`ZV8JSyJ~OcIZXarwA>) zFgzE{$K?ADd;>{+9F`8^jj9&Nk5qg0;dG>~+1E-3{roZ0!EdX?vJ|;5N#74*&xv)j zN(L^TODId~9!9Hl{E6Z|yS$FV;H_lbCLIk*v{pK(he~DYEna>g{Wg}g|FBChAKl)< zw|~dRgi`QxD{sZ6sp@VP#sDp`g9jW8Tz0#ronO^CLIWHfR?>~%70pp#4m<|PR zL?_qE?LQolaIfSBtt`aDsfs%SDkvlE|CGx4BH`v|Det-g+{z{s`ZFP(`e3Z9M<>;t zEY?>83peC9U=wE3qLcXz3rYE-?+x@JEc7Q&Zm<8@|wAu z8f)r?H~fb3G}g@8w7#Zxc*9Qut|q_em;$SZH+(M$n3-R6TmdtNH{2WqOwTWxP(ao2 zhA#&J)AEZ>D8PN8m|t{Kh5KS-O}(p{`AU4l{uOUpdBcs5=w5hMnuZm3c+(Tm5ZzsQ zvWqg~#z#df|KTHD(@5pC^qmY`d6IZZ6G+5QZZo1Q-RAzxqTO>6nmQSoKmXpNh=XfX3) zEIhgQW2W_{p0zo)acozi@a7D@2#h5X|I|^JH3L$T0WR!W+nwuMSGp@?*O&BYI@Fn4 z7s_9kT}@ew6%*7$SQMu&PZZ=VTt}m7I&;&y z1%0_r4TsuVgL+jjs(Q*T>%2W1e(HF=ef1btmR=g!g?(9WR0jI$o_1m!Xbr8fGD%0DlLEWn5Z&;S?>r_jK-1gRW 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 K - -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/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchQuery.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchQuery.h deleted file mode 100644 index d4fb1d38..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchQuery.h +++ /dev/null @@ -1,57 +0,0 @@ -/* 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 -// - -// Batch query documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Batch_Operations - -#import "GTLQuery.h" - -@interface GTLBatchQuery : NSObject { - @private - NSMutableArray *queries_; - NSMutableDictionary *requestIDMap_; - BOOL skipAuthorization_; - NSDictionary *additionalHTTPHeaders_; - NSDictionary *urlQueryParameters_; -} - -// 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; - -// Any URL query parameters to add to the query (useful for debugging with some -// services). -@property (copy) NSDictionary *urlQueryParameters; - -+ (id)batchQuery; -+ (id)batchQueryWithQueries:(NSArray *)array; - -- (void)addQuery:(GTLQuery *)query GTL_NONNULL((1)); - -- (GTLQuery *)queryForRequestID:(NSString *)requestID GTL_NONNULL((1)); - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchResult.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchResult.h deleted file mode 100644 index 9675aaf7..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLBatchResult.h +++ /dev/null @@ -1,58 +0,0 @@ -/* 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/GoogleOpenSource.framework/Versions/A/Headers/GTLDateTime.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLDateTime.h deleted file mode 100644 index f6b1ffb3..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLDateTime.h +++ /dev/null @@ -1,60 +0,0 @@ -/* 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 -// -// This is an immutable class representing a date and optionally a -// time with time zone. -// - -#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 -} - -+ (GTLDateTime *)dateTimeWithRFC3339String:(NSString *)str; - -// timeZone may be nil if the time zone is not known. -+ (GTLDateTime *)dateTimeWithDate:(NSDate *)date timeZone:(NSTimeZone *)tz; - -// Use this method to make a dateTime for an all-day event (date only, so -// hasTime is NO.) -+ (GTLDateTime *)dateTimeForAllDayWithDate:(NSDate *)date; - -+ (GTLDateTime *)dateTimeWithDateComponents:(NSDateComponents *)date; - -@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, readonly, retain) NSTimeZone *timeZone; -@property (nonatomic, readonly, copy) NSDateComponents *dateComponents; -@property (nonatomic, readonly) NSInteger milliseconds; // This is only for the fraction of a second 0-999 - -@property (nonatomic, readonly) BOOL hasTime; -@property (nonatomic, readonly) NSInteger offsetSeconds; -@property (nonatomic, readonly, getter=isUniversalTime) BOOL universalTime; - - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLDefines.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLDefines.h deleted file mode 100644 index b12eb9eb..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLDefines.h +++ /dev/null @@ -1,144 +0,0 @@ -/* 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 - -#ifndef __has_attribute - #define __has_attribute(x) 0 -#endif - -#if 1 - // We will start using nonnull declarations once the static analyzer seems - // to support it without false positives. - #define GTL_NONNULL(x) -#else - #if __has_attribute(nonnull) - #define GTL_NONNULL(x) __attribute__((nonnull x)) - #else - #define GTL_NONNULL(x) - #endif -#endif diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLErrorObject.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLErrorObject.h deleted file mode 100644 index c2ec67db..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLErrorObject.h +++ /dev/null @@ -1,45 +0,0 @@ -/* 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/GoogleOpenSource.framework/Versions/A/Headers/GTLFramework.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLFramework.h deleted file mode 100644 index 106f420e..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLFramework.h +++ /dev/null @@ -1,35 +0,0 @@ -/* 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/GoogleOpenSource.framework/Versions/A/Headers/GTLJSONParser.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLJSONParser.h deleted file mode 100644 index d9715295..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLJSONParser.h +++ /dev/null @@ -1,41 +0,0 @@ -/* 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/GoogleOpenSource.framework/Versions/A/Headers/GTLObject.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLObject.h deleted file mode 100644 index 43935adf..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLObject.h +++ /dev/null @@ -1,208 +0,0 @@ -/* 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 -// - -// GTLObject documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Objects_and_Queries - -#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 GTL_NONNULL((2)); -- (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 GTL_NONNULL((2)); -- (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. -// -// Set nil for obj to remove the property. -- (void)setProperty:(id)obj forKey:(NSString *)key GTL_NONNULL((2)); -- (id)propertyForKey:(NSString *)key GTL_NONNULL((1)); - -// 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, the -// itemAtIndex: convenience method, and indexed subscripts. -// -// Subclasses must implement the items method dynamically. -@interface GTLCollectionObject : GTLObject { - @private - NSDictionary *identifierMap_; -} - -// itemAtIndex: and objectAtIndexedSubscript: return nil when the index exceeds -// the bounds of the items array. -- (id)itemAtIndex:(NSUInteger)idx; - -- (id)objectAtIndexedSubscript:(NSInteger)idx; - -// itemForIdentifier: looks up items from the collection object by identifier, -// and returns the first one. -// -// Typically, items will have a unique identifier (with key "id" in the -// object's JSON). This method returns the first item found in the collection -// with the specified identifier. -// -// The first time this method is used, the collection will cache a map of -// identifiers to items. If the items list for the instance somehow changes, -// use the reset method below to force a new cache to be created for this -// collection. -- (id)itemForIdentifier:(NSString *)key GTL_NONNULL((1)); - -// Identifiers for all items are cached when the first one is obtained. -// This method resets the cache. It is needed only if the item list has -// changed. -- (void)resetIdentifierMap; - -@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, but 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/GoogleOpenSource.framework/Versions/A/Headers/GTLPlus.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlus.h deleted file mode 100644 index 220410bb..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlus.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ - -#import "GTLPlusConstants.h" - -#import "GTLPlusAcl.h" -#import "GTLPlusAclentryResource.h" -#import "GTLPlusActivity.h" -#import "GTLPlusActivityFeed.h" -#import "GTLPlusComment.h" -#import "GTLPlusCommentFeed.h" -#import "GTLPlusItemScope.h" -#import "GTLPlusMoment.h" -#import "GTLPlusMomentsFeed.h" -#import "GTLPlusPeopleFeed.h" -#import "GTLPlusPerson.h" - -#import "GTLQueryPlus.h" -#import "GTLServicePlus.h" diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAcl.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAcl.h deleted file mode 100644 index aad4f65e..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAcl.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusAcl.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusAcl (0 custom class methods, 3 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusAclentryResource; - -// ---------------------------------------------------------------------------- -// -// GTLPlusAcl -// - -// This class supports NSFastEnumeration over its "items" property. It also -// supports -itemAtIndex: to retrieve individual objects from "items". - -@interface GTLPlusAcl : GTLCollectionObject - -// Description of the access granted, suitable for display. -// Remapped to 'descriptionProperty' to avoid NSObject's 'description'. -@property (copy) NSString *descriptionProperty; - -// The list of access entries. -@property (retain) NSArray *items; // of GTLPlusAclentryResource - -// Identifies this resource as a collection of access controls. Value: -// "plus#acl". -@property (copy) NSString *kind; - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAclentryResource.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAclentryResource.h deleted file mode 100644 index 30634e8d..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusAclentryResource.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusAclentryResource.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusAclentryResource (0 custom class methods, 3 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -// ---------------------------------------------------------------------------- -// -// GTLPlusAclentryResource -// - -@interface GTLPlusAclentryResource : GTLObject - -// A descriptive name for this entry. Suitable for display. -@property (copy) NSString *displayName; - -// The ID of the entry. For entries of type "person" or "circle", this is the ID -// of the resource. For other types, this property is not set. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The type of entry describing to whom access is granted. Possible values are: -// - "person" - Access to an individual. -// - "circle" - Access to members of a circle. -// - "myCircles" - Access to members of all the person's circles. -// - "extendedCircles" - Access to members of everyone in a person's circles, -// plus all of the people in their circles. -// - "public" - Access to anyone on the web. -@property (copy) NSString *type; - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivity.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivity.h deleted file mode 100644 index ce4b9417..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivity.h +++ /dev/null @@ -1,493 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusActivity.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusActivity (0 custom class methods, 19 custom properties) -// GTLPlusActivityActor (0 custom class methods, 5 custom properties) -// GTLPlusActivityObject (0 custom class methods, 10 custom properties) -// GTLPlusActivityProvider (0 custom class methods, 1 custom properties) -// GTLPlusActivityActorImage (0 custom class methods, 1 custom properties) -// GTLPlusActivityActorName (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectActor (0 custom class methods, 4 custom properties) -// GTLPlusActivityObjectAttachmentsItem (0 custom class methods, 9 custom properties) -// GTLPlusActivityObjectPlusoners (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectReplies (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectResharers (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectActorImage (0 custom class methods, 1 custom properties) -// GTLPlusActivityObjectAttachmentsItemEmbed (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectAttachmentsItemFullImage (0 custom class methods, 4 custom properties) -// GTLPlusActivityObjectAttachmentsItemImage (0 custom class methods, 4 custom properties) -// GTLPlusActivityObjectAttachmentsItemThumbnailsItem (0 custom class methods, 3 custom properties) -// GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage (0 custom class methods, 4 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusAcl; -@class GTLPlusActivityActor; -@class GTLPlusActivityActorImage; -@class GTLPlusActivityActorName; -@class GTLPlusActivityObject; -@class GTLPlusActivityObjectActor; -@class GTLPlusActivityObjectActorImage; -@class GTLPlusActivityObjectAttachmentsItem; -@class GTLPlusActivityObjectAttachmentsItemEmbed; -@class GTLPlusActivityObjectAttachmentsItemFullImage; -@class GTLPlusActivityObjectAttachmentsItemImage; -@class GTLPlusActivityObjectAttachmentsItemThumbnailsItem; -@class GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage; -@class GTLPlusActivityObjectPlusoners; -@class GTLPlusActivityObjectReplies; -@class GTLPlusActivityObjectResharers; -@class GTLPlusActivityProvider; - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivity -// - -@interface GTLPlusActivity : GTLObject - -// Identifies who has access to see this activity. -@property (retain) GTLPlusAcl *access; - -// The person who performed this activity. -@property (retain) GTLPlusActivityActor *actor; - -// Street address where this activity occurred. -@property (copy) NSString *address; - -// Additional content added by the person who shared this activity, applicable -// only when resharing an activity. -@property (copy) NSString *annotation; - -// If this activity is a crosspost from another system, this property specifies -// the ID of the original activity. -@property (copy) NSString *crosspostSource; - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// Latitude and longitude where this activity occurred. Format is latitude -// followed by longitude, space separated. -@property (copy) NSString *geocode; - -// The ID of this activity. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// Identifies this resource as an activity. Value: "plus#activity". -@property (copy) NSString *kind; - -// The object of this activity. -@property (retain) GTLPlusActivityObject *object; - -// ID of the place where this activity occurred. -@property (copy) NSString *placeId; - -// Name of the place where this activity occurred. -@property (copy) NSString *placeName; - -// The service provider that initially published this activity. -@property (retain) GTLPlusActivityProvider *provider; - -// The time at which this activity was initially published. Formatted as an RFC -// 3339 timestamp. -@property (retain) GTLDateTime *published; - -// Radius, in meters, of the region where this activity occurred, centered at -// the latitude and longitude identified in geocode. -@property (copy) NSString *radius; - -// Title of this activity. -@property (copy) NSString *title; - -// The time at which this activity was last updated. Formatted as an RFC 3339 -// timestamp. -@property (retain) GTLDateTime *updated; - -// The link to this activity. -@property (copy) NSString *url; - -// This activity's verb, indicating what action was performed. Possible values -// are: -// - "post" - Publish content to the stream. -// - "share" - Reshare an activity. -@property (copy) NSString *verb; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityActor -// - -@interface GTLPlusActivityActor : GTLObject - -// The name of the actor, suitable for display. -@property (copy) NSString *displayName; - -// The ID of the actor's person resource. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The image representation of the actor. -@property (retain) GTLPlusActivityActorImage *image; - -// An object representation of the individual components of name. -@property (retain) GTLPlusActivityActorName *name; - -// The link to the actor's Google profile. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObject -// - -@interface GTLPlusActivityObject : GTLObject - -// If this activity's object is itself another activity (for example, when a -// person reshares an activity), this property specifies the original activity's -// actor. -@property (retain) GTLPlusActivityObjectActor *actor; - -// The media objects attached to this activity. -@property (retain) NSArray *attachments; // of GTLPlusActivityObjectAttachmentsItem - -// The HTML-formatted content, suitable for display. -@property (copy) NSString *content; - -// The ID of the object. When resharing an activity, this is the ID of the -// activity being reshared. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The type of the object. Possible values are: -// - "note" - Textual content. -// - "activity" - A Google+ activity. -@property (copy) NSString *objectType; - -// The content (text) as provided by the author, stored without any HTML -// formatting. When creating or updating an activity, this value must be -// supplied as plain text in the request. -@property (copy) NSString *originalContent; - -// People who +1'd this activity. -@property (retain) GTLPlusActivityObjectPlusoners *plusoners; - -// Comments in reply to this activity. -@property (retain) GTLPlusActivityObjectReplies *replies; - -// People who reshared this activity. -@property (retain) GTLPlusActivityObjectResharers *resharers; - -// The URL that points to the linked resource. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityProvider -// - -@interface GTLPlusActivityProvider : GTLObject - -// Name of the service provider. -@property (copy) NSString *title; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityActorImage -// - -@interface GTLPlusActivityActorImage : GTLObject - -// The URL of the actor'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 - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityActorName -// - -@interface GTLPlusActivityActorName : GTLObject - -// The family name (last name) of the actor. -@property (copy) NSString *familyName; - -// The given name (first name) of the actor. -@property (copy) NSString *givenName; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectActor -// - -@interface GTLPlusActivityObjectActor : GTLObject - -// The original actor's name, suitable for display. -@property (copy) NSString *displayName; - -// ID of the original actor. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The image representation of the original actor. -@property (retain) GTLPlusActivityObjectActorImage *image; - -// A link to the original actor's Google profile. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItem -// - -@interface GTLPlusActivityObjectAttachmentsItem : GTLObject - -// If the attachment is an article, this property contains a snippet of text -// from the article. It can also include descriptions for other types. -@property (copy) NSString *content; - -// The title of the attachment (such as a photo caption or an article title). -@property (copy) NSString *displayName; - -// If the attachment is a video, the embeddable link. -@property (retain) GTLPlusActivityObjectAttachmentsItemEmbed *embed; - -// The full image URL for photo attachments. -@property (retain) GTLPlusActivityObjectAttachmentsItemFullImage *fullImage; - -// The ID of the attachment. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The preview image for photos or videos. -@property (retain) GTLPlusActivityObjectAttachmentsItemImage *image; - -// The type of media object. Possible values are: -// - "photo" - A photo. -// - "album" - A photo album. -// - "video" - A video. -// - "article" - An article, specified by a link. -@property (copy) NSString *objectType; - -// If the attachment is an album, potential additional thumbnails from the -// album. -@property (retain) NSArray *thumbnails; // of GTLPlusActivityObjectAttachmentsItemThumbnailsItem - -// The link to the attachment, should be of type text/html. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectPlusoners -// - -@interface GTLPlusActivityObjectPlusoners : GTLObject - -// The URL for the collection of people who +1'd this activity. -@property (copy) NSString *selfLink; - -// Total number of people who +1'd this activity. -@property (retain) NSNumber *totalItems; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectReplies -// - -@interface GTLPlusActivityObjectReplies : GTLObject - -// The URL for the collection of comments in reply to this activity. -@property (copy) NSString *selfLink; - -// Total number of comments on this activity. -@property (retain) NSNumber *totalItems; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectResharers -// - -@interface GTLPlusActivityObjectResharers : GTLObject - -// The URL for the collection of resharers. -@property (copy) NSString *selfLink; - -// Total number of people who reshared this activity. -@property (retain) NSNumber *totalItems; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectActorImage -// - -@interface GTLPlusActivityObjectActorImage : GTLObject - -// A URL that points to a thumbnail photo of the original actor. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemEmbed -// - -@interface GTLPlusActivityObjectAttachmentsItemEmbed : GTLObject - -// Media type of the link. -@property (copy) NSString *type; - -// URL of the link. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemFullImage -// - -@interface GTLPlusActivityObjectAttachmentsItemFullImage : GTLObject - -// The height, in pixels, of the linked resource. -@property (retain) NSNumber *height; // unsignedIntValue - -// Media type of the link. -@property (copy) NSString *type; - -// URL to the image. -@property (copy) NSString *url; - -// The width, in pixels, of the linked resource. -@property (retain) NSNumber *width; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemImage -// - -@interface GTLPlusActivityObjectAttachmentsItemImage : GTLObject - -// The height, in pixels, of the linked resource. -@property (retain) NSNumber *height; // unsignedIntValue - -// Media type of the link. -@property (copy) NSString *type; - -// Image url. -@property (copy) NSString *url; - -// The width, in pixels, of the linked resource. -@property (retain) NSNumber *width; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemThumbnailsItem -// - -@interface GTLPlusActivityObjectAttachmentsItemThumbnailsItem : GTLObject - -// Potential name of the thumbnail. -// Remapped to 'descriptionProperty' to avoid NSObject's 'description'. -@property (copy) NSString *descriptionProperty; - -// Image resource. -@property (retain) GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage *image; - -// URL to the webpage containing the image. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage -// - -@interface GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage : GTLObject - -// The height, in pixels, of the linked resource. -@property (retain) NSNumber *height; // unsignedIntValue - -// Media type of the link. -@property (copy) NSString *type; - -// Image url. -@property (copy) NSString *url; - -// The width, in pixels, of the linked resource. -@property (retain) NSNumber *width; // unsignedIntValue - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivityFeed.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivityFeed.h deleted file mode 100644 index f99ca32f..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusActivityFeed.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusActivityFeed.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusActivityFeed (0 custom class methods, 9 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusActivity; - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityFeed -// - -// This class supports NSFastEnumeration over its "items" property. It also -// supports -itemAtIndex: to retrieve individual objects from "items". - -@interface GTLPlusActivityFeed : GTLCollectionObject - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// The ID of this collection of activities. Deprecated. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The activities in this page of results. -@property (retain) NSArray *items; // of GTLPlusActivity - -// Identifies this resource as a collection of activities. Value: -// "plus#activityFeed". -@property (copy) NSString *kind; - -// Link to the next page of activities. -@property (copy) NSString *nextLink; - -// The continuation token, which is used to page through large result sets. -// Provide this value in a subsequent request to return the next page of -// results. -@property (copy) NSString *nextPageToken; - -// Link to this activity resource. -@property (copy) NSString *selfLink; - -// The title of this collection of activities. -@property (copy) NSString *title; - -// The time at which this collection of activities was last updated. Formatted -// as an RFC 3339 timestamp. -@property (retain) GTLDateTime *updated; - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusComment.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusComment.h deleted file mode 100644 index 4698576a..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusComment.h +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusComment.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusComment (0 custom class methods, 11 custom properties) -// GTLPlusCommentActor (0 custom class methods, 4 custom properties) -// GTLPlusCommentInReplyToItem (0 custom class methods, 2 custom properties) -// GTLPlusCommentObject (0 custom class methods, 3 custom properties) -// GTLPlusCommentPlusoners (0 custom class methods, 1 custom properties) -// GTLPlusCommentActorImage (0 custom class methods, 1 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusCommentActor; -@class GTLPlusCommentActorImage; -@class GTLPlusCommentInReplyToItem; -@class GTLPlusCommentObject; -@class GTLPlusCommentPlusoners; - -// ---------------------------------------------------------------------------- -// -// GTLPlusComment -// - -@interface GTLPlusComment : GTLObject - -// The person who posted this comment. -@property (retain) GTLPlusCommentActor *actor; - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// The ID of this comment. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The activity this comment replied to. -@property (retain) NSArray *inReplyTo; // of GTLPlusCommentInReplyToItem - -// Identifies this resource as a comment. Value: "plus#comment". -@property (copy) NSString *kind; - -// The object of this comment. -@property (retain) GTLPlusCommentObject *object; - -// People who +1'd this comment. -@property (retain) GTLPlusCommentPlusoners *plusoners; - -// The time at which this comment was initially published. Formatted as an RFC -// 3339 timestamp. -@property (retain) GTLDateTime *published; - -// Link to this comment resource. -@property (copy) NSString *selfLink; - -// The time at which this comment was last updated. Formatted as an RFC 3339 -// timestamp. -@property (retain) GTLDateTime *updated; - -// This comment's verb, indicating what action was performed. Possible values -// are: -// - "post" - Publish content to the stream. -@property (copy) NSString *verb; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentActor -// - -@interface GTLPlusCommentActor : GTLObject - -// The name of this actor, suitable for display. -@property (copy) NSString *displayName; - -// The ID of the actor. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The image representation of this actor. -@property (retain) GTLPlusCommentActorImage *image; - -// A link to the person resource for this actor. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentInReplyToItem -// - -@interface GTLPlusCommentInReplyToItem : GTLObject - -// The ID of the activity. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The URL of the activity. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentObject -// - -@interface GTLPlusCommentObject : GTLObject - -// The HTML-formatted content, suitable for display. -@property (copy) NSString *content; - -// The object type of this comment. Possible values are: -// - "comment" - A comment in reply to an activity. -@property (copy) NSString *objectType; - -// The content (text) as provided by the author, stored without any HTML -// formatting. When creating or updating a comment, this value must be supplied -// as plain text in the request. -@property (copy) NSString *originalContent; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentPlusoners -// - -@interface GTLPlusCommentPlusoners : GTLObject - -// Total number of people who +1'd this comment. -@property (retain) NSNumber *totalItems; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentActorImage -// - -@interface GTLPlusCommentActorImage : GTLObject - -// The URL of the actor'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 diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusCommentFeed.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusCommentFeed.h deleted file mode 100644 index 74f9be5a..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusCommentFeed.h +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusCommentFeed.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusCommentFeed (0 custom class methods, 8 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusComment; - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentFeed -// - -// This class supports NSFastEnumeration over its "items" property. It also -// supports -itemAtIndex: to retrieve individual objects from "items". - -@interface GTLPlusCommentFeed : GTLCollectionObject - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// The ID of this collection of comments. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The comments in this page of results. -@property (retain) NSArray *items; // of GTLPlusComment - -// Identifies this resource as a collection of comments. Value: -// "plus#commentFeed". -@property (copy) NSString *kind; - -// Link to the next page of activities. -@property (copy) NSString *nextLink; - -// The continuation token, which is used to page through large result sets. -// Provide this value in a subsequent request to return the next page of -// results. -@property (copy) NSString *nextPageToken; - -// The title of this collection of comments. -@property (copy) NSString *title; - -// The time at which this collection of comments was last updated. Formatted as -// an RFC 3339 timestamp. -@property (retain) GTLDateTime *updated; - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusConstants.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusConstants.h deleted file mode 100644 index b5e87ad7..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusConstants.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ - -#import - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLDefines.h" -#else - #import "GTLDefines.h" -#endif - -// Authorization scope -// Know your name, basic info, and list of people you're connected to on Google+ -GTL_EXTERN NSString * const kGTLAuthScopePlusLogin; // "https://www.googleapis.com/auth/plus.login" -// Know who you are on Google -GTL_EXTERN NSString * const kGTLAuthScopePlusMe; // "https://www.googleapis.com/auth/plus.me" - -// Collection -GTL_EXTERN NSString * const kGTLPlusCollectionPlusoners; // "plusoners" -GTL_EXTERN NSString * const kGTLPlusCollectionPublic; // "public" -GTL_EXTERN NSString * const kGTLPlusCollectionResharers; // "resharers" -GTL_EXTERN NSString * const kGTLPlusCollectionVault; // "vault" -GTL_EXTERN NSString * const kGTLPlusCollectionVisible; // "visible" - -// OrderBy -GTL_EXTERN NSString * const kGTLPlusOrderByAlphabetical; // "alphabetical" -GTL_EXTERN NSString * const kGTLPlusOrderByBest; // "best" -GTL_EXTERN NSString * const kGTLPlusOrderByRecent; // "recent" - -// SortOrder -GTL_EXTERN NSString * const kGTLPlusSortOrderAscending; // "ascending" -GTL_EXTERN NSString * const kGTLPlusSortOrderDescending; // "descending" diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusItemScope.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusItemScope.h deleted file mode 100644 index 17e2b371..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusItemScope.h +++ /dev/null @@ -1,225 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://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) GTLPlusItemScope *reviewRating; - -// 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 the item upon which the action was performed. -@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/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMoment.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMoment.h deleted file mode 100644 index 0b028c88..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMoment.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusMoment (0 custom class methods, 6 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusItemScope; - -// ---------------------------------------------------------------------------- -// -// GTLPlusMoment -// - -@interface GTLPlusMoment : GTLObject - -// The moment ID. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// Identifies this resource as a moment. -@property (copy) NSString *kind; - -// The object generated by performing the action on the item -@property (retain) GTLPlusItemScope *result; - -// Time stamp of when the action occurred 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; - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMomentsFeed.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMomentsFeed.h deleted file mode 100644 index 6cc8106b..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusMomentsFeed.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusMomentsFeed.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusMomentsFeed (0 custom class methods, 8 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusMoment; - -// ---------------------------------------------------------------------------- -// -// GTLPlusMomentsFeed -// - -// This class supports NSFastEnumeration over its "items" property. It also -// supports -itemAtIndex: to retrieve individual objects from "items". - -@interface GTLPlusMomentsFeed : GTLCollectionObject - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// The moments in this page of results. -@property (retain) NSArray *items; // of GTLPlusMoment - -// Identifies this resource as a collection of moments. Value: -// "plus#momentsFeed". -@property (copy) NSString *kind; - -// Link to the next page of moments. -@property (copy) NSString *nextLink; - -// The continuation token, which is used to page through large result sets. -// Provide this value in a subsequent request to return the next page of -// results. -@property (copy) NSString *nextPageToken; - -// Link to this page of moments. -@property (copy) NSString *selfLink; - -// The title of this collection of moments. -@property (copy) NSString *title; - -// The RFC 339 timestamp for when this collection of moments was last updated. -@property (retain) GTLDateTime *updated; - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPeopleFeed.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPeopleFeed.h deleted file mode 100644 index 523afadd..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPeopleFeed.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusPeopleFeed.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusPeopleFeed (0 custom class methods, 7 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusPerson; - -// ---------------------------------------------------------------------------- -// -// GTLPlusPeopleFeed -// - -// This class supports NSFastEnumeration over its "items" property. It also -// supports -itemAtIndex: to retrieve individual objects from "items". - -@interface GTLPlusPeopleFeed : GTLCollectionObject - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// The people in this page of results. Each item includes the id, displayName, -// image, and url for the person. To retrieve additional profile data, see the -// people.get method. -@property (retain) NSArray *items; // of GTLPlusPerson - -// Identifies this resource as a collection of people. Value: "plus#peopleFeed". -@property (copy) NSString *kind; - -// The continuation token, which is used to page through large result sets. -// Provide this value in a subsequent request to return the next page of -// results. -@property (copy) NSString *nextPageToken; - -// Link to this resource. -@property (copy) NSString *selfLink; - -// The title of this collection of people. -@property (copy) NSString *title; - -// The total number of people available in this list. The number of people in a -// response might be smaller due to paging. This might not be set for all -// collections. -@property (retain) NSNumber *totalItems; // intValue - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPerson.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPerson.h deleted file mode 100644 index 57ae94ed..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLPlusPerson.h +++ /dev/null @@ -1,388 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusPerson (0 custom class methods, 28 custom properties) -// GTLPlusPersonAgeRange (0 custom class methods, 2 custom properties) -// GTLPlusPersonCover (0 custom class methods, 3 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) -// GTLPlusPersonCoverCoverInfo (0 custom class methods, 2 custom properties) -// GTLPlusPersonCoverCoverPhoto (0 custom class methods, 3 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusPersonAgeRange; -@class GTLPlusPersonCover; -@class GTLPlusPersonCoverCoverInfo; -@class GTLPlusPersonCoverCoverPhoto; -@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 age range of the person. -@property (retain) GTLPlusPersonAgeRange *ageRange; - -// The person's date of birth, represented as YYYY-MM-DD. -@property (copy) NSString *birthday; - -// The "bragging rights" line of this person. -@property (copy) NSString *braggingRights; - -// If a Google+ Page and for followers who are visible, the number of people who -// have added this page to a circle. -@property (retain) NSNumber *circledByCount; // intValue - -// The cover photo content. -@property (retain) GTLPlusPersonCover *cover; - -// 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; - -// Whether this user has signed up for Google+. -@property (retain) NSNumber *isPlusUser; // boolValue - -// Identifies this resource as a person. Value: "plus#person". -@property (copy) NSString *kind; - -// The user's preferred language for rendering. -@property (copy) NSString *language; - -// 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 - -// If a Google+ Page, the number of people who have +1'ed this page. -@property (retain) NSNumber *plusOneCount; // intValue - -// 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 - -// Whether the person or Google+ Page has been verified. -@property (retain) NSNumber *verified; // boolValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonAgeRange -// - -@interface GTLPlusPersonAgeRange : GTLObject - -// The age range's upper bound, if any. -@property (retain) NSNumber *max; // intValue - -// The age range's lower bound, if any. -@property (retain) NSNumber *min; // intValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonCover -// - -@interface GTLPlusPersonCover : GTLObject - -// Extra information about the cover photo. -@property (retain) GTLPlusPersonCoverCoverInfo *coverInfo; - -// The person's primary cover image. -@property (retain) GTLPlusPersonCoverCoverPhoto *coverPhoto; - -// The layout of the cover art. Possible values are: -// - "banner" - One large image banner. -@property (copy) NSString *layout; - -@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. Deprecated. -@property (copy) NSString *department; - -// A short description of the person's role in this organization. Deprecated. -// 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. Deprecated. -@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 - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonCoverCoverInfo -// - -@interface GTLPlusPersonCoverCoverInfo : GTLObject - -// The difference between the left position of the image cover and the actual -// displayed cover image. Only valid for BANNER layout. -@property (retain) NSNumber *leftImageOffset; // intValue - -// The difference between the top position of the image cover and the actual -// displayed cover image. Only valid for BANNER layout. -@property (retain) NSNumber *topImageOffset; // intValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonCoverCoverPhoto -// - -@interface GTLPlusPersonCoverCoverPhoto : GTLObject - -// The height to the image. -@property (retain) NSNumber *height; // intValue - -// The url to the image. -@property (copy) NSString *url; - -// The width to the image. -@property (retain) NSNumber *width; // intValue - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLQuery.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLQuery.h deleted file mode 100644 index 9d40887e..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLQuery.h +++ /dev/null @@ -1,136 +0,0 @@ -/* 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 -// - -// Query documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Query_Operations - -#import "GTLObject.h" -#import "GTLUploadParameters.h" - -@protocol GTLQueryProtocol -- (BOOL)isBatchQuery; -- (BOOL)shouldSkipAuthorization; -- (void)executionDidStop; -- (NSDictionary *)additionalHTTPHeaders; -- (NSDictionary *)urlQueryParameters; -- (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 GTL_NONNULL((1)); - -// methodName is the RPC method name to use. -- (id)initWithMethodName:(NSString *)method GTL_NONNULL((1)); - -// 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 GTL_NONNULL((2)); - -// Auto-generated request IDs -+ (NSString *)nextRequestID; - -// Methods for subclasses to override. -+ (NSDictionary *)parameterNameMap; -+ (NSDictionary *)arrayPropertyToClassMap; -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLQueryPlus.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLQueryPlus.h deleted file mode 100644 index 44b43109..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLQueryPlus.h +++ /dev/null @@ -1,297 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLQueryPlus (12 custom class methods, 15 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 *activityId; -@property (copy) NSString *collection; -@property (copy) NSString *commentId; -@property (assign) BOOL debug; -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; -@property (copy) NSString *language; -@property (assign) NSUInteger maxResults; -@property (copy) NSString *orderBy; -@property (copy) NSString *pageToken; -@property (copy) NSString *query; -@property (copy) NSString *sortOrder; -@property (copy) NSString *targetUrl; -@property (copy) NSString *type; -@property (copy) NSString *userId; - -#pragma mark - -#pragma mark "activities" methods -// These create a GTLQueryPlus object. - -// Method: plus.activities.get -// Get an activity. -// Required: -// activityId: The ID of the activity to get. -// Authorization scope(s): -// kGTLAuthScopePlusLogin -// kGTLAuthScopePlusMe -// Fetches a GTLPlusActivity. -+ (id)queryForActivitiesGetWithActivityId:(NSString *)activityId; - -// Method: plus.activities.list -// List all of the activities in the specified collection for a particular user. -// 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 of activities to list. -// kGTLPlusCollectionPublic: All public activities created by the specified -// user. -// Optional: -// maxResults: The maximum number of activities to include in the response, -// which is used for paging. For any response, the actual number returned -// might be less than the specified maxResults. (1..100, default 20) -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. -// Authorization scope(s): -// kGTLAuthScopePlusLogin -// kGTLAuthScopePlusMe -// Fetches a GTLPlusActivityFeed. -+ (id)queryForActivitiesListWithUserId:(NSString *)userId - collection:(NSString *)collection; - -// Method: plus.activities.search -// Search public activities. -// Required: -// query: Full-text search query string. -// Optional: -// language: Specify the preferred language to search with. See search -// language codes for available values. (Default en-US) -// maxResults: The maximum number of activities to include in the response, -// which is used for paging. For any response, the actual number returned -// might be less than the specified maxResults. (1..20, default 10) -// orderBy: Specifies how to order search results. (Default -// kGTLPlusOrderByRecent) -// kGTLPlusOrderByBest: Sort activities by relevance to the user, most -// relevant first. -// kGTLPlusOrderByRecent: Sort activities by published date, most recent -// first. -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. This token can be of -// any length. -// Authorization scope(s): -// kGTLAuthScopePlusMe -// Fetches a GTLPlusActivityFeed. -+ (id)queryForActivitiesSearchWithQuery:(NSString *)query; - -#pragma mark - -#pragma mark "comments" methods -// These create a GTLQueryPlus object. - -// Method: plus.comments.get -// Get a comment. -// Required: -// commentId: The ID of the comment to get. -// Authorization scope(s): -// kGTLAuthScopePlusMe -// Fetches a GTLPlusComment. -+ (id)queryForCommentsGetWithCommentId:(NSString *)commentId; - -// Method: plus.comments.list -// List all of the comments for an activity. -// Required: -// activityId: The ID of the activity to get comments for. -// Optional: -// maxResults: The maximum number of comments to include in the response, -// which is used for paging. For any response, the actual number returned -// might be less than the specified maxResults. (0..500, default 20) -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. -// sortOrder: The order in which to sort the list of comments. (Default -// kGTLPlusSortOrderAscending) -// kGTLPlusSortOrderAscending: Sort oldest comments first. -// kGTLPlusSortOrderDescending: Sort newest comments first. -// Authorization scope(s): -// kGTLAuthScopePlusMe -// Fetches a GTLPlusCommentFeed. -+ (id)queryForCommentsListWithActivityId:(NSString *)activityId; - -#pragma mark - -#pragma mark "moments" methods -// These create a GTLQueryPlus object. - -// Method: plus.moments.insert -// Record a moment representing a user's activity such as making a purchase or -// commenting on a blog. -// Required: -// userId: The ID of the user to record activities for. The only valid values -// are "me" and the ID of 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): -// kGTLAuthScopePlusLogin -// Fetches a GTLPlusMoment. -+ (id)queryForMomentsInsertWithObject:(GTLPlusMoment *)object - userId:(NSString *)userId - collection:(NSString *)collection; - -// Method: plus.moments.list -// List all of the moments for a particular user. -// Required: -// userId: The ID of the user to get moments for. The special value "me" can -// be used to indicate the authenticated user. -// collection: The collection of moments to list. -// kGTLPlusCollectionVault: All moments created by the requesting -// application for the authenticated user. -// Optional: -// maxResults: The maximum number of moments to include in the response, which -// is used for paging. For any response, the actual number returned might be -// less than the specified maxResults. (1..100, default 20) -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. -// targetUrl: Only moments containing this targetUrl will be returned. -// type: Only moments of this type will be returned. -// Authorization scope(s): -// kGTLAuthScopePlusLogin -// Fetches a GTLPlusMomentsFeed. -+ (id)queryForMomentsListWithUserId:(NSString *)userId - collection:(NSString *)collection; - -// Method: plus.moments.remove -// Delete a moment. -// Required: -// identifier: The ID of the moment to delete. -// Authorization scope(s): -// kGTLAuthScopePlusLogin -+ (id)queryForMomentsRemoveWithIdentifier:(NSString *)identifier; - -#pragma mark - -#pragma mark "people" methods -// These create a GTLQueryPlus object. - -// Method: plus.people.get -// Get a person's profile. If your app uses scope -// https://www.googleapis.com/auth/plus.login, this method is guaranteed to -// return ageRange and language. -// 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): -// kGTLAuthScopePlusLogin -// kGTLAuthScopePlusMe -// Fetches a GTLPlusPerson. -+ (id)queryForPeopleGetWithUserId:(NSString *)userId; - -// Method: plus.people.list -// List all of the people in the specified collection. -// Required: -// userId: Get the collection of people for the person identified by the ID or -// use "me" to indiciated the authenticated user. -// collection: The collection of people to list. -// kGTLPlusCollectionVisible: The list of people who this user has added to -// one or more circles, limited to the circles visible to the requesting -// application. -// Optional: -// maxResults: The maximum number of people to include in the response, which -// is used for paging. For any response, the actual number returned might be -// less than the specified maxResults. (1..100, default 100) -// orderBy: The order to return people in. -// kGTLPlusOrderByAlphabetical: Order the people by their display name. -// kGTLPlusOrderByBest: Order people based on the relevence to the viewer. -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. -// Authorization scope(s): -// kGTLAuthScopePlusLogin -// Fetches a GTLPlusPeopleFeed. -+ (id)queryForPeopleListWithUserId:(NSString *)userId - collection:(NSString *)collection; - -// Method: plus.people.listByActivity -// List all of the people in the specified collection for a particular activity. -// Required: -// activityId: The ID of the activity to get the list of people for. -// collection: The collection of people to list. -// kGTLPlusCollectionPlusoners: List all people who have +1'd this -// activity. -// kGTLPlusCollectionResharers: List all people who have reshared this -// activity. -// Optional: -// maxResults: The maximum number of people to include in the response, which -// is used for paging. For any response, the actual number returned might be -// less than the specified maxResults. (1..100, default 20) -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. -// Authorization scope(s): -// kGTLAuthScopePlusMe -// Fetches a GTLPlusPeopleFeed. -+ (id)queryForPeopleListByActivityWithActivityId:(NSString *)activityId - collection:(NSString *)collection; - -// Method: plus.people.search -// Search all public profiles. -// Required: -// query: Specify a query string for full text search of public text in all -// profiles. -// Optional: -// language: Specify the preferred language to search with. See search -// language codes for available values. (Default en-US) -// maxResults: The maximum number of people to include in the response, which -// is used for paging. For any response, the actual number returned might be -// less than the specified maxResults. (1..20, default 10) -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. This token can be of -// any length. -// Authorization scope(s): -// kGTLAuthScopePlusMe -// Fetches a GTLPlusPeopleFeed. -+ (id)queryForPeopleSearchWithQuery:(NSString *)query; - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLRuntimeCommon.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLRuntimeCommon.h deleted file mode 100644 index 28822b5e..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLRuntimeCommon.h +++ /dev/null @@ -1,57 +0,0 @@ -/* 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/GoogleOpenSource.framework/Versions/A/Headers/GTLService.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLService.h deleted file mode 100644 index eac1dac8..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLService.h +++ /dev/null @@ -1,607 +0,0 @@ -/* 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 -// - -// Service object documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Services_and_Tickets - -#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; see the batch query documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Batch_Operations - -- (GTLServiceTicket *)executeQuery:(id)query - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -#if NS_BLOCKS_AVAILABLE -- (GTLServiceTicket *)executeQuery:(id)query - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); -#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 GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName - insertingObject:(GTLObject *)bodyObject - objectClass:(Class)objectClass - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName - parameters:(NSDictionary *)parameters - insertingObject:(GTLObject *)bodyObject - objectClass:(Class)objectClass - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -#if NS_BLOCKS_AVAILABLE -- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName - parameters:(NSDictionary *)parameters - objectClass:(Class)objectClass - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName - insertingObject:(GTLObject *)bodyObject - objectClass:(Class)objectClass - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName - parameters:(NSDictionary *)parameters - insertingObject:(GTLObject *)bodyObject - objectClass:(Class)objectClass - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); -#endif - -#pragma mark REST Fetch Methods - -- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL - objectClass:(Class)objectClass - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchPublicObjectWithURL:(NSURL *)objectURL - objectClass:(Class)objectClass - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectByInsertingObject:(GTLObject *)bodyToPut - forURL:(NSURL *)destinationURL - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1,2)); - -- (GTLServiceTicket *)fetchObjectByUpdatingObject:(GTLObject *)bodyToPut - forURL:(NSURL *)destinationURL - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1,2)); - -- (GTLServiceTicket *)deleteResourceURL:(NSURL *)destinationURL - ETag:(NSString *)etagOrNil - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -#if NS_BLOCKS_AVAILABLE -- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectByInsertingObject:(GTLObject *)bodyToPut - forURL:(NSURL *)destinationURL - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectByUpdatingObject:(GTLObject *)bodyToPut - forURL:(NSURL *)destinationURL - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); - -- (GTLServiceTicket *)deleteResourceURL:(NSURL *)destinationURL - ETag:(NSString *)etagOrNil - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); -#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 GTL_NONNULL((2)); // pass nil obj to remove property -- (id)servicePropertyForKey:(NSString *)key GTL_NONNULL((1)); - -@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; - -// Callbacks can be invoked on an operation queue rather than via the run loop -// starting on 10.7 and iOS 6. Do not specify both run loop modes and an -// operation queue. Specifying a delegate queue typically looks like this: -// -// service.delegateQueue = [[[NSOperationQueue alloc] init] autorelease]; -// -// Since the callbacks will be on a thread of the operation queue, the client -// may re-dispatch from the callbacks to a known dispatch queue or to the -// main queue. -@property (nonatomic, retain) NSOperationQueue *delegateQueue; - -// 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 GTL_NONNULL((1)); - -// 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 GTL_NONNULL((1)); - -// 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 GTL_NONNULL((1)); -@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 GTL_NONNULL((1)); // 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 GTL_NONNULL((1)); // 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/GoogleOpenSource.framework/Versions/A/Headers/GTLServicePlus.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLServicePlus.h deleted file mode 100644 index b05c4f47..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLServicePlus.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://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/GoogleOpenSource.framework/Versions/A/Headers/GTLTargetNamespace.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLTargetNamespace.h deleted file mode 100644 index 9e08a9e4..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLTargetNamespace.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// 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/GoogleOpenSource.framework/Versions/A/Headers/GTLUploadParameters.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLUploadParameters.h deleted file mode 100644 index a3c1d9dc..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLUploadParameters.h +++ /dev/null @@ -1,60 +0,0 @@ -/* 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 -// - -// Uploading documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Uploading_Files - -#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 GTL_NONNULL((1,2)); - -+ (GTLUploadParameters *)uploadParametersWithFileHandle:(NSFileHandle *)fileHandle - MIMEType:(NSString *)mimeType GTL_NONNULL((1,2)); - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLUtilities.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLUtilities.h deleted file mode 100644 index 97f4bf07..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTLUtilities.h +++ /dev/null @@ -1,93 +0,0 @@ -/* 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; -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMDefines.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMDefines.h deleted file mode 100644 index c2958487..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMDefines.h +++ /dev/null @@ -1,441 +0,0 @@ -// -// 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 - -#ifdef __OBJC__ -#include -#endif // __OBJC__ - -#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 - -// GC was dropped by Apple, define the old constant incase anyone still keys -// off of it. -#ifndef GTM_SUPPORT_GC - #define GTM_SUPPORT_GC 0 -#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 - #if defined(__has_attribute) - #if __has_attribute(nonnull) - #define GTM_NONNULL(x) __attribute__((nonnull x)) - #else - #define GTM_NONNULL(x) - #endif - #else - #define GTM_NONNULL(x) - #endif -#endif - -// Invalidates the initializer from which it's called. -#ifndef GTMInvalidateInitializer - #if __has_feature(objc_arc) - #define GTMInvalidateInitializer() \ - do { \ - [self class]; /* Avoid warning of dead store to |self|. */ \ - _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/GoogleOpenSource.framework/Versions/A/Headers/GTMGarbageCollection.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMGarbageCollection.h deleted file mode 100644 index 93d4efab..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMGarbageCollection.h +++ /dev/null @@ -1,72 +0,0 @@ -// -// 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/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetchHistory.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetchHistory.h deleted file mode 100644 index 96018f5d..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetchHistory.h +++ /dev/null @@ -1,187 +0,0 @@ -/* 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/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcher.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcher.h deleted file mode 100644 index a681390b..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcher.h +++ /dev/null @@ -1,765 +0,0 @@ -/* 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 -// -// -// Threading and queue support: -// -// Callbacks require either that the thread used to start the fetcher have a run -// loop spinning (typically the main thread), or that an NSOperationQueue be -// provided upon which the delegate callbacks will be called. Starting with -// iOS 6 and Mac OS X 10.7, clients may simply create an operation queue for -// callbacks on a background thread: -// -// NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; -// [queue setMaxConcurrentOperationCount:1]; -// fetcher.delegateQueue = queue; -// -// or specify the main queue for callbacks on the main thread: -// -// fetcher.delegateQueue = [NSOperationQueue mainQueue]; -// -// The client may also re-dispatch from the callbacks and notifications to -// a known dispatch queue: -// -// [myFetcher beginFetchWithCompletionHandler:^(NSData *retrievedData, NSError *error) { -// if (error == nil) { -// dispatch_async(myDispatchQueue, ^{ -// ... -// }); -// } -// }]; -// -// -// -// 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 - -@property (retain) NSOperationQueue *delegateQueue; - -- (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; - -- (void)stopAuthorizationForRequest:(NSURLRequest *)request; - -- (BOOL)isAuthorizingRequest:(NSURLRequest *)request; - -- (BOOL)isAuthorizedRequest:(NSURLRequest *)request; - -@property (retain, readonly) NSString *userEmail; - -@optional - -// Indicate if authorization may be attempted. Even if this succeeds, -// authorization may fail if the user's permissions have been revoked. -@property (readonly) BOOL canAuthorize; - -// For development only, allow authorization of non-SSL requests, allowing -// transmission of the bearer token unencrypted. -@property (assign) BOOL shouldAuthorizeAllRequests; - -#if NS_BLOCKS_AVAILABLE -- (void)authorizeRequest:(NSMutableURLRequest *)request - completionHandler:(void (^)(NSError *error))handler; -#endif - -@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 - NSOperationQueue *delegateQueue_; // optional; available iOS 6/10.7 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_; -#if !STRIP_GTM_FETCH_LOGGING - NSString *logRequestBody_; - NSString *logResponseBody_; - BOOL shouldDeferResponseBodyLogging_; -#endif -} - -// 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 when no operation -// queue is provided. -@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:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2); - -// Log of request and response, if logging is enabled -@property (copy) NSString *log; - -// Callbacks can be invoked on an operation queue rather than via the run loop, -// starting on 10.7 and iOS 6. If a delegate queue is supplied. the run loop -// modes are ignored. -@property (retain) NSOperationQueue *delegateQueue; - -// 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/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcherService.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcherService.h deleted file mode 100644 index 9c6cd754..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMHTTPFetcherService.h +++ /dev/null @@ -1,125 +0,0 @@ -/* 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_; - NSOperationQueue *delegateQueue_; - 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; - -// Search for running or delayed fetchers with the specified URL. -// -// Returns an array of fetcher objects found, or nil if none found. -- (NSArray *)issuedFetchersWithRequestURL:(NSURL *)requestURL; - -- (void)stopAllFetchers; - -// Properties to be applied to each fetcher; -// see GTMHTTPFetcher.h for descriptions -@property (copy) NSString *userAgent; -@property (assign) NSTimeInterval timeout; -@property (retain) NSOperationQueue *delegateQueue; -@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/GoogleOpenSource.framework/Versions/A/Headers/GTMLogger.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMLogger.h deleted file mode 100644 index c4fd1402..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMLogger.h +++ /dev/null @@ -1,504 +0,0 @@ -// -// 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/GoogleOpenSource.framework/Versions/A/Headers/GTMMethodCheck.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMMethodCheck.h deleted file mode 100644 index 7b0919b0..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMMethodCheck.h +++ /dev/null @@ -1,88 +0,0 @@ -// -// 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/GoogleOpenSource.framework/Versions/A/Headers/GTMNSDictionary+URLArguments.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMNSDictionary+URLArguments.h deleted file mode 100644 index b0944111..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMNSDictionary+URLArguments.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// 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/GoogleOpenSource.framework/Versions/A/Headers/GTMNSString+URLArguments.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMNSString+URLArguments.h deleted file mode 100644 index d4c7e09a..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMNSString+URLArguments.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// 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/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2Authentication.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2Authentication.h deleted file mode 100644 index 8703164b..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2Authentication.h +++ /dev/null @@ -1,356 +0,0 @@ -/* 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 kGTMOAuth2ErrorObjectKey _INITIALIZE_AS(@"kGTMOAuth2ErrorObjectKey"); - -_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"); -_EXTERN NSString* const kGTMOAuth2AccessTokenRefreshFailed _INITIALIZE_AS(@"kGTMOAuth2AccessTokenRefreshFailed"); - -// 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_; - - NSString *authorizationTokenKey_; - - NSDictionary *additionalTokenRequestParameters_; - NSDictionary *additionalGrantTypeRequestParameters_; - - // 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; -@property (retain) NSString *refreshScope; - -// Apps may optionally add parameters here to be provided to the token -// endpoint on token requests and refreshes. -@property (retain) NSDictionary *additionalTokenRequestParameters; - -// Apps may optionally add parameters here to be provided to the token -// endpoint on specific token requests and refreshes, keyed by the grant_type. -// For example, if a different "type" parameter is required for obtaining -// the auth code and on refresh, this might be: -// -// viewController.authentication.additionalGrantTypeRequestParameters = @{ -// @"authorization_code" : @{ @"type" : @"code" }, -// @"refresh_token" : @{ @"type" : @"refresh" } -// }; -@property (retain) NSDictionary *additionalGrantTypeRequestParameters; - -// 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 ID; not used for authentication -@property (retain) NSString *userID; - -// 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 or access 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; - -// Key for the response parameter used for the authorization header; by default, -// "access_token" is used, but some servers may expect alternatives, like -// "id_token". -@property (copy) NSString *authorizationTokenKey; - -// 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. This will also cancel the authorization -// for all fetch requests pending authorization. -- (void)stopAuthorization; - -// Prevents authorization callback for a given request. -- (void)stopAuthorizationForRequest:(NSURLRequest *)request; - -// 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; - -+ (NSDictionary *)dictionaryWithJSONData:(NSData *)data; - -+ (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/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2SignIn.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2SignIn.h deleted file mode 100644 index ded279bd..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2SignIn.h +++ /dev/null @@ -1,187 +0,0 @@ -/* 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; - -// Start the sequences for signing in with an authorization code. The -// authentication must contain an authorization code, otherwise the process -// will fail. -- (void)authCodeObtained; - -#pragma mark - - -#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT -// Revocation of an authorized token from Google -+ (void)revokeTokenForGoogleAuthentication:(GTMOAuth2Authentication *)auth; - -// Create a fetcher for obtaining the user's Google email address or profile, -// according to the current auth scopes. -// -// The auth object must have been created with appropriate scopes. -// -// The fetcher's response data can be parsed with NSJSONSerialization. -+ (GTMHTTPFetcher *)userInfoFetcherWithAuth:(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/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2ViewControllerTouch.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2ViewControllerTouch.h deleted file mode 100644 index 23bb07a9..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMOAuth2ViewControllerTouch.h +++ /dev/null @@ -1,366 +0,0 @@ -/* 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; - -typedef void (^GTMOAuth2ViewControllerCompletionHandler)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error); - -@interface GTMOAuth2ViewControllerTouch : UIViewController { - @private - UIButton *backButton_; - UIButton *forwardButton_; - UIActivityIndicatorView *initialActivityIndicator_; - 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 - GTMOAuth2ViewControllerCompletionHandler completionBlock_; - - void (^popViewBlock_)(void); -#endif - - NSString *keychainItemName_; - CFTypeRef keychainItemAccessibility_; - - // if non-nil, the html string to be displayed immediately upon opening - // of the web view - NSString *initialHTMLString_; - - // set to 1 or -1 if the user sets the showsInitialActivityIndicator - // property - int mustShowActivityIndicator_; - - // if non-nil, the URL for which cookies will be deleted when the - // browser view is dismissed - NSURL *browserCookiesURL_; - - id userData_; - NSMutableDictionary *properties_; - -#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 - // 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_; -#endif - - // 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; - -// an activity indicator shows during initial webview load when no initial HTML -// string is specified, but the activity indicator can be forced to be shown -// with this property -@property (nonatomic, assign) BOOL showsInitialActivityIndicator; - -// 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 UIActivityIndicatorView *initialActivityIndicator; -@property (nonatomic, retain) IBOutlet UIView *navButtonsView; -@property (nonatomic, retain) IBOutlet UIBarButtonItem *rightBarButtonItem; -@property (nonatomic, retain) IBOutlet UIWebView *webView; - -#if NS_BLOCKS_AVAILABLE -// An optional block to be called when the view should be popped. If not set, -// the view controller will use its navigation controller to pop the view. -@property (nonatomic, copy) void (^popViewBlock)(void); -#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; - -// 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:(GTMOAuth2ViewControllerCompletionHandler)handler; - -- (id)initWithScope:(NSString *)scope - clientID:(NSString *)clientID - clientSecret:(NSString *)clientSecret - keychainItemName:(NSString *)keychainItemName - completionHandler:(GTMOAuth2ViewControllerCompletionHandler)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:(GTMOAuth2ViewControllerCompletionHandler)handler; - -- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth - authorizationURL:(NSURL *)authorizationURL - keychainItemName:(NSString *)keychainItemName - completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler; -#endif - -// subclasses may override authNibName to specify a custom name -+ (NSString *)authNibName; - -// subclasses may override authNibBundle to specify a custom bundle -+ (NSBundle *)authNibBundle; - -// subclasses may override setUpNavigation to provide their own navigation -// controls -- (void)setUpNavigation; - -// 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/GoogleOpenSource.framework/Versions/A/Headers/GTMObjC2Runtime.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMObjC2Runtime.h deleted file mode 100644 index e4e2ac72..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GTMObjC2Runtime.h +++ /dev/null @@ -1,113 +0,0 @@ -// -// 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/GoogleOpenSource.framework/Versions/A/Headers/GoogleOpenSource.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GoogleOpenSource.h deleted file mode 100644 index 8703285c..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/GoogleOpenSource.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// GoogleOpenSource.h -// Google+ iOS SDK -// -// Copyright 2013 Google Inc. -// -// Use of this SDK is subject to the Google+ Platform Terms of Service: -// https://developers.google.com/+/terms -// - - -// GTM. -#import "GTMDefines.h" -#import "GTMHTTPFetcher.h" -#import "GTMHTTPFetcherService.h" -#import "GTMHTTPFetchHistory.h" -#import "GTMLogger.h" -#import "GTMMethodCheck.h" -#import "GTMNSDictionary+URLArguments.h" -#import "GTMNSString+URLArguments.h" -#import "GTMOAuth2Authentication.h" -#import "GTMOAuth2SignIn.h" -#import "GTMOAuth2ViewControllerTouch.h" -#import "GTMObjC2Runtime.h" - -// Chrome. -#import "OpenInChromeController.h" - -// GTL. -#import "GTLDefines.h" -#import "GTLBatchQuery.h" -#import "GTLBatchResult.h" -#import "GTLDateTime.h" -#import "GTLErrorObject.h" -#import "GTLObject.h" -#import "GTLQuery.h" -#import "GTLRuntimeCommon.h" -#import "GTLService.h" -#import "GTLFramework.h" -#import "GTLJSONParser.h" -#import "GTLUtilities.h" - -// GTLPlus. -#import "GTLPlus.h" diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/OpenInChromeController.h b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/OpenInChromeController.h deleted file mode 100644 index 35363a71..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/A/Headers/OpenInChromeController.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import - -// This class is used to check if Google Chrome is installed in the system and -// to open a URL in Google Chrome either with or without a callback URL. -@interface OpenInChromeController : NSObject - -// Returns a shared instance of the OpenInChromeController. -+ (OpenInChromeController *)sharedInstance; - -// Returns YES if Google Chrome is installed in the user's system. -- (BOOL)isChromeInstalled; - -// Opens a URL in Google Chrome. -- (BOOL)openInChrome:(NSURL *)url; - -// Open a URL in Google Chrome providing a |callbackURL| to return to the app. -// URLs from the same app will be opened in the same tab unless |createNewTab| -// is set to YES. -// |callbackURL| can be nil. -// The return value of this method is YES if the URL is successfully opened. -- (BOOL)openInChrome:(NSURL *)url - withCallbackURL:(NSURL *)callbackURL - createNewTab:(BOOL)createNewTab; - -@end diff --git a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/Current b/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/Current deleted file mode 120000 index 8c7e5a66..00000000 --- a/External/google-plus-ios-sdk/GoogleOpenSource.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/GooglePlus b/External/google-plus-ios-sdk/GooglePlus.bundle/GooglePlus deleted file mode 100644 index 776285bba92acfd840f3263b30b9f0972e245751..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16440 zcmeI1&r4KM6vxk~iT!|Fm=rA(!%)KarZ5`>(X`PtvvC|GD7ehzQy;!J7w&sQ&CX4< zHxS&_9}u(@1!*1GKVt2rg>;T@o{odIutgJm51cvooO|wl=YB4;xc7cN*xDhY2G%RA z7l~Tgw5BS)#4Zyht7F`TfB*=900@8p2!H?xfB*=900@8p2>ee3zW@4pP&xQh3m49Z zeOl(*fVXTDtY27_%B7#@xKS-~O(4Sd0vl1eL=aIbbl!wfJMvGC-@F?2#r7z(iB{vb zQm=F|IG&`o1{wR9lf^d1gKDhQFBcg~O;64|Nk5v5*T6MPTxu69d7`m&5v?X;=TDZ$ z_jA9j`}!$)!ZLG8{Jf!?JW#%~@~&;?g+JtN|Jc2D$NiA)<`|d4i;!JtKD@|z$t}r^ z_T&a5S|@w19E6T%@|=uU3OYMEHkBUBRmC!1K3vqs@4IK+wUXAr{RfwL z*4=L+G(rh=Jbd0U0U!UUof_ss;}(~wXQt#A97BDLwAsN2?fs53D?$edfB*=900@8p z2!H?xfB*=900@9Uy%LDu|K+V3@Bh&*b=CR%e`;`Jer;-aZ+rIrp8oi`9q<43`tL$r bAOHd&00JNY0w4eaAOHd&@b?7%_51&C-Du+O diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/Info.plist b/External/google-plus-ios-sdk/GooglePlus.bundle/Info.plist deleted file mode 100644 index 61747833f91b712570d9df92a09076c51ae03a85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 978 zcmZuvJy6s@6y9tUQBn3lQ2s;_6%;}O2jW;T9^vptxjV@nAOe|?TXL(LO(s8#*XdYV z*jd;(IL=sDSU47rmKHV+(pflK+S}TggarKCVqZ4zec$`u&#Fy{>xtqw)XqVE&)&Ly z_4^MTY&dkd5v7`%kF>NNJ=WIValHG)$y2?j&z$Y+KQ}Na42jb4fHaaGyP%@fWVT3s zBge9u?pY4O?hU!5$XD~4iI*m`8J|@s4j=P!X+gItcsT)-YBqKkqu`8BXhlVBNxY2L zF|}+HGjA3f#9}IHOnh_Laic%Y5o$)$tAyc#61`UBQju!jn&p^bP8GE$Fr{iaUW`>d zhcH7$&55(9>9;ilhl+lO__iH@a3!I1Rn(P0a%|0#iS7kbG^e&BswweL-NCx=X{!_m zB~DtVO(=F$gk}gMrf(LMe<8U_P%l{{VO(p{r81+IR>}G-O0^U>F>Y9Dx7;1N?gS~< zm}U|^Y@q95C!vT&wmlYw7)MHWISc*`=ah zF+PK#{p(76LGqc}_NLSlK{ttAwHUVCF+p6Mwk(6w0kI(s%c=OpoRS{#|5 zVn(p6)$3AO8qP=;7ZRKz31TUem#=M{Um(ShtDq=XmqHeZNkfqF0j6tE0#0SDX#55RNq z25f?_;3t>j1TN3%9OLeBkGPlIJMI(r1J=P7I0C2O6==cx@F9E*pTMW^8GHd>!PoFD rd=Edsk8l%yhF{=!zJW)4AK%Xp@o9dHALlQD=s<4Ug7MhKhR^&0j@~e{ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/af.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/af.lproj/GooglePlusPlatform.strings deleted file mode 100644 index ca57e46c68e4265a659f0da3931e41630be8021a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSM);=Yq$ngNf}~+g bh1}E9KjRx#SDT;F1C=)Bq|q2FmLJm8-M4GAJ;(GvotdIztXaDhIEqwhIFo OFfu}D239Byqv`=S!5R+$ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/be.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/be.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 34913f1f49b113afe5f49d131baf1549ae59704c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 130 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSrn4xs7_k_zSh6^> wxG`kr3kVa0~jzeLTCn7C=H`x0n9rVasU7T diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/bg.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/bg.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 924d78fe7980d4661713dcb361630a9e3fac7bc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSrmzUHxU$%>nB>A3 m3<@lc3MlxhFWH96~ zJY*;avPu{ffOKlUfD|q%pn_~5{>8`(R9p&VxijPgVLH%=R1RKIZ5IYGU}S{Q46INZ HMpXjs3ZrksJ1Z!7%(zIXa-g&4Wm2&(NP$Q diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/de.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/de.lproj/GooglePlusPlatform.strings deleted file mode 100644 index cf334d8f869bac17c78524524b3cfad140efa8ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSMmXl>rskxi=H&~B zFx+8CVn}5uVo+dkXUGS_bcP%tUx6W!A&(&!$jV_z0g`zfyrSAB3}C>>2%#BRp)`z& F2LMCO8vy_S diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/de_AT.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/de_AT.lproj/GooglePlusPlatform.strings deleted file mode 100644 index cf334d8f869bac17c78524524b3cfad140efa8ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSMmXl>rskxi=H&~B zFx+8CVn}5uVo+dkXUGS_bcP%tUx6W!A&(&!$jV_z0g`zfyrSAB3}C>>2%#BRp)`z& F2LMCO8vy_S diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/de_CH.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/de_CH.lproj/GooglePlusPlatform.strings deleted file mode 100644 index cf334d8f869bac17c78524524b3cfad140efa8ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 132 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSMmXl>rskxi=H&~B zFx+8CVn}5uVo+dkXUGS_bcP%tUx6W!A&(&!$jV_z0g`zfyrSAB3}C>>2%#BRp)`z& F2LMCO8vy_S diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/el.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/el.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 37a9ae0de6a41e97fe0f9d699274347f61046aa9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSrZX>QKFhq9c?Tgl1rd I(lAOJ03K`(V*mgE diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/en_GB.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/en_GB.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 8cde83d6167a66bc649a7c4c0331e59a349f25a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmYc)$jK}&F)+Bq$i&DL9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSa`1{WfB_>Tgl1rd I(lAOJ03K`(V*mgE diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/en_IE.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/en_IE.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 8cde83d6167a66bc649a7c4c0331e59a349f25a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmYc)$jK}&F)+Bq$i&DL9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSa`1{WfB_>Tgl1rd I(lAOJ03K`(V*mgE diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/en_IN.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/en_IN.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 8cde83d6167a66bc649a7c4c0331e59a349f25a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmYc)$jK}&F)+Bq$i&DL9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSa`1{WfB_>Tgl1rd I(lAOJ03K`(V*mgE diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/en_SG.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/en_SG.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 8cde83d6167a66bc649a7c4c0331e59a349f25a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmYc)$jK}&F)+Bq$i&DL9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSa`1{WfB_>Tgl1rd I(lAOJ03K`(V*mgE diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/en_ZA.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/en_ZA.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 8cde83d6167a66bc649a7c4c0331e59a349f25a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78 zcmYc)$jK}&F)+Bq$i&DL9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSa`1{WfB_>Tgl1rd I(lAOJ03K`(V*mgE diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es.lproj/GooglePlusPlatform.strings deleted file mode 100644 index ce133e7ca3927082a01ee1fb2565830cceeff66d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhS<}r9O3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_AR.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_AR.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_BO.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_BO.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_CL.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_CL.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_CO.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_CO.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_CR.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_CR.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_DO.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_DO.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_EC.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_EC.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_GT.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_GT.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_HN.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_HN.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_MX.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_MX.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_NI.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_NI.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_PA.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PA.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_PE.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PE.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_PR.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PR.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_PY.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_PY.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_SV.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_SV.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_US.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_US.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_UY.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_UY.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/es_VE.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/es_VE.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c67ec5e0f8517be50990cd066d6dcb32dc369d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShC3!Fr>3M9#R~{Q dSqjPdc~D6XUQumh1~6b`gwPDEP#Q*g008A380P>0 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/et.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/et.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 40cf9ac145ebf9157ed154972a06ad205eabb99e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSM)~BYXDSqD78j?+ g3y2~(P-*qd^h6F`QEf8@Fkoba&&y+W;+AKT5PWQ0us0-!OGPc6d2qY@_{g&A%`JVfscb%RNIXK3>X<9Gy^M?hEbIO DMw34uUZAV}a#f(d}_r}r;q;`?QiKw&6Oqwz(zUxa^kYxiv-5bP2a;gMLR zbQ>&FE2)TF9fwj4N)3KbAoy)IXb@QviUDzGfkmWpoe(m`p0j@MSVVF94#05RHycrZ>odeVH)C0_Fw<_okJ{!=Xa)oG*OG zr6gjQ2By*UdOcO|Lse@NXds8fvD$zjZ(PD#m!`rHgSSfOK5s#Y>SS7l22-e2fYl-r zr%uJV6g<**DJV5k>3hQ}-CUvYlF3%w!*ODLlLkzViA+c7qcK}HggE#@dZLQpCw{&_&h#kPFMc_RE>rQ zL$ku;f8a8Igk#Xkz6U?PdEY*$3hx;$-W(5li%apw`Un$6VqxldOpj<$!n+=jD3Jsl z2#7o_-ubd%GI5mjh`8hp zMY&t@WtkA7mJq9t9xaU~**`9ms-ph775tG}mR96;uetsaJ#1U^7u<0{b0aUlsyu!y z-Msr{CH&8k{>O&u@T`SH(Oy}AYhc0ta?i%oiu7Mkg`ErkSLK1P(oTCex=DUH1{}^= zDJj@sM*F7nzWaVRHPf?4kaO*0%ve@(kE?v?UE0oQu*Cw1vop53d*n~1p+B@U+;6Ak zUp0T?+?V;}bq2Ilf?8 zs$}sDml2zpMHAQe{J0hTSkgE%{`H-w5mB|fsZNEcUBI=KJvAdm2{x)|@)aipfEebCQtdeuOtVDj~hx&L`|CzoGg$r&p+$Z&9n zBZ^%&o<>HdN|y+xB6=NdXs14A~*8dLo3GoHmtt9v2@KF2fFK5nek&Q z_$l!Cnq1NTS=;=x}qM!s=@m@-NdI@&m1J}f4O*x7`vTuhOCbAn?e zUm4n2*YmvV!p?rd@FvoN&-=OxpE%Ti{z&!`q+5>AoE`ElwO&np5`Tf4u*z$5+F`-fo9H@61Nc|WE6{O#KH{KFoSsDpgBybLN#Jsp%gW>*bpws zp;rR(&71xi4KWs-sU?P-&Twf^)ONR$_#Nh{*wAww!)>*L*mS>!{qyC=PDgI&^Iq6| zi=2>Dc6JBYA48nG13k3kJGXnSE_OL|k^3y}=D_uTN0PFM#O#f7fpY>xfu%XYGsO1H*d`AsY)(w|0j9 zvBr>fms`3f_vRM;O3q{leBk7^_dJ2xn5f(O2ON& zi_y}P$l&8H@c@ivf7yEWo;zWWxP9VE@@mWIboM_6oY$X`VR>(1SQKKH_clco(((5# z1y5Nx`)umG535C3uN??xgD5}NpX Gvi<{eG*Zd{ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_disabled@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_disabled@2x.png deleted file mode 100644 index 21ae728e165e632c69de7f8d8c157d84d6172f20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3318 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 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_normal@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_button_normal@2x.png deleted file mode 100644 index 80fc943937c8866eba76885ceb5ee0fd2dd9c244..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3332 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 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_disabled.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_disabled.png deleted file mode 100644 index 99986b55031623304a4be7b4fab50fdca6b56020..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1840 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 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_normal@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_normal@2x.png deleted file mode 100644 index bd1cc2e2a17f7e2f3877b890fdffb3e4577d7371..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3118 zcmbVOcUY5G7mtVniXfF02ZRVDSjZw|2_ht6h|I7mGbRzjNJ0`w0tgCzg0hsQ6;RMR z3IZykvOyG7RuvFIg@EEJt3}z!_r}qFfAr}e-+gl4d+)htpWk_&9CLB9-LP)+IuHmX zPY$xScL71=*?h8<$;#%N)!b>9^1X>-;cJ~%~JMJYhxZwyole?dV z5Qp=CcM!LRmt{epV2hV*#D4X@El5Obe)&nIp=PM`i`H?V|ZCTC|fpBRZ5p zWI`=>LCnP@z(6=lNQa2S!#Dzx*aG^+E(tix*hnbki-<7P0%|352=R7wfsna;7Q_r; zYQjLF(GVOCfySEQaA;!)28G5TQNRypg2s}}a3l;K@@+u@Z+zwfk{iY5n=jyI0Sy)k zc_buKBoZM+rU))S2#F>Vi831)j0qrNB9L%|bg>CXu>HFQ3QNG?vw1=`mjjVmr0?fO z3N4^Oq+e4A=Q%q5Wtb!QRw$rkNHLvH`d=_{G+tMUBY7_-B0$LK^pgP(`9f|lbott(!TqCPaN_t&R;S-6?$fIW(L;aix7n)v<&Lr9)5fKMe}G*66~D$ zDOMX?wsQ9xBYlSV(FS=p?{@$0*D$IydBEERv8#_Ox$7m4t_yv%B^?1sVD3ki`c_8y zjTX2jRKWT?2EmcQ{pqy|r5f#b%M2E)%vmTcX`9v2D;#^7 z|F*fHUT4!IwEU%;(R_aeC)9mMIT%mwvi{!$n^MiGR3Hfbj=!2n)Ng@3QM5JqMSe}@ z)w?0`WN1BigW6o))fbP>SHO-orYiPUmmu5{5>mVZ8foNhpK*CzN7T~VxF^-uOhtf| z(-gJ0YD!;WPH4U3(47uvv<3e;9JsDG!11x2BrEUM;#8~4p4E7Qap4T;a?JRxqekZ9 zdt_IBV#yBPVxN2m@4^e;Nd^4&kVb^>F{Icp)K)%|`C|O`gn^=YUv1pXQ0=XXl^-+@ z9<&wp2y3@;Gd9jG&OZm0ugYX;R4!K4hNPx;f)ikpH6D?1aw1dX%|6!EvRv%6_=atvNY+XFWSCparmeRk$M8$EN8s?@%2 zTAVQ48-HaVM5x%)ggR`%F@nQR$Xv^%YnaE8yOxj8^ z6@cV9h~Gx%CpU@-A`3jlp;Zb=W}H6YPPW4_w;hr=P&&xbM;0U3{$jT6z#caM?&;IbxKZ<_Hq#M9< z;HyfJ^4OY*mltQ|dR}@MNzKcZRX|?0-SWQU6fJr65<#N!DlgN-GW|WhIRTldN;RIx zlN)%KYZ=JWExS}YV&vp~(_&{j%yVf1HJuv&dTL|aLlptY(?_v&SH?)HMY@&O59H?e z=T*BdYB1zan^?*D!*dh$2nZPJ{o50xxk>wqGmX@`>Ne|39TxxW*VQ(@m+b{PulO5X z=ar6TS&{mf7Fd}8&Tq(Wbkx0V{LwDEbyLmqm0zCT8Id|qs5C|pi^Q-ls+bVJS6Z+g zt0M_1en%LZX@w|Wd>nu7!8@(mioCU18(HwIIF<3F_cvNA2CS3sJCyhgZFsM`Ax(sTrOVPq$@NqE3m^DOww=ZM1M-`ru(Zc#VA~OPbnKZQNGXr z=DWfqt${_J|Kk}IU7fao>rA3jS}Do9D$<$y z^0R}_J~SW7dbp)xw#J*v2(6a%exhq9xNI$889YN`#4|ZQthz@cT~)?`na*;%jr#d> z(e)$O&4$j7zdL`jGudFa%s@%eR+5?;#4AP~J?jh&w%pqsvcBj-O3ULcHK6B9?>io~ zq);Ta{ovwtV;aOm&*q4M!O`@c7*tJ__$P=k zDH-+2BabhatY3)VSs5RDN;hfO>E?L{r90&nr+@CC>meY`$2ZhTfA!0(%)?yH zn64gSfGJ?CBrDgJ4aOdl24_`APp<;sX$tfm3apkI?*4G8>Gel#<(5y`*5I^IJSPN2 z{0wmkp$G7`^l@HLT(eK^aH%vqYPRLWhuKOl`$oWXz_cNcWeMr_IWyKLgEl*;Ab;W!8ZS F{{>*wKBE8t diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed.png deleted file mode 100644 index c4fa214792f6bf2a8495455d2c6477a050b75757..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1985 zcmbVNX;c$u7Y>Wq1hI-VR-`(OB5v7cvX=;1F(?pYET|O-$;6D1OiYH7U`r8-l`2Om zE`^E;A{+!nq1L*vRF5pSAQq{|A_ZA$wOCQ)GZu^A1i|))r$0JpmiONG-sdjwbI)Wd z!$Z7Cz9a&H;4axLRwxO8>#~mOPjJ~wu~MqSzcl<|yy1brP4LRw1cI9ZQAc4>VXFmN z)JW6l&^VZ8Gn(;z0wFNSX4YuqVGM|aHzOt?<>7@o3V`T@lt^|MBg`y;4amx53%oWt zT&+!x*Yb6gpcO!%O@IR!VN3(qj0q;Iz$T=O;|lP#Q%$D;<0e?VkRoyh1fs%}fCRO` z0GkF;wG1W`;BaV67MsIiE(bsc6Qncnn?q%?1Z<7~;mOd?FSu2`L5) zGYjbSq@*NT5=28So9RqGpYOx~K`L%Rwc1UX#zr++7fd2ZVXM}Hm@x!30Zv3s9GZv; zDR`zYOE8+l!d?NJtP_pGTSm8O%ycG=K{pzmb&XqFF%|rG8n3mss_kZ&u7a&-qD2ei z<_jjB@!tJ=Ag3XojUd8;;D@3~kfPc|BW%JHQXvK3q3IBvK*VQ)pq#-2MREyi(pO=!Vj7bc zo{Wp&aVLDifAtkeEU*ScEou}^m}G#`fMTfCfSLixS`M%{Oru3iPQ?=E0llnO3R{p5 zVV&H98iDZ+3y{}kz~#$j9FADd1;O#kK~N-?NO@wejKvp=#FPnN-GAvC9Z!btq{lz# zGO5Bj=v=-cKQ6o)AJ~M?j0GQ#ok{Bk@xhvd$)d2es2)qwSYX1-8BiECn{gs&boQ;y za3DUI-3qBl{UC4S>RE_Sqp|QJJyYu4?g(Be70di@Y;>o;ePe`7d^<~eEZcEZpMKD` zYhmccnVOtUefkb5*PRO^u5 z_Xm!w9vvMMcJsS)bLT*D#i^xgsIPa{@zbxpI2OqDBJEn zuQ_z8D%y1q*>GLkvu4WS1BxCjlb998`ZLJR057HAo!Q2V4(_r}Jy3aliD$IZ@M-hl zj`rq)$F*Mm$Mx!Uog(Ov`}f23>Av1|UGt=4hiL=MgB4i3W#Gs+sm#&O&%gUdEz91;D-X1d#KbH-ddaP8Rzo6o z?xSZd#HJ0Ek>o=~QA9&$Yv%C(t|pcxSmy<`m-#tPj3m$bq2Sp3fZdxeGy}V8%vTEi zY^{3!4_%?1MUPBpD>>vND&?cESMztD>4uQNzWyS=nB3u~MW+ihmN(A*%8+|Mpw;7j z%bg!Nrv{@Cd%MrY6QBBhv??V)9%8rW|H7z^+qW;zh2WMRZKzJXnqH!x!AmKg9bH+e z>>P~tqx~V;;^C5Yp#GU^)}ip}W>k?L1fZfN+cqry0iTxr;|eCVAE=gq@E5e|2}*CuBCc5m+fe3A?rgS>rK^!NBu zx5o!~}`uKK%)!3;hA?P5di9`j=p)b!~N!<}Cnc?2kS|ftdi1Mfs ziFFxt68gf&Q&QrIcDEah+SqTt{cc#>f)o-J+3&5#X|v|(ZI_%|UI%wgZ6wC7cVV>@ zT6OaO~jfjqAbyZ|-Z>)d8wS^|T&7rm}x#v~en2~wE_p!m{2=ufGt_$g{?)C0y sT&nspMwwmq#B=GIkITi!^WK`hEmK4sC8f=dg`Iy|g)CfpQXHH1f8FvIS^xk5 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_dark_icon_pressed@2x.png deleted file mode 100644 index 67f61b8aa009c4e323209f2adc7cb88e50ba9503..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3184 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 XwieBsQ~#cA|D`D9p|U#k{e%Aj?DS4f diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_disabled@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_disabled@2x.png deleted file mode 100644 index caa829937449d88cd53a71c2652e1e363d77b461..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3169 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 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed.png deleted file mode 100644 index 601f63467fd2a565f4b7394e5cc2c019e2432f46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2221 zcmbVMc~}!?8jqF=MW{wmP*6f-3nGwYl1vUjOfm^X4RQpb3a%j;lOQ>q3^&Ra6@enC zZG~1=0$Xu~#VXN9Fo2>IMMR)VtHq;=LXc8YjRzK?69sqw@aZ2r&wTTK$L~GA-#hu? zVIhw8i|uhZoDEOT6^7#oGgtH)vaz+JFcgZ!WIQ&=cC)ar&NU?jhxytx}eZ7`&1Yn8wBos9;n=NK+-Lb?met;v2hcY;N5q5eaV~=++=2$Lf#}D+(v@ zGzd(f`&0d-WD11_|v3{RDTU3Cs9}|memFT_+bb?UAh{Tr1`0J%cd z5;VzZ5D|;?Z3-%_Nc7IIS~pcFtYoA#iIzn1CzDhvYhG{AIy4ggZy4`I>%{3=m=p=? zG|7k*#^B4Qm9g6WwIeGKi-x@pQDT=ONrE)eWEHGNg-{R?JMot(Wo!1Qkf8oLg52UCcqPL7!*2(0dNF7+O)1v ztwSYhDLn00iTRzRD*~$nxtt4gex?tMyJqd3A`wf;4P9!m1^t8a_a@X z%@=|ZWeO}4AQ~0nO@-OY_eH>93HTt$6)*tcP38c=;qo9Rm%*p8xEwBVN>}#(RE>lM zL$cE2f9Nv3g>le2eMf$5@vePfHP$l-)*K_L_KUE_T7>dr(J0LpG*yDYxVJqZR7vC* z5hSwoZS8O%269tE>%^Fxi4E)Hf(`E}iOpvg)RjkX#^ib-#1a4cQ)lA*2$xyEXsCoH zhoN|}qWW0X&o`<>8|;rjF*$Qv{y~TEEeq`@YU3KhXVPyv)#TNOJ0*1IN1pmfn9FMa z`f6FjXSdG}R|?yD#`oK$m>n98#oB@PONZtY$Hoov!o0S8MNVE8kR9apO|w*`oqUGuw>JPt)|-6{@+zZb{Isf zs7|~{cCho<-1mGxrgfMpU%|C=$(<1$?b>PY=~5 zHU%`s^r-p{n&!ndiZPk*WX;`B6eQgCILr&wXNY1??z{4<8aA?+3a5AQHH3pIA=%Z=VvJQvT4R^@%3@Zy=#y8 zdcHbgYFTiU-Tct_!qR^Lul*^mZ(^K3=m?5jy}I15 zwa%(<3bib4&o*c?IHQ?!)*TrxE$cmbqV0UCUr)$u-6@0o!Hvcbg3nzsKi+%mxL$m= zXw@!{d9b&Wtt&E@@ryGKr1;Z>yGo~0bk$a ztkjpTu37rdiNE(`W2~E;yid$mVGQF~88&h=V(ayACtLGVr*GYP&;39J;}hw>Myhm& zmh|nbKJ_3=A-{A&`m@Ol=hg2Sx~SCyru6|9&RmJ!A?v`gxgRw!gkKEIw#**i9%`(; z(O?rL7;4hq{Y~V5&h1*07X;xiZ8M*vkgGl1l9#2I{IQ`gb}+fQy4o(GYY-1PRp`4( zU3JSEwc?9Us%P{qG^zO6&#HddwX`TP6lOZ`^tQP>%$;op$N3ElmJIoZJoqHUv+DHu zuBxtFXVauzUy2#&Xnk3>adq1k7i0w+1Vv6A3$M8Q`UcT9m`5L4Rx$3|6=z%1#DkPF#VO^*JB>@GQylg>CRe@oAeG=z;I2{Bb~`Lt5x4V+(Wm>h{$93>b_Z(QqLSVj7%r#>Uh(C(TUwtDfWiNK z^fF`fWb(xQE}y#eCHqTrPbX8&ds91u;-hQooAhVUvXeGE$Pa^#b2sPw3DvQU A>Hq)$ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_button_pressed@2x.png deleted file mode 100644 index 4a7ac50af9db55221ca4865952131f96ca38aa3f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3452 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 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_disabled@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_disabled@2x.png deleted file mode 100644 index fc6e045130f101301b03fd755e977196644c060a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2930 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 YUI1QOZ+2zYfL9j8p6*DyN%4yN53c2nyZ`_I diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed.png deleted file mode 100644 index 962bd989c18920574bf8fdc5efe06a87ffec86c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1961 zcmbVNYg7|w8V*u1(!yF53(B(7aqFT$=92qJpt(Yd0SpnTEv6wElPn~YCWA!qK&cjw zDdlL8g`7=`1TPMz(P%G;^&)vX4VV?vcf5p}hscv9O6tp?9+)0Pz0G*?4H_-bU{qz1 zS&CJdmM}3iIwA*W*i9B{pGJ#Mv|BXVT$}`QaJ|ti07p-^gMd*d0N1h=u)-q74aVd` zE1pr9s?rwbYWX@aF#(9TV-$f2CpCcGlxMbKb^$oWi&10$G6Vus5HeQ)3jGd&EJZpX zCagHXW-#NlFoFOa4g+DaIUFPwKw$)hVCv??AuNo|!B8$ReSwrWt8N3Pl*p!iQ8NK( zAV~`bK?MZ`i~=Tuu<9X%&*%F&P&AH0#Mw5PNsT?uY+E|RAi-@~tIvInjaiG& z_%%{~r)}ZiwZ+6%TtgC86+z_9C?MTHkc7=ZSO9Sb2Z&Z^v_`XkVY&Z+p5-gSt;UVG zPG%)cz*L1XS`EGe04tO!z?MP?8i$O4TOr#tXuGr;|M=tb?$$D3N8m>HpzX|Q-=BsP@8A4G<3FR)*UcZuUBGxaIdSTT z@y(Bl6V!D+dh`9y9P^Y4dh_dB?U$~Gn$gU+FEgrJ*U#Hp6YaP-KAyj8|GA;DzXNon z`r9>W^oQm1L@h~4N&CIQZGEDK%UV%afQa7wsuXE9E?#xzC0|=?4@+U#9khC3F#J2?-7_wjUHMJb+_E2rt_J-!$m?{UWOYN~uB1sf7hCMnvGSF% zjO)jHTXdfuS{XPRl78^513xPpb`2TU29MlLi}jt2zgfPDQQqX*vh4`+^6-)N@x8_B zx;1&uo!3_BJI<7rzjE`O?Z=6q0((yI_r>?s2CCm-nqa8J9df)a=a<^edo7`pLyKy1 zxu0i0UgAN&?$w9NZonh(lc=v+OOEebw^)6vKYQrTt=Qe?e}h_1G`U^(BIVgW9vSPs zqJA@TIcA^SQtBS?wrwi>>#|bMqKJE+MMryGTWqee@0%++4@LZX&Ft_UAyZN_m~&YV zmrn{7#nw$ak;L7?Bj-r8T zyZ-ihQ;4`)^&n&geQ#!7w#Jh>;oSydUurCqSo7OUj()KxXV~c&_=VN&x>Hlsp#8q+ zgegG3P33#*$-kW27wDDuTA(*yEvh^Hw5H;&!Emy({fQV7{93ZBvj7b9Zb&?Lp=$CY zZ_hiOoJ-!6ozj4IbY}!m+~%54;c=%n@Bdp=8#}k+#*gVcDhdtV0ry9GI1dekSXkK0 z9W^x0Npv>$-7G!Z3N|)7JpE%vpXfcgH##y7&%JoG^5A#h zzLG7R{YmY@{Dg>Y6^(`Wp|6$j{0%ja70{O*p2S0gb8gLXhpb;JR~}Q=zac+%_~q8l z?<}7yznLwpNmXCYJT>^!qvSu&kMVV-ICqsxK;-0rDSNxVWUJ*L&ID0Ym#-wioHFkJ OqspbJlEb3+KKu{&PZX^H diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed@2x.png b/External/google-plus-ios-sdk/GooglePlus.bundle/gpp_sign_in_light_icon_pressed@2x.png deleted file mode 100644 index c780c91286ab1f3839e8433039144d47bccb8024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3205 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 F2LMCO8vy_S diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/he.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/he.lproj/GooglePlusPlatform.strings deleted file mode 100644 index f603fa7d72abb044cb23e62946e7bdf0dd0306f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSrm|jPy~%o;^#SX{ zd;t*zhe3h$BI^a#d#uk`AF*C#eZ`=_;LeZ_gy{@945=KvqS|H*V8F--p&3}AG>l3F E02$gLf&c&j diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/hi.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/hi.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 023031f238a5ca5d5f0e1cc4528a69905291092b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhS=5ShY+HtaTYA`53 zNl{J%PIpeGd;u{AcZPf*OlQbpNCiq;aJqv@tjalfMYUZRz<`kvLNl;JX&6-u0Hy2~ AM*si- diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/hr.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/hr.lproj/GooglePlusPlatform.strings deleted file mode 100644 index eab7e25b4909de7e9a062417bb58727aa3c0b582..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSh6fa7W+j#-#tVo+ hSqi1aIi>0OxljchyrSC13}C>>2%#BRp)`#00RW>y8wUUY diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/hu.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/hu.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 5a03ce74fa43a7fae5cd85ef596835829f6e1e90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSrZYG(q%!0%yksZ< z;^KS(5e9dLd>~8*3Z^pXG9&@XEU=PPhCGH6hHN0a3Z#^SS5(`I0Sp)!Av6Okl!j5M E0Ot)HLjV8( diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/id.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/id.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 18c0e9a14411edc4c2a6882dcea2a45e796e0a08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShWaKJmu3Uyz_db2 cYF>I`9#oElS5(`O0Sp)!Av6Okl!j660Ly6@!~g&Q diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/in.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/in.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 18c0e9a14411edc4c2a6882dcea2a45e796e0a08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShWaKJmu3Uyz_db2 cYF>I`9#oElS5(`O0Sp)!Av6Okl!j660Ly6@!~g&Q diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/it.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/it.lproj/GooglePlusPlatform.strings deleted file mode 100644 index bd15d9e6befb12604e9e9a7a388af6b89fd91a83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShB+oDr>11a3kX6O c3d#9-P$>>xQEejzFkoba&l3F E02$gLf&c&j diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ja.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ja.lproj/GooglePlusPlatform.strings deleted file mode 100644 index c5deef23fecc9a72f73570e3401384cb7c3ec621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSrWm|6*kG{4;Bz*E jJ3~GYrZeO)q#C5dggJOcwM`hnfRPbGGq6Hw808HBcM2Ml diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ko.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ko.lproj/GooglePlusPlatform.strings deleted file mode 100644 index a946ea2e9daedf32431285e987e405ce1eb6f8f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSChv$@`{Q^;z5qXi uJ3~GYrZeO)q%tV1IdVeuxXq3j1_g)$4qj1hBL*;FWQ5QRtWX+81p@&3BOcHI diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ln.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ln.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 66cc68387aa3f4833e58f0504ff83c0b7023033d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSMmp!`<)v0+<^$!$ mgHsifLEPk$)FOql%tWXf4qj1hQwA_#WQ5QRtWX+8`2zqHqZ{)8 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/lt.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/lt.lproj/GooglePlusPlatform.strings deleted file mode 100644 index c0b3750711fe9a01bc990519168ca738c2d69b35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 135 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSh6fa77H4MZ0 z1TYjaWHJ;3aTbFfg91YyLn1>dLkftkAjja&kPn3E3^@#`3NjqLqT0p`V8F--p&3}A IG>l3D07Xq26#xJL diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/lv.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/lv.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 91f1515cbc0f54647eb272a65a1ba92336ec90f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 133 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSMh0Z27A0mEm+0jS zh%f{&WHO{O6fq<+WHS^qlrU;Dlz>Hw859`Y8S;TJogs%Im4jDQ+mrze7#Sfn11pq< GQ3(K79~%4s diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/mo.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/mo.lproj/GooglePlusPlatform.strings deleted file mode 100644 index a76a9b4b4d0163bda506a79d9f74c27daa4b2948..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSW->T4#}9EMa5UQum31~6b`gwPDEP#Q+% F0stoT8ngfa diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ms.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ms.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 2f806396f40d9fabf6d653e8fb14e0e40ef1f9c2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 116 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSM*8HZE952?muANc ih{M?mDXDqsiFr^p9K531rVL=f$OxesSfMnG@&^F@h8vs! diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/nb.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/nb.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 4318afbba928d250a27335c367174d9d49d64470..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 134 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSrZf03T=WHL(T3rJv>04gY8C}OB$NCjdA26v!Fkk%ZAR1RKIZ6^jWU}S{Q46INZ HMwJ2pUFRI$ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/pt.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/pt.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 214850260259d2d6c5ba6e3ced06f2e0d1e2957d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShWg~EgXARK601^+ i6mmd3h2;EPg?y+24qj1hLk2KlWQ5QRtWX+8`2YZZ`WjaN diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/pt_BR.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/pt_BR.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 214850260259d2d6c5ba6e3ced06f2e0d1e2957d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShWg~EgXARK601^+ i6mmd3h2;EPg?y+24qj1hLk2KlWQ5QRtWX+8`2YZZ`WjaN diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/pt_PT.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/pt_PT.lproj/GooglePlusPlatform.strings deleted file mode 100644 index f0f5ee9241eab224e4df0c97b11778621d5f091f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSMtSCCChI8_rxxqw z3rI3}GUPF2G9)wTF(@z;Go%7>F~ehqd>}6wNag}*5ZfI{<};)-T4#}9EMa5UQum31~6b`gwPDEP#Q+% F0stoT8ngfa diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/ru.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/ru.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 596659523c00c653076f4a92043ccc239c8d6fb1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSrm_gJ*s)l$II&pd z3y2{&3<@kpKy1Kb1%w7H&MdYpP7DeR?hN@rn9h*HkjlX;s%^#q28@glnt>Hc!>CjM DZKD>^ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/sk.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/sk.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 0cfe61560fbbef5d0b47e5aefecdc6932afb2ad6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhS<}d^>6ftBnWH96~ zJY*Hc!>C#S0a+j2 diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/sl.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/sl.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 86b01769088788a829a10f206fd41009c60eb672..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSh6fa7W+j#-#tVo- hSeYfM3dN}kWl(tzUQumh1~6b`gwPDEP#Q*g0|08x8b|;D diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/sr.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/sr.lproj/GooglePlusPlatform.strings deleted file mode 100644 index e0777f188475d9eca0defe30935bd17154faf601..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSX0gb#IIvi-M6ejJ z7_nF|D6rVDnC1&eViN{R+5;7vvRJX$F(@#&GvotdIztXaDuXVI0SB+BwgUqgFfu}D K239Byqe=lHu^8F_ diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/sv.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/sv.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 35a393c7217a0afdeeaa0154eba36d3f31b53e06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSM)>5Xrzb+BVN8YG Z)D);R2d}8M2?H1~GD2tuRwxalyZ|CD8CC!Q diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/sw.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/sw.lproj/GooglePlusPlatform.strings deleted file mode 100644 index c5de69fd351cfbb5ac070da387ae0d9a9189b5d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhShI;0uXC}rAh=OT_ f((KHV(%j5Ms4NGssJ0;k7%(zIXa-g&4Wm2(84Ved diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/th.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/th.lproj/GooglePlusPlatform.strings deleted file mode 100644 index a0cd034aa4056bff39479625fd7ddbba4a0d81b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 150 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSX7Z`>vGZ~9ne%z@ z>GC-PS)Ta<5-5TWd`x_vd`1vSJ`o^Woll8Dfx(?29|+SKau`xMcty4C7{Gv$5kfPt JLTMOP2mq-G7*qfN diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/tl.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/tl.lproj/GooglePlusPlatform.strings deleted file mode 100644 index a73f999d538094957be757f8629be929ad89dd23..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103 zcmYc)$jK}&F)+Bq$i&DT9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhS#tVr0CZ_8aL)0h~ YCql(Jcty1tz<`kvLNl;HX&B`U0Q!~|hX4Qo diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/tr.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/tr.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 7c86ee3b84bae431a01fc9b58088f8634886011b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSW-|CQlrWSs6ajHA zg91Y$!}ELrVFq`Gd>~9`$YDrjP-jR13M&BlXbL%aMYZi1z<`kvLNl;JX&99b0N8gM AdH?_b diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/uk.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/uk.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 58d32113539f1b7ca340de62cf7e05f804ebd97b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSrm-lq7_o%0Sh6^= zSmX;xB6ArOSd4(!j>VA0nn91noW+2}p2dR2kwJmMogp6x(;0FYQaN}Gi3V;fd7@3(Fpo-lY@_{g&A%`KAgI84BjsXl986h+SE0l&& F`2Z)V8e;$e diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/zh.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/zh.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 389ae378004c085c690557dbbb94b28154a691d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSCY4pkhvxa$mufI5 oFt{`117SKt4nrz~LYzR7IY^R&S5(`80Sp)!Av6Okl!j5h03fj#4*&oF diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/zh_CN.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/zh_CN.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 389ae378004c085c690557dbbb94b28154a691d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSCY4pkhvxa$mufI5 oFt{`117SKt4nrz~LYzR7IY^R&S5(`80Sp)!Av6Okl!j5h03fj#4*&oF diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/zh_HK.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/zh_HK.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 3e974a37cac2b1f966c8badc5d8d75f2d42cc61e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSCY4nOre=Z&1_cIp ehI}AQXUJhl<=_?7Hedh)Mn(wDzzU^dlrsSAa}{y` diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/zh_TW.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/zh_TW.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 2fe0d2767de1a90c504c9e44c14d98eed6deea22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhSCY4nOrsnzAmufI5 oFt{`117SKt4nrz~LY#4u8Ay_YS5(`80Sp)!Av6Okl!j5h04G5hH2?qr diff --git a/External/google-plus-ios-sdk/GooglePlus.bundle/zu.lproj/GooglePlusPlatform.strings b/External/google-plus-ios-sdk/GooglePlus.bundle/zu.lproj/GooglePlusPlatform.strings deleted file mode 100644 index 9f7d9d32853aa637349aad3eef55e39aa64e9e66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmYc)$jK}&F)+Bq$i&PN9-Nt;r;wQ!FCYwMDU@fHWGJ}j=cnhS#`&eE<|QiRrKjeW jmFA|#3rM00fMj$bN;!B%wXGPyfRPbGGq6Hw7!?KpK71aX diff --git a/External/google-plus-ios-sdk/GooglePlus.framework/GooglePlus b/External/google-plus-ios-sdk/GooglePlus.framework/GooglePlus deleted file mode 120000 index aa81e702..00000000 --- a/External/google-plus-ios-sdk/GooglePlus.framework/GooglePlus +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/GooglePlus \ No newline at end of file diff --git a/External/google-plus-ios-sdk/GooglePlus.framework/Headers b/External/google-plus-ios-sdk/GooglePlus.framework/Headers deleted file mode 120000 index a177d2a6..00000000 --- a/External/google-plus-ios-sdk/GooglePlus.framework/Headers +++ /dev/null @@ -1 +0,0 @@ -Versions/Current/Headers \ No newline at end of file diff --git a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/GooglePlus b/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/GooglePlus deleted file mode 100644 index d46ff4890c67a6e2deefc048630d9ab1ef7ead35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 328156 zcmeFae|%L{dhfsU3j>2pK*lnZI)`62B4UV$OiJ~flfw}#LV(Bw$1w@XffEf$Ob!^3 zax)Hf7;9~09E#R!!BPv3Rl=wR2bEgui?3xYTCe4LytY`h$Yp=c5+Uva4_wuWbChb&%Cy{DA0e+yl(al*U!9R_6^qs0@oMKgyFJh z78T8&H48Mmh`+k3MpRbLShnKU$h>G^+2W<;^CIYV4rMvc75R=6|9O^kgY`$`f$xXG z)ilC!HsQAwJI*Qm*2Ru98&>y^9H)mI9h;x!EVB6RT*sN;n&lMP_-m~HSJwX@*1v3+ ztAC#L|Iqr+TmM7rf0I&>9lvM&@z$Q3tp77>*NfI~ws!oP_5arTA6P$+(w5!Rt$(Za z8?685)<0zZUt2$qd@9})>wnMs-y*-t|4r6!wf>JSzuwwiW$pcEYi9xWs2qP`<({zd z{>kFcz$(XA@#iG6oNZRmtJXhm{cP12ffu5C#)uK9!5`kHukUBja4 zHG|c%D}47?5vs3lSiQD-_0U>cY8snj7b$HcGjw6M#2eSv*P6<`xv_C|eeAZDSo6F! z)phkl7S*6p1}nMq+s%x4bwjPMwlbTjDV)KZ@A=BkZ>Vlnh1Vt$jSWLIQI|QRrm?=U zd09<7Hgp|X$-0&W4J~!Gv8Az9&9RoaOI@($0@Y$8wj|cqr>kzzjJkqO<=ymH%WCgl z9&2u)iJqUW+m zYL2a{qda4+Up2UkGurcDW#!bn zkL87-@VteUWlI;AFD_lY(0vU1TjY>(iFkQfH`f=Iq&nk27Z$&HOGbGtTslK4vsB=F#=`7bp9?!7sxfGZ=oB@t_lM z9N~zTbktsv)+w^Ntd2FYM7)7f#Cc^} zi;f=?d3r{@_-(Q}T4MFGLgh2ijxGvs3#q*@%C%!Nc1!}(Tzq!aw3xA+Yu0&oBzT*9 z4&K~vS^?_~w4-K~UrDANQ+UTZO1v&~DBh#rp}h@MN4lm=>(*5_8&0N68ts

*7e~n~UHQnsI*8O76^VfXp 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 rnuCrEt{)%b - -@class GPPDeepLink; - -// A protocol optionally implemented by the client of |GPPDeepLink|. -@protocol GPPDeepLinkDelegate - -// Notifies the client that a deep link has been received either from -// |readDeepLinkAfterInstall| or |handleURL:sourceApplication:annotation:|. -- (void)didReceiveDeepLink:(GPPDeepLink *)deepLink; - -@end - -// This class handles a deep link within a share posted on Google+. -// For more information on deep links, see -// http://developers.google.com/+/mobile/ios/share . -@interface GPPDeepLink : NSObject - -// Sets the delegate to handle the deep link. -+ (void)setDelegate:(id)delegate; - -// Returns a |GPPDeepLink| for your app to handle, or |nil| if not found. The -// deep-link ID can be obtained from |GPPDeepLink|. It is stored when a user -// clicks a link to your app from a Google+ post, but hasn't yet installed your -// app. The user will be redirected to the App Store to install your app. This -// method should be called on or near your app launch to take the user to -// deep-link ID within your app. The delegate will be called if set and if a -// deep link is found. -+ (GPPDeepLink *)readDeepLinkAfterInstall; - -// This method should be called from your |UIApplicationDelegate|'s -// |application:openURL:sourceApplication:annotation|. Returns -// |GooglePlusDeepLink| if |GooglePlusDeepLink| handled this URL, |nil| -// otherwise. The delegate will be called if set and if a deep link is found. -// Also see |handleURL:sourceApplication:annotation:| in |GPPURLHandler|. -+ (GPPDeepLink *)handleURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation; - -// The deep-link ID in |GPPDeepLink| that was passed to the app. -- (NSString *)deepLinkID; - -// This instance method indicates where the user came from before arriving in -// your app. This method is provided for you to collect engagement metrics. -// For the possible values, see -// http://developers.google.com/+/mobile/ios/source-values . -- (NSString *)source; - -@end diff --git a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPShare.h b/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPShare.h deleted file mode 100644 index 1857dc79..00000000 --- a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPShare.h +++ /dev/null @@ -1,152 +0,0 @@ -// -// GPPShare.h -// Google+ iOS SDK -// -// Copyright 2012 Google Inc. -// -// Use 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 API 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 app. -// -// 1. Initialize the |GPPSignIn| instance with your registered client ID, -// and get the |GPPShare| instance. -// -// [[GPPSignIn shareInstance] setClientID:myClientID]; -// GPPShare *gppShare = [GPPShare sharedInstance]; -// -// 2. In the code where the share dialog will be opened, -// -// [[gppShare shareDialog] open]; -// -// you can optionally call any of the |GPPShareBuilder| methods before -// calling |open|, for example, if there is a particular URL resource to be -// shared, or if you want to set text to prefill user comment in the share -// dialog, such as: -// -// NSURL *urlToShare = [NSURL URLWithString:@"http://www.google.com/"]; -// NSString *prefillText = @"You probably already know this site..."; -// [[[[gppShare shareDialog] setURLToShare:urlToShare] -// setPrefillText:prefillText] open]; -// -// 3. In the '-info.plist' settings for your app, add a URL type to be -// handled by your app. Make the URL scheme the same as your app bundle ID. -// -// 4. In your application delegate, implement: -// - (BOOL)application:(NSString*)application -// openURL:(NSURL *)url -// sourceApplication:(NSString*)sourceApplication -// annotation:(id)annotation { -// if ([gppShare 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 |GPPShareDelegate|, for example: -// -// @interface MyDelegateClass : NSObject; -// -// - (void)finishedSharing:(BOOL)shared { -// // The share action was successful if |shared| is YES. -// } -// -// MyDelegateClass *myDelegate = [[MyDelegateClass alloc] init]; -// gppShare.delegate = myDelegate; - -#import - -@class GPPSignIn; - -// The protocol to receive the result of the share action. -@protocol GPPShareDelegate - -// Reports the status of the share action, |shared| is |YES| if user has -// successfully shared her post, |NO| otherwise, such as if the user canceled -// the post. -- (void)finishedSharing:(BOOL)shared; - -@end - -// The builder protocol to open the share dialog. -// For more information on sharing, see -// http://developers.google.com/+/mobile/ios/share . -@protocol GPPShareBuilder - -// Sets the URL resource to be shared. -- (id)setURLToShare:(NSURL *)urlToShare; - -// Sets the text to prefill user's comment in the share dialog. -- (id)setPrefillText:(NSString *)prefillText; - -// Sets the title, description, and thumbnail URL of the shared content preview -// in the share dialog. Only set these fields if you are sharing with a content -// deep link and don't have a URL resource. |title| is required. -- (id)setTitle:(NSString *)title - description:(NSString *)description - thumbnailURL:(NSURL *)thumbnailURL; - -// Sets the content deep-link ID that takes the user straight to your shared -// content. Only set this field if you want the content deep-linking feature. -// The content deep-link ID can either be a fully qualified URI, or URI path, -// which can be up to 512 characters in length. -- (id)setContentDeepLinkID:(NSString *)contentDeepLinkID; - -// Sets the call-to-action button of the shared content preview. -// The call-to-action button consists of a label, URL, and deep-link ID. -// The |label| is a string key defined under "data-calltoactionlabel" on -// http://developers.google.com/+/web/share/interactive#button_attr_calltoactionlabel -// that maps to the actual button text. -// The |url| is where the user is taken to after tapping on the button. -// The optional |deepLinkID| is the call-to-action deep-link ID that takes the -// user straight to a specific action in your app. It can either be a fully -// qualified URI, or URI path, which can be up to 512 characters in length. -// Note: In order to set the call-to-action button: -// 1. User must have been authenticated with scopes including -// "https://www.googleapis.com/auth/plus.login". -// 2. |setURLToShare:| must also be called. -- (id)setCallToActionButtonWithLabel:(NSString *)label - URL:(NSURL *)url - deepLinkID:(NSString *)deepLinkID; - -// Opens the share dialog. Returns |NO| if there was an error, |YES| otherwise. -- (BOOL)open; - -@end - -// The primary class for the share action on Google+. -// For more information on sharing, see -// http://developers.google.com/+/mobile/ios/share . -@interface GPPShare : NSObject - -// The object to be notified when the share action has finished. -@property (nonatomic, assign) id delegate; - -// Returns a shared |GPPShare| instance. -// |[GPPSignIn sharedInstance].clientID| must be initialized with a client ID -// registered in the Google API console, https://code.google.com/apis/console/ -// with the app's bundle ID. -+ (GPPShare *)sharedInstance; - -// 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 -// |GPPShare| handled this URL. -// Also see |handleURL:sourceApplication:annotation:| in |GPPURLHandler|. -- (BOOL)handleURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation; - -@end diff --git a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPSignIn.h b/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPSignIn.h deleted file mode 100644 index 85446a6e..00000000 --- a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPSignIn.h +++ /dev/null @@ -1,158 +0,0 @@ -// -// GPPSignIn.h -// Google+ iOS SDK -// -// Copyright 2012 Google Inc. -// -// Use of this SDK is subject to the Google+ Platform Terms of Service: -// https://developers.google.com/+/terms -// - -#import - -@class GTLServicePlus; -@class GTMOAuth2Authentication; -@class GTMOAuth2ViewControllerTouch; - -// A protocol implemented by the client of |GPPSignIn| to receive a refresh -// token or an error. -@protocol GPPSignInDelegate - -// The authorization has finished and is successful if |error| is |nil|. -- (void)finishedWithAuth:(GTMOAuth2Authentication *)auth - error:(NSError *)error; - -// Finished disconnecting user from the app. -// The operation was successful if |error| is |nil|. -@optional -- (void)didDisconnectWithError:(NSError *)error; - -@end - -// This class signs the user in with Google. It provides single sign-on -// via the Google+ app (if installed), Chrome for iOS (if installed), or Mobile -// Safari. -// -// For reference, please see "Google+ Sign-In for iOS" at -// https://developers.google.com/+/mobile/ios/sign-in . -// Here is sample code to use |GPPSignIn|: -// 1) Get a reference to the |GPPSignIn| shared instance: -// GPPSignIn *signIn = [GPPSignIn sharedInstance]; -// 2) Set the OAuth 2.0 scopes you want to request: -// [signIn setScopes:[NSArray arrayWithObject: -// @"https://www.googleapis.com/auth/plus.login"]]; -// 2) Call [signIn setDelegate:self]; -// 3) Set up delegate method |finishedWithAuth:error:|. -// 4) Call |handleURL| on the shared instance from |application:openUrl:...| -// in your app delegate. -// 5) Call [signIn authenticate]; -@interface GPPSignIn : NSObject - -// The authentication object for the current user, or |nil| if there is -// currently no logged in user. -@property (nonatomic, readonly) GTMOAuth2Authentication *authentication; - -// The Google user ID. It is only available if |shouldFetchGoogleUserID| is set -// and either |trySilentAuthentication| or |authenticate| has been completed -// successfully. -@property (nonatomic, readonly) NSString *userID; - -// The Google user's email. It is only available if |shouldFetchGoogleUserEmail| -// is set and either |trySilentAuthentication| or |authenticate| has been -// completed successfully. -@property (nonatomic, readonly) NSString *userEmail; - -// The object to be notified when authentication is finished. -@property (nonatomic, assign) id delegate; - -// All properties below are optional parameters. If they need to be set, set -// before calling |authenticate|. - -// The client ID of the app from the Google APIs console. -// Must set for sign-in to work. -@property (nonatomic, copy) NSString *clientID; - -// The API scopes requested by the app in an array of |NSString|s. -// The default value is |@[@"https://www.googleapis.com/auth/plus.login"]|. -@property (nonatomic, copy) NSArray *scopes; - -// Whether or not to attempt Single-Sign-On when signing in. -// If |attemptSSO| is true, the sign-in button tries to authenticate with the -// Google+ application if it is installed. If false, it always uses Google+ via -// Chrome for iOS, if installed, or Mobile Safari for authentication. -// The default value is |YES|. -@property (nonatomic, assign) BOOL attemptSSO; - -// The language for sign-in, in the form of ISO 639-1 language code -// optionally followed by a dash and ISO 3166-1 alpha-2 region code, -// such as |@"it"| or |@"pt-PT"|. -// Only set if different from system default. -@property (nonatomic, copy) NSString *language; - -// Name of the keychain to save the sign-in state. -// Only set if a custom name needs to be used. -@property (nonatomic, copy) NSString *keychainName; - -// An |NSString| array of moment types used by your app. Use values from the -// full list at -// https://developers.google.com/+/api/moment-types . -// such as "http://schemas.google.com/AddActivity". -// This property is required only for writing moments, with -// "https://www.googleapis.com/auth/plus.login" as a scope. -@property (nonatomic, copy) NSArray *actions; - -// Whether or not to fetch user email after signing in. The email is saved in -// the |GTMOAuth2Authentication| object. Note that using this flag automatically -// adds "https://www.googleapis.com/auth/userinfo.email" scope to the request. -@property (nonatomic, assign) BOOL shouldFetchGoogleUserEmail; - -// Whether or not to fetch user ID after signing in. The ID can be retrieved -// by |googleUserID| after user has been authenticated. -// Note, a scope, such as "https://www.googleapis.com/auth/plus.login" or -// "https://www.googleapis.com/auth/plus.me", that provides user ID must be -// included in |scopes| for this flag to work. -@property (nonatomic, assign) BOOL shouldFetchGoogleUserID; - -// Returns a shared |GPPSignIn| instance. -+ (GPPSignIn *)sharedInstance; - -// Checks whether the user has either currently signed in or has previous -// authentication saved in keychain. -- (BOOL)hasAuthInKeychain; - -// Attempts to authenticate silently without user interaction. -// Returns |YES| and calls the delegate if the user has either currently signed -// in or has previous authentication saved in keychain. -// Note that if the previous authentication was revoked by the user, this method -// still returns |YES| but |finishedWithAuth:error:| callback will indicate -// that authentication has failed. -- (BOOL)trySilentAuthentication; - -// Starts the authentication process. Set |attemptSSO| to try single sign-on. -// If |attemptSSO| is true, try to authenticate with the Google+ app, if -// installed. If false, always use Google+ via Chrome or Mobile Safari for -// authentication. The delegate will be called at the end of this process. -- (void)authenticate; - -// This method should be called from your |UIApplicationDelegate|'s -// |application:openURL:sourceApplication:annotation|. Returns |YES| if -// |GPPSignIn| handled this URL. -// Also see |handleURL:sourceApplication:annotation:| in |GPPURLHandler|. -- (BOOL)handleURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation; - -// Removes the OAuth 2.0 token from the keychain. -- (void)signOut; - -// Disconnects the user from the app and revokes previous authentication. -// If the operation succeeds, the OAuth 2.0 token is also removed from keychain. -// The token is needed to disconnect so do not call |signOut| if |disconnect| is -// to be called. -- (void)disconnect; - -// Gets a service object which can execute "queries", for example, -// to get list of people that is visible to this app. -- (GTLServicePlus *)plusService; - -@end diff --git a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPSignInButton.h b/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPSignInButton.h deleted file mode 100644 index ea263f8d..00000000 --- a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPSignInButton.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// GPPSignInButton.h -// Google+ iOS SDK -// -// Copyright 2012 Google Inc. -// -// Use of this SDK is subject to the Google+ Platform Terms of Service: -// https://developers.google.com/+/terms -// - -#import - -// The various layout styles supported by the GPPSignInButton. -// The minmum size of the button depends on the language used for text. -// The following dimensions (in points) fit for all languages: -// kGPPSignInButtonStyleStandard: 226 x 48 -// kGPPSignInButtonStyleWide: 308 x 48 -// kGPPSignInButtonStyleIconOnly: 46 x 48 (no text, fixed size) -typedef enum { - kGPPSignInButtonStyleStandard = 0, - kGPPSignInButtonStyleWide = 1, - kGPPSignInButtonStyleIconOnly = 2 -} GPPSignInButtonStyle; - -// The various color schemes supported by the GPPSignInButton. -typedef enum { - kGPPSignInButtonColorSchemeDark = 0, - kGPPSignInButtonColorSchemeLight = 1 -} GPPSignInButtonColorScheme; - -// This class provides the Google+ sign-in button. You can instantiate this -// class programmatically or from a NIB file. You should set up the -// |GPPSignIn| shared instance with your client ID and any additional scopes, -// implement the delegate methods for |GPPSignIn|, and add this button to your -// view hierarchy. -@interface GPPSignInButton : UIButton - -// Sets the sign-in button layout style. The default style is standard. -- (void)setStyle:(GPPSignInButtonStyle)style; - -// Sets the sign-in button color scheme. The default scheme is dark. -- (void)setColorScheme:(GPPSignInButtonColorScheme)colorScheme; - -@end diff --git a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPURLHandler.h b/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPURLHandler.h deleted file mode 100644 index 0e45390f..00000000 --- a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GPPURLHandler.h +++ /dev/null @@ -1,25 +0,0 @@ -// -// GPPURLHandler.h -// Google+ iOS SDK -// -// Copyright 2013 Google Inc. -// -// Use of this SDK is subject to the Google+ Platform Terms of Service: -// https://developers.google.com/+/terms -// - -#import - -@interface GPPURLHandler : NSObject - -// Calls |handleURL:sourceApplication:annotation:| for -// |[GPPSignIn sharedInstance]|, |[GPPShare sharedInstance]|, and -// |GPPDeepLink|, and returns |YES| if any of them handles the URL. -// This method can be called from your |UIApplicationDelegate|'s -// |application:openURL:sourceApplication:annotation| instead of calling -// those methods individually. -+ (BOOL)handleURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation; - -@end diff --git a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GooglePlus.h b/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GooglePlus.h deleted file mode 100644 index 8134aa82..00000000 --- a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/A/Headers/GooglePlus.h +++ /dev/null @@ -1,16 +0,0 @@ -// -// GooglePlus.h -// Google+ iOS SDK -// -// Copyright 2013 Google Inc. -// -// Use of this SDK is subject to the Google+ Platform Terms of Service: -// https://developers.google.com/+/terms -// - -// G+ SDK. -#import "GPPDeepLink.h" -#import "GPPShare.h" -#import "GPPSignIn.h" -#import "GPPSignInButton.h" -#import "GPPURLHandler.h" diff --git a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/Current b/External/google-plus-ios-sdk/GooglePlus.framework/Versions/Current deleted file mode 120000 index 8c7e5a66..00000000 --- a/External/google-plus-ios-sdk/GooglePlus.framework/Versions/Current +++ /dev/null @@ -1 +0,0 @@ -A \ No newline at end of file diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.h deleted file mode 100644 index fd0a0518..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.h +++ /dev/null @@ -1,25 +0,0 @@ -/* 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 deleted file mode 100644 index e6c03627..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBase64.m +++ /dev/null @@ -1,139 +0,0 @@ -/* 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]; - - int8_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]] = (char)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; - - NSInteger inputLength = (NSInteger)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:(NSUInteger)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++] = (uint8_t)((table[i0] << 2) | (table[i1] >> 4)); - if (outputPoint < outputLength) { - output[outputPoint++] = (uint8_t)(((table[i1] & 0xF) << 4) | (table[i2] >> 2)); - } - if (outputPoint < outputLength) { - output[outputPoint++] = (uint8_t)(((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 deleted file mode 100644 index d4fb1d38..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.h +++ /dev/null @@ -1,57 +0,0 @@ -/* 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 -// - -// Batch query documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Batch_Operations - -#import "GTLQuery.h" - -@interface GTLBatchQuery : NSObject { - @private - NSMutableArray *queries_; - NSMutableDictionary *requestIDMap_; - BOOL skipAuthorization_; - NSDictionary *additionalHTTPHeaders_; - NSDictionary *urlQueryParameters_; -} - -// 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; - -// Any URL query parameters to add to the query (useful for debugging with some -// services). -@property (copy) NSDictionary *urlQueryParameters; - -+ (id)batchQuery; -+ (id)batchQueryWithQueries:(NSArray *)array; - -- (void)addQuery:(GTLQuery *)query GTL_NONNULL((1)); - -- (GTLQuery *)queryForRequestID:(NSString *)requestID GTL_NONNULL((1)); - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m deleted file mode 100644 index c584368c..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchQuery.m +++ /dev/null @@ -1,135 +0,0 @@ -/* 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_, - urlQueryParameters = urlQueryParameters_; - -+ (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]; - [urlQueryParameters_ 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 deleted file mode 100644 index 9675aaf7..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.h +++ /dev/null @@ -1,58 +0,0 @@ -/* 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 deleted file mode 100644 index f17748d5..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLBatchResult.m +++ /dev/null @@ -1,92 +0,0 @@ -/* 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 deleted file mode 100644 index f6b1ffb3..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.h +++ /dev/null @@ -1,60 +0,0 @@ -/* 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 -// -// This is an immutable class representing a date and optionally a -// time with time zone. -// - -#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 -} - -+ (GTLDateTime *)dateTimeWithRFC3339String:(NSString *)str; - -// timeZone may be nil if the time zone is not known. -+ (GTLDateTime *)dateTimeWithDate:(NSDate *)date timeZone:(NSTimeZone *)tz; - -// Use this method to make a dateTime for an all-day event (date only, so -// hasTime is NO.) -+ (GTLDateTime *)dateTimeForAllDayWithDate:(NSDate *)date; - -+ (GTLDateTime *)dateTimeWithDateComponents:(NSDateComponents *)date; - -@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, readonly, retain) NSTimeZone *timeZone; -@property (nonatomic, readonly, copy) NSDateComponents *dateComponents; -@property (nonatomic, readonly) NSInteger milliseconds; // This is only for the fraction of a second 0-999 - -@property (nonatomic, readonly) BOOL hasTime; -@property (nonatomic, readonly) NSInteger offsetSeconds; -@property (nonatomic, readonly, getter=isUniversalTime) BOOL universalTime; - - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.m deleted file mode 100644 index a55b049a..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLDateTime.m +++ /dev/null @@ -1,471 +0,0 @@ -/* 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" - -@interface GTLDateTime () - -- (void)setFromDate:(NSDate *)date timeZone:(NSTimeZone *)tz; -- (void)setFromRFC3339String:(NSString *)str; - -@property (nonatomic, retain, readwrite) NSTimeZone *timeZone; -@property (nonatomic, copy, readwrite) NSDateComponents *dateComponents; -@property (nonatomic, assign, readwrite) NSInteger milliseconds; - -@property (nonatomic, assign, readwrite) BOOL hasTime; -@property (nonatomic, assign, readwrite) NSInteger offsetSeconds; -@property (nonatomic, assign, getter=isUniversalTime, readwrite) BOOL universalTime; - -@end - -static NSCharacterSet *gDashSet = nil; -static NSCharacterSet *gTSet = nil; -static NSCharacterSet *gColonSet = nil; -static NSCharacterSet *gPlusMinusZSet = nil; -static NSMutableDictionary *gCalendarsForTimeZones = nil; - -@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_; - -+ (void)initialize { - // Note that initialize is guaranteed by the runtime to be called in a - // thread-safe manner. - if (gDashSet == nil) { - gDashSet = [[NSCharacterSet characterSetWithCharactersInString:@"-"] retain]; - gTSet = [[NSCharacterSet characterSetWithCharactersInString:@"Tt "] retain]; - gColonSet = [[NSCharacterSet characterSetWithCharactersInString:@":"] retain]; - gPlusMinusZSet = [[NSCharacterSet characterSetWithCharactersInString:@"+-zZ"] retain]; - - gCalendarsForTimeZones = [[NSMutableDictionary alloc] init]; - } -} - -+ (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; -} - -+ (GTLDateTime *)dateTimeForAllDayWithDate:(NSDate *)date { - if (date == nil) return nil; - - GTLDateTime *result = [[[self alloc] init] autorelease]; - [result setFromDate:date timeZone:nil]; - result.hasTime = NO; - return result; -} - -+ (GTLDateTime *)dateTimeWithDateComponents:(NSDateComponents *)components { - NSCalendar *cal = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; - NSDate *date = [cal dateFromComponents:components]; -#if GTL_IPHONE - NSTimeZone *tz = [components timeZone]; -#else - // NSDateComponents added timeZone: in Mac OS X 10.7. - NSTimeZone *tz = nil; - if ([components respondsToSelector:@selector(timeZone)]) { - tz = [components timeZone]; - } -#endif - return [self dateTimeWithDate:date timeZone:tz]; -} - -- (void)dealloc { - [dateComponents_ release]; - [timeZone_ release]; - [super dealloc]; -} - -- (id)copyWithZone:(NSZone *)zone { - // Object is immutable - return [self retain]; -} - -// 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; - } -} - -- (NSCalendar *)calendarForTimeZone:(NSTimeZone *)tz { - NSCalendar *cal = nil; - @synchronized(gCalendarsForTimeZones) { - id tzKey = (tz ? tz : [NSNull null]); - cal = [gCalendarsForTimeZones objectForKey:tzKey]; - if (cal == nil) { - cal = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]; - if (tz) { - [cal setTimeZone:tz]; - } - [gCalendarsForTimeZones setObject:cal forKey:tzKey]; - } - } - return cal; -} - -- (NSCalendar *)calendar { - NSTimeZone *tz = self.timeZone; - return [self calendarForTimeZone:tz]; -} - -- (NSDate *)date { - NSDateComponents *dateComponents = self.dateComponents; - NSTimeInterval extraMillisecondsAsSeconds = 0.0; - NSCalendar *cal; - - 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 = [self calendarForTimeZone:gmt]; - } else { - cal = self.calendar; - - // 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 = [self calendarForTimeZone: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]; - - // 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:gDashSet intoString:NULL] && - [scanner scanInteger:&month] && - [scanner scanCharactersFromSet:gDashSet intoString:NULL] && - [scanner scanInteger:&day] && - // Thh:mm:ss - [scanner scanCharactersFromSet:gTSet intoString:NULL] && - [scanner scanInteger:&hour] && - [scanner scanCharactersFromSet:gColonSet intoString:NULL] && - [scanner scanInteger:&minute] && - [scanner scanCharactersFromSet:gColonSet 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:gPlusMinusZSet intoString:&sign] && - [scanner scanInteger:&offsetHour] && - [scanner scanCharactersFromSet:gColonSet 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 deleted file mode 100644 index b12eb9eb..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLDefines.h +++ /dev/null @@ -1,144 +0,0 @@ -/* 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 - -#ifndef __has_attribute - #define __has_attribute(x) 0 -#endif - -#if 1 - // We will start using nonnull declarations once the static analyzer seems - // to support it without false positives. - #define GTL_NONNULL(x) -#else - #if __has_attribute(nonnull) - #define GTL_NONNULL(x) __attribute__((nonnull x)) - #else - #define GTL_NONNULL(x) - #endif -#endif diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.h deleted file mode 100644 index c2ec67db..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.h +++ /dev/null @@ -1,45 +0,0 @@ -/* 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 deleted file mode 100644 index 1fa1023a..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLErrorObject.m +++ /dev/null @@ -1,78 +0,0 @@ -/* 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 deleted file mode 100644 index 106f420e..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.h +++ /dev/null @@ -1,35 +0,0 @@ -/* 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 deleted file mode 100644 index 6bfc7f22..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLFramework.m +++ /dev/null @@ -1,40 +0,0 @@ -/* 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 deleted file mode 100644 index d9715295..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.h +++ /dev/null @@ -1,41 +0,0 @@ -/* 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 deleted file mode 100644 index a089a93d..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLJSONParser.m +++ /dev/null @@ -1,150 +0,0 @@ -/* 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 deleted file mode 100644 index 43935adf..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.h +++ /dev/null @@ -1,208 +0,0 @@ -/* 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 -// - -// GTLObject documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Objects_and_Queries - -#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 GTL_NONNULL((2)); -- (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 GTL_NONNULL((2)); -- (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. -// -// Set nil for obj to remove the property. -- (void)setProperty:(id)obj forKey:(NSString *)key GTL_NONNULL((2)); -- (id)propertyForKey:(NSString *)key GTL_NONNULL((1)); - -// 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, the -// itemAtIndex: convenience method, and indexed subscripts. -// -// Subclasses must implement the items method dynamically. -@interface GTLCollectionObject : GTLObject { - @private - NSDictionary *identifierMap_; -} - -// itemAtIndex: and objectAtIndexedSubscript: return nil when the index exceeds -// the bounds of the items array. -- (id)itemAtIndex:(NSUInteger)idx; - -- (id)objectAtIndexedSubscript:(NSInteger)idx; - -// itemForIdentifier: looks up items from the collection object by identifier, -// and returns the first one. -// -// Typically, items will have a unique identifier (with key "id" in the -// object's JSON). This method returns the first item found in the collection -// with the specified identifier. -// -// The first time this method is used, the collection will cache a map of -// identifiers to items. If the items list for the instance somehow changes, -// use the reset method below to force a new cache to be created for this -// collection. -- (id)itemForIdentifier:(NSString *)key GTL_NONNULL((1)); - -// Identifiers for all items are cached when the first one is obtained. -// This method resets the cache. It is needed only if the item list has -// changed. -- (void)resetIdentifierMap; - -@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, but 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 deleted file mode 100644 index 83c2d19f..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLObject.m +++ /dev/null @@ -1,722 +0,0 @@ -/* 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 ([(NSArray *)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)[(NSArray *)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 count] == 0 || [json isEqual:[NSNull null]]) { - // no actual result, such as the response from a delete - 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. - -- (void)dealloc { - [identifierMap_ release]; - [super dealloc]; -} - -- (id)itemAtIndex:(NSUInteger)idx { - NSArray *items = [self performSelector:@selector(items)]; - if (idx < [items count]) { - return [items objectAtIndex:idx]; - } - return nil; -} - -- (id)objectAtIndexedSubscript:(NSInteger)idx { - if (idx >= 0) { - return [self itemAtIndex:(NSUInteger)idx]; - } - return nil; -} - -- (id)itemForIdentifier:(NSString *)key { - if (identifierMap_ == nil) { - NSArray *items = [self performSelector:@selector(items)]; - NSMutableDictionary *dict = - [NSMutableDictionary dictionaryWithCapacity:[items count]]; - for (id item in items) { - id identifier = [item valueForKey:@"identifier"]; - if (identifier != nil && identifier != [NSNull null]) { - if ([dict objectForKey:identifier] == nil) { - [dict setObject:item forKey:identifier]; - } - } - } - identifierMap_ = [dict copy]; - } - return [identifierMap_ objectForKey:key]; -} - -- (void)resetIdentifierMap { - [identifierMap_ release]; - identifierMap_ = 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 deleted file mode 100644 index 220410bb..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlus.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ - -#import "GTLPlusConstants.h" - -#import "GTLPlusAcl.h" -#import "GTLPlusAclentryResource.h" -#import "GTLPlusActivity.h" -#import "GTLPlusActivityFeed.h" -#import "GTLPlusComment.h" -#import "GTLPlusCommentFeed.h" -#import "GTLPlusItemScope.h" -#import "GTLPlusMoment.h" -#import "GTLPlusMomentsFeed.h" -#import "GTLPlusPeopleFeed.h" -#import "GTLPlusPerson.h" - -#import "GTLQueryPlus.h" -#import "GTLServicePlus.h" diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAcl.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAcl.h deleted file mode 100644 index aad4f65e..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAcl.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusAcl.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusAcl (0 custom class methods, 3 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusAclentryResource; - -// ---------------------------------------------------------------------------- -// -// GTLPlusAcl -// - -// This class supports NSFastEnumeration over its "items" property. It also -// supports -itemAtIndex: to retrieve individual objects from "items". - -@interface GTLPlusAcl : GTLCollectionObject - -// Description of the access granted, suitable for display. -// Remapped to 'descriptionProperty' to avoid NSObject's 'description'. -@property (copy) NSString *descriptionProperty; - -// The list of access entries. -@property (retain) NSArray *items; // of GTLPlusAclentryResource - -// Identifies this resource as a collection of access controls. Value: -// "plus#acl". -@property (copy) NSString *kind; - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAcl.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAcl.m deleted file mode 100644 index 0e82d087..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAcl.m +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusAcl.m -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusAcl (0 custom class methods, 3 custom properties) - -#import "GTLPlusAcl.h" - -#import "GTLPlusAclentryResource.h" - -// ---------------------------------------------------------------------------- -// -// GTLPlusAcl -// - -@implementation GTLPlusAcl -@dynamic descriptionProperty, items, kind; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"description" - forKey:@"descriptionProperty"]; - return map; -} - -+ (NSDictionary *)arrayPropertyToClassMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:[GTLPlusAclentryResource class] - forKey:@"items"]; - return map; -} - -+ (void)load { - [self registerObjectClassForKind:@"plus#acl"]; -} - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAclentryResource.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAclentryResource.h deleted file mode 100644 index 30634e8d..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAclentryResource.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusAclentryResource.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusAclentryResource (0 custom class methods, 3 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -// ---------------------------------------------------------------------------- -// -// GTLPlusAclentryResource -// - -@interface GTLPlusAclentryResource : GTLObject - -// A descriptive name for this entry. Suitable for display. -@property (copy) NSString *displayName; - -// The ID of the entry. For entries of type "person" or "circle", this is the ID -// of the resource. For other types, this property is not set. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The type of entry describing to whom access is granted. Possible values are: -// - "person" - Access to an individual. -// - "circle" - Access to members of a circle. -// - "myCircles" - Access to members of all the person's circles. -// - "extendedCircles" - Access to members of everyone in a person's circles, -// plus all of the people in their circles. -// - "public" - Access to anyone on the web. -@property (copy) NSString *type; - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAclentryResource.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAclentryResource.m deleted file mode 100644 index ff640290..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusAclentryResource.m +++ /dev/null @@ -1,48 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusAclentryResource.m -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusAclentryResource (0 custom class methods, 3 custom properties) - -#import "GTLPlusAclentryResource.h" - -// ---------------------------------------------------------------------------- -// -// GTLPlusAclentryResource -// - -@implementation GTLPlusAclentryResource -@dynamic displayName, identifier, type; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"id" - forKey:@"identifier"]; - return map; -} - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivity.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivity.h deleted file mode 100644 index ce4b9417..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivity.h +++ /dev/null @@ -1,493 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusActivity.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusActivity (0 custom class methods, 19 custom properties) -// GTLPlusActivityActor (0 custom class methods, 5 custom properties) -// GTLPlusActivityObject (0 custom class methods, 10 custom properties) -// GTLPlusActivityProvider (0 custom class methods, 1 custom properties) -// GTLPlusActivityActorImage (0 custom class methods, 1 custom properties) -// GTLPlusActivityActorName (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectActor (0 custom class methods, 4 custom properties) -// GTLPlusActivityObjectAttachmentsItem (0 custom class methods, 9 custom properties) -// GTLPlusActivityObjectPlusoners (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectReplies (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectResharers (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectActorImage (0 custom class methods, 1 custom properties) -// GTLPlusActivityObjectAttachmentsItemEmbed (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectAttachmentsItemFullImage (0 custom class methods, 4 custom properties) -// GTLPlusActivityObjectAttachmentsItemImage (0 custom class methods, 4 custom properties) -// GTLPlusActivityObjectAttachmentsItemThumbnailsItem (0 custom class methods, 3 custom properties) -// GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage (0 custom class methods, 4 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusAcl; -@class GTLPlusActivityActor; -@class GTLPlusActivityActorImage; -@class GTLPlusActivityActorName; -@class GTLPlusActivityObject; -@class GTLPlusActivityObjectActor; -@class GTLPlusActivityObjectActorImage; -@class GTLPlusActivityObjectAttachmentsItem; -@class GTLPlusActivityObjectAttachmentsItemEmbed; -@class GTLPlusActivityObjectAttachmentsItemFullImage; -@class GTLPlusActivityObjectAttachmentsItemImage; -@class GTLPlusActivityObjectAttachmentsItemThumbnailsItem; -@class GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage; -@class GTLPlusActivityObjectPlusoners; -@class GTLPlusActivityObjectReplies; -@class GTLPlusActivityObjectResharers; -@class GTLPlusActivityProvider; - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivity -// - -@interface GTLPlusActivity : GTLObject - -// Identifies who has access to see this activity. -@property (retain) GTLPlusAcl *access; - -// The person who performed this activity. -@property (retain) GTLPlusActivityActor *actor; - -// Street address where this activity occurred. -@property (copy) NSString *address; - -// Additional content added by the person who shared this activity, applicable -// only when resharing an activity. -@property (copy) NSString *annotation; - -// If this activity is a crosspost from another system, this property specifies -// the ID of the original activity. -@property (copy) NSString *crosspostSource; - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// Latitude and longitude where this activity occurred. Format is latitude -// followed by longitude, space separated. -@property (copy) NSString *geocode; - -// The ID of this activity. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// Identifies this resource as an activity. Value: "plus#activity". -@property (copy) NSString *kind; - -// The object of this activity. -@property (retain) GTLPlusActivityObject *object; - -// ID of the place where this activity occurred. -@property (copy) NSString *placeId; - -// Name of the place where this activity occurred. -@property (copy) NSString *placeName; - -// The service provider that initially published this activity. -@property (retain) GTLPlusActivityProvider *provider; - -// The time at which this activity was initially published. Formatted as an RFC -// 3339 timestamp. -@property (retain) GTLDateTime *published; - -// Radius, in meters, of the region where this activity occurred, centered at -// the latitude and longitude identified in geocode. -@property (copy) NSString *radius; - -// Title of this activity. -@property (copy) NSString *title; - -// The time at which this activity was last updated. Formatted as an RFC 3339 -// timestamp. -@property (retain) GTLDateTime *updated; - -// The link to this activity. -@property (copy) NSString *url; - -// This activity's verb, indicating what action was performed. Possible values -// are: -// - "post" - Publish content to the stream. -// - "share" - Reshare an activity. -@property (copy) NSString *verb; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityActor -// - -@interface GTLPlusActivityActor : GTLObject - -// The name of the actor, suitable for display. -@property (copy) NSString *displayName; - -// The ID of the actor's person resource. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The image representation of the actor. -@property (retain) GTLPlusActivityActorImage *image; - -// An object representation of the individual components of name. -@property (retain) GTLPlusActivityActorName *name; - -// The link to the actor's Google profile. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObject -// - -@interface GTLPlusActivityObject : GTLObject - -// If this activity's object is itself another activity (for example, when a -// person reshares an activity), this property specifies the original activity's -// actor. -@property (retain) GTLPlusActivityObjectActor *actor; - -// The media objects attached to this activity. -@property (retain) NSArray *attachments; // of GTLPlusActivityObjectAttachmentsItem - -// The HTML-formatted content, suitable for display. -@property (copy) NSString *content; - -// The ID of the object. When resharing an activity, this is the ID of the -// activity being reshared. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The type of the object. Possible values are: -// - "note" - Textual content. -// - "activity" - A Google+ activity. -@property (copy) NSString *objectType; - -// The content (text) as provided by the author, stored without any HTML -// formatting. When creating or updating an activity, this value must be -// supplied as plain text in the request. -@property (copy) NSString *originalContent; - -// People who +1'd this activity. -@property (retain) GTLPlusActivityObjectPlusoners *plusoners; - -// Comments in reply to this activity. -@property (retain) GTLPlusActivityObjectReplies *replies; - -// People who reshared this activity. -@property (retain) GTLPlusActivityObjectResharers *resharers; - -// The URL that points to the linked resource. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityProvider -// - -@interface GTLPlusActivityProvider : GTLObject - -// Name of the service provider. -@property (copy) NSString *title; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityActorImage -// - -@interface GTLPlusActivityActorImage : GTLObject - -// The URL of the actor'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 - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityActorName -// - -@interface GTLPlusActivityActorName : GTLObject - -// The family name (last name) of the actor. -@property (copy) NSString *familyName; - -// The given name (first name) of the actor. -@property (copy) NSString *givenName; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectActor -// - -@interface GTLPlusActivityObjectActor : GTLObject - -// The original actor's name, suitable for display. -@property (copy) NSString *displayName; - -// ID of the original actor. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The image representation of the original actor. -@property (retain) GTLPlusActivityObjectActorImage *image; - -// A link to the original actor's Google profile. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItem -// - -@interface GTLPlusActivityObjectAttachmentsItem : GTLObject - -// If the attachment is an article, this property contains a snippet of text -// from the article. It can also include descriptions for other types. -@property (copy) NSString *content; - -// The title of the attachment (such as a photo caption or an article title). -@property (copy) NSString *displayName; - -// If the attachment is a video, the embeddable link. -@property (retain) GTLPlusActivityObjectAttachmentsItemEmbed *embed; - -// The full image URL for photo attachments. -@property (retain) GTLPlusActivityObjectAttachmentsItemFullImage *fullImage; - -// The ID of the attachment. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The preview image for photos or videos. -@property (retain) GTLPlusActivityObjectAttachmentsItemImage *image; - -// The type of media object. Possible values are: -// - "photo" - A photo. -// - "album" - A photo album. -// - "video" - A video. -// - "article" - An article, specified by a link. -@property (copy) NSString *objectType; - -// If the attachment is an album, potential additional thumbnails from the -// album. -@property (retain) NSArray *thumbnails; // of GTLPlusActivityObjectAttachmentsItemThumbnailsItem - -// The link to the attachment, should be of type text/html. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectPlusoners -// - -@interface GTLPlusActivityObjectPlusoners : GTLObject - -// The URL for the collection of people who +1'd this activity. -@property (copy) NSString *selfLink; - -// Total number of people who +1'd this activity. -@property (retain) NSNumber *totalItems; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectReplies -// - -@interface GTLPlusActivityObjectReplies : GTLObject - -// The URL for the collection of comments in reply to this activity. -@property (copy) NSString *selfLink; - -// Total number of comments on this activity. -@property (retain) NSNumber *totalItems; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectResharers -// - -@interface GTLPlusActivityObjectResharers : GTLObject - -// The URL for the collection of resharers. -@property (copy) NSString *selfLink; - -// Total number of people who reshared this activity. -@property (retain) NSNumber *totalItems; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectActorImage -// - -@interface GTLPlusActivityObjectActorImage : GTLObject - -// A URL that points to a thumbnail photo of the original actor. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemEmbed -// - -@interface GTLPlusActivityObjectAttachmentsItemEmbed : GTLObject - -// Media type of the link. -@property (copy) NSString *type; - -// URL of the link. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemFullImage -// - -@interface GTLPlusActivityObjectAttachmentsItemFullImage : GTLObject - -// The height, in pixels, of the linked resource. -@property (retain) NSNumber *height; // unsignedIntValue - -// Media type of the link. -@property (copy) NSString *type; - -// URL to the image. -@property (copy) NSString *url; - -// The width, in pixels, of the linked resource. -@property (retain) NSNumber *width; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemImage -// - -@interface GTLPlusActivityObjectAttachmentsItemImage : GTLObject - -// The height, in pixels, of the linked resource. -@property (retain) NSNumber *height; // unsignedIntValue - -// Media type of the link. -@property (copy) NSString *type; - -// Image url. -@property (copy) NSString *url; - -// The width, in pixels, of the linked resource. -@property (retain) NSNumber *width; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemThumbnailsItem -// - -@interface GTLPlusActivityObjectAttachmentsItemThumbnailsItem : GTLObject - -// Potential name of the thumbnail. -// Remapped to 'descriptionProperty' to avoid NSObject's 'description'. -@property (copy) NSString *descriptionProperty; - -// Image resource. -@property (retain) GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage *image; - -// URL to the webpage containing the image. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage -// - -@interface GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage : GTLObject - -// The height, in pixels, of the linked resource. -@property (retain) NSNumber *height; // unsignedIntValue - -// Media type of the link. -@property (copy) NSString *type; - -// Image url. -@property (copy) NSString *url; - -// The width, in pixels, of the linked resource. -@property (retain) NSNumber *width; // unsignedIntValue - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivity.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivity.m deleted file mode 100644 index 4d70f017..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivity.m +++ /dev/null @@ -1,290 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusActivity.m -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusActivity (0 custom class methods, 19 custom properties) -// GTLPlusActivityActor (0 custom class methods, 5 custom properties) -// GTLPlusActivityObject (0 custom class methods, 10 custom properties) -// GTLPlusActivityProvider (0 custom class methods, 1 custom properties) -// GTLPlusActivityActorImage (0 custom class methods, 1 custom properties) -// GTLPlusActivityActorName (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectActor (0 custom class methods, 4 custom properties) -// GTLPlusActivityObjectAttachmentsItem (0 custom class methods, 9 custom properties) -// GTLPlusActivityObjectPlusoners (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectReplies (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectResharers (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectActorImage (0 custom class methods, 1 custom properties) -// GTLPlusActivityObjectAttachmentsItemEmbed (0 custom class methods, 2 custom properties) -// GTLPlusActivityObjectAttachmentsItemFullImage (0 custom class methods, 4 custom properties) -// GTLPlusActivityObjectAttachmentsItemImage (0 custom class methods, 4 custom properties) -// GTLPlusActivityObjectAttachmentsItemThumbnailsItem (0 custom class methods, 3 custom properties) -// GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage (0 custom class methods, 4 custom properties) - -#import "GTLPlusActivity.h" - -#import "GTLPlusAcl.h" - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivity -// - -@implementation GTLPlusActivity -@dynamic access, actor, address, annotation, crosspostSource, ETag, geocode, - identifier, kind, object, placeId, placeName, provider, published, - radius, title, updated, url, verb; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObjectsAndKeys: - @"etag", @"ETag", - @"id", @"identifier", - nil]; - return map; -} - -+ (void)load { - [self registerObjectClassForKind:@"plus#activity"]; -} - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityActor -// - -@implementation GTLPlusActivityActor -@dynamic displayName, identifier, image, name, url; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"id" - forKey:@"identifier"]; - return map; -} - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObject -// - -@implementation GTLPlusActivityObject -@dynamic actor, attachments, content, identifier, objectType, originalContent, - plusoners, replies, resharers, url; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"id" - forKey:@"identifier"]; - return map; -} - -+ (NSDictionary *)arrayPropertyToClassMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:[GTLPlusActivityObjectAttachmentsItem class] - forKey:@"attachments"]; - return map; -} - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityProvider -// - -@implementation GTLPlusActivityProvider -@dynamic title; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityActorImage -// - -@implementation GTLPlusActivityActorImage -@dynamic url; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityActorName -// - -@implementation GTLPlusActivityActorName -@dynamic familyName, givenName; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectActor -// - -@implementation GTLPlusActivityObjectActor -@dynamic displayName, identifier, image, url; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"id" - forKey:@"identifier"]; - return map; -} - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItem -// - -@implementation GTLPlusActivityObjectAttachmentsItem -@dynamic content, displayName, embed, fullImage, identifier, image, objectType, - thumbnails, url; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"id" - forKey:@"identifier"]; - return map; -} - -+ (NSDictionary *)arrayPropertyToClassMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:[GTLPlusActivityObjectAttachmentsItemThumbnailsItem class] - forKey:@"thumbnails"]; - return map; -} - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectPlusoners -// - -@implementation GTLPlusActivityObjectPlusoners -@dynamic selfLink, totalItems; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectReplies -// - -@implementation GTLPlusActivityObjectReplies -@dynamic selfLink, totalItems; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectResharers -// - -@implementation GTLPlusActivityObjectResharers -@dynamic selfLink, totalItems; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectActorImage -// - -@implementation GTLPlusActivityObjectActorImage -@dynamic url; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemEmbed -// - -@implementation GTLPlusActivityObjectAttachmentsItemEmbed -@dynamic type, url; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemFullImage -// - -@implementation GTLPlusActivityObjectAttachmentsItemFullImage -@dynamic height, type, url, width; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemImage -// - -@implementation GTLPlusActivityObjectAttachmentsItemImage -@dynamic height, type, url, width; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemThumbnailsItem -// - -@implementation GTLPlusActivityObjectAttachmentsItemThumbnailsItem -@dynamic descriptionProperty, image, url; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"description" - forKey:@"descriptionProperty"]; - return map; -} - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage -// - -@implementation GTLPlusActivityObjectAttachmentsItemThumbnailsItemImage -@dynamic height, type, url, width; -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivityFeed.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivityFeed.h deleted file mode 100644 index f99ca32f..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivityFeed.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusActivityFeed.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusActivityFeed (0 custom class methods, 9 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusActivity; - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityFeed -// - -// This class supports NSFastEnumeration over its "items" property. It also -// supports -itemAtIndex: to retrieve individual objects from "items". - -@interface GTLPlusActivityFeed : GTLCollectionObject - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// The ID of this collection of activities. Deprecated. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The activities in this page of results. -@property (retain) NSArray *items; // of GTLPlusActivity - -// Identifies this resource as a collection of activities. Value: -// "plus#activityFeed". -@property (copy) NSString *kind; - -// Link to the next page of activities. -@property (copy) NSString *nextLink; - -// The continuation token, which is used to page through large result sets. -// Provide this value in a subsequent request to return the next page of -// results. -@property (copy) NSString *nextPageToken; - -// Link to this activity resource. -@property (copy) NSString *selfLink; - -// The title of this collection of activities. -@property (copy) NSString *title; - -// The time at which this collection of activities was last updated. Formatted -// as an RFC 3339 timestamp. -@property (retain) GTLDateTime *updated; - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivityFeed.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivityFeed.m deleted file mode 100644 index a3a34e48..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusActivityFeed.m +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusActivityFeed.m -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusActivityFeed (0 custom class methods, 9 custom properties) - -#import "GTLPlusActivityFeed.h" - -#import "GTLPlusActivity.h" - -// ---------------------------------------------------------------------------- -// -// GTLPlusActivityFeed -// - -@implementation GTLPlusActivityFeed -@dynamic ETag, identifier, items, kind, nextLink, nextPageToken, selfLink, - title, updated; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObjectsAndKeys: - @"etag", @"ETag", - @"id", @"identifier", - nil]; - return map; -} - -+ (NSDictionary *)arrayPropertyToClassMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:[GTLPlusActivity class] - forKey:@"items"]; - return map; -} - -+ (void)load { - [self registerObjectClassForKind:@"plus#activityFeed"]; -} - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusComment.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusComment.h deleted file mode 100644 index 4698576a..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusComment.h +++ /dev/null @@ -1,183 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusComment.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusComment (0 custom class methods, 11 custom properties) -// GTLPlusCommentActor (0 custom class methods, 4 custom properties) -// GTLPlusCommentInReplyToItem (0 custom class methods, 2 custom properties) -// GTLPlusCommentObject (0 custom class methods, 3 custom properties) -// GTLPlusCommentPlusoners (0 custom class methods, 1 custom properties) -// GTLPlusCommentActorImage (0 custom class methods, 1 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusCommentActor; -@class GTLPlusCommentActorImage; -@class GTLPlusCommentInReplyToItem; -@class GTLPlusCommentObject; -@class GTLPlusCommentPlusoners; - -// ---------------------------------------------------------------------------- -// -// GTLPlusComment -// - -@interface GTLPlusComment : GTLObject - -// The person who posted this comment. -@property (retain) GTLPlusCommentActor *actor; - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// The ID of this comment. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The activity this comment replied to. -@property (retain) NSArray *inReplyTo; // of GTLPlusCommentInReplyToItem - -// Identifies this resource as a comment. Value: "plus#comment". -@property (copy) NSString *kind; - -// The object of this comment. -@property (retain) GTLPlusCommentObject *object; - -// People who +1'd this comment. -@property (retain) GTLPlusCommentPlusoners *plusoners; - -// The time at which this comment was initially published. Formatted as an RFC -// 3339 timestamp. -@property (retain) GTLDateTime *published; - -// Link to this comment resource. -@property (copy) NSString *selfLink; - -// The time at which this comment was last updated. Formatted as an RFC 3339 -// timestamp. -@property (retain) GTLDateTime *updated; - -// This comment's verb, indicating what action was performed. Possible values -// are: -// - "post" - Publish content to the stream. -@property (copy) NSString *verb; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentActor -// - -@interface GTLPlusCommentActor : GTLObject - -// The name of this actor, suitable for display. -@property (copy) NSString *displayName; - -// The ID of the actor. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The image representation of this actor. -@property (retain) GTLPlusCommentActorImage *image; - -// A link to the person resource for this actor. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentInReplyToItem -// - -@interface GTLPlusCommentInReplyToItem : GTLObject - -// The ID of the activity. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The URL of the activity. -@property (copy) NSString *url; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentObject -// - -@interface GTLPlusCommentObject : GTLObject - -// The HTML-formatted content, suitable for display. -@property (copy) NSString *content; - -// The object type of this comment. Possible values are: -// - "comment" - A comment in reply to an activity. -@property (copy) NSString *objectType; - -// The content (text) as provided by the author, stored without any HTML -// formatting. When creating or updating a comment, this value must be supplied -// as plain text in the request. -@property (copy) NSString *originalContent; - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentPlusoners -// - -@interface GTLPlusCommentPlusoners : GTLObject - -// Total number of people who +1'd this comment. -@property (retain) NSNumber *totalItems; // unsignedIntValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentActorImage -// - -@interface GTLPlusCommentActorImage : GTLObject - -// The URL of the actor'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 diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusComment.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusComment.m deleted file mode 100644 index 3abaa26d..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusComment.m +++ /dev/null @@ -1,133 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusComment.m -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusComment (0 custom class methods, 11 custom properties) -// GTLPlusCommentActor (0 custom class methods, 4 custom properties) -// GTLPlusCommentInReplyToItem (0 custom class methods, 2 custom properties) -// GTLPlusCommentObject (0 custom class methods, 3 custom properties) -// GTLPlusCommentPlusoners (0 custom class methods, 1 custom properties) -// GTLPlusCommentActorImage (0 custom class methods, 1 custom properties) - -#import "GTLPlusComment.h" - -// ---------------------------------------------------------------------------- -// -// GTLPlusComment -// - -@implementation GTLPlusComment -@dynamic actor, ETag, identifier, inReplyTo, kind, object, plusoners, published, - selfLink, updated, verb; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObjectsAndKeys: - @"etag", @"ETag", - @"id", @"identifier", - nil]; - return map; -} - -+ (NSDictionary *)arrayPropertyToClassMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:[GTLPlusCommentInReplyToItem class] - forKey:@"inReplyTo"]; - return map; -} - -+ (void)load { - [self registerObjectClassForKind:@"plus#comment"]; -} - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentActor -// - -@implementation GTLPlusCommentActor -@dynamic displayName, identifier, image, url; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"id" - forKey:@"identifier"]; - return map; -} - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentInReplyToItem -// - -@implementation GTLPlusCommentInReplyToItem -@dynamic identifier, url; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"id" - forKey:@"identifier"]; - return map; -} - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentObject -// - -@implementation GTLPlusCommentObject -@dynamic content, objectType, originalContent; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentPlusoners -// - -@implementation GTLPlusCommentPlusoners -@dynamic totalItems; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentActorImage -// - -@implementation GTLPlusCommentActorImage -@dynamic url; -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusCommentFeed.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusCommentFeed.h deleted file mode 100644 index 74f9be5a..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusCommentFeed.h +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusCommentFeed.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusCommentFeed (0 custom class methods, 8 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusComment; - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentFeed -// - -// This class supports NSFastEnumeration over its "items" property. It also -// supports -itemAtIndex: to retrieve individual objects from "items". - -@interface GTLPlusCommentFeed : GTLCollectionObject - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// The ID of this collection of comments. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// The comments in this page of results. -@property (retain) NSArray *items; // of GTLPlusComment - -// Identifies this resource as a collection of comments. Value: -// "plus#commentFeed". -@property (copy) NSString *kind; - -// Link to the next page of activities. -@property (copy) NSString *nextLink; - -// The continuation token, which is used to page through large result sets. -// Provide this value in a subsequent request to return the next page of -// results. -@property (copy) NSString *nextPageToken; - -// The title of this collection of comments. -@property (copy) NSString *title; - -// The time at which this collection of comments was last updated. Formatted as -// an RFC 3339 timestamp. -@property (retain) GTLDateTime *updated; - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusCommentFeed.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusCommentFeed.m deleted file mode 100644 index a8d81e6e..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusCommentFeed.m +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusCommentFeed.m -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusCommentFeed (0 custom class methods, 8 custom properties) - -#import "GTLPlusCommentFeed.h" - -#import "GTLPlusComment.h" - -// ---------------------------------------------------------------------------- -// -// GTLPlusCommentFeed -// - -@implementation GTLPlusCommentFeed -@dynamic ETag, identifier, items, kind, nextLink, nextPageToken, title, updated; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObjectsAndKeys: - @"etag", @"ETag", - @"id", @"identifier", - nil]; - return map; -} - -+ (NSDictionary *)arrayPropertyToClassMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:[GTLPlusComment class] - forKey:@"items"]; - return map; -} - -+ (void)load { - [self registerObjectClassForKind:@"plus#commentFeed"]; -} - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.h deleted file mode 100644 index b5e87ad7..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.h +++ /dev/null @@ -1,57 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ - -#import - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLDefines.h" -#else - #import "GTLDefines.h" -#endif - -// Authorization scope -// Know your name, basic info, and list of people you're connected to on Google+ -GTL_EXTERN NSString * const kGTLAuthScopePlusLogin; // "https://www.googleapis.com/auth/plus.login" -// Know who you are on Google -GTL_EXTERN NSString * const kGTLAuthScopePlusMe; // "https://www.googleapis.com/auth/plus.me" - -// Collection -GTL_EXTERN NSString * const kGTLPlusCollectionPlusoners; // "plusoners" -GTL_EXTERN NSString * const kGTLPlusCollectionPublic; // "public" -GTL_EXTERN NSString * const kGTLPlusCollectionResharers; // "resharers" -GTL_EXTERN NSString * const kGTLPlusCollectionVault; // "vault" -GTL_EXTERN NSString * const kGTLPlusCollectionVisible; // "visible" - -// OrderBy -GTL_EXTERN NSString * const kGTLPlusOrderByAlphabetical; // "alphabetical" -GTL_EXTERN NSString * const kGTLPlusOrderByBest; // "best" -GTL_EXTERN NSString * const kGTLPlusOrderByRecent; // "recent" - -// SortOrder -GTL_EXTERN NSString * const kGTLPlusSortOrderAscending; // "ascending" -GTL_EXTERN NSString * const kGTLPlusSortOrderDescending; // "descending" diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.m deleted file mode 100644 index bb5610ff..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusConstants.m +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ - -#import "GTLPlusConstants.h" - -// Authorization scope -NSString * const kGTLAuthScopePlusLogin = @"https://www.googleapis.com/auth/plus.login"; -NSString * const kGTLAuthScopePlusMe = @"https://www.googleapis.com/auth/plus.me"; - -// Collection -NSString * const kGTLPlusCollectionPlusoners = @"plusoners"; -NSString * const kGTLPlusCollectionPublic = @"public"; -NSString * const kGTLPlusCollectionResharers = @"resharers"; -NSString * const kGTLPlusCollectionVault = @"vault"; -NSString * const kGTLPlusCollectionVisible = @"visible"; - -// OrderBy -NSString * const kGTLPlusOrderByAlphabetical = @"alphabetical"; -NSString * const kGTLPlusOrderByBest = @"best"; -NSString * const kGTLPlusOrderByRecent = @"recent"; - -// SortOrder -NSString * const kGTLPlusSortOrderAscending = @"ascending"; -NSString * const kGTLPlusSortOrderDescending = @"descending"; diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.h deleted file mode 100644 index 17e2b371..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.h +++ /dev/null @@ -1,225 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://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) GTLPlusItemScope *reviewRating; - -// 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 the item upon which the action was performed. -@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 deleted file mode 100644 index ee761503..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusItemScope.m +++ /dev/null @@ -1,77 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://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", - 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 deleted file mode 100644 index 0b028c88..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusMoment (0 custom class methods, 6 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusItemScope; - -// ---------------------------------------------------------------------------- -// -// GTLPlusMoment -// - -@interface GTLPlusMoment : GTLObject - -// The moment ID. -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; - -// Identifies this resource as a moment. -@property (copy) NSString *kind; - -// The object generated by performing the action on the item -@property (retain) GTLPlusItemScope *result; - -// Time stamp of when the action occurred 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; - -@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 deleted file mode 100644 index 7785726a..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMoment.m +++ /dev/null @@ -1,54 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusMoment (0 custom class methods, 6 custom properties) - -#import "GTLPlusMoment.h" - -#import "GTLPlusItemScope.h" - -// ---------------------------------------------------------------------------- -// -// GTLPlusMoment -// - -@implementation GTLPlusMoment -@dynamic identifier, kind, result, startDate, target, type; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"id" - forKey:@"identifier"]; - return map; -} - -+ (void)load { - [self registerObjectClassForKind:@"plus#moment"]; -} - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMomentsFeed.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMomentsFeed.h deleted file mode 100644 index 6cc8106b..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMomentsFeed.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusMomentsFeed.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusMomentsFeed (0 custom class methods, 8 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusMoment; - -// ---------------------------------------------------------------------------- -// -// GTLPlusMomentsFeed -// - -// This class supports NSFastEnumeration over its "items" property. It also -// supports -itemAtIndex: to retrieve individual objects from "items". - -@interface GTLPlusMomentsFeed : GTLCollectionObject - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// The moments in this page of results. -@property (retain) NSArray *items; // of GTLPlusMoment - -// Identifies this resource as a collection of moments. Value: -// "plus#momentsFeed". -@property (copy) NSString *kind; - -// Link to the next page of moments. -@property (copy) NSString *nextLink; - -// The continuation token, which is used to page through large result sets. -// Provide this value in a subsequent request to return the next page of -// results. -@property (copy) NSString *nextPageToken; - -// Link to this page of moments. -@property (copy) NSString *selfLink; - -// The title of this collection of moments. -@property (copy) NSString *title; - -// The RFC 339 timestamp for when this collection of moments was last updated. -@property (retain) GTLDateTime *updated; - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMomentsFeed.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMomentsFeed.m deleted file mode 100644 index 21ff97c5..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusMomentsFeed.m +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusMomentsFeed.m -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusMomentsFeed (0 custom class methods, 8 custom properties) - -#import "GTLPlusMomentsFeed.h" - -#import "GTLPlusMoment.h" - -// ---------------------------------------------------------------------------- -// -// GTLPlusMomentsFeed -// - -@implementation GTLPlusMomentsFeed -@dynamic ETag, items, kind, nextLink, nextPageToken, selfLink, title, updated; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"etag" - forKey:@"ETag"]; - return map; -} - -+ (NSDictionary *)arrayPropertyToClassMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:[GTLPlusMoment class] - forKey:@"items"]; - return map; -} - -+ (void)load { - [self registerObjectClassForKind:@"plus#momentsFeed"]; -} - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPeopleFeed.h b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPeopleFeed.h deleted file mode 100644 index 523afadd..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPeopleFeed.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusPeopleFeed.h -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusPeopleFeed (0 custom class methods, 7 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusPerson; - -// ---------------------------------------------------------------------------- -// -// GTLPlusPeopleFeed -// - -// This class supports NSFastEnumeration over its "items" property. It also -// supports -itemAtIndex: to retrieve individual objects from "items". - -@interface GTLPlusPeopleFeed : GTLCollectionObject - -// ETag of this response for caching purposes. -@property (copy) NSString *ETag; - -// The people in this page of results. Each item includes the id, displayName, -// image, and url for the person. To retrieve additional profile data, see the -// people.get method. -@property (retain) NSArray *items; // of GTLPlusPerson - -// Identifies this resource as a collection of people. Value: "plus#peopleFeed". -@property (copy) NSString *kind; - -// The continuation token, which is used to page through large result sets. -// Provide this value in a subsequent request to return the next page of -// results. -@property (copy) NSString *nextPageToken; - -// Link to this resource. -@property (copy) NSString *selfLink; - -// The title of this collection of people. -@property (copy) NSString *title; - -// The total number of people available in this list. The number of people in a -// response might be smaller due to paging. This might not be set for all -// collections. -@property (retain) NSNumber *totalItems; // intValue - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPeopleFeed.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPeopleFeed.m deleted file mode 100644 index 4861f65f..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPeopleFeed.m +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (c) 2013 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. - */ - -// -// GTLPlusPeopleFeed.m -// - -// ---------------------------------------------------------------------------- -// NOTE: This file is generated from Google APIs Discovery Service. -// Service: -// Google+ API (plus/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusPeopleFeed (0 custom class methods, 7 custom properties) - -#import "GTLPlusPeopleFeed.h" - -#import "GTLPlusPerson.h" - -// ---------------------------------------------------------------------------- -// -// GTLPlusPeopleFeed -// - -@implementation GTLPlusPeopleFeed -@dynamic ETag, items, kind, nextPageToken, selfLink, title, totalItems; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"etag" - forKey:@"ETag"]; - return map; -} - -+ (NSDictionary *)arrayPropertyToClassMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:[GTLPlusPerson class] - forKey:@"items"]; - return map; -} - -+ (void)load { - [self registerObjectClassForKind:@"plus#peopleFeed"]; -} - -@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 deleted file mode 100644 index 57ae94ed..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.h +++ /dev/null @@ -1,388 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusPerson (0 custom class methods, 28 custom properties) -// GTLPlusPersonAgeRange (0 custom class methods, 2 custom properties) -// GTLPlusPersonCover (0 custom class methods, 3 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) -// GTLPlusPersonCoverCoverInfo (0 custom class methods, 2 custom properties) -// GTLPlusPersonCoverCoverPhoto (0 custom class methods, 3 custom properties) - -#if GTL_BUILT_AS_FRAMEWORK - #import "GTL/GTLObject.h" -#else - #import "GTLObject.h" -#endif - -@class GTLPlusPersonAgeRange; -@class GTLPlusPersonCover; -@class GTLPlusPersonCoverCoverInfo; -@class GTLPlusPersonCoverCoverPhoto; -@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 age range of the person. -@property (retain) GTLPlusPersonAgeRange *ageRange; - -// The person's date of birth, represented as YYYY-MM-DD. -@property (copy) NSString *birthday; - -// The "bragging rights" line of this person. -@property (copy) NSString *braggingRights; - -// If a Google+ Page and for followers who are visible, the number of people who -// have added this page to a circle. -@property (retain) NSNumber *circledByCount; // intValue - -// The cover photo content. -@property (retain) GTLPlusPersonCover *cover; - -// 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; - -// Whether this user has signed up for Google+. -@property (retain) NSNumber *isPlusUser; // boolValue - -// Identifies this resource as a person. Value: "plus#person". -@property (copy) NSString *kind; - -// The user's preferred language for rendering. -@property (copy) NSString *language; - -// 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 - -// If a Google+ Page, the number of people who have +1'ed this page. -@property (retain) NSNumber *plusOneCount; // intValue - -// 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 - -// Whether the person or Google+ Page has been verified. -@property (retain) NSNumber *verified; // boolValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonAgeRange -// - -@interface GTLPlusPersonAgeRange : GTLObject - -// The age range's upper bound, if any. -@property (retain) NSNumber *max; // intValue - -// The age range's lower bound, if any. -@property (retain) NSNumber *min; // intValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonCover -// - -@interface GTLPlusPersonCover : GTLObject - -// Extra information about the cover photo. -@property (retain) GTLPlusPersonCoverCoverInfo *coverInfo; - -// The person's primary cover image. -@property (retain) GTLPlusPersonCoverCoverPhoto *coverPhoto; - -// The layout of the cover art. Possible values are: -// - "banner" - One large image banner. -@property (copy) NSString *layout; - -@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. Deprecated. -@property (copy) NSString *department; - -// A short description of the person's role in this organization. Deprecated. -// 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. Deprecated. -@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 - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonCoverCoverInfo -// - -@interface GTLPlusPersonCoverCoverInfo : GTLObject - -// The difference between the left position of the image cover and the actual -// displayed cover image. Only valid for BANNER layout. -@property (retain) NSNumber *leftImageOffset; // intValue - -// The difference between the top position of the image cover and the actual -// displayed cover image. Only valid for BANNER layout. -@property (retain) NSNumber *topImageOffset; // intValue - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonCoverCoverPhoto -// - -@interface GTLPlusPersonCoverCoverPhoto : GTLObject - -// The height to the image. -@property (retain) NSNumber *height; // intValue - -// The url to the image. -@property (copy) NSString *url; - -// The width to the image. -@property (retain) NSNumber *width; // intValue - -@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 deleted file mode 100644 index 200434fb..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLPlusPerson.m +++ /dev/null @@ -1,189 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLPlusPerson (0 custom class methods, 28 custom properties) -// GTLPlusPersonAgeRange (0 custom class methods, 2 custom properties) -// GTLPlusPersonCover (0 custom class methods, 3 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) -// GTLPlusPersonCoverCoverInfo (0 custom class methods, 2 custom properties) -// GTLPlusPersonCoverCoverPhoto (0 custom class methods, 3 custom properties) - -#import "GTLPlusPerson.h" - -// ---------------------------------------------------------------------------- -// -// GTLPlusPerson -// - -@implementation GTLPlusPerson -@dynamic aboutMe, ageRange, birthday, braggingRights, circledByCount, cover, - currentLocation, displayName, emails, ETag, gender, hasApp, identifier, - image, isPlusUser, kind, language, name, nickname, objectType, - organizations, placesLived, plusOneCount, relationshipStatus, tagline, - url, urls, verified; - -+ (NSDictionary *)propertyToJSONKeyMap { - NSDictionary *map = - [NSDictionary dictionaryWithObjectsAndKeys: - @"etag", @"ETag", - @"id", @"identifier", - nil]; - return map; -} - -+ (NSDictionary *)arrayPropertyToClassMap { - NSDictionary *map = - [NSDictionary dictionaryWithObjectsAndKeys: - [GTLPlusPersonEmailsItem class], @"emails", - [GTLPlusPersonOrganizationsItem class], @"organizations", - [GTLPlusPersonPlacesLivedItem class], @"placesLived", - [GTLPlusPersonUrlsItem class], @"urls", - nil]; - return map; -} - -+ (void)load { - [self registerObjectClassForKind:@"plus#person"]; -} - -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonAgeRange -// - -@implementation GTLPlusPersonAgeRange -@dynamic max, min; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonCover -// - -@implementation GTLPlusPersonCover -@dynamic coverInfo, coverPhoto, layout; -@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 - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonCoverCoverInfo -// - -@implementation GTLPlusPersonCoverCoverInfo -@dynamic leftImageOffset, topImageOffset; -@end - - -// ---------------------------------------------------------------------------- -// -// GTLPlusPersonCoverCoverPhoto -// - -@implementation GTLPlusPersonCoverCoverPhoto -@dynamic height, url, width; -@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 deleted file mode 100644 index 44b43109..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.h +++ /dev/null @@ -1,297 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLQueryPlus (12 custom class methods, 15 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 *activityId; -@property (copy) NSString *collection; -@property (copy) NSString *commentId; -@property (assign) BOOL debug; -// identifier property maps to 'id' in JSON (to avoid Objective C's 'id'). -@property (copy) NSString *identifier; -@property (copy) NSString *language; -@property (assign) NSUInteger maxResults; -@property (copy) NSString *orderBy; -@property (copy) NSString *pageToken; -@property (copy) NSString *query; -@property (copy) NSString *sortOrder; -@property (copy) NSString *targetUrl; -@property (copy) NSString *type; -@property (copy) NSString *userId; - -#pragma mark - -#pragma mark "activities" methods -// These create a GTLQueryPlus object. - -// Method: plus.activities.get -// Get an activity. -// Required: -// activityId: The ID of the activity to get. -// Authorization scope(s): -// kGTLAuthScopePlusLogin -// kGTLAuthScopePlusMe -// Fetches a GTLPlusActivity. -+ (id)queryForActivitiesGetWithActivityId:(NSString *)activityId; - -// Method: plus.activities.list -// List all of the activities in the specified collection for a particular user. -// 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 of activities to list. -// kGTLPlusCollectionPublic: All public activities created by the specified -// user. -// Optional: -// maxResults: The maximum number of activities to include in the response, -// which is used for paging. For any response, the actual number returned -// might be less than the specified maxResults. (1..100, default 20) -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. -// Authorization scope(s): -// kGTLAuthScopePlusLogin -// kGTLAuthScopePlusMe -// Fetches a GTLPlusActivityFeed. -+ (id)queryForActivitiesListWithUserId:(NSString *)userId - collection:(NSString *)collection; - -// Method: plus.activities.search -// Search public activities. -// Required: -// query: Full-text search query string. -// Optional: -// language: Specify the preferred language to search with. See search -// language codes for available values. (Default en-US) -// maxResults: The maximum number of activities to include in the response, -// which is used for paging. For any response, the actual number returned -// might be less than the specified maxResults. (1..20, default 10) -// orderBy: Specifies how to order search results. (Default -// kGTLPlusOrderByRecent) -// kGTLPlusOrderByBest: Sort activities by relevance to the user, most -// relevant first. -// kGTLPlusOrderByRecent: Sort activities by published date, most recent -// first. -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. This token can be of -// any length. -// Authorization scope(s): -// kGTLAuthScopePlusMe -// Fetches a GTLPlusActivityFeed. -+ (id)queryForActivitiesSearchWithQuery:(NSString *)query; - -#pragma mark - -#pragma mark "comments" methods -// These create a GTLQueryPlus object. - -// Method: plus.comments.get -// Get a comment. -// Required: -// commentId: The ID of the comment to get. -// Authorization scope(s): -// kGTLAuthScopePlusMe -// Fetches a GTLPlusComment. -+ (id)queryForCommentsGetWithCommentId:(NSString *)commentId; - -// Method: plus.comments.list -// List all of the comments for an activity. -// Required: -// activityId: The ID of the activity to get comments for. -// Optional: -// maxResults: The maximum number of comments to include in the response, -// which is used for paging. For any response, the actual number returned -// might be less than the specified maxResults. (0..500, default 20) -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. -// sortOrder: The order in which to sort the list of comments. (Default -// kGTLPlusSortOrderAscending) -// kGTLPlusSortOrderAscending: Sort oldest comments first. -// kGTLPlusSortOrderDescending: Sort newest comments first. -// Authorization scope(s): -// kGTLAuthScopePlusMe -// Fetches a GTLPlusCommentFeed. -+ (id)queryForCommentsListWithActivityId:(NSString *)activityId; - -#pragma mark - -#pragma mark "moments" methods -// These create a GTLQueryPlus object. - -// Method: plus.moments.insert -// Record a moment representing a user's activity such as making a purchase or -// commenting on a blog. -// Required: -// userId: The ID of the user to record activities for. The only valid values -// are "me" and the ID of 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): -// kGTLAuthScopePlusLogin -// Fetches a GTLPlusMoment. -+ (id)queryForMomentsInsertWithObject:(GTLPlusMoment *)object - userId:(NSString *)userId - collection:(NSString *)collection; - -// Method: plus.moments.list -// List all of the moments for a particular user. -// Required: -// userId: The ID of the user to get moments for. The special value "me" can -// be used to indicate the authenticated user. -// collection: The collection of moments to list. -// kGTLPlusCollectionVault: All moments created by the requesting -// application for the authenticated user. -// Optional: -// maxResults: The maximum number of moments to include in the response, which -// is used for paging. For any response, the actual number returned might be -// less than the specified maxResults. (1..100, default 20) -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. -// targetUrl: Only moments containing this targetUrl will be returned. -// type: Only moments of this type will be returned. -// Authorization scope(s): -// kGTLAuthScopePlusLogin -// Fetches a GTLPlusMomentsFeed. -+ (id)queryForMomentsListWithUserId:(NSString *)userId - collection:(NSString *)collection; - -// Method: plus.moments.remove -// Delete a moment. -// Required: -// identifier: The ID of the moment to delete. -// Authorization scope(s): -// kGTLAuthScopePlusLogin -+ (id)queryForMomentsRemoveWithIdentifier:(NSString *)identifier; - -#pragma mark - -#pragma mark "people" methods -// These create a GTLQueryPlus object. - -// Method: plus.people.get -// Get a person's profile. If your app uses scope -// https://www.googleapis.com/auth/plus.login, this method is guaranteed to -// return ageRange and language. -// 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): -// kGTLAuthScopePlusLogin -// kGTLAuthScopePlusMe -// Fetches a GTLPlusPerson. -+ (id)queryForPeopleGetWithUserId:(NSString *)userId; - -// Method: plus.people.list -// List all of the people in the specified collection. -// Required: -// userId: Get the collection of people for the person identified by the ID or -// use "me" to indiciated the authenticated user. -// collection: The collection of people to list. -// kGTLPlusCollectionVisible: The list of people who this user has added to -// one or more circles, limited to the circles visible to the requesting -// application. -// Optional: -// maxResults: The maximum number of people to include in the response, which -// is used for paging. For any response, the actual number returned might be -// less than the specified maxResults. (1..100, default 100) -// orderBy: The order to return people in. -// kGTLPlusOrderByAlphabetical: Order the people by their display name. -// kGTLPlusOrderByBest: Order people based on the relevence to the viewer. -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. -// Authorization scope(s): -// kGTLAuthScopePlusLogin -// Fetches a GTLPlusPeopleFeed. -+ (id)queryForPeopleListWithUserId:(NSString *)userId - collection:(NSString *)collection; - -// Method: plus.people.listByActivity -// List all of the people in the specified collection for a particular activity. -// Required: -// activityId: The ID of the activity to get the list of people for. -// collection: The collection of people to list. -// kGTLPlusCollectionPlusoners: List all people who have +1'd this -// activity. -// kGTLPlusCollectionResharers: List all people who have reshared this -// activity. -// Optional: -// maxResults: The maximum number of people to include in the response, which -// is used for paging. For any response, the actual number returned might be -// less than the specified maxResults. (1..100, default 20) -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. -// Authorization scope(s): -// kGTLAuthScopePlusMe -// Fetches a GTLPlusPeopleFeed. -+ (id)queryForPeopleListByActivityWithActivityId:(NSString *)activityId - collection:(NSString *)collection; - -// Method: plus.people.search -// Search all public profiles. -// Required: -// query: Specify a query string for full text search of public text in all -// profiles. -// Optional: -// language: Specify the preferred language to search with. See search -// language codes for available values. (Default en-US) -// maxResults: The maximum number of people to include in the response, which -// is used for paging. For any response, the actual number returned might be -// less than the specified maxResults. (1..20, default 10) -// pageToken: The continuation token, which is used to page through large -// result sets. To get the next page of results, set this parameter to the -// value of "nextPageToken" from the previous response. This token can be of -// any length. -// Authorization scope(s): -// kGTLAuthScopePlusMe -// Fetches a GTLPlusPeopleFeed. -+ (id)queryForPeopleSearchWithQuery:(NSString *)query; - -@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 deleted file mode 100644 index 8d2c9a98..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLQueryPlus.m +++ /dev/null @@ -1,182 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://developers.google.com/+/api/ -// Classes: -// GTLQueryPlus (12 custom class methods, 15 custom properties) - -#import "GTLQueryPlus.h" - -#import "GTLPlusActivity.h" -#import "GTLPlusActivityFeed.h" -#import "GTLPlusComment.h" -#import "GTLPlusCommentFeed.h" -#import "GTLPlusMoment.h" -#import "GTLPlusMomentsFeed.h" -#import "GTLPlusPeopleFeed.h" -#import "GTLPlusPerson.h" - -@implementation GTLQueryPlus - -@dynamic activityId, collection, commentId, debug, fields, identifier, language, - maxResults, orderBy, pageToken, query, sortOrder, targetUrl, type, - userId; - -+ (NSDictionary *)parameterNameMap { - NSDictionary *map = - [NSDictionary dictionaryWithObject:@"id" - forKey:@"identifier"]; - return map; -} - -#pragma mark - -#pragma mark "activities" methods -// These create a GTLQueryPlus object. - -+ (id)queryForActivitiesGetWithActivityId:(NSString *)activityId { - NSString *methodName = @"plus.activities.get"; - GTLQueryPlus *query = [self queryWithMethodName:methodName]; - query.activityId = activityId; - query.expectedObjectClass = [GTLPlusActivity class]; - return query; -} - -+ (id)queryForActivitiesListWithUserId:(NSString *)userId - collection:(NSString *)collection { - NSString *methodName = @"plus.activities.list"; - GTLQueryPlus *query = [self queryWithMethodName:methodName]; - query.userId = userId; - query.collection = collection; - query.expectedObjectClass = [GTLPlusActivityFeed class]; - return query; -} - -+ (id)queryForActivitiesSearchWithQuery:(NSString *)query_param { - NSString *methodName = @"plus.activities.search"; - GTLQueryPlus *query = [self queryWithMethodName:methodName]; - query.query = query_param; - query.expectedObjectClass = [GTLPlusActivityFeed class]; - return query; -} - -#pragma mark - -#pragma mark "comments" methods -// These create a GTLQueryPlus object. - -+ (id)queryForCommentsGetWithCommentId:(NSString *)commentId { - NSString *methodName = @"plus.comments.get"; - GTLQueryPlus *query = [self queryWithMethodName:methodName]; - query.commentId = commentId; - query.expectedObjectClass = [GTLPlusComment class]; - return query; -} - -+ (id)queryForCommentsListWithActivityId:(NSString *)activityId { - NSString *methodName = @"plus.comments.list"; - GTLQueryPlus *query = [self queryWithMethodName:methodName]; - query.activityId = activityId; - query.expectedObjectClass = [GTLPlusCommentFeed class]; - return query; -} - -#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; -} - -+ (id)queryForMomentsListWithUserId:(NSString *)userId - collection:(NSString *)collection { - NSString *methodName = @"plus.moments.list"; - GTLQueryPlus *query = [self queryWithMethodName:methodName]; - query.userId = userId; - query.collection = collection; - query.expectedObjectClass = [GTLPlusMomentsFeed class]; - return query; -} - -+ (id)queryForMomentsRemoveWithIdentifier:(NSString *)identifier { - NSString *methodName = @"plus.moments.remove"; - GTLQueryPlus *query = [self queryWithMethodName:methodName]; - query.identifier = identifier; - 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; -} - -+ (id)queryForPeopleListWithUserId:(NSString *)userId - collection:(NSString *)collection { - NSString *methodName = @"plus.people.list"; - GTLQueryPlus *query = [self queryWithMethodName:methodName]; - query.userId = userId; - query.collection = collection; - query.expectedObjectClass = [GTLPlusPeopleFeed class]; - return query; -} - -+ (id)queryForPeopleListByActivityWithActivityId:(NSString *)activityId - collection:(NSString *)collection { - NSString *methodName = @"plus.people.listByActivity"; - GTLQueryPlus *query = [self queryWithMethodName:methodName]; - query.activityId = activityId; - query.collection = collection; - query.expectedObjectClass = [GTLPlusPeopleFeed class]; - return query; -} - -+ (id)queryForPeopleSearchWithQuery:(NSString *)query_param { - NSString *methodName = @"plus.people.search"; - GTLQueryPlus *query = [self queryWithMethodName:methodName]; - query.query = query_param; - query.expectedObjectClass = [GTLPlusPeopleFeed 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 deleted file mode 100644 index b05c4f47..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.h +++ /dev/null @@ -1,61 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://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 deleted file mode 100644 index 6a53d566..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLPlus/GTLServicePlus.m +++ /dev/null @@ -1,71 +0,0 @@ -/* Copyright (c) 2013 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/v1) -// Description: -// The Google+ API enables developers to build on top of the Google+ platform. -// Documentation: -// https://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], - [GTLPlusAcl class], - [GTLPlusAclentryResource class], - [GTLPlusActivity class], - [GTLPlusActivityFeed class], - [GTLPlusComment class], - [GTLPlusCommentFeed class], - [GTLPlusItemScope class], - [GTLPlusMoment class], - [GTLPlusMomentsFeed class], - [GTLPlusPeopleFeed class], - [GTLPlusPerson class], - nil]; - return classes; -} -#endif // DEBUG - -- (id)init { - self = [super init]; - if (self) { - // Version from discovery. - self.apiVersion = @"v1"; - - // 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 deleted file mode 100644 index 9d40887e..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.h +++ /dev/null @@ -1,136 +0,0 @@ -/* 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 -// - -// Query documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Query_Operations - -#import "GTLObject.h" -#import "GTLUploadParameters.h" - -@protocol GTLQueryProtocol -- (BOOL)isBatchQuery; -- (BOOL)shouldSkipAuthorization; -- (void)executionDidStop; -- (NSDictionary *)additionalHTTPHeaders; -- (NSDictionary *)urlQueryParameters; -- (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 GTL_NONNULL((1)); - -// methodName is the RPC method name to use. -- (id)initWithMethodName:(NSString *)method GTL_NONNULL((1)); - -// 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 GTL_NONNULL((2)); - -// 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 deleted file mode 100644 index 55f98223..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLQuery.m +++ /dev/null @@ -1,267 +0,0 @@ -/* 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 deleted file mode 100644 index 28822b5e..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.h +++ /dev/null @@ -1,57 +0,0 @@ -/* 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 deleted file mode 100644 index 5f6613d0..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLRuntimeCommon.m +++ /dev/null @@ -1,1141 +0,0 @@ -/* 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]; - if (result == nil) { - // adding an empty object; it should have a JSON dictionary so it can - // hold future assignments - [obj setJSON:[NSMutableDictionary dictionary]]; - 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 deleted file mode 100644 index eac1dac8..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.h +++ /dev/null @@ -1,607 +0,0 @@ -/* 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 -// - -// Service object documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Services_and_Tickets - -#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; see the batch query documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Batch_Operations - -- (GTLServiceTicket *)executeQuery:(id)query - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -#if NS_BLOCKS_AVAILABLE -- (GTLServiceTicket *)executeQuery:(id)query - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); -#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 GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName - insertingObject:(GTLObject *)bodyObject - objectClass:(Class)objectClass - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName - parameters:(NSDictionary *)parameters - insertingObject:(GTLObject *)bodyObject - objectClass:(Class)objectClass - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -#if NS_BLOCKS_AVAILABLE -- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName - parameters:(NSDictionary *)parameters - objectClass:(Class)objectClass - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName - insertingObject:(GTLObject *)bodyObject - objectClass:(Class)objectClass - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectWithMethodNamed:(NSString *)methodName - parameters:(NSDictionary *)parameters - insertingObject:(GTLObject *)bodyObject - objectClass:(Class)objectClass - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); -#endif - -#pragma mark REST Fetch Methods - -- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL - objectClass:(Class)objectClass - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchPublicObjectWithURL:(NSURL *)objectURL - objectClass:(Class)objectClass - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectByInsertingObject:(GTLObject *)bodyToPut - forURL:(NSURL *)destinationURL - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1,2)); - -- (GTLServiceTicket *)fetchObjectByUpdatingObject:(GTLObject *)bodyToPut - forURL:(NSURL *)destinationURL - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1,2)); - -- (GTLServiceTicket *)deleteResourceURL:(NSURL *)destinationURL - ETag:(NSString *)etagOrNil - delegate:(id)delegate - didFinishSelector:(SEL)finishedSelector GTL_NONNULL((1)); - -#if NS_BLOCKS_AVAILABLE -- (GTLServiceTicket *)fetchObjectWithURL:(NSURL *)objectURL - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectByInsertingObject:(GTLObject *)bodyToPut - forURL:(NSURL *)destinationURL - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); - -- (GTLServiceTicket *)fetchObjectByUpdatingObject:(GTLObject *)bodyToPut - forURL:(NSURL *)destinationURL - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); - -- (GTLServiceTicket *)deleteResourceURL:(NSURL *)destinationURL - ETag:(NSString *)etagOrNil - completionHandler:(void (^)(GTLServiceTicket *ticket, id object, NSError *error))handler GTL_NONNULL((1)); -#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 GTL_NONNULL((2)); // pass nil obj to remove property -- (id)servicePropertyForKey:(NSString *)key GTL_NONNULL((1)); - -@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; - -// Callbacks can be invoked on an operation queue rather than via the run loop -// starting on 10.7 and iOS 6. Do not specify both run loop modes and an -// operation queue. Specifying a delegate queue typically looks like this: -// -// service.delegateQueue = [[[NSOperationQueue alloc] init] autorelease]; -// -// Since the callbacks will be on a thread of the operation queue, the client -// may re-dispatch from the callbacks to a known dispatch queue or to the -// main queue. -@property (nonatomic, retain) NSOperationQueue *delegateQueue; - -// 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 GTL_NONNULL((1)); - -// 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 GTL_NONNULL((1)); - -// 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 GTL_NONNULL((1)); -@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 GTL_NONNULL((1)); // 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 GTL_NONNULL((1)); // 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 deleted file mode 100644 index dee1bb90..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLService.m +++ /dev/null @@ -1,2417 +0,0 @@ -/* 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?!"); - NSMutableDictionary *json = [bodyObject JSON]; - if (json != nil) { - [worker setObject: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.urlQueryParameters == nil, - @"urlQueryParameters 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); - - NSURL *rpcURL = self.rpcURL; - - // We'll use the batch query's URL parameters, and ignore the URL parameters - // specified on the individual queries. - NSDictionary *urlQueryParameters = batch.urlQueryParameters; - if ([urlQueryParameters count] > 0) { - rpcURL = [GTLUtilities URLWithString:[rpcURL absoluteString] - queryParameters:urlQueryParameters]; - } - - 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 this callback was enqueued, then the fetcher has already released - // its delegateQueue. We'll use our own delegateQueue to determine how to - // invoke the callbacks. - NSOperationQueue *delegateQueue = self.delegateQueue; - if (delegateQueue) { - NSInvocationOperation *op; - op = [[[NSInvocationOperation alloc] initWithTarget:self - selector:parseDoneSel - object:fetcher] autorelease]; - [delegateQueue addOperation:op]; - } else 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)setDelegateQueue:(NSOperationQueue *)delegateQueue { - self.fetcherService.delegateQueue = delegateQueue; -} - -- (NSOperationQueue *)delegateQueue { - return self.fetcherService.delegateQueue; -} - -- (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 deleted file mode 100644 index 9e08a9e4..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLTargetNamespace.h +++ /dev/null @@ -1,58 +0,0 @@ -// -// 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 deleted file mode 100644 index a3c1d9dc..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.h +++ /dev/null @@ -1,60 +0,0 @@ -/* 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 -// - -// Uploading documentation: -// https://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Uploading_Files - -#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 GTL_NONNULL((1,2)); - -+ (GTLUploadParameters *)uploadParametersWithFileHandle:(NSFileHandle *)fileHandle - MIMEType:(NSString *)mimeType GTL_NONNULL((1,2)); - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.m deleted file mode 100644 index 1a668a9d..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLUploadParameters.m +++ /dev/null @@ -1,107 +0,0 @@ -/* 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 deleted file mode 100644 index 97f4bf07..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.h +++ /dev/null @@ -1,93 +0,0 @@ -/* 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; -@end diff --git a/External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.m b/External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.m deleted file mode 100644 index 90d8e745..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTL/GTLUtilities.m +++ /dev/null @@ -1,358 +0,0 @@ -/* 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 = (unsigned char)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; -} - -@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 the server returned a string object where we expect a number, try - // to make a number object. - if ([num isKindOfClass:[NSString class]]) { - NSNumber *newNum; - NSString *str = (NSString *)num; - if ([str rangeOfString:@"."].location != NSNotFound) { - // This is a floating-point number. - // Force the parser to use '.' as the decimal separator. - static NSLocale *usLocale = nil; - @synchronized([GTLUtilities class]) { - if (usLocale == nil) { - usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; - } - newNum = [NSDecimalNumber decimalNumberWithString:(NSString*)num - locale:(id)usLocale]; - } - } else { - // NSDecimalNumber +decimalNumberWithString:locale: - // does not correctly create an NSNumber for large values like - // 71100000000007780. - if ([str hasPrefix:@"-"]) { - newNum = [NSNumber numberWithLongLong:[str longLongValue]]; - } else { - const char *utf8 = [str UTF8String]; - unsigned long long ull = strtoull(utf8, NULL, 10); - newNum = [NSNumber numberWithUnsignedLongLong:ull]; - } - } - if (newNum) { - num = newNum; - } - } - return num; -} diff --git a/External/google-plus-ios-sdk/OpenSource/GTMDefines.h b/External/google-plus-ios-sdk/OpenSource/GTMDefines.h deleted file mode 100644 index c2958487..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMDefines.h +++ /dev/null @@ -1,441 +0,0 @@ -// -// 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 - -#ifdef __OBJC__ -#include -#endif // __OBJC__ - -#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 - -// GC was dropped by Apple, define the old constant incase anyone still keys -// off of it. -#ifndef GTM_SUPPORT_GC - #define GTM_SUPPORT_GC 0 -#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 - #if defined(__has_attribute) - #if __has_attribute(nonnull) - #define GTM_NONNULL(x) __attribute__((nonnull x)) - #else - #define GTM_NONNULL(x) - #endif - #else - #define GTM_NONNULL(x) - #endif -#endif - -// Invalidates the initializer from which it's called. -#ifndef GTMInvalidateInitializer - #if __has_feature(objc_arc) - #define GTMInvalidateInitializer() \ - do { \ - [self class]; /* Avoid warning of dead store to |self|. */ \ - _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 deleted file mode 100644 index 93d4efab..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMGarbageCollection.h +++ /dev/null @@ -1,72 +0,0 @@ -// -// 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 deleted file mode 100644 index 96018f5d..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.h +++ /dev/null @@ -1,187 +0,0 @@ -/* 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 deleted file mode 100644 index 2c859230..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetchHistory.m +++ /dev/null @@ -1,605 +0,0 @@ -/* 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 = (NSInteger)[cookies_ count] - 1; idx >= 0; idx--) { - - NSHTTPCookie *storedCookie = [cookies_ objectAtIndex:(NSUInteger)idx]; - - NSDate *expiresDate = [storedCookie expiresDate]; - if (expiresDate && [expiresDate timeIntervalSinceNow] < 0) { - [cookies_ removeObjectAtIndex:(NSUInteger)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 { - @synchronized(self) { - 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 { - @synchronized(self) { - 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 { - // Internal routine. - 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 { - @synchronized(self) { - 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 { - @synchronized(self) { - [etaggedDataCache_ removeCachedResponseForRequest:request]; - } -} - -- (void)clearETaggedDataCache { - @synchronized(self) { - [etaggedDataCache_ removeAllCachedResponses]; - } -} - -- (void)clearHistory { - @synchronized(self) { - [self clearETaggedDataCache]; - [cookieStorage_ removeAllCookies]; - } -} - -- (void)removeAllCookies { - @synchronized(self) { - [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 deleted file mode 100644 index a681390b..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.h +++ /dev/null @@ -1,765 +0,0 @@ -/* 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 -// -// -// Threading and queue support: -// -// Callbacks require either that the thread used to start the fetcher have a run -// loop spinning (typically the main thread), or that an NSOperationQueue be -// provided upon which the delegate callbacks will be called. Starting with -// iOS 6 and Mac OS X 10.7, clients may simply create an operation queue for -// callbacks on a background thread: -// -// NSOperationQueue *queue = [[[NSOperationQueue alloc] init] autorelease]; -// [queue setMaxConcurrentOperationCount:1]; -// fetcher.delegateQueue = queue; -// -// or specify the main queue for callbacks on the main thread: -// -// fetcher.delegateQueue = [NSOperationQueue mainQueue]; -// -// The client may also re-dispatch from the callbacks and notifications to -// a known dispatch queue: -// -// [myFetcher beginFetchWithCompletionHandler:^(NSData *retrievedData, NSError *error) { -// if (error == nil) { -// dispatch_async(myDispatchQueue, ^{ -// ... -// }); -// } -// }]; -// -// -// -// 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 - -@property (retain) NSOperationQueue *delegateQueue; - -- (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; - -- (void)stopAuthorizationForRequest:(NSURLRequest *)request; - -- (BOOL)isAuthorizingRequest:(NSURLRequest *)request; - -- (BOOL)isAuthorizedRequest:(NSURLRequest *)request; - -@property (retain, readonly) NSString *userEmail; - -@optional - -// Indicate if authorization may be attempted. Even if this succeeds, -// authorization may fail if the user's permissions have been revoked. -@property (readonly) BOOL canAuthorize; - -// For development only, allow authorization of non-SSL requests, allowing -// transmission of the bearer token unencrypted. -@property (assign) BOOL shouldAuthorizeAllRequests; - -#if NS_BLOCKS_AVAILABLE -- (void)authorizeRequest:(NSMutableURLRequest *)request - completionHandler:(void (^)(NSError *error))handler; -#endif - -@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 - NSOperationQueue *delegateQueue_; // optional; available iOS 6/10.7 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_; -#if !STRIP_GTM_FETCH_LOGGING - NSString *logRequestBody_; - NSString *logResponseBody_; - BOOL shouldDeferResponseBodyLogging_; -#endif -} - -// 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 when no operation -// queue is provided. -@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:(NSString *)format, ... NS_FORMAT_FUNCTION(1, 2); - -// Log of request and response, if logging is enabled -@property (copy) NSString *log; - -// Callbacks can be invoked on an operation queue rather than via the run loop, -// starting on 10.7 and iOS 6. If a delegate queue is supplied. the run loop -// modes are ignored. -@property (retain) NSOperationQueue *delegateQueue; - -// 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 deleted file mode 100644 index 431fe66c..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcher.m +++ /dev/null @@ -1,1955 +0,0 @@ -/* 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. -static const NSTimeInterval kUnsetMaxRetryInterval = -1; -static const NSTimeInterval kDefaultMaxDownloadRetryInterval = 60.0; -static const NSTimeInterval kDefaultMaxUploadRetryInterval = 60.0 * 10.; - -// delegateQueue callback parameters -static NSString *const kCallbackData = @"data"; -static NSString *const kCallbackError = @"error"; - -// -// 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; -- (void)failToBeginFetchDeferWithError:(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; -- (void)stopFetchReleasingCallbacks:(BOOL)shouldReleaseCallbacks; -- (BOOL)shouldReleaseCallbacksUponCompletion; - -- (void)addCookiesToRequest:(NSMutableURLRequest *)request; -- (void)handleCookiesForResponse:(NSURLResponse *)response; - -- (void)invokeFetchCallbacksWithData:(NSData *)data - error:(NSError *)error; -- (void)invokeFetchCallback:(SEL)sel - target:(id)target - data:(NSData *)data - error:(NSError *)error; -- (void)invokeFetchCallbacksOnDelegateQueueWithData:(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 { - // 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]; - } -#if !STRIP_GTM_FETCH_LOGGING - // Encourage developers to set the comment property or use - // setCommentWithFormat: by providing a default string. - comment_ = @"(No fetcher comment set)"; -#endif - } - 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]; - [delegateQueue_ release]; - [runLoopModes_ release]; - [fetchHistory_ release]; - [cookieStorage_ release]; - [authorizer_ release]; - [service_ release]; - [serviceHost_ release]; - [thread_ release]; - [retryTimer_ release]; - [comment_ release]; - [log_ release]; -#if !STRIP_GTM_FETCH_LOGGING - [logRequestBody_ release]; - [logResponseBody_ release]; -#endif - - [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 || [request_ URL] == nil) { - NSAssert(request_ != nil, @"beginFetchWithDelegate requires a request with a URL"); - 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]; - - NSOperationQueue *delegateQueue = delegateQueue_; - if (delegateQueue && - ![connectionClass instancesRespondToSelector:@selector(setDelegateQueue:)]) { - // NSURLConnection has no setDelegateQueue: on iOS 4 and Mac OS X 10.5. - delegateQueue = nil; - self.delegateQueue = nil; - } - -#if DEBUG && TARGET_OS_IPHONE - BOOL isPreIOS6 = (NSFoundationVersionNumber <= 890.1); - if (isPreIOS6 && delegateQueue) { - NSLog(@"GTMHTTPFetcher delegateQueue not safe in iOS 5"); - } -#endif - - if (downloadFileHandle_ != nil) { - // Downloading to a file, so downloadedData_ remains nil. - } else { - self.downloadedData = [NSMutableData data]; - } - - hasConnectionEnded_ = NO; - if ([runLoopModes_ count] == 0 && delegateQueue == nil) { - // No custom callback modes or queue were specified, so start the connection - // on the current run loop in the current mode - connection_ = [[connectionClass connectionWithRequest:request_ - delegate:self] retain]; - } else { - // Specify callbacks be on an operation queue or on the current run loop - // in the specified modes - connection_ = [[connectionClass alloc] initWithRequest:request_ - delegate:self - startImmediately:NO]; - if (delegateQueue) { - [connection_ performSelector:@selector(setDelegateQueue:) - withObject:delegateQueue]; - } else if (runLoopModes_) { - NSRunLoop *rl = [NSRunLoop currentRunLoop]; - for (NSString *mode in runLoopModes_) { - [connection_ scheduleInRunLoop:rl forMode:mode]; - } - } - [connection_ start]; - } - - if (!connection_) { - NSAssert(connection_ != nil, @"beginFetchWithDelegate could not create a connection"); - self.downloadedData = nil; - goto CannotBeginFetch; - } - -#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 = delegateQueue_ ? nil : [NSThread currentThread]; - backgroundTaskIdentifer_ = [app beginBackgroundTaskWithExpirationHandler:^{ - // Background task expiration callback - this block is always invoked by - // UIApplication on the main thread. - if (thread) { - // Run the user's callbacks on the thread used to start the - // fetch. - [self performSelector:@selector(backgroundFetchExpired) - onThread:thread - withObject:nil - waitUntilDone:YES]; - } else { - // backgroundFetchExpired invokes callbacks on the provided delegate - // queue. - [self backgroundFetchExpired]; - } - }]; - } - } -#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 failToBeginFetchDeferWithError:error]; - return NO; -} - -- (void)failToBeginFetchDeferWithError:(NSError *)error { - if (delegateQueue_) { - // Deferring will happen by the callback being invoked on the specified - // queue. - [self failToBeginFetchWithError:error]; - } else { - // No delegate queue has been specified, so put the callback - // on an appropriate run loop. - NSArray *modes = (runLoopModes_ ? runLoopModes_ : - [NSArray arrayWithObject:NSRunLoopCommonModes]); - [self performSelector:@selector(failToBeginFetchWithError:) - onThread:[NSThread currentThread] - withObject:error - waitUntilDone:NO - modes:modes]; - } -} - -- (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 invokeFetchCallbacksOnDelegateQueueWithData:nil - error:error]; - - [self releaseCallbacks]; - - [service_ fetcherDidStop:self]; - - self.authorizer = nil; - - if (temporaryDownloadPath_) { - [[NSFileManager defaultManager] 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 invokeFetchCallbacksOnDelegateQueueWithData:nil - error:error]; - @synchronized(self) { - // Stopping the fetch here will indirectly call endBackgroundTask - [self stopFetchReleasingCallbacks:NO]; - - [self releaseCallbacks]; - self.authorizer = nil; - } -} - -- (void)endBackgroundTask { - @synchronized(self) { - // 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 // GTM_BACKGROUND_FETCHING - -- (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 failToBeginFetchDeferWithError: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 = [NSFileManager defaultManager]; - - 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; - - [delegateQueue_ autorelease]; - delegateQueue_ = 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 { - id service; - - // 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]; - - @synchronized(self) { - service = [[service_ retain] autorelease]; - - 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]; - } - } // @synchronized(self) - - // send the stopped notification - [self sendStopNotificationIfNeeded]; - - @synchronized(self) { - [authorizer_ stopAuthorizationForRequest:request_]; - - if (shouldReleaseCallbacks) { - [self releaseCallbacks]; - - self.authorizer = nil; - } - - if (temporaryDownloadPath_) { - [[NSFileManager defaultManager] removeItemAtPath:temporaryDownloadPath_ - error:NULL]; - self.temporaryDownloadPath = nil; - } - } // @synchronized(self) - - [service fetcherDidStop:self]; - -#if GTM_BACKGROUND_FETCHING - [self endBackgroundTask]; -#endif -} - -// External stop method -- (void)stopFetching { - [self stopFetchReleasingCallbacks:YES]; -} - -- (void)sendStopNotificationIfNeeded { - BOOL sendNow = NO; - @synchronized(self) { - if (isStopNotificationNeeded_) { - isStopNotificationNeeded_ = NO; - sendNow = YES; - } - } - - if (sendNow) { - 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 - BOOL isMainThread = [NSThread isMainThread]; - - 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 - if (isMainThread || delegateQueue_ == nil) { - NSDate *stopDate = [NSDate dateWithTimeIntervalSinceNow:0.001]; - [[NSRunLoop currentRunLoop] runUntilDate:stopDate]; - } else { - [NSThread sleepForTimeInterval:0.001]; - } - } -} - -#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 { - @synchronized(self) { - 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; - } // @synchronized(self) -} - -- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { - @synchronized(self) { - // 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 { - @synchronized(self) { - 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; - } - } // @synchronized(self) - - // 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 { - // To avoid deadlocks, this should not be called inside of @synchronized(self) - id target; - SEL sel; -#if NS_BLOCKS_AVAILABLE - void (^block)(NSData *, NSError *); -#endif - @synchronized(self) { - target = delegate_; - sel = finishedSel_; - block = completionBlock_; - } - - [[self retain] autorelease]; // In case the callback releases us - - [self invokeFetchCallback:sel - target:target - data:data - error:error]; - -#if NS_BLOCKS_AVAILABLE - if (block) { - block(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)invokeFetchCallbacksOnDelegateQueueWithData:(NSData *)data - error:(NSError *)error { - // This is called by methods that are not already on the delegateQueue - // (as NSURLConnection callbacks should already be, but other failures - // are not.) - if (!delegateQueue_) { - [self invokeFetchCallbacksWithData:data error:error]; - } - - // Values may be nil. - NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithCapacity:2]; - [dict setValue:data forKey:kCallbackData]; - [dict setValue:error forKey:kCallbackError]; - NSInvocationOperation *op = - [[[NSInvocationOperation alloc] initWithTarget:self - selector:@selector(invokeOnQueueWithDictionary:) - object:dict] autorelease]; - [delegateQueue_ addOperation:op]; -} - -- (void)invokeOnQueueWithDictionary:(NSDictionary *)dict { - NSData *data = [dict objectForKey:kCallbackData]; - NSError *error = [dict objectForKey:kCallbackError]; - - [self invokeFetchCallbacksWithData:data error:error]; -} - - -- (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 { - @synchronized(self) { - 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 { - @synchronized(self) { -#if DEBUG - NSAssert(!hasConnectionEnded_, @"Connection received data after ending"); - - // The download file handle should be set or the data object allocated - // before the fetch is started. - NSAssert((downloadFileHandle_ == nil) != (downloadedData_ == nil), - @"received data accumulates as either NSData (%d) or" - @" NSFileHandle (%d)", - (downloadedData_ != nil), (downloadFileHandle_ != nil)); -#endif - // Hopefully, we'll never see this execute out-of-order, receiving data - // after we've received the finished or failed callback. - if (hasConnectionEnded_) return; - - 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 - } // @synchronized(self) -} - -// 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. -- (NSData *)cachedDataForStatus { - if ([self statusCode] == kGTMHTTPFetcherStatusNotModified - && [fetchHistory_ shouldCacheETaggedData]) { - NSData *cachedData = [fetchHistory_ cachedDataForRequest:request_]; - return cachedData; - } - return nil; -} - -- (NSInteger)statusAfterHandlingNotModifiedError { - NSInteger status = [self statusCode]; - NSData *cachedData = [self cachedDataForStatus]; - 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 { - BOOL shouldStopFetching = YES; - BOOL shouldSendStopNotification = NO; - NSError *error = nil; - NSData *downloadedData; -#if !STRIP_GTM_FETCH_LOGGING - BOOL shouldDeferLogging = NO; -#endif - BOOL shouldBeginRetryTimer = NO; - BOOL hasLogged = NO; - - @synchronized(self) { - // 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 - - NSInteger status = [self statusCode]; - if ([self cachedDataForStatus] != nil) { - // Log the pre-cache response. - [self logNowWithError:nil]; - hasLogged = YES; - status = [self statusAfterHandlingNotModifiedError]; - } - - shouldSendStopNotification = YES; - - if (status >= 0 && status < 300) { - // success - if (downloadPath_) { - // Avoid deleting the downloaded file when the fetch stops - [downloadFileHandle_ closeFile]; - self.downloadFileHandle = nil; - - NSFileManager *fileMgr = [NSFileManager defaultManager]; - [fileMgr removeItemAtPath:downloadPath_ - error:NULL]; - - if ([fileMgr moveItemAtPath:temporaryDownloadPath_ - toPath:downloadPath_ - error:&error]) { - self.temporaryDownloadPath = nil; - } - } - } else { - // unsuccessful - if (!hasLogged) { - [self logNowWithError:nil]; - hasLogged = YES; - } - // Status over 300; retry or notify the delegate of failure - if ([self shouldRetryNowForStatus:status error:nil]) { - // retrying - shouldBeginRetryTimer = YES; - shouldStopFetching = NO; - } else { - NSDictionary *userInfo = nil; - if ([downloadedData_ length] > 0) { - userInfo = [NSDictionary dictionaryWithObject:downloadedData_ - forKey:kGTMHTTPFetcherStatusDataKey]; - } - error = [NSError errorWithDomain:kGTMHTTPFetcherStatusDomain - code:status - userInfo:userInfo]; - } - } - downloadedData = downloadedData_; -#if !STRIP_GTM_FETCH_LOGGING - shouldDeferLogging = shouldDeferResponseBodyLogging_; -#endif - } // @synchronized(self) - - if (shouldBeginRetryTimer) { - [self beginRetryTimer]; - } - - if (shouldSendStopNotification) { - // 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]; - } - - if (shouldStopFetching) { - // Call the callbacks (outside of the @synchronized to avoid deadlocks.) - [self invokeFetchCallbacksWithData:downloadedData - error:error]; - BOOL shouldRelease = [self shouldReleaseCallbacksUponCompletion]; - [self stopFetchReleasingCallbacks:shouldRelease]; - } - - @synchronized(self) { - BOOL shouldLogNow = !hasLogged; -#if !STRIP_GTM_FETCH_LOGGING - if (shouldDeferLogging) shouldLogNow = NO; -#endif - if (shouldLogNow) { - [self logNowWithError:nil]; - } - } -} - -- (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 { - @synchronized(self) { - // 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 { - @synchronized(self) { - if (delegateQueue_ != nil && ![NSThread isMainThread]) { - // A delegate queue is set, so the thread we're running on may not - // have a run loop. We'll defer creating and starting the timer - // until we're on the main thread to ensure it has a run loop. - // (If we weren't supporting 10.5, we could use dispatch_after instead - // of an NSTimer.) - [self performSelectorOnMainThread:_cmd - withObject:nil - waitUntilDone:NO]; - return; - } - } - - NSTimeInterval nextInterval = [self nextRetryInterval]; - NSTimeInterval maxInterval = [self maxRetryInterval]; - NSTimeInterval newInterval = MIN(nextInterval, maxInterval); - - [self primeRetryTimerWithNewTimeInterval:newInterval]; - - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc postNotificationName:kGTMHTTPFetcherRetryDelayStartedNotification - object:self]; -} - -- (void)primeRetryTimerWithNewTimeInterval:(NSTimeInterval)secs { - - [self destroyRetryTimer]; - - @synchronized(self) { - lastRetryInterval_ = secs; - - retryTimer_ = [NSTimer timerWithTimeInterval:secs - target:self - selector:@selector(retryTimerFired:) - userInfo:nil - repeats:NO]; - [retryTimer_ retain]; - - NSRunLoop *timerRL = (self.delegateQueue ? - [NSRunLoop mainRunLoop] : [NSRunLoop currentRunLoop]); - [timerRL addTimer:retryTimer_ - forMode:NSDefaultRunLoopMode]; - } -} - -- (void)retryTimerFired:(NSTimer *)timer { - [self destroyRetryTimer]; - - @synchronized(self) { - retryCount_++; - - [self retryFetch]; - } -} - -- (void)destroyRetryTimer { - BOOL shouldNotify = NO; - @synchronized(self) { - if (retryTimer_) { - [retryTimer_ invalidate]; - [retryTimer_ autorelease]; - retryTimer_ = nil; - shouldNotify = YES; - } - } // @synchronized(self) - - if (shouldNotify) { - 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_, - delegateQueue = delegateQueue_, - 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 { - @synchronized(self) { - return userData_; - } -} - -- (void)setUserData:(id)theObj { - @synchronized(self) { - [userData_ autorelease]; - userData_ = [theObj retain]; - } -} - -- (void)setProperties:(NSMutableDictionary *)dict { - @synchronized(self) { - [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 { - @synchronized(self) { - return properties_; - } -} - -- (void)setProperty:(id)obj forKey:(NSString *)key { - @synchronized(self) { - if (properties_ == nil && obj != nil) { - [self setProperties:[NSMutableDictionary dictionary]]; - } - [properties_ setValue:obj forKey:key]; - } -} - -- (id)propertyForKey:(NSString *)key { - @synchronized(self) { - return [properties_ objectForKey:key]; - } -} - -- (void)addPropertiesFromDictionary:(NSDictionary *)dict { - @synchronized(self) { - 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 - static NSString *savedSystemString = nil; - if (savedSystemString == nil) { - // With Gestalt inexplicably deprecated in 10.8, we're reduced to reading - // the system plist file. - NSString *const kPath = @"/System/Library/CoreServices/SystemVersion.plist"; - NSDictionary *plist = [NSDictionary dictionaryWithContentsOfFile:kPath]; - NSString *versString = [plist objectForKey:@"ProductVersion"]; - if ([versString length] == 0) { - versString = @"10.?.?"; - } - savedSystemString = [[NSString alloc] initWithFormat:@"MacOSX/%@", versString]; - } - systemString = savedSystemString; -#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/GTMHTTPFetcherService.h b/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.h deleted file mode 100644 index 9c6cd754..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.h +++ /dev/null @@ -1,125 +0,0 @@ -/* 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_; - NSOperationQueue *delegateQueue_; - 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; - -// Search for running or delayed fetchers with the specified URL. -// -// Returns an array of fetcher objects found, or nil if none found. -- (NSArray *)issuedFetchersWithRequestURL:(NSURL *)requestURL; - -- (void)stopAllFetchers; - -// Properties to be applied to each fetcher; -// see GTMHTTPFetcher.h for descriptions -@property (copy) NSString *userAgent; -@property (assign) NSTimeInterval timeout; -@property (retain) NSOperationQueue *delegateQueue; -@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 deleted file mode 100644 index 15909dbb..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMHTTPFetcherService.m +++ /dev/null @@ -1,490 +0,0 @@ -/* 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_, - delegateQueue = delegateQueue_, - 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]; - [delegateQueue_ 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.delegateQueue = self.delegateQueue; - 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 { - @synchronized(self) { - NSString *host = [[[fetcher mutableRequest] URL] host]; - NSArray *delayedForHost = [delayedHosts_ objectForKey:host]; - NSUInteger idx = [delayedForHost indexOfObjectIdenticalTo:fetcher]; - BOOL 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)performSelector:(SEL)sel onStartThreadForFetcher:(GTMHTTPFetcher *)fetcher { - NSOperationQueue *delegateQueue = fetcher.delegateQueue; - NSThread *thread = fetcher.thread; - if (delegateQueue != nil || [thread isEqual:[NSThread currentThread]]) { - // The fetcher should run on the thread we're on now, or there's a delegate - // queue specified so it doesn't matter what thread the fetcher is started - // on, since it will call back on the queue. - [self performSelector:sel withObject:fetcher]; - } else { - // Fetcher must run on a specified thread (and that thread must have a - // run loop.) - [self performSelector:sel - onThread:thread - withObject:fetcher - waitUntilDone:NO]; - } -} - -- (void)startFetcherOnCurrentThread:(GTMHTTPFetcher *)fetcher { - [fetcher beginFetchMayDelay:NO - mayAuthorize:YES]; -} - -- (void)startFetcher:(GTMHTTPFetcher *)fetcher { - [self performSelector:@selector(startFetcherOnCurrentThread:) - onStartThreadForFetcher:fetcher]; -} - -- (void)stopFetcherOnCurrentThread:(GTMHTTPFetcher *)fetcher { - [fetcher stopFetching]; -} - -- (void)stopFetcher:(GTMHTTPFetcher *)fetcher { - [self performSelector:@selector(stopFetcherOnCurrentThread:) - onStartThreadForFetcher:fetcher]; -} - -- (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 { - @synchronized(self) { - NSUInteger running = [self numberOfRunningFetchers]; - NSUInteger delayed = [self numberOfDelayedFetchers]; - return running + delayed; - } -} - -- (NSUInteger)numberOfRunningFetchers { - @synchronized(self) { - NSUInteger sum = 0; - for (NSString *host in runningHosts_) { - NSArray *fetchers = [runningHosts_ objectForKey:host]; - sum += [fetchers count]; - } - return sum; - } -} - -- (NSUInteger)numberOfDelayedFetchers { - @synchronized(self) { - NSUInteger sum = 0; - for (NSString *host in delayedHosts_) { - NSArray *fetchers = [delayedHosts_ objectForKey:host]; - sum += [fetchers count]; - } - return sum; - } -} - -- (NSArray *)issuedFetchersWithRequestURL:(NSURL *)requestURL { - @synchronized(self) { - NSMutableArray *array = nil; - NSString *host = [requestURL host]; - if ([host length] == 0) return nil; - - NSURL *absRequestURL = [requestURL absoluteURL]; - - NSArray *runningForHost = [runningHosts_ objectForKey:host]; - for (GTMHTTPFetcher *fetcher in runningForHost) { - NSURL *fetcherURL = [[[fetcher mutableRequest] URL] absoluteURL]; - if ([fetcherURL isEqual:absRequestURL]) { - if (array == nil) { - array = [NSMutableArray array]; - } - [array addObject:fetcher]; - } - } - - NSArray *delayedForHost = [delayedHosts_ objectForKey:host]; - for (GTMHTTPFetcher *fetcher in delayedForHost) { - NSURL *fetcherURL = [[[fetcher mutableRequest] URL] absoluteURL]; - if ([fetcherURL isEqual:absRequestURL]) { - if (array == nil) { - array = [NSMutableArray array]; - } - [array addObject:fetcher]; - } - } - return array; - } -} - -- (void)stopAllFetchers { - @synchronized(self) { - // 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]; - BOOL isMainThread = [NSThread isMainThread]; - - 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 - if (isMainThread || delegateQueue_ == nil) { - NSDate *stopDate = [NSDate dateWithTimeIntervalSinceNow:0.001]; - [[NSRunLoop currentRunLoop] runUntilDate:stopDate]; - } else { - // Sleep on the delegate queue's background thread. - [NSThread sleepForTimeInterval:0.001]; - } - } -} - -#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 deleted file mode 100644 index c4fd1402..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMLogger.h +++ /dev/null @@ -1,504 +0,0 @@ -// -// 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 deleted file mode 100644 index 4b40747b..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMLogger.m +++ /dev/null @@ -1,612 +0,0 @@ -// -// 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 - - -#if !defined(__clang__) && (__GNUC__*10+__GNUC_MINOR__ >= 42) -// Some versions of GCC (4.2 and below AFAIK) aren't great about supporting -// -Wmissing-format-attribute -// when the function is anything more complex than foo(NSString *fmt, ...). -// You see the error inside the function when you turn ... into va_args and -// attempt to call another function (like vsprintf for example). -// So we just shut off the warning for this file. We reenable it at the end. -#pragma GCC diagnostic ignored "-Wmissing-format-attribute" -#endif // !__clang__ - -// 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 - -#if !defined(__clang__) && (__GNUC__*10+__GNUC_MINOR__ >= 42) -// See comment at top of file. -#pragma GCC diagnostic error "-Wmissing-format-attribute" -#endif // !__clang__ - diff --git a/External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.h b/External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.h deleted file mode 100644 index 7b0919b0..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.h +++ /dev/null @@ -1,88 +0,0 @@ -// -// 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 deleted file mode 100644 index 650d255f..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMMethodCheck.m +++ /dev/null @@ -1,174 +0,0 @@ -// -// 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) - || (strcmp(className, "__ARCLite__") == 0) - || (strcmp(className, "WebMIMETypeRegistry") == 0) -#if GTM_IPHONE_SDK - || (strcmp(className, "Object") == 0) - || (strcmp(className, "UIKeyboardCandidateUtilities") == 0) -#endif - ) { - return YES; - } - - // iPhone and Mac OS X 10.8 with Obj-C 2 SDKs do not define the |Object| - // class, so we instead test for the |NSObject| class. -#if GTM_IPHONE_SDK || \ - (__OBJC2__ && defined(MAC_OS_X_VERSION_10_8) && \ - MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8) - // 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. -#if !defined(__has_feature) || !__has_feature(objc_arc) - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; -#else - @autoreleasepool { -#endif - int numClasses = 0; - int newNumClasses = objc_getClassList(NULL, 0); - int i; - Class *classes = NULL; - while (numClasses < newNumClasses) { - numClasses = newNumClasses; - classes = (Class *)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); -#if !defined(__has_feature) || !__has_feature(objc_arc) - [pool drain]; -#else - } // @autoreleasepool -#endif -} - -#endif // DEBUG diff --git a/External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.h b/External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.h deleted file mode 100644 index b0944111..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.h +++ /dev/null @@ -1,36 +0,0 @@ -// -// 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 deleted file mode 100644 index 4799b2de..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMNSDictionary+URLArguments.m +++ /dev/null @@ -1,71 +0,0 @@ -// -// 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 deleted file mode 100644 index d4c7e09a..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.h +++ /dev/null @@ -1,41 +0,0 @@ -// -// 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 deleted file mode 100644 index 46d2c99e..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMNSString+URLArguments.m +++ /dev/null @@ -1,45 +0,0 @@ -// -// 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 deleted file mode 100644 index 8703164b..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.h +++ /dev/null @@ -1,356 +0,0 @@ -/* 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 kGTMOAuth2ErrorObjectKey _INITIALIZE_AS(@"kGTMOAuth2ErrorObjectKey"); - -_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"); -_EXTERN NSString* const kGTMOAuth2AccessTokenRefreshFailed _INITIALIZE_AS(@"kGTMOAuth2AccessTokenRefreshFailed"); - -// 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_; - - NSString *authorizationTokenKey_; - - NSDictionary *additionalTokenRequestParameters_; - NSDictionary *additionalGrantTypeRequestParameters_; - - // 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; -@property (retain) NSString *refreshScope; - -// Apps may optionally add parameters here to be provided to the token -// endpoint on token requests and refreshes. -@property (retain) NSDictionary *additionalTokenRequestParameters; - -// Apps may optionally add parameters here to be provided to the token -// endpoint on specific token requests and refreshes, keyed by the grant_type. -// For example, if a different "type" parameter is required for obtaining -// the auth code and on refresh, this might be: -// -// viewController.authentication.additionalGrantTypeRequestParameters = @{ -// @"authorization_code" : @{ @"type" : @"code" }, -// @"refresh_token" : @{ @"type" : @"refresh" } -// }; -@property (retain) NSDictionary *additionalGrantTypeRequestParameters; - -// 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 ID; not used for authentication -@property (retain) NSString *userID; - -// 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 or access 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; - -// Key for the response parameter used for the authorization header; by default, -// "access_token" is used, but some servers may expect alternatives, like -// "id_token". -@property (copy) NSString *authorizationTokenKey; - -// 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. This will also cancel the authorization -// for all fetch requests pending authorization. -- (void)stopAuthorization; - -// Prevents authorization callback for a given request. -- (void)stopAuthorizationForRequest:(NSURLRequest *)request; - -// 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; - -+ (NSDictionary *)dictionaryWithJSONData:(NSData *)data; - -+ (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 deleted file mode 100644 index 7f2b0a21..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2Authentication.m +++ /dev/null @@ -1,1275 +0,0 @@ -/* 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"; -static NSString *const kOAuth2RefreshScopeKey = @"refreshScope"; - -// additional persistent keys -static NSString *const kServiceProviderKey = @"serviceProvider"; -static NSString *const kUserIDKey = @"userID"; -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 -#if (TARGET_OS_MAC && !TARGET_OS_IPHONE && (MAC_OS_X_VERSION_MAX_ALLOWED < 1070)) || \ - (TARGET_OS_IPHONE && (__IPHONE_OS_VERSION_MAX_ALLOWED < 50000)) -@interface GTMNSJSONSerialization : NSObject -+ (id)JSONObjectWithData:(NSData *)data options:(NSUInteger)opt error:(NSError **)error; -@end -#endif - -@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; -@property (readonly) NSString *authorizationToken; - -- (void)setKeysForResponseJSONData:(NSData *)data; - -- (BOOL)authorizeRequestArgs:(GTMOAuth2AuthorizationArgs *)args; - -- (BOOL)authorizeRequestImmediateArgs:(GTMOAuth2AuthorizationArgs *)args; - -- (BOOL)shouldRefreshAccessToken; - -- (void)updateExpirationDate; - -- (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_, - authorizationTokenKey = authorizationTokenKey_, - tokenURL = tokenURL_, - expirationDate = expirationDate_, - additionalTokenRequestParameters = additionalTokenRequestParameters_, - additionalGrantTypeRequestParameters = additionalGrantTypeRequestParameters_, - refreshFetcher = refreshFetcher_, - fetcherService = fetcherService_, - parserClass = parserClass_, - shouldAuthorizeAllRequests = shouldAuthorizeAllRequests_, - userData = userData_, - properties = properties_, - authorizationQueue = authorizationQueue_; - -// Response parameters -@dynamic accessToken, - refreshToken, - code, - assertion, - refreshScope, - 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]; - [authorizationTokenKey_ release]; - [tokenURL_ release]; - [expirationDate_ release]; - [additionalTokenRequestParameters_ release]; - [additionalGrantTypeRequestParameters_ 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 class] 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); - - NSString *noteName; - NSDictionary *userInfo = nil; - if (hasAccessToken && error == nil) { - // Successful refresh. - noteName = kGTMOAuth2AccessTokenRefreshed; - userInfo = nil; - } else { - // Google's OAuth 2 implementation returns a 400 with JSON body - // containing error key "invalid_grant" to indicate the refresh token - // is invalid or has been revoked by the user. We'll promote the - // JSON error key's value for easy inspection by the observer. - noteName = kGTMOAuth2AccessTokenRefreshFailed; - NSString *jsonErr = nil; - if ([error code] == kGTMHTTPFetcherStatusBadRequest) { - NSDictionary *json = [[error userInfo] objectForKey:kGTMOAuth2ErrorJSONKey]; - jsonErr = [json objectForKey:kGTMOAuth2ErrorMessageKey]; - } - // error and jsonErr may be nil - userInfo = [NSMutableDictionary dictionary]; - [userInfo setValue:error forKey:kGTMOAuth2ErrorObjectKey]; - [userInfo setValue:jsonErr forKey:kGTMOAuth2ErrorMessageKey]; - } - NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; - [nc postNotificationName:noteName - object:self - userInfo:userInfo]; - - 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; - } -} - -- (void)stopAuthorizationForRequest:(NSURLRequest *)request { - @synchronized(authorizationQueue_) { - NSUInteger argIndex = 0; - BOOL found = NO; - for (GTMOAuth2AuthorizationArgs *args in authorizationQueue_) { - if ([args request] == request) { - found = YES; - break; - } - argIndex++; - } - - if (found) { - [authorizationQueue_ removeObjectAtIndex:argIndex]; - - // If the queue is now empty, go ahead and stop the fetcher. - if ([authorizationQueue_ count] == 0) { - [self stopAuthorization]; - } - } - } -} - -- (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 - } - - // Get the access token. - NSString *accessToken = self.authorizationToken; - 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]]; - - if (isSameThread) { - [self invokeCallbackArgs:args]; - } else { - SEL sel = @selector(invokeCallbackArgs:); - NSOperationQueue *delegateQueue = self.fetcherService.delegateQueue; - if (delegateQueue) { - NSInvocationOperation *op; - op = [[[NSInvocationOperation alloc] initWithTarget:self - selector:sel - object:args] autorelease]; - [delegateQueue addOperation:op]; - } else { - [self performSelector:sel - onThread:targetThread - withObject:args - waitUntilDone:NO]; - } - } - } - - 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.authorizationToken; - } - 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; - NSString *code = self.code; - - BOOL hasRefreshToken = ([refreshToken length] > 0); - BOOL hasAccessToken = ([accessToken length] > 0); - BOOL hasAssertion = ([assertion length] > 0); - BOOL hasCode = ([code length] > 0); - - // Determine if we need to refresh the access token - if (hasRefreshToken || hasAssertion || hasCode) { - 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 *fetchType; - - NSString *refreshToken = self.refreshToken; - NSString *code = self.code; - NSString *assertion = self.assertion; - NSString *grantType = nil; - - if (refreshToken) { - // We have a refresh token - grantType = @"refresh_token"; - [paramsDict setObject:refreshToken forKey:@"refresh_token"]; - - NSString *refreshScope = self.refreshScope; - if ([refreshScope length] > 0) { - [paramsDict setObject:refreshScope forKey:@"scope"]; - } - - fetchType = kGTMOAuth2FetchTypeRefresh; - } else if (code) { - // We have a code string - grantType = @"authorization_code"; - [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; - } else if (assertion) { - // We have an assertion string - grantType = @"http://oauth.net/grant_type/jwt/1.0/bearer"; - [paramsDict setObject:assertion forKey:@"assertion"]; - fetchType = kGTMOAuth2FetchTypeAssertion; - } else { -#if DEBUG - NSAssert(0, @"unexpected lack of code or refresh token for fetching"); -#endif - return nil; - } - [paramsDict setObject:grantType forKey:@"grant_type"]; - - 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]; - } - NSDictionary *grantTypeParams = - [self.additionalGrantTypeRequestParameters objectForKey:grantType]; - if (grantTypeParams) { - [paramsDict addEntriesFromDictionary:grantTypeParams]; - } - - 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]; - } - - NSString *const template = (refreshToken ? @"refresh token for %@" : @"fetch tokens for %@"); - [fetcher setCommentWithFormat:template, [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 class] 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 the requested 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.userID forKey:kUserIDKey]; - [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; - self.authorizationTokenKey = nil; -} - -#pragma mark Accessors for Response Parameters - -- (NSString *)authorizationToken { - // The token used for authorization is typically the access token unless - // the user has specified that an alternative parameter be used. - NSString *authorizationToken; - NSString *authTokenKey = self.authorizationTokenKey; - if (authTokenKey != nil) { - authorizationToken = [self.parameters objectForKey:authTokenKey]; - } else { - authorizationToken = self.accessToken; - } - return authorizationToken; -} - -- (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 *)refreshScope { - return [self.parameters objectForKey:kOAuth2RefreshScopeKey]; -} - -- (void)setRefreshScope:(NSString *)str { - [self.parameters setValue:str forKey:kOAuth2RefreshScopeKey]; -} - -- (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 *)userID { - return [self.parameters objectForKey:kUserIDKey]; -} - -- (void)setUserID:(NSString *)str { - [self.parameters setValue:str forKey:kUserIDKey]; -} - -- (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 deleted file mode 100644 index ded279bd..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.h +++ /dev/null @@ -1,187 +0,0 @@ -/* 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; - -// Start the sequences for signing in with an authorization code. The -// authentication must contain an authorization code, otherwise the process -// will fail. -- (void)authCodeObtained; - -#pragma mark - - -#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT -// Revocation of an authorized token from Google -+ (void)revokeTokenForGoogleAuthentication:(GTMOAuth2Authentication *)auth; - -// Create a fetcher for obtaining the user's Google email address or profile, -// according to the current auth scopes. -// -// The auth object must have been created with appropriate scopes. -// -// The fetcher's response data can be parsed with NSJSONSerialization. -+ (GTMHTTPFetcher *)userInfoFetcherWithAuth:(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 deleted file mode 100644 index 215f719e..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2SignIn.m +++ /dev/null @@ -1,936 +0,0 @@ -/* 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 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)addScopeForGoogleUserInfo; -- (void)fetchGoogleUserInfo; -#endif -- (void)finishSignInWithError:(NSError *)error; - -- (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; - -+ (NSData *)decodeWebSafeBase64:(NSString *)base64Str; -@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; -} - -- (void)addScopeForGoogleUserInfo { - 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 - -- (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 - [self addScopeForGoogleUserInfo]; -#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 -// authCodeObtained 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 authCodeObtained]; - } - // 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 -// authCodeObtained 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 authCodeObtained]; - } - 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)authCodeObtained { - // 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; - - // If the signin was request for exchanging an authentication token to a - // refresh token, there is no window to close. - if (self.webRequestSelector) { - [self closeTheWindow]; - } else { - // For signing in to Google, append the scope for obtaining the - // authenticated user email and profile, as appropriate. This is usually - // done by the startSigningIn method, but this method is not called when - // exchanging an authentication token for a refresh token. -#if !GTM_OAUTH2_SKIP_GOOGLE_SUPPORT - [self addScopeForGoogleUserInfo]; -#endif - } - - 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 -+ (GTMHTTPFetcher *)userInfoFetcherWithAuth:(GTMOAuth2Authentication *)auth { - // create a fetcher for obtaining the user's email or profile - NSURL *infoURL = [[self class] googleUserInfoURL]; - NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:infoURL]; - - if ([auth respondsToSelector:@selector(userAgent)]) { - NSString *userAgent = [auth userAgent]; - [request setValue:userAgent forHTTPHeaderField:@"User-Agent"]; - } - [request setValue:@"no-cache" forHTTPHeaderField:@"Cache-Control"]; - - GTMHTTPFetcher *fetcher; - id fetcherService = nil; - if ([auth respondsToSelector:@selector(fetcherService)]) { - fetcherService = auth.fetcherService; - }; - if (fetcherService) { - fetcher = [fetcherService fetcherWithRequest:request]; - } else { - fetcher = [GTMHTTPFetcher fetcherWithRequest:request]; - } - fetcher.authorizer = auth; - fetcher.retryEnabled = YES; - fetcher.maxRetryInterval = 15.0; - fetcher.comment = @"user info"; - return fetcher; -} - -- (void)fetchGoogleUserInfo { - if (!self.shouldFetchGoogleUserProfile) { - // If we only need email and user ID, not the full profile, and we have an - // id_token, it may have the email and user ID so we won't need to fetch - // them. - GTMOAuth2Authentication *auth = self.authentication; - NSString *idToken = [auth.parameters objectForKey:@"id_token"]; - if ([idToken length] > 0) { - // The id_token has three dot-delimited parts. The second is the - // JSON profile. - // - // http://www.tbray.org/ongoing/When/201x/2013/04/04/ID-Tokens - NSArray *parts = [idToken componentsSeparatedByString:@"."]; - if ([parts count] == 3) { - NSString *part2 = [parts objectAtIndex:1]; - if ([part2 length] > 0) { - NSData *data = [[self class] decodeWebSafeBase64:part2]; - if ([data length] > 0) { - [self updateGoogleUserInfoWithData:data]; - if ([[auth userID] length] > 0 && [[auth userEmail] length] > 0) { - // We obtained user ID and email from the ID token. - [self finishSignInWithError:nil]; - return; - } - } - } - } - } - } - - // Fetch the email and profile from the userinfo endpoint. - GTMOAuth2Authentication *auth = self.authentication; - GTMHTTPFetcher *fetcher = [[self class] userInfoFetcherWithAuth:auth]; - [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 - [self updateGoogleUserInfoWithData:data]; - } - [self finishSignInWithError:error]; -} - -- (void)updateGoogleUserInfoWithData:(NSData *)data { - if (!data) return; - - GTMOAuth2Authentication *auth = self.authentication; - NSDictionary *profileDict = [[auth class] dictionaryWithJSONData:data]; - if (profileDict) { - self.userProfile = profileDict; - - // Save the ID into the auth object - NSString *identifier = [profileDict objectForKey:@"id"]; - [auth setUserID:identifier]; - - // Save the email into the auth object - NSString *email = [profileDict objectForKey:@"email"]; - [auth setUserEmail:email]; - - // The verified_email key is a boolean NSNumber in the userinfo - // endpoint response, but it is a string like "true" in the id_token. - // We want to consistently save it as a string of the boolean value, - // like @"1". - id verified = [profileDict objectForKey:@"verified_email"]; - if ([verified isKindOfClass:[NSString class]]) { - verified = [NSNumber numberWithBool:[verified boolValue]]; - } - - [auth setUserEmailIsVerified:[verified stringValue]]; - } -} - -#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.refreshToken != nil - && 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]; - if (encoded != nil) { - 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]; -} - - -// Based on Cyrus Najmabadi's elegent little encoder and decoder from -// http://www.cocoadev.com/index.pl?BaseSixtyFour and on GTLBase64 - -+ (NSData *)decodeWebSafeBase64:(NSString *)base64Str { - static char decodingTable[128]; - static BOOL hasInited = NO; - - if (!hasInited) { - char webSafeEncodingTable[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"; - memset(decodingTable, 0, 128); - for (unsigned int i = 0; i < sizeof(webSafeEncodingTable); i++) { - decodingTable[(unsigned int) webSafeEncodingTable[i]] = (char)i; - } - hasInited = YES; - } - - // The input string should be plain ASCII. - const char *cString = [base64Str cStringUsingEncoding:NSASCIIStringEncoding]; - if (cString == nil) return nil; - - NSInteger inputLength = (NSInteger)strlen(cString); - // Input length is not being restricted to multiples of 4. - if (inputLength == 0) return [NSData data]; - - while (inputLength > 0 && cString[inputLength - 1] == '=') { - inputLength--; - } - - NSInteger outputLength = inputLength * 3 / 4; - NSMutableData* data = [NSMutableData dataWithLength:(NSUInteger)outputLength]; - uint8_t *output = [data mutableBytes]; - - NSInteger inputPoint = 0; - NSInteger outputPoint = 0; - char *table = decodingTable; - - while (inputPoint < inputLength - 1) { - 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++] = (uint8_t)((table[i0] << 2) | (table[i1] >> 4)); - if (outputPoint < outputLength) { - output[outputPoint++] = (uint8_t)(((table[i1] & 0xF) << 4) | (table[i2] >> 2)); - } - if (outputPoint < outputLength) { - output[outputPoint++] = (uint8_t)(((table[i2] & 0x3) << 6) | table[i3]); - } - } - - return data; -} - -#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 deleted file mode 100644 index 23bb07a9..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.h +++ /dev/null @@ -1,366 +0,0 @@ -/* 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; - -typedef void (^GTMOAuth2ViewControllerCompletionHandler)(GTMOAuth2ViewControllerTouch *viewController, GTMOAuth2Authentication *auth, NSError *error); - -@interface GTMOAuth2ViewControllerTouch : UIViewController { - @private - UIButton *backButton_; - UIButton *forwardButton_; - UIActivityIndicatorView *initialActivityIndicator_; - 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 - GTMOAuth2ViewControllerCompletionHandler completionBlock_; - - void (^popViewBlock_)(void); -#endif - - NSString *keychainItemName_; - CFTypeRef keychainItemAccessibility_; - - // if non-nil, the html string to be displayed immediately upon opening - // of the web view - NSString *initialHTMLString_; - - // set to 1 or -1 if the user sets the showsInitialActivityIndicator - // property - int mustShowActivityIndicator_; - - // if non-nil, the URL for which cookies will be deleted when the - // browser view is dismissed - NSURL *browserCookiesURL_; - - id userData_; - NSMutableDictionary *properties_; - -#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 - // 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_; -#endif - - // 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; - -// an activity indicator shows during initial webview load when no initial HTML -// string is specified, but the activity indicator can be forced to be shown -// with this property -@property (nonatomic, assign) BOOL showsInitialActivityIndicator; - -// 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 UIActivityIndicatorView *initialActivityIndicator; -@property (nonatomic, retain) IBOutlet UIView *navButtonsView; -@property (nonatomic, retain) IBOutlet UIBarButtonItem *rightBarButtonItem; -@property (nonatomic, retain) IBOutlet UIWebView *webView; - -#if NS_BLOCKS_AVAILABLE -// An optional block to be called when the view should be popped. If not set, -// the view controller will use its navigation controller to pop the view. -@property (nonatomic, copy) void (^popViewBlock)(void); -#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; - -// 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:(GTMOAuth2ViewControllerCompletionHandler)handler; - -- (id)initWithScope:(NSString *)scope - clientID:(NSString *)clientID - clientSecret:(NSString *)clientSecret - keychainItemName:(NSString *)keychainItemName - completionHandler:(GTMOAuth2ViewControllerCompletionHandler)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:(GTMOAuth2ViewControllerCompletionHandler)handler; - -- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth - authorizationURL:(NSURL *)authorizationURL - keychainItemName:(NSString *)keychainItemName - completionHandler:(GTMOAuth2ViewControllerCompletionHandler)handler; -#endif - -// subclasses may override authNibName to specify a custom name -+ (NSString *)authNibName; - -// subclasses may override authNibBundle to specify a custom bundle -+ (NSBundle *)authNibBundle; - -// subclasses may override setUpNavigation to provide their own navigation -// controls -- (void)setUpNavigation; - -// 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 deleted file mode 100644 index 15ce71e6..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMOAuth2ViewControllerTouch.m +++ /dev/null @@ -1,1047 +0,0 @@ -/* 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_, - initialActivityIndicator = initialActivityIndicator_; - -@synthesize keychainItemName = keychainItemName_, - keychainItemAccessibility = keychainItemAccessibility_, - initialHTMLString = initialHTMLString_, - browserCookiesURL = browserCookiesURL_, - signIn = signIn_, - userData = userData_, - properties = properties_; - -#if NS_BLOCKS_AVAILABLE -@synthesize popViewBlock = popViewBlock_; -#endif - -#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:(GTMOAuth2ViewControllerCompletionHandler)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:(GTMOAuth2ViewControllerCompletionHandler)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:(GTMOAuth2ViewControllerCompletionHandler)handler { - return [[[self alloc] initWithAuthentication:auth - authorizationURL:authorizationURL - keychainItemName:keychainItemName - completionHandler:handler] autorelease]; -} - -- (id)initWithAuthentication:(GTMOAuth2Authentication *)auth - authorizationURL:(NSURL *)authorizationURL - keychainItemName:(NSString *)keychainItemName - completionHandler:(GTMOAuth2ViewControllerCompletionHandler)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]; - [initialActivityIndicator_ release]; - [navButtonsView_ release]; - [rightBarButtonItem_ release]; - [webView_ release]; - [signIn_ release]; - [request_ release]; - [delegate_ release]; -#if NS_BLOCKS_AVAILABLE - [completionBlock_ release]; - [popViewBlock_ 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 { - [self setUpNavigation]; -} - -- (void)setUpNavigation { - rightBarButtonItem_.customView = navButtonsView_; - self.navigationItem.rightBarButtonItem = rightBarButtonItem_; -} - -- (void)popView { -#if NS_BLOCKS_AVAILABLE - void (^popViewBlock)() = self.popViewBlock; -#else - id popViewBlock = nil; -#endif - - if (popViewBlock || self.navigationController.topViewController == self) { - if (!self.view.hidden) { - // 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; - - if (popViewBlock) { -#if NS_BLOCKS_AVAILABLE - popViewBlock(); - self.popViewBlock = nil; -#endif - } else { - [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); -} - -- (BOOL)showsInitialActivityIndicator { - return (mustShowActivityIndicator_ == 1 || initialHTMLString_ == nil); -} - -- (void)setShowsInitialActivityIndicator:(BOOL)flag { - mustShowActivityIndicator_ = (flag ? 1 : -1); -} - -#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 if the request is nil, - // to 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; - // The app may prefer some html other than blank white to be displayed - // before the sign-in web page loads. - // The first fetch might be slow, so the client programmer may want - // to show a local "loading" message. - // On iOS 5+, UIWebView will ignore loadHTMLString: if it's followed by - // a loadRequest: call, so if there is a "loading" message we defer - // the loadRequest: until after after we've drawn the "loading" message. - // - // If there is no initial html string, we show the activity indicator - // unless the user set showsInitialActivityIndicator to NO; if there - // is an initial html string, we hide the indicator unless the user set - // showsInitialActivityIndicator to YES. - NSString *html = self.initialHTMLString; - if ([html length] > 0) { - [initialActivityIndicator_ setHidden:(mustShowActivityIndicator_ < 1)]; - [self.webView loadHTMLString:html baseURL:nil]; - } else { - [initialActivityIndicator_ setHidden:(mustShowActivityIndicator_ < 0)]; - [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 *const html = @"

"; - 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 { - // See the comment on clearBrowserCookies in viewDidDisappear. - [self clearBrowserCookies]; - - 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]; - -#if NS_BLOCKS_AVAILABLE - self.popViewBlock = nil; -#endif - } - - [super viewWillDisappear:animated]; -} - -- (void)viewDidDisappear:(BOOL)animated { - [super viewDidDisappear:animated]; - - // prevent the next sign-in from showing in the WebView that the user is - // already signed in. It's possible for the WebView to set the cookies even - // after this, so we also clear them when the view first appears. - [self clearBrowserCookies]; -} - -- (void)viewDidLayoutSubviews { - // We don't call super's version of this method because - // -[UIViewController viewDidLayoutSubviews] is documented as a no-op, that - // didn't exist before iOS 5. - [initialActivityIndicator_ setCenter:[webView_ center]]; -} - -- (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 - } - - if (self.request && [self.initialHTMLString length] > 0) { - // The request was pending. - [self setInitialHTMLString:nil]; - [self.webView loadRequest:self.request]; - } else { - [initialActivityIndicator_ setHidden:YES]; - [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]]; - } -} - -#if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 -// When running on a device with an OS version < 6, this gets called. -// -// Since it is never called in iOS 6 or greater, if your min deployment -// target is iOS6 or greater, then you don't need to have this method compiled -// into your app. -// -// When running on a device with an OS version 6 or greater, this code is -// not called. - (NSUInteger)supportedInterfaceOrientations; would be called, -// if it existed. Since it is absent, -// Allow the default orientations: All for iPad, all but upside down for iPhone. -- (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; -} -#endif - - -@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/GTMObjC2Runtime.h b/External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.h deleted file mode 100644 index e4e2ac72..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.h +++ /dev/null @@ -1,113 +0,0 @@ -// -// 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 deleted file mode 100644 index f284542c..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GTMObjC2Runtime.m +++ /dev/null @@ -1,163 +0,0 @@ -// -// 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/OpenSource/GoogleOpenSource.h b/External/google-plus-ios-sdk/OpenSource/GoogleOpenSource.h deleted file mode 100644 index 8703285c..00000000 --- a/External/google-plus-ios-sdk/OpenSource/GoogleOpenSource.h +++ /dev/null @@ -1,44 +0,0 @@ -// -// GoogleOpenSource.h -// Google+ iOS SDK -// -// Copyright 2013 Google Inc. -// -// Use of this SDK is subject to the Google+ Platform Terms of Service: -// https://developers.google.com/+/terms -// - - -// GTM. -#import "GTMDefines.h" -#import "GTMHTTPFetcher.h" -#import "GTMHTTPFetcherService.h" -#import "GTMHTTPFetchHistory.h" -#import "GTMLogger.h" -#import "GTMMethodCheck.h" -#import "GTMNSDictionary+URLArguments.h" -#import "GTMNSString+URLArguments.h" -#import "GTMOAuth2Authentication.h" -#import "GTMOAuth2SignIn.h" -#import "GTMOAuth2ViewControllerTouch.h" -#import "GTMObjC2Runtime.h" - -// Chrome. -#import "OpenInChromeController.h" - -// GTL. -#import "GTLDefines.h" -#import "GTLBatchQuery.h" -#import "GTLBatchResult.h" -#import "GTLDateTime.h" -#import "GTLErrorObject.h" -#import "GTLObject.h" -#import "GTLQuery.h" -#import "GTLRuntimeCommon.h" -#import "GTLService.h" -#import "GTLFramework.h" -#import "GTLJSONParser.h" -#import "GTLUtilities.h" - -// GTLPlus. -#import "GTLPlus.h" diff --git a/External/google-plus-ios-sdk/OpenSource/OpenInChromeController.h b/External/google-plus-ios-sdk/OpenSource/OpenInChromeController.h deleted file mode 100644 index 35363a71..00000000 --- a/External/google-plus-ios-sdk/OpenSource/OpenInChromeController.h +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import - -// This class is used to check if Google Chrome is installed in the system and -// to open a URL in Google Chrome either with or without a callback URL. -@interface OpenInChromeController : NSObject - -// Returns a shared instance of the OpenInChromeController. -+ (OpenInChromeController *)sharedInstance; - -// Returns YES if Google Chrome is installed in the user's system. -- (BOOL)isChromeInstalled; - -// Opens a URL in Google Chrome. -- (BOOL)openInChrome:(NSURL *)url; - -// Open a URL in Google Chrome providing a |callbackURL| to return to the app. -// URLs from the same app will be opened in the same tab unless |createNewTab| -// is set to YES. -// |callbackURL| can be nil. -// The return value of this method is YES if the URL is successfully opened. -- (BOOL)openInChrome:(NSURL *)url - withCallbackURL:(NSURL *)callbackURL - createNewTab:(BOOL)createNewTab; - -@end diff --git a/External/google-plus-ios-sdk/OpenSource/OpenInChromeController.m b/External/google-plus-ios-sdk/OpenSource/OpenInChromeController.m deleted file mode 100644 index 30b18b5e..00000000 --- a/External/google-plus-ios-sdk/OpenSource/OpenInChromeController.m +++ /dev/null @@ -1,135 +0,0 @@ -// Copyright 2012, Google Inc. -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#import - -#import "OpenInChromeController.h" - -static NSString * const kGoogleChromeHTTPScheme = @"googlechrome:"; -static NSString * const kGoogleChromeHTTPSScheme = @"googlechromes:"; -static NSString * const kGoogleChromeCallbackScheme = - @"googlechrome-x-callback:"; - -static NSString * encodeByAddingPercentEscapes(NSString *input) { - NSString *encodedValue = - (NSString *)CFURLCreateStringByAddingPercentEscapes( - kCFAllocatorDefault, - (CFStringRef)input, - NULL, - (CFStringRef)@"!*'();:@&=+$,/?%#[]", - kCFStringEncodingUTF8); - return [encodedValue autorelease]; -} - -@implementation OpenInChromeController - -+ (OpenInChromeController *)sharedInstance { - static OpenInChromeController *sharedInstance; - static dispatch_once_t onceToken; - dispatch_once(&onceToken, ^{ - sharedInstance = [[self alloc] init]; - }); - return sharedInstance; -} - -- (BOOL)isChromeInstalled { - NSURL *simpleURL = [NSURL URLWithString:kGoogleChromeHTTPScheme]; - NSURL *callbackURL = [NSURL URLWithString:kGoogleChromeCallbackScheme]; - return [[UIApplication sharedApplication] canOpenURL:simpleURL] || - [[UIApplication sharedApplication] canOpenURL:callbackURL]; -} - -- (BOOL)openInChrome:(NSURL *)url { - return [self openInChrome:url withCallbackURL:nil createNewTab:NO]; -} - -- (BOOL)openInChrome:(NSURL *)url - withCallbackURL:(NSURL *)callbackURL - createNewTab:(BOOL)createNewTab { - NSURL *chromeSimpleURL = [NSURL URLWithString:kGoogleChromeHTTPScheme]; - NSURL *chromeCallbackURL = [NSURL URLWithString:kGoogleChromeCallbackScheme]; - if ([[UIApplication sharedApplication] canOpenURL:chromeCallbackURL]) { - NSString *appName = - [[NSBundle mainBundle] - objectForInfoDictionaryKey:@"CFBundleDisplayName"]; - - NSString *scheme = [url.scheme lowercaseString]; - - // Proceed only if scheme is http or https. - if ([scheme isEqualToString:@"http"] || - [scheme isEqualToString:@"https"]) { - - NSMutableString *chromeURLString = [NSMutableString string]; - [chromeURLString appendFormat: - @"%@//x-callback-url/open/?x-source=%@&url=%@", - kGoogleChromeCallbackScheme, - encodeByAddingPercentEscapes(appName), - encodeByAddingPercentEscapes([url absoluteString])]; - if (callbackURL) { - [chromeURLString appendFormat:@"&x-success=%@", - encodeByAddingPercentEscapes([callbackURL absoluteString])]; - } - if (createNewTab) { - [chromeURLString appendString:@"&create-new-tab"]; - } - - NSURL *chromeURL = [NSURL URLWithString:chromeURLString]; - - // Open the URL with Google Chrome. - return [[UIApplication sharedApplication] openURL:chromeURL]; - } - } else if ([[UIApplication sharedApplication] canOpenURL:chromeSimpleURL]) { - NSString *scheme = [url.scheme lowercaseString]; - - // Replace the URL Scheme with the Chrome equivalent. - NSString *chromeScheme = nil; - if ([scheme isEqualToString:@"http"]) { - chromeScheme = kGoogleChromeHTTPScheme; - } else if ([scheme isEqualToString:@"https"]) { - chromeScheme = kGoogleChromeHTTPSScheme; - } - - // Proceed only if a valid Google Chrome URI Scheme is available. - if (chromeScheme) { - NSString *absoluteString = [url absoluteString]; - NSRange rangeForScheme = [absoluteString rangeOfString:@":"]; - NSString *urlNoScheme = - [absoluteString substringFromIndex:rangeForScheme.location + 1]; - NSString *chromeURLString = - [chromeScheme stringByAppendingString:urlNoScheme]; - NSURL *chromeURL = [NSURL URLWithString:chromeURLString]; - - // Open the URL with Google Chrome. - return [[UIApplication sharedApplication] openURL:chromeURL]; - } - } - return NO; -} - -@end diff --git a/External/google-plus-ios-sdk/README b/External/google-plus-ios-sdk/README deleted file mode 100644 index a762f556..00000000 --- a/External/google-plus-ios-sdk/README +++ /dev/null @@ -1,27 +0,0 @@ -This Google+ iOS SDK allows users to sign in and share with Google+ from -third-party apps. The SDK also provides Google+ APIs for the app to access -the list of people in user-selected circles and to read and write user's app -activities. The SDK contains the following files: - -README -- This file. - -Changelog -- The versions and changes of the SDK. - -GooglePlus.framework/ -- The Google+ SDK framework. - -GooglePlus.bundle/ -- Resources that can be used in your app. - Required if |GPPSignInButton| is used. - -GoogleOpenSource.framework/ -- A framework containing all the open source files - used by the SDK. - Either add this framework or add individual - files in OpenSource/ directory into your project. - -OpenSource/ -- Google open source files used by the SDK. - This contains the same code as in GoogleOpenSource.framework. - If you're not adding GoogleOpenSource.framework, add the files - you need from this directory into your project. - -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/SampleCode/AppDelegate.h b/External/google-plus-ios-sdk/SampleCode/AppDelegate.h deleted file mode 100644 index 4b7360a2..00000000 --- a/External/google-plus-ios-sdk/SampleCode/AppDelegate.h +++ /dev/null @@ -1,30 +0,0 @@ -// -// AppDelegate.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 GTMOAuth2Authentication; - -@interface AppDelegate : UIResponder - -// The sample app's |UIWindow|. -@property (retain, nonatomic) UIWindow *window; -// The navigation controller. -@property (retain, nonatomic) UINavigationController *navigationController; - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/AppDelegate.m b/External/google-plus-ios-sdk/SampleCode/AppDelegate.m deleted file mode 100644 index 51c4b340..00000000 --- a/External/google-plus-ios-sdk/SampleCode/AppDelegate.m +++ /dev/null @@ -1,90 +0,0 @@ -// -// AppDelegate.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 "AppDelegate.h" - -#import -#import "MasterViewController.h" - -@interface AppDelegate () - -@end - -@implementation AppDelegate - -@synthesize window = window_; -@synthesize navigationController = navigationController_; - -// 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 = - @"452265719636.apps.googleusercontent.com"; - -#pragma mark Object life-cycle. - -- (void)dealloc { - [window_ release]; - [navigationController_ release]; - [super dealloc]; -} - -- (BOOL)application:(UIApplication *)application - didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { - // Set app's client ID for |GPPSignIn| and |GPPShare|. - [GPPSignIn sharedInstance].clientID = kClientID; - - self.window = [[[UIWindow alloc] - initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; - MasterViewController *masterViewController = - [[[MasterViewController alloc] initWithNibName:@"MasterViewController" - bundle:nil] autorelease]; - self.navigationController = - [[[UINavigationController alloc] - initWithRootViewController:masterViewController] autorelease]; - self.window.rootViewController = self.navigationController; - [self.window makeKeyAndVisible]; - - // Read Google+ deep-link data. - [GPPDeepLink setDelegate:self]; - [GPPDeepLink readDeepLinkAfterInstall]; - return YES; -} - -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - sourceApplication:(NSString *)sourceApplication - annotation:(id)annotation { - return [GPPURLHandler handleURL:url - sourceApplication:sourceApplication - annotation:annotation]; -} - -#pragma mark - GPPDeepLinkDelegate - -- (void)didReceiveDeepLink:(GPPDeepLink *)deepLink { - // An example to handle the deep link data. - UIAlertView *alert = [[[UIAlertView alloc] - initWithTitle:@"Deep-link Data" - message:[deepLink deepLinkID] - delegate:nil - cancelButtonTitle:@"OK" - otherButtonTitles:nil] autorelease]; - [alert show]; -} - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist b/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist deleted file mode 100644 index 707c3762..00000000 --- a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Info.plist +++ /dev/null @@ -1,78 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - ${PRODUCT_NAME} - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFiles - - Icon.png - Icon-72.png - Icon-144.png - Icon@2x.png - - CFBundleIcons - - CFBundlePrimaryIcon - - CFBundleIconFiles - - Icon.png - Icon-72.png - Icon-144.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 deleted file mode 100644 index bda6af71..00000000 --- a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample-Prefix.pch +++ /dev/null @@ -1,14 +0,0 @@ -// -// 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 deleted file mode 100644 index d484a364..00000000 --- a/External/google-plus-ios-sdk/SampleCode/GooglePlusSample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,503 +0,0 @@ -// !$*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 */; }; - 8E47E994171CB75C003FBA75 /* GoogleOpenSource.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E47E991171CB75C003FBA75 /* GoogleOpenSource.framework */; }; - 8E47E995171CB75C003FBA75 /* GooglePlus.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8E47E992171CB75C003FBA75 /* GooglePlus.bundle */; }; - 8E47E996171CB75C003FBA75 /* GooglePlus.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E47E993171CB75C003FBA75 /* GooglePlus.framework */; }; - D907F676166967D400EB5273 /* Icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = D907F675166967D400EB5273 /* Icon@2x.png */; }; - D945ED39166AE4950051858C /* ListMomentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D945ED34166AE4950051858C /* ListMomentsViewController.m */; }; - D945ED3A166AE4950051858C /* ListMomentsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D945ED35166AE4950051858C /* ListMomentsViewController.xib */; }; - D945ED3B166AE4950051858C /* ListPeopleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D945ED37166AE4950051858C /* ListPeopleViewController.m */; }; - D945ED3C166AE4950051858C /* ListPeopleViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D945ED38166AE4950051858C /* ListPeopleViewController.xib */; }; - D973B402158ABC1F0083A4B5 /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D973B401158ABC1F0083A4B5 /* MessageUI.framework */; }; - D98254A915990D8D0060CA47 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = D98254A715990D8D0060CA47 /* Icon.png */; }; - D9A49D9F1720DD5E009C6DE2 /* Default@2x~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D9A49D9B1720DD5E009C6DE2 /* Default@2x~iphone.png */; }; - D9A49DA01720DD5E009C6DE2 /* Default~iphone.png in Resources */ = {isa = PBXBuildFile; fileRef = D9A49D9C1720DD5E009C6DE2 /* Default~iphone.png */; }; - D9A49DA11720DD5E009C6DE2 /* Icon-72.png in Resources */ = {isa = PBXBuildFile; fileRef = D9A49D9D1720DD5E009C6DE2 /* Icon-72.png */; }; - D9A49DA21720DD5E009C6DE2 /* Icon-144.png in Resources */ = {isa = PBXBuildFile; fileRef = D9A49D9E1720DD5E009C6DE2 /* Icon-144.png */; }; - D9EE74C2158A8E0500EC1D05 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B4158A8E0500EC1D05 /* AppDelegate.m */; }; - D9EE74C3158A8E0500EC1D05 /* MasterViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B6158A8E0500EC1D05 /* MasterViewController.m */; }; - D9EE74C4158A8E0500EC1D05 /* MasterViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74B7158A8E0500EC1D05 /* MasterViewController.xib */; }; - D9EE74C5158A8E0500EC1D05 /* MomentsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74B9158A8E0500EC1D05 /* MomentsViewController.m */; }; - D9EE74C6158A8E0500EC1D05 /* MomentsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74BA158A8E0500EC1D05 /* MomentsViewController.xib */; }; - D9EE74C7158A8E0500EC1D05 /* ShareViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74BC158A8E0500EC1D05 /* ShareViewController.m */; }; - D9EE74C8158A8E0500EC1D05 /* ShareViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74BD158A8E0500EC1D05 /* ShareViewController.xib */; }; - D9EE74C9158A8E0500EC1D05 /* SignInViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D9EE74BF158A8E0500EC1D05 /* SignInViewController.m */; }; - D9EE74CA158A8E0500EC1D05 /* SignInViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74C0158A8E0500EC1D05 /* SignInViewController.xib */; }; - D9EE74CD158A8E2900EC1D05 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D9EE74CB158A8E2900EC1D05 /* InfoPlist.strings */; }; - E0681E5F171F46EB0098D356 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E0681E5E171F46EB0098D356 /* Default-568h@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; }; - 8E47E991171CB75C003FBA75 /* GoogleOpenSource.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GoogleOpenSource.framework; path = ../GoogleOpenSource.framework; sourceTree = ""; }; - 8E47E992171CB75C003FBA75 /* GooglePlus.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; name = GooglePlus.bundle; path = ../GooglePlus.bundle; sourceTree = ""; }; - 8E47E993171CB75C003FBA75 /* GooglePlus.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GooglePlus.framework; path = ../GooglePlus.framework; sourceTree = ""; }; - D907F675166967D400EB5273 /* Icon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon@2x.png"; path = "Resources/Icon@2x.png"; sourceTree = SOURCE_ROOT; }; - D945ED33166AE4950051858C /* ListMomentsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListMomentsViewController.h; sourceTree = SOURCE_ROOT; }; - D945ED34166AE4950051858C /* ListMomentsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListMomentsViewController.m; sourceTree = SOURCE_ROOT; }; - D945ED35166AE4950051858C /* ListMomentsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ListMomentsViewController.xib; sourceTree = SOURCE_ROOT; }; - D945ED36166AE4950051858C /* ListPeopleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ListPeopleViewController.h; sourceTree = SOURCE_ROOT; }; - D945ED37166AE4950051858C /* ListPeopleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ListPeopleViewController.m; sourceTree = SOURCE_ROOT; }; - D945ED38166AE4950051858C /* ListPeopleViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ListPeopleViewController.xib; sourceTree = SOURCE_ROOT; }; - D973B401158ABC1F0083A4B5 /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; }; - D98254A715990D8D0060CA47 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon.png; path = Resources/Icon.png; sourceTree = SOURCE_ROOT; }; - D9A49D9B1720DD5E009C6DE2 /* Default@2x~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default@2x~iphone.png"; path = "Resources/Default@2x~iphone.png"; sourceTree = SOURCE_ROOT; }; - D9A49D9C1720DD5E009C6DE2 /* Default~iphone.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default~iphone.png"; path = "Resources/Default~iphone.png"; sourceTree = SOURCE_ROOT; }; - D9A49D9D1720DD5E009C6DE2 /* Icon-72.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-72.png"; path = "Resources/Icon-72.png"; sourceTree = SOURCE_ROOT; }; - D9A49D9E1720DD5E009C6DE2 /* Icon-144.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon-144.png"; path = "Resources/Icon-144.png"; sourceTree = SOURCE_ROOT; }; - 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 /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = SOURCE_ROOT; }; - D9EE74B4158A8E0500EC1D05 /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = SOURCE_ROOT; }; - D9EE74B5158A8E0500EC1D05 /* MasterViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MasterViewController.h; sourceTree = SOURCE_ROOT; }; - D9EE74B6158A8E0500EC1D05 /* MasterViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MasterViewController.m; sourceTree = SOURCE_ROOT; }; - D9EE74B7158A8E0500EC1D05 /* MasterViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MasterViewController.xib; sourceTree = SOURCE_ROOT; }; - D9EE74B8158A8E0500EC1D05 /* MomentsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MomentsViewController.h; sourceTree = SOURCE_ROOT; }; - D9EE74B9158A8E0500EC1D05 /* MomentsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MomentsViewController.m; sourceTree = SOURCE_ROOT; }; - D9EE74BA158A8E0500EC1D05 /* MomentsViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MomentsViewController.xib; sourceTree = SOURCE_ROOT; }; - D9EE74BB158A8E0500EC1D05 /* ShareViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShareViewController.h; sourceTree = SOURCE_ROOT; }; - D9EE74BC158A8E0500EC1D05 /* ShareViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ShareViewController.m; sourceTree = SOURCE_ROOT; }; - D9EE74BD158A8E0500EC1D05 /* ShareViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ShareViewController.xib; sourceTree = SOURCE_ROOT; }; - D9EE74BE158A8E0500EC1D05 /* SignInViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SignInViewController.h; sourceTree = SOURCE_ROOT; }; - D9EE74BF158A8E0500EC1D05 /* SignInViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SignInViewController.m; sourceTree = SOURCE_ROOT; }; - D9EE74C0158A8E0500EC1D05 /* SignInViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = SignInViewController.xib; sourceTree = SOURCE_ROOT; }; - D9EE74CC158A8E2900EC1D05 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = SOURCE_ROOT; }; - E0681E5E171F46EB0098D356 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Default-568h@2x.png"; path = "Resources/Default-568h@2x.png"; sourceTree = SOURCE_ROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 0043C7971580045B000DF02E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 8E47E996171CB75C003FBA75 /* GooglePlus.framework in Frameworks */, - 8E47E994171CB75C003FBA75 /* GoogleOpenSource.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 */, - D973B402158ABC1F0083A4B5 /* MessageUI.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 0043C78F1580045B000DF02E = { - isa = PBXGroup; - children = ( - 0043C7A41580045B000DF02E /* GooglePlusSample */, - 0043C79D1580045B000DF02E /* Frameworks */, - 0043C79B1580045B000DF02E /* Products */, - ); - sourceTree = ""; - }; - 0043C79B1580045B000DF02E /* Products */ = { - isa = PBXGroup; - children = ( - 0043C79A1580045B000DF02E /* GooglePlusSample.app */, - ); - name = Products; - sourceTree = ""; - }; - 0043C79D1580045B000DF02E /* Frameworks */ = { - isa = PBXGroup; - children = ( - 8E47E993171CB75C003FBA75 /* GooglePlus.framework */, - 8E47E992171CB75C003FBA75 /* GooglePlus.bundle */, - 8E47E991171CB75C003FBA75 /* GoogleOpenSource.framework */, - 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 /* AppDelegate.h */, - D9EE74B4158A8E0500EC1D05 /* AppDelegate.m */, - D945ED33166AE4950051858C /* ListMomentsViewController.h */, - D945ED34166AE4950051858C /* ListMomentsViewController.m */, - D945ED35166AE4950051858C /* ListMomentsViewController.xib */, - D945ED36166AE4950051858C /* ListPeopleViewController.h */, - D945ED37166AE4950051858C /* ListPeopleViewController.m */, - D945ED38166AE4950051858C /* ListPeopleViewController.xib */, - D9EE74B5158A8E0500EC1D05 /* MasterViewController.h */, - D9EE74B6158A8E0500EC1D05 /* MasterViewController.m */, - D9EE74B7158A8E0500EC1D05 /* MasterViewController.xib */, - D9EE74B8158A8E0500EC1D05 /* MomentsViewController.h */, - D9EE74B9158A8E0500EC1D05 /* MomentsViewController.m */, - D9EE74BA158A8E0500EC1D05 /* MomentsViewController.xib */, - D9EE74BB158A8E0500EC1D05 /* ShareViewController.h */, - D9EE74BC158A8E0500EC1D05 /* ShareViewController.m */, - D9EE74BD158A8E0500EC1D05 /* ShareViewController.xib */, - D9EE74BE158A8E0500EC1D05 /* SignInViewController.h */, - D9EE74BF158A8E0500EC1D05 /* SignInViewController.m */, - D9EE74C0158A8E0500EC1D05 /* SignInViewController.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 = ( - 0C52D6F7158BAB1F001510E6 /* button_background.png */, - E0681E5E171F46EB0098D356 /* Default-568h@2x.png */, - D9A49D9B1720DD5E009C6DE2 /* Default@2x~iphone.png */, - D9A49D9C1720DD5E009C6DE2 /* Default~iphone.png */, - D9A49D9E1720DD5E009C6DE2 /* Icon-144.png */, - D9A49D9D1720DD5E009C6DE2 /* Icon-72.png */, - D98254A715990D8D0060CA47 /* Icon.png */, - D907F675166967D400EB5273 /* Icon@2x.png */, - ); - name = Resources; - 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 = 0460; - ORGANIZATIONNAME = "Google Inc"; - }; - buildConfigurationList = 0043C7941580045B000DF02E /* Build configuration list for PBXProject "GooglePlusSample" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - af, - am, - ar, - be, - bg, - ca, - cs, - da, - de_AT, - de_CH, - de, - el, - en_GB, - en_IE, - en_IN, - en_SG, - en_ZA, - es_419, - es_AR, - es_BO, - es_CL, - es_CO, - es_CR, - es_DO, - es_EC, - es_GT, - es_HN, - es_MX, - es_NI, - es_PA, - es_PE, - es_PR, - es_PY, - es_SV, - es_US, - es_UY, - es_VE, - es, - et, - fa, - fi, - fil, - fr_CH, - fr, - gsw, - he, - hi, - hr, - hu, - id, - in, - it, - iw, - ja, - ko, - ln, - lt, - lv, - mo, - ms, - nb, - nl, - no, - pl, - pt_BR, - pt_PT, - pt, - ro, - ru, - sk, - sl, - sr, - sv, - sw, - th, - tl, - tr, - uk, - vi, - zh_CN, - zh_HK, - zh_TW, - zh, - zu, - ); - mainGroup = 0043C78F1580045B000DF02E; - productRefGroup = 0043C79B1580045B000DF02E /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 0043C7991580045B000DF02E /* GooglePlusSample */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 0043C7981580045B000DF02E /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - D9EE74C4158A8E0500EC1D05 /* MasterViewController.xib in Resources */, - D9EE74C6158A8E0500EC1D05 /* MomentsViewController.xib in Resources */, - D9EE74C8158A8E0500EC1D05 /* ShareViewController.xib in Resources */, - D9EE74CA158A8E0500EC1D05 /* SignInViewController.xib in Resources */, - D9EE74CD158A8E2900EC1D05 /* InfoPlist.strings in Resources */, - 0C52D6F8158BAB1F001510E6 /* button_background.png in Resources */, - D98254A915990D8D0060CA47 /* Icon.png in Resources */, - D907F676166967D400EB5273 /* Icon@2x.png in Resources */, - D945ED3A166AE4950051858C /* ListMomentsViewController.xib in Resources */, - D945ED3C166AE4950051858C /* ListPeopleViewController.xib in Resources */, - 8E47E995171CB75C003FBA75 /* GooglePlus.bundle in Resources */, - E0681E5F171F46EB0098D356 /* Default-568h@2x.png in Resources */, - D9A49D9F1720DD5E009C6DE2 /* Default@2x~iphone.png in Resources */, - D9A49DA01720DD5E009C6DE2 /* Default~iphone.png in Resources */, - D9A49DA11720DD5E009C6DE2 /* Icon-72.png in Resources */, - D9A49DA21720DD5E009C6DE2 /* Icon-144.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 0043C7961580045B000DF02E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 00F70E83158006DC0077799E /* main.m in Sources */, - D9EE74C2158A8E0500EC1D05 /* AppDelegate.m in Sources */, - D9EE74C3158A8E0500EC1D05 /* MasterViewController.m in Sources */, - D9EE74C5158A8E0500EC1D05 /* MomentsViewController.m in Sources */, - D9EE74C7158A8E0500EC1D05 /* ShareViewController.m in Sources */, - D9EE74C9158A8E0500EC1D05 /* SignInViewController.m in Sources */, - D945ED39166AE4950051858C /* ListMomentsViewController.m in Sources */, - D945ED3B166AE4950051858C /* ListPeopleViewController.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)"; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "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_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; - OTHER_LDFLAGS = "-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)"; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "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_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 5.0; - OTHER_CFLAGS = "-DNS_BLOCK_ASSERTIONS=1"; - OTHER_LDFLAGS = "-ObjC"; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 0043C7B31580045B000DF02E /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/..\"", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "GooglePlusSample-Prefix.pch"; - INFOPLIST_FILE = "GooglePlusSample-Info.plist"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - OTHER_LDFLAGS = "-ObjC"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - 0043C7B41580045B000DF02E /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)/..\"", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "GooglePlusSample-Prefix.pch"; - INFOPLIST_FILE = "GooglePlusSample-Info.plist"; - LIBRARY_SEARCH_PATHS = ( - "$(inherited)", - "\"$(SRCROOT)\"", - ); - OTHER_LDFLAGS = "-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/ListMomentsViewController.h b/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.h deleted file mode 100644 index 340cfc18..00000000 --- a/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.h +++ /dev/null @@ -1,48 +0,0 @@ -// -// ListMomentsViewController.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 GTLPlusMoment; - -@interface ListMomentsViewController : UIViewController< - UITableViewDelegate, - UITableViewDataSource> { - // A map from activities to verbs used for display. - NSDictionary *verbMap_; - // An array of |GTLPlusMoment|, as the data source. - NSMutableArray *momentsData_; - // Currently selected moment in the |momentsData_| array. - GTLPlusMoment *selectedMoment_; -} - -// The table that displays the list of moments for the user. -@property (retain, nonatomic) IBOutlet UITableView *momentsTable; -// A label to display the status of selected moment, or general status. -@property (retain, nonatomic) IBOutlet UILabel *momentStatus; -// A label to display the target of selected moment. -@property (retain, nonatomic) IBOutlet UILabel *momentTarget; -// A label to display the time of selected moment. -@property (retain, nonatomic) IBOutlet UILabel *momentTime; -// A button to remove selected moment. -@property (retain, nonatomic) IBOutlet UIButton *momentRemoval; - -// Called when the remove button is pressed. -- (IBAction)removeMoment:(id)sender; - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.m b/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.m deleted file mode 100644 index 60f6bda1..00000000 --- a/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.m +++ /dev/null @@ -1,216 +0,0 @@ -// -// ListMomentsViewController.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 "ListMomentsViewController.h" - -#import -#import - -@interface ListMomentsViewController () -- (void)clearSelectedMoment; -- (void)refreshData; -- (NSString *)textForMoment:(GTLPlusMoment *)moment; -@end - -#pragma mark - View lifecycle - -@implementation ListMomentsViewController - -@synthesize momentsTable = momentsTable_; -@synthesize momentStatus = momentStatus_; -@synthesize momentTarget = momentTarget_; -@synthesize momentTime = momentTime_; -@synthesize momentRemoval = momentsRemoval_; - -#pragma mark - Object lifecycle - -- (id)initWithNibName:(NSString *)nibNameOrNil - bundle:(NSBundle *)nibBundleOrNil { - self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; - if (self) { - verbMap_ = [[NSDictionary dictionaryWithObjectsAndKeys: - @"Added", @"http://schemas.google.com/AddActivity", - @"Bought", @"http://schemas.google.com/BuyActivity", - @"Checked in", @"http://schemas.google.com/CheckInActivity", - @"Commented on", @"http://schemas.google.com/CommentActivity", - @"Created", @"http://schemas.google.com/CreateActivity", - @"Listened to", @"http://schemas.google.com/ListenActivity", - @"Made a reservation at", @"http://schemas.google.com/ReserveActivity", - @"Reviewed", @"http://schemas.google.com/ReviewActivity", - nil] retain]; - } - return self; -} - -- (void)dealloc { - [verbMap_ release]; - [momentsData_ release]; - [selectedMoment_ release]; - [momentsTable_ release]; - [momentStatus_ release]; - [momentTarget_ release]; - [momentTime_ release]; - [super dealloc]; -} - -#pragma mark - View lifecycle - -- (void)viewDidLoad { - [super viewDidLoad]; - [self refreshData]; -} - -#pragma mark - UITableViewDelegate/UITableViewDataSource - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView - numberOfRowsInSection:(NSInteger)section { - return momentsData_.count; -} - -- (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. - GTLPlusMoment *moment = momentsData_[indexPath.row]; - cell.textLabel.text = [self textForMoment:moment]; - return cell; -} - -- (void)tableView:(UITableView *)tableView - didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - GTLPlusMoment *moment = momentsData_[indexPath.row]; - [selectedMoment_ autorelease]; - selectedMoment_ = [moment retain]; - momentStatus_.text = [NSString stringWithFormat:@"Target for \"%@\":", - [self textForMoment:moment]]; - momentTarget_.text = moment.target.url; - momentTime_.text = [NSString stringWithFormat:@"Start time: %@", - [NSDateFormatter localizedStringFromDate:moment.startDate.date - dateStyle:kCFDateFormatterMediumStyle - timeStyle:kCFDateFormatterMediumStyle]]; - momentsRemoval_.hidden = NO; -} - -- (void)tableView:(UITableView *)tableView - didDeselectRowAtIndexPath:(NSIndexPath *)indexPath { - [self clearSelectedMoment]; -} - -#pragma mark - IBActions - -- (IBAction)removeMoment:(id)sender { - if (!selectedMoment_) { - return; - } - - // Here is an example of removing a moment from Google+: - // 1. Create a |GTLQuery| object to remove the moment. - GTLQueryPlus *query = [GTLQueryPlus - queryForMomentsRemoveWithIdentifier:selectedMoment_.identifier]; - - // 2. Execute the query. - [[[GPPSignIn sharedInstance] plusService] executeQuery:query - completionHandler:^(GTLServiceTicket *ticket, - id object, - NSError *error) { - if (error) { - momentStatus_.text = - [NSString stringWithFormat:@"Error: %@", error]; - GTMLoggerError(@"Status: Error: %@", error); - } else { - [momentsData_ removeObject:selectedMoment_]; - [self clearSelectedMoment]; - [momentsTable_ reloadData]; - } - }]; -} - -#pragma mark - Helper methods - -- (void)clearSelectedMoment { - [selectedMoment_ autorelease]; - selectedMoment_ = nil; - momentStatus_.text = @""; - momentTarget_.text = @""; - momentTime_.text = @""; - momentsRemoval_.hidden = YES; -} - -- (void)refreshData { - GTMOAuth2Authentication *auth = [GPPSignIn sharedInstance].authentication; - if (!auth) { - // To authenticate, use Google+ sign-in button. - momentStatus_.text = @"Status: Not authenticated"; - return; - } - // Clear old moments data. - [momentsData_ autorelease]; - momentsData_ = nil; - [momentsTable_ reloadData]; - [self clearSelectedMoment]; - momentStatus_.text = @"Status: Loading"; - - // Here is an example of reading list of moments from Google+: - // 1. Create a |GTLQuery| object to list moments. - GTLQueryPlus *query = - [GTLQueryPlus queryForMomentsListWithUserId:@"me" - collection:kGTLPlusCollectionVault]; - - // 2. Execute the query. - [[[GPPSignIn sharedInstance] plusService] executeQuery:query - completionHandler:^(GTLServiceTicket *ticket, - id object, - NSError *error) { - if (error) { - momentStatus_.text = - [NSString stringWithFormat:@"Error: %@", error]; - GTMLoggerError(@"Status: Error: %@", error); - } else { - GTLPlusMomentsFeed *moments = (GTLPlusMomentsFeed *)object; - momentsData_ = - [[NSMutableArray arrayWithArray:moments.items] retain]; - momentStatus_.text = [NSString stringWithFormat: - @"Status: Loaded %d moment(s)", momentsData_.count]; - [momentsTable_ reloadData]; - } - }]; -} - -- (NSString *)textForMoment:(GTLPlusMoment *)moment { - NSString *verb = [verbMap_ objectForKey:moment.type]; - if (!verb) { - // Fallback for verbs we don't recognize. - verb = [moment.type lastPathComponent]; - } - return [NSString stringWithFormat:@"%@ %@", verb, moment.target.name]; -} - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.xib b/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.xib deleted file mode 100644 index 4311cda2..00000000 --- a/External/google-plus-ios-sdk/SampleCode/ListMomentsViewController.xib +++ /dev/null @@ -1,429 +0,0 @@ - - - - 1552 - 12C60 - 3084 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUIButton - IBUILabel - IBUITableView - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 292 - {{15, 240}, {285, 42}} - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - - - 1 - MCAwIDAAA - darkTextColor - - - 0 - 2 - - 1 - 17 - - - Helvetica - 17 - 16 - - NO - 285 - - - - 292 - {{15, 359}, {89, 44}} - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - 1 - Remove - - 3 - MQA - - - 1 - MC4xOTYwNzg0MzQ2IDAuMzA5ODAzOTMyOSAwLjUyMTU2ODY1NgA - - - 3 - MC41AA - - - 2 - 15 - - - Helvetica-Bold - 15 - 16 - - - - - 292 - - - - 274 - {{20, 20}, {320, 238}} - - - - _NS:9 - - YES - IBCocoaTouchFramework - YES - 1 - 0 - YES - 44 - 22 - 22 - - - {{-20, -20}, {360, 258}} - - - - _NS:10 - - 3 - MQA - - 2 - - - IBCocoaTouchFramework - - - - 292 - {{15, 284}, {285, 42}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - - - - 0 - 2 - - - NO - 285 - - - - 292 - {{15, 330}, {285, 21}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - - - - 0 - - - NO - - - {{0, 20}, {320, 460}} - - - - - 3 - MQA - - - - IBCocoaTouchFramework - - - - - - - view - - - - 3 - - - - momentRemoval - - - - 61 - - - - momentsTable - - - - 33 - - - - momentStatus - - - - 76 - - - - momentTarget - - - - 101 - - - - momentTime - - - - 107 - - - - delegate - - - - 35 - - - - dataSource - - - - 34 - - - - removeMoment: - - - 7 - - 62 - - - - - - 0 - - - - - - 1 - - - - - - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 14 - - - - - - 56 - - - - - - 66 - - - - - - - - 4 - - - - - - 93 - - - - - - 103 - - - - - - - - ListMomentsViewController - 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 - - - - - - 151 - - - - - ListMomentsViewController - UIViewController - - removeMoment: - id - - - removeMoment: - - removeMoment: - id - - - - UIButton - UILabel - UILabel - UILabel - UITableView - - - - momentRemoval - UIButton - - - momentStatus - UILabel - - - momentTarget - UILabel - - - momentTime - UILabel - - - momentsTable - UITableView - - - - IBProjectSource - ./Classes/ListMomentsViewController.h - - - - - 0 - IBCocoaTouchFramework - YES - 3 - 2083 - - diff --git a/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.h b/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.h deleted file mode 100644 index 61e8c1dd..00000000 --- a/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.h +++ /dev/null @@ -1,38 +0,0 @@ -// -// GooglePlusSamplePeopleListViewController.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 - -// A view controller for listing people that are visible to this sample app. -// The open-source GTLPlus libraries are required. -@interface ListPeopleViewController : UIViewController< - UITableViewDelegate, - UITableViewDataSource> - -// A label to display the result of the listing people action. -@property (retain, nonatomic) IBOutlet UILabel *peopleStatus; -// The table that displays a list of people that is visible to this sample app. -@property (retain, nonatomic) IBOutlet UITableView *peopleTable; - -// A list of people that is visible to this sample app. -@property (retain, nonatomic) NSArray *peopleList; -// A list of people profile images that we will prefetch that is -// visible to this sample app. -@property (retain, nonatomic) NSMutableArray *peopleImageList; - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.m b/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.m deleted file mode 100644 index 366253cc..00000000 --- a/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.m +++ /dev/null @@ -1,186 +0,0 @@ -// -// ListPeopleViewController.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 "ListPeopleViewController.h" - -#import -#import - -@interface ListPeopleViewController() -- (void)listPeople:(NSString *)collection; -- (void)reportAuthStatus; -- (void)fetchPeopleImages; -@end - -@implementation ListPeopleViewController - -@synthesize peopleTable = peopleTable_; -@synthesize peopleList = peopleList_; -@synthesize peopleStatus = peopleStatus_; -@synthesize peopleImageList = peopleImageList_; - -#pragma mark - Object lifecycle - -- (void)dealloc { - [peopleStatus_ release]; - [super dealloc]; -} - -#pragma mark - View lifecycle - -- (void)viewDidLoad { - // Report whether the user is authenticated with - // https://www.googleapis.com/auth/plus.login scope. - [self reportAuthStatus]; - // Send Google+ request to get list of people that is visible to this app. - [self listPeople:kGTLPlusCollectionVisible]; - [super viewDidLoad]; -} - -- (void)viewDidUnload { - [peopleImageList_ release]; - [peopleList_ release]; - [peopleStatus_ release]; - [super viewDidUnload]; -} - -#pragma mark - UITableViewDelegate/UITableViewDataSource - -- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; -} - -- (NSInteger)tableView:(UITableView *)tableView - numberOfRowsInSection:(NSInteger)section { - return peopleList_.count; -} - -- (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 by extracting a person's name and image from the list - // of people. - if (indexPath.row < peopleList_.count) { - GTLPlusPerson *person = peopleList_[indexPath.row]; - NSString *name = person.displayName; - cell.textLabel.text = name; - - if (indexPath.row < [peopleImageList_ count] && - ![[peopleImageList_ objectAtIndex:indexPath.row] - isEqual:[NSNull null]]) { - cell.imageView.image = - [[[UIImage alloc] - initWithData:[peopleImageList_ objectAtIndex:indexPath.row]] - autorelease]; - } else { - cell.imageView.image = nil; - } - } - - return cell; -} - -#pragma mark - Helper methods - -- (void)listPeople:(NSString *)collection { - GTMOAuth2Authentication *auth = [GPPSignIn sharedInstance].authentication; - if (!auth) { - // To authenticate, use Google+ sign-in button. - peopleStatus_.text = @"Status: Not authenticated"; - return; - } - - // 1. Create a |GTLQuery| object to list people that are visible to this - // sample app. - GTLQueryPlus *query = - [GTLQueryPlus queryForPeopleListWithUserId:@"me" - collection:collection]; - - // 2. Execute the query. - [[[GPPSignIn sharedInstance] plusService] executeQuery:query - completionHandler:^(GTLServiceTicket *ticket, - GTLPlusPeopleFeed *peopleFeed, - NSError *error) { - if (error) { - GTMLoggerError(@"Error: %@", error); - peopleStatus_.text = - [NSString stringWithFormat:@"Status: Error: %@", error]; - } else { - // Get an array of people from |GTLPlusPeopleFeed| and reload - // the table view. - peopleList_ = [peopleFeed.items retain]; - [peopleTable_ reloadData]; - - // Render the status of the Google+ request. - NSNumber *count = peopleFeed.totalItems; - if (count.intValue == 1) { - peopleStatus_.text = [NSString stringWithFormat: - @"Status: Listed 1 person"]; - } else { - peopleStatus_.text = [NSString stringWithFormat: - @"Status: Listed %@ people", count]; - } - [self fetchPeopleImages]; - } - }]; -} - -- (void)fetchPeopleImages { - NSInteger index = 0; - peopleImageList_ = - [[NSMutableArray alloc] initWithCapacity:[peopleList_ count]]; - for (GTLPlusPerson *person in peopleList_) { - NSData *imageData = nil; - NSString *imageURLString = person.image.url; - if (imageURLString) { - NSURL *imageURL = [NSURL URLWithString:imageURLString]; - imageData = [NSData dataWithContentsOfURL:imageURL]; - } - if (imageData) { - [peopleImageList_ setObject:imageData atIndexedSubscript:index]; - } else { - [peopleImageList_ setObject:[NSNull null] atIndexedSubscript:index]; - } - ++index; - } -} - -- (void)reportAuthStatus { - if (![GPPSignIn sharedInstance].authentication) { - return; - } - - if ([[GPPSignIn sharedInstance].scopes containsObject: - kGTLAuthScopePlusLogin]) { - peopleStatus_.text = @"Status: Authenticated with plus.login scope"; - } else { - // To authenticate, use Google+ sign-in button. - peopleStatus_.text = @"Status: Not authenticated with plus.login scope"; - } -} - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.xib b/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.xib deleted file mode 100644 index 4d7e098a..00000000 --- a/External/google-plus-ios-sdk/SampleCode/ListPeopleViewController.xib +++ /dev/null @@ -1,300 +0,0 @@ - - - - 1552 - 12C60 - 3084 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUILabel - IBUITableView - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 292 - {{6, 11}, {253, 21}} - - - - _NS:9 - {250, 250} - NO - YES - 7 - NO - IBCocoaTouchFramework - People visible to this sample app: - - 1 - MCAwIDAAA - darkTextColor - - - 0 - - 1 - 17 - - - Helvetica - 17 - 16 - - NO - - - - 292 - {{6, 329}, {285, 67}} - - - - _NS:9 - NO - YES - NO - IBCocoaTouchFramework - Status: - - - 0 - 2 - - - NO - 285 - - - - 292 - - - - 274 - {{20, 20}, {320, 263}} - - - - _NS:9 - - 3 - MQA - - YES - IBCocoaTouchFramework - YES - 1 - 0 - YES - 44 - 22 - 22 - - - {{-20, 40}, {360, 303}} - - - - _NS:10 - - 3 - MQA - - 2 - - - IBCocoaTouchFramework - - - {{0, 64}, {320, 416}} - - - - - 3 - MQA - - - - - NO - - IBCocoaTouchFramework - - - - - - - peopleStatus - - - - 55 - - - - view - - - - 56 - - - - peopleTable - - - - 54 - - - - delegate - - - - 32 - - - - dataSource - - - - 31 - - - - - - 0 - - - - - - 1 - - - - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 10 - - - - - 34 - - - - - - 129 - - - - - - - - 3 - - - - - - - - ListPeopleViewController - 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 - - - - - - 157 - - - - - ListPeopleViewController - UIViewController - - UILabel - UITableView - - - - peopleStatus - UILabel - - - peopleTable - UITableView - - - - IBProjectSource - ./Classes/ListPeopleViewController.h - - - - - 0 - IBCocoaTouchFramework - YES - 3 - 2083 - - diff --git a/External/google-plus-ios-sdk/SampleCode/MasterViewController.h b/External/google-plus-ios-sdk/SampleCode/MasterViewController.h deleted file mode 100644 index 073f4bad..00000000 --- a/External/google-plus-ios-sdk/SampleCode/MasterViewController.h +++ /dev/null @@ -1,23 +0,0 @@ -// -// MasterViewController.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 MasterViewController : UITableViewController - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/MasterViewController.m b/External/google-plus-ios-sdk/SampleCode/MasterViewController.m deleted file mode 100644 index 6f918072..00000000 --- a/External/google-plus-ios-sdk/SampleCode/MasterViewController.m +++ /dev/null @@ -1,135 +0,0 @@ -// -// MasterViewController.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 "MasterViewController.h" - -#import - -static const int kNumViewControllers = 5; -static NSString * const kMenuOptions[kNumViewControllers] = { - @"Sign in", @"Share", @"List people", @"Write moments", - @"List & remove moments" }; -static NSString * const kUnselectableMenuOptions[kNumViewControllers] = { - nil, nil, @"Sign in to list people", @"Sign in to write moments", - @"Sign in to list/remove moments" }; -static NSString * const kNibNames[kNumViewControllers] = { - @"SignInViewController", - @"ShareViewController", - @"ListPeopleViewController", - @"MomentsViewController", - @"ListMomentsViewController" }; - -@interface MasterViewController () -- (BOOL)isSelectable:(NSIndexPath *)indexPath; -@end - -@implementation MasterViewController - -- (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; -} - -- (void)dealloc { - [super dealloc]; -} - -#pragma mark - View lifecycle - -- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) - interfaceOrientation { - if ([[UIDevice currentDevice] userInterfaceIdiom] == - UIUserInterfaceIdiomPhone) { - return interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown; - } - return YES; -} - -- (void)viewWillAppear:(BOOL)animated { - [super viewWillAppear:animated]; - [self.tableView reloadData]; -} - -#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 { - BOOL selectable = [self isSelectable:indexPath]; - NSString * const kCellIdentifier = selectable ? @"Cell" : @"GreyCell"; - UITableViewCell *cell = - [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; - if (cell == nil) { - cell = - [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault - reuseIdentifier:kCellIdentifier] autorelease]; - if (selectable) { - cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; - } else { - cell.selectionStyle = UITableViewCellSelectionStyleNone; - cell.textLabel.textColor = [UIColor lightGrayColor]; - } - } - cell.textLabel.text = (selectable ? kMenuOptions : kUnselectableMenuOptions) - [indexPath.row]; - - return cell; -} - -- (void)tableView:(UITableView *)tableView - didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - if (![self isSelectable:indexPath]) { - return; - } - 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]; -} - -#pragma mark - Helper methods - -- (BOOL)isSelectable:(NSIndexPath *)indexPath { - if (kUnselectableMenuOptions[indexPath.row]) { - // To use Google+ moments, you need to sign in. - return [GPPSignIn sharedInstance].authentication != nil; - } - return YES; -} - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/MasterViewController.xib b/External/google-plus-ios-sdk/SampleCode/MasterViewController.xib deleted file mode 100644 index 236540a6..00000000 --- a/External/google-plus-ios-sdk/SampleCode/MasterViewController.xib +++ /dev/null @@ -1,251 +0,0 @@ - - - - 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 - - - - - - - MasterViewController - 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 - - - - - MasterViewController - UITableViewController - - IBProjectSource - ./Classes/MasterViewController.h - - - - - 0 - IBCocoaTouchFramework - YES - 3 - 933 - - diff --git a/External/google-plus-ios-sdk/SampleCode/MomentsViewController.h b/External/google-plus-ios-sdk/SampleCode/MomentsViewController.h deleted file mode 100644 index b31357d1..00000000 --- a/External/google-plus-ios-sdk/SampleCode/MomentsViewController.h +++ /dev/null @@ -1,47 +0,0 @@ -// -// MomentsViewController.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 - -// A view controller for writing different kinds of moments to Google+. -// The open-source GTLPlus libraries are required. For more details, see -// https://developers.google.com/+/features/app-activities . -@interface MomentsViewController : UIViewController< - UITableViewDelegate, - UITableViewDataSource, - UITextFieldDelegate> { - BOOL keyboardVisible_; -} - -// A label to prompt the selection of a moment. -@property (retain, nonatomic) IBOutlet UILabel *selectionLabel; -// The table that displays the different kinds of moments available. -@property (retain, nonatomic) IBOutlet UITableView *momentsTable; -// The view for the bootom controls. -@property (retain, nonatomic) IBOutlet UIView *bottomControls; -// 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/MomentsViewController.m b/External/google-plus-ios-sdk/SampleCode/MomentsViewController.m deleted file mode 100644 index 74435e9c..00000000 --- a/External/google-plus-ios-sdk/SampleCode/MomentsViewController.m +++ /dev/null @@ -1,332 +0,0 @@ -// -// MomentsViewController.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 "MomentsViewController.h" - -#import -#import -#import - -@interface MomentsViewController () -- (GTLPlusItemScope *)resultFor:(NSString *)selectedMoment; -- (void)animateKeyboard:(NSNotification *)notification - shouldShow:(BOOL)shouldShow; -- (NSString *)momentURLForIndex:(int)i; -- (void)reportAuthStatus; -@end - -@implementation MomentsViewController - -@synthesize selectionLabel = selectionLabel_; -@synthesize momentsTable = momentsTable_; -@synthesize bottomControls = bottomControls_; -@synthesize momentURL = momentURL_; -@synthesize momentStatus = momentStatus_; -@synthesize addButton = addButton_; - -// The different kinds of moments. -static const int kNumMomentTypes = 8; -static NSString * const kMomentTypes[kNumMomentTypes] = { - @"AddActivity", - @"BuyActivity", - @"CheckInActivity", - @"CommentActivity", - @"CreateActivity", - @"ListenActivity", - @"ReserveActivity", - @"ReviewActivity" }; -static NSString * const kMomentURLs[kNumMomentTypes] = { - @"thing", - @"a-book", - @"place", - @"blog-entry", - @"photo", - @"song", - @"restaurant", - @"widget" }; -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]; - [selectionLabel_ release]; - [momentsTable_ release]; - [bottomControls_ 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]; - - // Scale the table view vertically down to its contents if necessary. - [momentsTable_ reloadData]; - CGRect frame = momentsTable_.frame; - if (frame.size.height > momentsTable_.contentSize.height) { - CGFloat shift = frame.size.height - momentsTable_.contentSize.height; - frame.size.height = momentsTable_.contentSize.height; - momentsTable_.frame = frame; - - // Also update the prompt by removing the "scroll for more" part. - selectionLabel_.text = @"Select an activity"; - - // And move the bottom view up for the same shift amount. - frame = bottomControls_.frame; - frame.origin.y -= shift; - bottomControls_.frame = frame; - } -} - -- (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 { - GTMOAuth2Authentication *auth = [GPPSignIn sharedInstance].authentication; - if (!auth) { - // To authenticate, use Google+ sign-in button. - momentStatus_.text = @"Status: Not authenticated"; - return; - } - - // Here is an example of writing a moment to Google+: - // 1. Create a |GTLPlusMoment| object with required fields. For reference, see - // https://developers.google.com/+/features/app-activities . - int selectedRow = [[momentsTable_ indexPathForSelectedRow] row]; - NSString *selectedMoment = kMomentTypes[selectedRow]; - - GTLPlusMoment *moment = [[[GTLPlusMoment alloc] init] autorelease]; - moment.type = [NSString stringWithFormat:@"http://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; - } - - // 2. Create a |GTLQuery| object to write a moment. - GTLQueryPlus *query = - [GTLQueryPlus queryForMomentsInsertWithObject:moment - userId:@"me" - collection:kGTLPlusCollectionVault]; - - // 3. Execute the query. - [[[GPPSignIn sharedInstance] 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+ (%@)", - 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://schemas.google.com/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 = rating; - 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 { - if ([GPPSignIn sharedInstance].authentication) { - momentStatus_.text = @"Status: Authenticated"; - } else { - // To authenticate, use Google+ sign-in button. - momentStatus_.text = @"Status: Not authenticated"; - } -} - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/MomentsViewController.xib b/External/google-plus-ios-sdk/SampleCode/MomentsViewController.xib deleted file mode 100644 index 66323a9a..00000000 --- a/External/google-plus-ios-sdk/SampleCode/MomentsViewController.xib +++ /dev/null @@ -1,479 +0,0 @@ - - - - 1552 - 12C60 - 3084 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUIButton - IBUILabel - IBUITableView - IBUITextField - IBUIView - - - 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 - darkTextColor - - - 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 - - - - selectionLabel - - - - 32 - - - - bottomControls - - - - 34 - - - - dataSource - - - - 18 - - - - delegate - - - - 19 - - - - delegate - - - - 31 - - - - momentButton: - - - 7 - - 20 - - - - - - 0 - - - - - - 1 - - - - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 7 - - - - - - 26 - - - - - 27 - - - - - - - - - - - 13 - - - - - 12 - - - - - 16 - - - - - 22 - - - - - - - MomentsViewController - 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 - - - - - - 34 - - - - - MomentsViewController - UIViewController - - momentButton: - id - - - momentButton: - - momentButton: - id - - - - UIButton - UIView - UILabel - UITextField - UITableView - UILabel - - - - addButton - UIButton - - - bottomView - UIView - - - momentStatus - UILabel - - - momentURL - UITextField - - - momentsTable - UITableView - - - selectionLabel - UILabel - - - - IBProjectSource - ./Classes/MomentsViewController.h - - - - - 0 - IBCocoaTouchFramework - YES - 3 - - button_background.png - {1, 1} - - 2083 - - diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Default-568h@2x.png b/External/google-plus-ios-sdk/SampleCode/Resources/Default-568h@2x.png deleted file mode 100644 index 0891b7aabfcf3422423b109c8beed2bab838c607..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18594 zcmeI4X;f257Jx&9fS`ixvS;&$x8J@slQFSel)6zJN=?13FB7H(lQjRkSy8x_-S~tvu2gzn1oS+dLcF#eqtq$ z%tf9TTvX?`)R@}3uBI;jzS-=ZR-Td&MHaS&;!0?Ni*#$#`n*~CcQK)Q9vAQ~TUpnI!j)a2biYK^R)M~A5wUDZhx?ULMX z3x1P&qt=trOY6P2U67L=m=U?F|5#Uj(eCueNTZaHs_ceWiHeET+j+tp3Jt9g(ekqP z2WOvfR{qV+9r+o4J5?qK>7;;^+I7tGv-i)es$X_D=EoKF+S?zsyj^oRFElP}c}JT< zd8SUs-?O?}2YD#ngKbnHgzHBcboxK_2r9l(?eNCl-pEzkJm}fY?WC*jnS?VBE4EpY zO$fEejz6fU;W2Kl>JeQBZBl-%Irg`obSlg*@4QB;Dd1H7^Oi5wvt4d{RZ!8Og?^aE z)k0$1g+V3fd(gdQ3d&q2q-FL*uy#}|bc^=VhFsl0jBgUGJ+-s3U8MK9A!YJJMxpci z5hJ%|{DwV48fZn0{n5l$N_KcSb#NKE4plB`9I6Zt=Z!~-zw0{9tg$L&Ju1F0X)Cy8 zKF;(&lJ>x)Jw(=;p~sF(Sd9VWGwFE2rnyS9!f^DZ8+aCLq zQ};>lcJ1GDLqjm6Hd>|Eabno@P`~Bn(~6^aD_#yoEH(a?Nm1S<;S+hSxI5d16^<1lEM3NPFi zkqPrpL)+ zgnseFikg`gJVBha1&7C4;O6>h=dt~`ND+;Zd?W(4v2JIb7Pt>Td42%M-Ju-XAH#Pns762L}K3 zDhvsRqN0Ni(1UrishD2YvV?4*h2iFj$+&N||Fn$4n|^NSU+o?~jq`0jVQt8T9l{7b zXiwwODFh2V!Q6sqP9S>WH$oOf$N~=d0-bqTlD61!=`&0eAP-F>XN?*|gtOXX{ zQVTWyYo4ZK0GAw!GHf|pz9`D;-bbb*5LBX*{bnz|+)$@&P9|ORM2o?95{;ejvo&r- zq8cBhTN6nn)7~W>54U)%-F_-b?YKdfk5I8MHcuzBD5)!;yv#Z&R&^y=@=>VTIMy#r zX&U<=BsPkdqcMe<_}2+>H%XKyrr5ZR8_KVe>ZqYN z^=^~TFD};;rHJ$U;{~w^hYojl4hRI@SH$^K{YEo=sg)WY87r!*7blQK&qnpDo0`Vn zkl)9u9g=mCh&ZCJS(L4yN3k0kQ zuvg$h2KEEk51T+O0JQ+r0`R>g{jvqM0Mr6d3qUOZwE!?PI7HY@CE|dr sfw?Q;rAv?G4&^^8-z_>&sWXMxvD*gPOU4CBe-*@OtE+wfmVJNyHv)PfH~;_u diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Default@2x~iphone.png b/External/google-plus-ios-sdk/SampleCode/Resources/Default@2x~iphone.png deleted file mode 100644 index 2b30ecdc147cfb6ba41c76289d78ffe37e99a2a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16075 zcmeGjX;hO}_Dcw1aRFo%RASgvhJ*x!l7s|@C?K-PA~1p&G-!k*5CQ~4B($~)IAthm zs|cPV2+FWnR8TT?ZL{g9qHljiOo*9xP2l9Gdb?h` zLE_+nE~5gA%@mbyo3{;X7b;gGNtNxP*fLtMf?i#Ezc0(+E;=-=wD3C`r>P&C8d-*$ zQ^RCLPmBb8P_s*emwWJ>N4?g#jC@*eJY#4Vf2`;|lLQ7B-r+#XUhw}{gPF(v= z!0j1y3JxyR>OuA>@>?SER=G_bi^lOc=-p_UG#UP(&ghF5(MQ&m=I9E?_K9z{9~w%_ zuk&W~(fS_j7F@p&d@*w0+mqe(rGL5b6mFDy_oj?SWs0ee@?;4cslq}FX^R-Aiy*06r<-IyQO*X!)AZFy&!P#Ajrh(>3-Vnvp2 z=ie@Ow~la;dU5TPN&@yRazj^8n^(x~E7eXzRH~7?jz!4xYrBa#o>};_HC4N8NGABY zlVAT_Ps5=-TGxel$JwR6dVKQCPr6kW*?V(|kBcMj|Ko-~#k&JGZ5UEIVrg(hGpEG1 zJ!3@K^#S3*T18b3lc2rrnPAJLsL~_aM~C3<`P;OEV9V*fjU8k9pBhqUzqwfAYCd7) z(Tua+KdOmR(mWb%+e*$03!{vzB|Sk_h#N=mg@tjaBSnAhPGLT_DPh&#ekg7)zF{%V z^nw!)9#2011K}Vm5UEXfy?f!)STKCP_>B{M!NCqWZcY-&i=e@2PA5r@+WG3=Ot}g+b4|jVgfI{IiJiUWF?z9Cyk|e)I1)r zf|q4giVuiQORg$R&ZcWx5(s_FKkYH8vl_@GMDE);p~}r@ZU{Po>|LAfQV{ct%@b|E zj^gXZTUFwpl;eY*JDt*Qu-0yRv&AO1yy{`f72|tfp}!s4(KB^#XH55M=KKBBQ*#fA z!~2fz&({=;s!!h6@BC)mJ^rm#c8b#E-Kv4XE6%TxY2JjA-l>i6TnDQe|tuSoP5iHKm&JJsd z$Kvr85)6x|I2M=2vtUIT%`;ixL#0O@;xHn(3^ofT{HY8koh37fjkP5S`)_BKDJYwFWQVgk-VwAzbg4;Jf>vV7LV_2)nwFZtsF%9$IUQ1tGZADj~>L2?QVSER+W*F5!}R&@4*h*+mHPo zN4Yd;f?kV!>!p z?bPv}Qc>1RBIQ74tYTliXwx!ALn?tV@u$izbEx;yM^PLlb4kXKYP?;6pb|b_EZP+F z@#cD&UlOk^1CI)V28fFwE`qoyc{v8} zsNgkx;b;L)8sIPmj>PgL066u7#0JRS$WmD#Jq0pwAjt?)#j>O`h>IXDg189cq7YQ3 zK=BRK7eSSHzGw~Vi=e&;>WiShD0wjgO(~%726Rt>1~I8K1ocJG<_9_%=Y0W)iy$t7 zxCr7Rh>LIpXnzMC{@@aWtnmum(*U<^mR%@HG>67MP#WYtc`$fDVuj?gQ|3pLitI-V zJ-dim&GL(5-P*#jCVo`U3sL+cwp(JsWYJrG!rZiYrqXF}hSyV?kU*JRykUhv!^@7O zmJJ4V$MO~X3+=WR|kK6E8 QdVSPor#rRi&j-K!1Gi8ae*gdg diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Default~iphone.png b/External/google-plus-ios-sdk/SampleCode/Resources/Default~iphone.png deleted file mode 100644 index 84e942ecafdf92371a306da669f3647b1b8c98b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6365 zcmeAS@N?(olHy`uVBq!ia0y~yU~~ZD2OMlbkt;o0To@QwR5G2N13aCb6#|O#(=u~X z85k@CTSM>X-wqM6>&y>YB4)1;;ojbLbbV-W^iFB1wa3^zCog^LCAReC4K0-?R_2{6 zrP*)4+_uWUy3w5N52M3PW_}MFMP9a~>YLvVZ1D_k*IMQ2QT^fwzoOb(*3gH$%aYWC zkHmcab=va2<#X%jakpJ;<1@F;k__#bwtC&%^D0v(FBh9K&$sK+<}2RJS609D)17$w ztdQP8(eLM8Ka}m_IQ@3wyMKP)l=oM4-?`YS_*P?4V_ORLPxsj&7Ju#kH;>6^Kp?T7~ zl+q?{UOOqV==?+d{=)5s|M~T1mwtH@+Z^$G&eEO9JNP^AX@3jZ*J*!!>lc|1-W%fA z@AOQpXZ_Lt>rxFXrGp*zLPiW@uo_c7C{As>j zWeX)wi+LTp_)@KYZCX{j;H?|1yXT4DnlS(Fr8gyP5|uaX_gLvaW0ScZdnG7o+u{T6 zFI-%d{ls*WuCDa5UJ@|RXv&ejZe}*BMkiWY51&pnRPw(hlykSzvj6e%mYz-GdvzBD zF10?szF_~!jS=?2HyQuPCvARXAe}C}WP|yQ*>5~~=*Nxq8+HHW1~FMDRCP^TcacKuk$ z(U#REVv)D!PhJ*ecH-ELFUrfyV&*)Z)>UCOuS?yd^L@Afk>ihynYPc{^CRwu+JHX+#$@YsC4c|l0tGigsn@jy) zXD($Ouk>H+V(Mr6NQT0S9BFM~V6nkj;1OBOz#ygy!i=6lDj$G_h-PL;L`j6Nk5zJh zu3lnFep0GlMQ#C5H3Nf9g%yyQn_7~nP?4LHS8P>bs{~eI1!RMS^_3LBN=mYAl_Got z6rA&mQWZ?~4E2nZ?6?#Z6l{u8(yW49+@RWlJX@uVl9B=|ef{$Ca=mh6z5JqdeM3u2 zOML?)eIp}XpbFjM%Dj@q3f;V7Wr!g#b6ir3lZ!G7N;32F6hP)CCgqow*eWT3EP?~5 zJ97)*7UdN~eFgNNennz|zM-ChKHOxWMjN0Xt$g!SGSezu5=&C;j0_BobPddPjm$#~ zO|1;ftqja;^wHEH>;&s}E=o--$uA1Y&(E<7$gD`s$pvv0jPwljOd)!aRX{b{=!1NL zfrJ(?>)LSv6ELh8u;c3Cu8U`25YX~;aSW+oe0%Mn zr%RxS%fUe90`0sb3wTaO9O)6c=y65;omFeF{5=Q#-Fha)r8{Hhov*ff|IkLBk%@(i zY5wvjr?393w0{3_&+E@MEF1zF95wSN$=5Ug2+mlo3{(L54D{>+orCa67<|=C@XZkx4s&A>2jHK|wiz!FYMt6oy7o zg9dFSVTB2T1`RWVwY?e+a7i2(b;f9DjHZpzoHAN&jFzIKb;@WBJKEkDZGDZlMMqoa zqaB3N?$T)I@j*Vr{qw)inE-o8j75b6Mw<&;$VcTSoc- diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Icon-144.png b/External/google-plus-ios-sdk/SampleCode/Resources/Icon-144.png deleted file mode 100644 index e59653809d893c4d8c72d865e7324f8d34d45feb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22317 zcmV(;K-<5GP)4Tx05}naRo`#hR1`jmZ&IWdKOk5~hl<6oRa0BJ8yc;~21%2p?MfD<>DVeH z9(p*dx19w`~g7O0}n_%Aq@s%d)fBDv`JHkDym6Hd+5XuAtvnwRpGmK zVkc9?T=n|PIo~X-eVh__(Z?q}P9Z-Dj?gOW6|D%o20XmjW-qs4UjrD(li^iv8@eK9k+ZFm zVRFymFOPAzG5-%Pn|1W;U4vNroTa&AxDScmEA~{ri9gr1^c?U@uwSpaNnw8l_>cP1 zd;)kMQS_;jeRSUEM_*s96y65j1$)tOrwdK{YIQMt92l|D^(E_=$Rjw{b!QT@q!)ni zR`|5oW9X5n$Wv+HVc@|^eX5yXnsHX8PF3UX~a6)MwxDE0HaPjyrlI!;jX{6Kvuh*8ej?;85ekN$?5uuCiS zBTvvVG+XTxAO{m@bvM#Jr)z6J><&E22D|vq?Y?Vkbo_DijopiF$2PET#mZ8eu=y$(ArYkv7@Ex`GL?QCc!_*KFrd&;n1r7 zqW-CFs9&fT)ZaU5gc&=gBz-DaCw(vdOp0__x+47~U6sC(E(JNe@4cTT*n6*E zVH4eoU1-&7pEV~_PRe`a7v+@vy!^5}8?Y3)UmlaER00009a7bBm000XU000XU0RWnu7ytl307*naRCodH zy$O({$8{$5s=BK0bME_|!6|?O2ofX#UH}h?qzLg8C0PnPEPK~l+uGd_DTl0x-3Z&e z5sq+d#I6)x?ImkPQXx4c5fCYo0!0!6DIVel5C?G#F*BHZx_hRN>F(;TDu3V0{Qk=N z=dV8I_6D>2ugrY;-piLS-=CR(X8!q?E?l_qLa9_5YBrnQX4b^DCI>nLy_L)5Ql(OH zpJ80ihv79b{0Z_^)j*@s@H&NW4D(uATJo^!?lLk&m6vLupROP<1_lGTs<>8VK+3qQ ztIKrJU}#9Z;C^B>)WS{RVtuHdP<2hKR;xz8UauRCiN5M|l_Il#7s0zy0U-^i8wSut zCM!7#B%`4(!&!;$C+Rmv12Q1xp2pc@unyTe(THS7!tLaf2WV(SwF-Wga5Z2&D;f}u zg_+WVnek8D|Nk|>`lO@rEG{m3i$sH3g(K2Zpk4(w4W_53#|>x|=#H|Q7Hze>eu8)T z8c186PFz^Oyx65JEG)P|b;3>I%Nh_3fUQnxtRFho z0}Vn3q!uUNKrqg_m+NFig$5)GEHWMmqXAcHG!jsm{+H+T!DHno)oWgE7{RI?jE640 zfmvtjHP`^?!HD&q;xQ~E%Ga~z0P37D@bR1M1E=xX!yv3`paie3Qlu zXsybuqwy38i$1s1Rk0GsQkB-@e`+UEJz)%E%G9sC!1=iF^YH5uhjOXlGAH9|3#bH2 zo|furN&(&_v=C+Lvb@R%6UYbMH(($Tj?GY^K&(r)NUGDk5vfPga3y8ZWH|FQ90jq8eg>Hsf_{b_XF@i!ID)RIYOK}vATs2`LqF-n{L9;GQ zsT*CL7X}5Okxfm(NT#hmchQ=(d?=U(vp9avYG+Q{60Z8$GghA*x5kC@)|{TQ=FA0a zOkc3(#q+pR=Af4fjBCmDqdIG{=b(<*db1K4j}A9xsBFMpjVw39nV7_50x!}s4Ibmp zKf+254Dd9c3^(>1>_JLs&F3KQ6wn(#|6V)vnx6&`Ed=>q16M|cF3ir@g=ciyMUuz`E-^|6c_&@!^gh}clbrA8$CV7iRR4TuqS zT_U8fZmX^3fyUX4Qd7E*8*IMk7i@82!sdSTtX+KSdsch?S!?9Y1Le zY8#H_Ee*r)y8DCip~dQA*Vet!)A>{Bk85iPQ&E^I50#CKvx-JasPk4kmlfV=6`(Hroa77n||WUws80`T9ki!L8l3~3rdLe;24e-ClKOPf|SB=xVK{kIt9`J57f~JoF*_K zTxmpilL14elBXMDK+42XG-lyU2y;b(zKj<2{PeUPSvP7uAN`o!{(%qK-t9Zh7Use@ zA|t%|0m^_%a>k|JZd8G81b|#wNDsn>vT?kWJc_SYA{i0uo`%bOJ#R3OohZ)5R0pQx z9un5kAJ)+Y)j57axNBh0@36($S)2O$6X=VdvBeW7t#+D;7noFUW(&T{J5%IVKRciEt-x;!k8(?2UZdwLD`N7K6Is4QwAJn z65&w}!YCdGtrd=SCdTd5(zMOI;}P5Xp^w?_dtYlC*JEt4fUz8OMqL&TYfAy%%|Iwd1zv`CtRvLl=H}7dRs}Q(^4wp|=b<7nl)VVf>){LzHc+y77c(N*C zM2szGR>7lv80}ZAiMt$T2Hv4EQ=u6ql&Kz~g~ec|BnL!zNWJtI$=(uNk_Vv9(`yedXhYnc}(wETkEFvw?UYgxCf#lSq5(l#hIp$C< zTMQZyFZMum@?}KSW<`A*6KOykY?g7`(ULD7J7N=m^_b26BET>9^xF*X(0O!yi-QAJXJ3qp;haes1MY5gg@brv8@xDcJ?JW7 zPO;@e-qH%PP>?NG=%NH+kz{V|Fegg1$QGW_fJFmloIkh-5JFWlFtv0xQyN#~jU_F>0VWvwkmU&db%&Aj${G}JH_UzNv z`@*xf`RrL+U+u9zv}(%ajU+pxg~`ultuybE0wpT_*&V1ZDXi)e}F7v5@9 z=P%gg@e?-ngYVkmzx!M3|K^u%W36d}TX$LmkBq+WEzy80ONExg=qCxRTakDY3O$ZI zr(n=EjM18BPT*#MkHYw0Lf>qnWkJ_nx#cZ3`tZAK--B;PSvFcXuzmhRd0%Ir#q%O2 z<;?1$C@tbq7guWQG9DJ0EfV8&w4DkJq0|NAnV+1nvw!=9O?>XN*7(X7t$FUGb*&KX z1pdOletxtE&oB)Wkf=5hh{|9z=pad0bC9}MS0)3BdfG>~z$Iwu0NB@DDLq6Inkp+~IzmbcpuOs4I-^)?&s#WDuED5lpj zz{IxwU_78tiy;MY9;1rEb01o&jqCQ?#@%~uaOX}tym7rv?%i))-}#meVE|vnIEpP` zn-NJUG9z;_jlnjvK=!<7HLTxtVa(>M*F}Uk35;!xmrTWrhQX*n@$PC_42WDE z8N$^mOj_SubHEl1JT{}!nvHo(+sFBYn3oHPN}W3SqD_795gUEv=k36~_gO!h&qZ`+ zw8Bo6cDdqGz$Gk7vL)Jm5Nl}ff5cuw{Oq6osck?DRl%4E(|2Icdy*Gj)DohUCoN=1 zr|m&jJTO$itN!)J?Hq1^>ZZ-M?*2De7q+4Jz8N9kgnlTk%G(mK4WbB}ofy8F_LJ9Z zxdh`0W~!W9f_VtzpeE*dCdang!22GtU2lAojp50NgG(~I+QyUR4kK8Av9OifdE0Ha z>m$El7x0vJ5f$B>n}^xMQRM7`oRBA9z`!rUnN9*cA@=P!Xp4`1-p)Vq6`OtK$5!ga zR7Ho@EAY5Ee%opZmXVKNZz;>I!Dg^i8m=mZ!(TS-3!Hp=@a?wiJ}e$?+GO(_Gh7d4 zqm^60#tzBOja}GHY`y5;ztd)Z?_b&( zOdBjBA8v@dF6FwCTE>idYBVg7N~N+nd)7}I;7T&>OdE&s5rG*dnc~42V;nqnp(`1A z_}w;{p@OWE7IuO!j6&UjEa zi_nFZw6ajPi+}yscKXpj^H#_=$6e3ztx{POKNwEpFef z&VBk1ebX3c;C;dMMi#b1-bFP)m{)8rF_e;wTA>bXFB{x$Kwv`yqw-5wDCM5p^42Z3 z?!Y0xYa7@=l-<6Uo#o{da(u(B6oYv59=rbmo5X;6kpp}#x2RbGd#X#$m5Yc>MsWHp zE4PT0xo(H1cnNPiOh5IM)y_{^7oW;*Qs;K!KRE$qC-hM`l|6@bRii!z3QuAoL#}>v zb%>j#8tXP$Wy@A9kZ$lyZ-&V>cA@>K+ztEoSoH%RwW&%smRImt4+G-14GtP9e;o=8 zgZ(fIT}Qd3P)|dQxPIXw0lV9*iu+^obDyz`CyrxcmEBlTEx9Ug+z*Wdjcw6j{N?+Xo6owD^PBK+soCc5`2m$14lfbxyR*i_$o)KeN2S6{@V^Wc#6U{7=x?$CCD zE-UM+LPXiPpj)kW+tyodv$L;zy)EJCiSL?~M#5TIDj7ix#BH|jNLN0YfB1-%ojHOZ5VX7UXGMW5I;ar zT*?q`3iy0812nALFj;!Zs3qmJY?zvC;wiO^@i6Dix-eD@TXrBoDikZJiM!g+@>KBX z9QK?M2^S@~!H%s11s@t1u=V%7-sYZt&K6(#f%U?G*j0I9;D<8lm!_1+?qL29h6`gL zzIM%*W)_YfwK*73_rCq;3(+C6+{-zn*Dl}%N#7bGo+&{JOT#G+!^%f;w&D%cLk-(* z8Z$G2D9S!f zXP&ZI%({=>a_h3i^DYi|;SzRozWSej-)i6fJ1nsvAHJPJeLA)HQ)mKW{1Q2ZM;ywE zcm{&$qr&_|6ilG@-Lg0C9>@>^ZWhJOg1YO%1H$5qFWRYp{@dZ9Am5rY8|KyN2J!TW zLl1b|_&f+>?m>&YxP${4JWnF>iUN4yxfuqQ#@BS(2N!_faEBHWcLHl^Wan;sbqB^l z+i-_rU$zbQx0LDSg7Q)Dteh@;C@l5HQ1}UCU1OW^R_!x*q2N`2qtjdCjtUL~RaWdQ zTCLJIp0J+54cODow>QNY0fs#z_zKH_95Kif(o)30BaGcp9iXYgV8hOd9A9T0TUq9T z47p#u7shQbyy&Segv!!Za3>(qrE+FK<_BHUI52l+Xjs_2w>rd(M+h|e1}*zf^mQsy z(cSI*Z@`Z$70T$vO8~w5_gVclZ?J_)ycMg8$z(!#Pym*Jy7SUWiNXm*Mj9s;VSq=T z_xJc~-d#{>nFd7B^1+L;U|RwP_ZP872eqNsD03(fV33i2UQkH~SQjojz#Hv5`;ZT54IW0gHT-e!tS%9a{Yn@J=Q zA0SRbHyD`DWijcqSdJk8fpElS7lHb(<0XT+(bBPO`I!8HBJv&K&t= zI7nvp&I4iMDXk@BKyo+{JRxw3tO6vV&GO68TYLe^^2qSS7rw)kzzj%0$AEImfDT7% z#ug?v!^Cw5Bs`8Z8+h(qI#ZRDu!O0_{X7UjhBW`fQP4i-z{E8y9$&WO|LvBp)NR%bU z31yH@`e8nTK`8$NjAJX{AWDSjny|8Rr5A(38n$$BG@Vfj<>v7rIQLJp73$ry&tF)? zG_orsEt3lzz)^OTiDhmpcZlOfIh-Da_ujE_&MPU?W+W~0$Q${3o^4~91X=kdc^1kL z#Ap$UPLQl%Xek6+&KJG=355so!+(Z#CA=Ng z7@-%l4hH3fk^^WWf*;11m|74lWWqZr3W{UvnppW>;#r2EbUf$om^arCy4eaAKdX3) zbg_zKM<6du05XQLODJPfQUtkx>7cyjKkdpbj90?Q2K^aKM zo6sHNU=m~^fH~oh`avu_#ycYLh#SLPduifzpCzmbaT`Y{oKhpwP2#bl`S{&6HinZx z_=*k{1mS2ut}OVnmMF8|hp7@-cHp@F5axXpT7pQhk_Q>OrYEqdkHaZKlTMRxg?d%+ zhf$A&Fj?kAASgKI&yesDAV2QqZs2k{GE+M69Ubu)^zw937CxD>dkrWpIfUqJNazwf z&kPqd0WGBSxIC_b@m!>?Y#xXhe&Huz`)R99oT^&Ge8>`7qHfMeBLlZy338M897wYT z>KPuf#^z1dJc;+-*?OR$?r0TKpEQ%zB$8s8SvC*y?m{WEDl=^}3rQ=B|JO;7WQqB~t^7GXF&HiEgP&80yc0vFoYP#-RZ*Nqp| zvqg7`a-4wioS!`5+jBTQk;w#}!3YD)=_Ct4E+=ImjJUY)ZiAEe4dQ_Xr?AxVlpb54 zC^2tV4c*<*A z0~<9)!K0?!i?!_9WD;%?&^Ec^j5Qy|gQg1#3>s2bFi|&xz1jhBOK|Zt zQaKC$#BL#K+ZnnDOrrxohG;JV9%z}w&Hi&ZrFH(w+5XdT#< z&h6M{<^SftvtAtYTf%U}%jZb#KQ00@C9B9TyRL35W%Ob#j8i<&u+ZRBiQaC* z$D?t%tH)<#XO8^XhBj~ZRahR|>jJjte?wzxIl3?dT%iF~p2r}#hGh*FDJh>6bl%|4cf|L+38%GUcO<(np70h~#o9m&|CuQ5Y%+C* za?tdGa~|GO;#NQlJ2igRCSll%|MCB^<~q!J%kUggqa{W#4#T*RM-&cXp?S;CzQ_8p zW?1JQa=_a7OBRv^Qj)uC!$TV7r_uD`#_Hw}2d%shqP<{9BmpnV#q)eBy`#2-qk3ns zI^B5f>v3msv%^j5PzY|vsBYPW)6n<;5Z_&8fmkY6HhsyDu&2d%R36_lXfDoK1KS@e zqxc%Aw;Cy;=-d4rZ-!nXXOFV!z>q!5c=RUMn8121qV}% zjNpwL?~+o2wF}GEp2kzbO~ado1Di}74xuCi^~Oz76&$ZJ_rml38Z%%2ZQapp&-|KE zP+7P$*y2=2*5ME-tQ2zwy{+D3g!+wwT&l{D$l+5HN6J)3*C7zLjW~_pX~m^j@u1CO zvQG`ttya)Ll{*0#GnNUKv4FGQVxYSxG9%6P`Q3;+VHT=bMcVzykerZGq_qM;W3UqE=xS6 z21nNPq4_5t6j&G?{cC+=d5eOPEN9uhj#yW?va&!jit0s*K&25L=t+5HPJHBtu|9Lc z)f)E2Fq%I$=_Q;8J^S(te)I|-?_JU>ljG`B(_k?6=;|N9ZaF^YQkyJC2Pf@j$w3JX z+@(vK`*8frdh5p}MP+C=IzVHHGRRLw5{z{zv-f_*Ei1*m@-Ux1xh=#6@{D8dn*Z>v z0C=LPVsJS3{L{EI@%}glaW|!l2GfOZHyjxZ6(&aH<%|ZEmYFDiMLjIyNvFB*PV2_& zOnp3&AFYq`xfu#A!6Azqhh&ewnj=TUk56c3aua&>9rhGOMUyuyDr6IGPY(mui|7)@ zL7WfD=2ou0ELY5tcUrlEMm0Qs1;fbeEi^Rot_f|fqd*VbTCs2z2dCe5hYjq;YeShn zu2{6I!hmw>@_@>caS!#zv@p%3`pgindH^jDGWA=KxzdJE4N(q0fq1uo5%uaI`GX?S6!4VWyo^ipVJH+v&3?ES;9{%1L85}<#kj~V}Fk00I-?;#mR%*TjV}P#f!TR|@2#c}|@_{fb?{M^$Ez9rgJU zrQbBZ&u`%EQY^o8VI0GqIo<_dqVgayZa8vS^VkEu@YXk2@3w8$k9XpD`1;M{ zQqkLuq$MSB)S-mBZKYj{5cgHLIgbM9Lc|odNqv}!ZhrBrHiN13Iljclb)uWeh#*TH z??5f!gD@3LJ@5lc*yOm@WUQ31$Qa(NtE#96P zQv?tdV4Rum*|o)L_^!niKKZoi?GL-{guO3;z{eGlh8d@EvC0c9Jo&`SheezB#fu;G zUBr2cY#E!cVl}+Pm2|9DtI6>)#e&hJi)F-_qPB?XiJ6g&Hu&BT+WM{Au+m-evyt*@ za5C`B%a<=F(^DML3D4yMka2}moFZDz0Jq^nZcevo#N#w%0vHX6aLP{=u#TACM$d%k zQn+CB^YRi#IdqYZcIyA088PHq{2f9e`0cO~z8f}+?}eRy@(CBxk3oq~J*gl?nTs`j z;^y%M6K#sGuy7Qo&v)AEIOx1~^oUh)D7k;tINp7JOL|$5ACdhhXqkBYG~^6EgK&P| z9^3ab@3BFY(LVqj6`aaQ^1NG(tmKi$Q(WaK!eL&@-~Cu8(Tk!mmOzrA)5lbSl^@e2 z1H+x1@>ja(1rMilC^hk;x&uVHp5u6}G`5MmbnZq`D=q~Gi+e5bPzyV(*T<*AE z&y%N!dDsxG5*g?JfkR`BW6Ha zD}`#}yA}P`-(0fV=O49+Z~mPv;EwmVIZ3~aVr99hfC@{Pd|Wh2r=QP*2E2&D^Ykl6 zY~~A(S`U^oU_l891dnp1;<0FTeA{(={Z6aD?d`VrZSSxucTHg+tqRgzmN07zrt%fx zrsXM0C$qFX!VxTuQ(nsDGteZ=Ii|Z)al=evdcO!`O@5&)i6Z?ejLUPO#gQNLkR~(f zPyiBRxnQJk*v9|E@7WZ-mui^u=VP-9TqI#$5aQ}8!e0)S(Lt8V(1=Yw^Fy2b>Q~Hu z_+xCT=*$cmIs-*|P^<8 zQ`w0xUMYQ=p5m;QKMU;j$3n(}mg0I8rA#GNUXp`(q-B&`@|8}%$b}XtOGzaFFbd)L(m?f$JaKd=Ef`FtfS^VcPr zUN2N+&JD>6ORL;w(@sr{5MyT&K=uxJf{H5hPjD`~(w;WXi*t&JWHB z&kZJvQJ5^!LQ#kRq4&^XeiEak5_jYOieHK845I*-QQLGs}vY-5uPgw~qP%pl5<}>6`UWpEJcN`V* zJ^Bk+5Ize-ANhrk*)4B>$i}cWbO}Zk(E@UZU*+E+*}=qF2`^1o*~BwV6ATJy1rbu& z9H=VEFcd&Si%h^aKc81#79tZTkC!s3aDGP;DM*4gW>JvzNsAzUprv>BEmp!4(A1y* zxgABTwC%$mvwpm%j=_ZQnN{X({Gwo~AZa+o6}{5^i4O)kjYsxlfAAk{{)>;>&=QX0 z!>RKezpyFy@qh^2hcdAvZ(?E5PTg|5^*sCzyXR-#YeQV)!{RW@qB7_6%g0mM$eQsy zj%OKviqgbGK5-ZpFTu&8Mc=X%jncT*=T##Ei?Z;g2nV4VidC121uoL zMeh>GIGiHTc`*HPgF>1oqcV65)gV4bH~Xc>?O3yHvv?C=%l&V(p7k5BMzw%PX6z;6 z_6R5yQe;J!VB}5VBrxOrzC735D%hXQQ@IxKlH-Zbf6m7L>a$jV94(J6;f)A(XOJS{ zN#_1i0Q@D4$&S8!%ud{YpY8jvf6WfP@d13A6Yn%(rJdVDmA{OF`O*>2D>VelCj5Za z`pwfbMYIZ&wunbsZsD{zhY+hiy@KK+7At{??jsL^8TKof5`nID_?^l?GU;D(D9$v& z6sGU*#ycR9i21gh=NzIgU@Ij^$~Y3xeN`}v+lQ|(&;7gKxAD^_adPT8>)X5625A0LUs&VIpTnyq zW7dr)KYt69gkUAdQ_9NdvSug8ZG7EEoB9X8hIyWc@OjSrZ450~9iMPWD_lw{Qmm9F z9Qn$Nex5GHVOZ&%;3#BizJL$J zJ!bZ%du;5(zigv#e3K1q-@y;n!)!5gO<{Ef&i>1B7KP)X4vY9Q^gK4PO=6m0;!pmw zHNN++e71K%Ip5LMVhUu40heyK|rQY{j?XkDRb`|LmXG*<0?mL40##?7sVL z5c4kl%p}J&{LBC}5%@RoX>IH%tk2*BzONp!34D5B3XkZ`AAa8ks)N>d>wZ6dl#C{lH%#h z5QLk?RXK!-zw#Bnc%}IYCS1Oz#4l_&(Sn|Q!)xsfx^)@~3J}YU#)-&~hkSUt2yfIK zd-tO?#{dH@IqSyL;0M&CP94(zL)_F+ewBxChD)FNo&ROrzW(IU`X7F$x^8rfk2Uz2 zYq6FgWld$|=we4foEh>GZbWgsmkNFUU1`(kJf_2?`~3!GOxx z5LU;|!X{p;u3%inZO*L?Vw8-TwQ`|sJWR5I9fgxPS?usouWiA1RuAH=_sj;T~ ziOYEEM9=XdTbhQ?zaSvApbS@hXp_)80EfEa0bChi55IgD*dC!xOXCkA+EAAp2d)hhq6}%2;v>#&}jJ1Sz<~ zaBfdmm8W1L79T4;%yepmtZ{J@KbjjhDU3L+8<;B*y^JguTs|!yPjNeCCOK1D!8oGfdC~ZR zx`KW@U;Ge<-I~)O+`y5l)Sat0(E-!NFAYncG+)8!lSXucSC+6BW;@=(9L60xfbXFm z#%ZS~F|#{`1P*fO8aAfOxk^%P^AjIF9$s?O2j{&wK5j_x_xXV4n}a>Qh5=TcnH>MuqUMQp-Tj zsgm+x##8zfpYVKIkhEo3q)&M=eK|VO%V!s&j)*d=6;n9PU-_i`B|qr|SNWAk%0n>v z%8Oy);A1N|0tAzQtcbm6{&%89dI^Kh7oPa4{phQIV?#fB-Zo%dG73BHL&b1F#uxWm zE;9?V1>;}@gtlx$Ef^;%A&6rV8?N0Z2yw?o3bvX!A_@?R;4Pu+dbPY{J@}&Zt?ziJ zjX=Id&O62aUP`2bmvd606ifxB3R{T}`4dOHPWg<9Jbi2m_+(JQOcQ%weK!{LEQ9`NEIv+|%E;nWw(z z-xeJ@a>~{XS8TX{9r{9yQ7||wb0Ca)Ab-^Nx`iTH*9_y5;K&(6n_yaXSO@PU#=-=q z69SStF$pjl9?gK5OetX?dHT$&w(#p8x4n4U+I`@FpXI?#34$7N@h- zcoO@$ckp@g!q6bbMfh6J7-o`Z@4UmtG5tS&>{UDe(u;QFxo4~k6MNk!U$LH-Cw;R$ zH{5ety9;jvm-)g5YMNskJej*|;J|_<=!-^EI=Bl<5IxrK-Jy&`m77o?nhH{ooaJ$v!_01TMf@)Q^f>6TNF(xj+P_`+j)>N>$woHU%`=POwVD<6aqueUE9;)G~r-8@H8Xlc%I9HjE-^Q2vxMTr(R-_*l#}*2664r+`D;VYM5B}b| zPaU^@oP<$A3#JE(AaLGbT3w-1IC@%w@yy^Ut@75l+6HvJeRwih#G`*F<5^BIA>Z)Z zsUlLGD-Ek6R^n46b0=CEkL1tOrs|dt;!_O%sxX30 zcv{KYaV#Qb zkab#M##2{>C;T*RC7LvyVet?==(Jt=OcPvq^t~Lh6)j39PAAz?`jl2Yi|CXlnTv2b z<>`ZHB^DEg0WiA;?;c!ue5nrI&oC-$1V&ZD30TeYcBc5hn?h<2XxA#;z5ZVP*=L@% zX{?d;&P?Nzn(KV|gUz1n3%-+KzA4BO4GBOllW=axTOstr{BBhfkLnxt?}u^X9Wb_f z1xi<$q#TtsjT0u9;tNMG;m}Xh(r}uV;&%#*HlLn{QwG77lZSkiE`0G;T|G{R>%#Zwx6xqQ0d^z&sQZpu5w&4-Ih)n(dCI0S79U+83?9u%G4KQq0B`LvTG-f8MXj~<%tw2hFhx5 zB`SeE8Kw-%Xa!3!$R!vfpI-IQ=5JG+i`#UZTwmC{Lug7${C(F#2*uuuM1f`8HhZBM}E9o z%3z3BL_-K+jGfBZ>r%x>;m-g4H!&NH<6O{{$)$2RK8TCt%i{^R6Cc5aC!UI@=?Y5+ zDX!A;bdraDQH7;E6i)q=uXrVBg&{xj^wTr& zs9pCRauEevKF^A)=if>R0ZIXD=r@=5EwpDTrXK^5KosE<|qr=wyB3@Je zKmRv7{OLc!^dhi0`^`L7aGnSA!L^(d-f}oaX+?C)!IqOF)oYp;;YDeJr91^o>6M;O z6TA~H@p-jrIc4GqtfEA@BFZx*PD-1mGt4xu@>j7Dz6%@O8`xXa#7cT%5^W@f)fs`_ zQZbB+e7TM`uw}aq&dk}=XaCZk`}e`YHz3zGo?+ z5p9v*sZ5uvqoO?qyP8s+Q}!M zusLiy;kb+GsTrna&Uohp=~UKEaFQ>VmScZOw3EI&$(NSl5@tETN^&W0`kiovL)OIc zwXhVJ%QIt?XPT!;GgMjzgFxI0$*momcJH>H*W7JW$BtOf$>Y|y9xL*k*l`!Cmn{}D z&WV!5WpoioDa?;!qSDZSZMyw{&3^5x_UfxgvA_E%+xv^ZY6JMnAMO&LxlU=AQChxB z?{Ny^xpW+BtzGzaM zG%UO#U$jhHEsgl(X%!bA`NHqyr+8_&6TaYGzxkWL`3XdN&_dwUH*Pq+a#v)*&J~r! z#)B=vBtB#}edf4zW8mA1Z+ubctO^;RF~BE2gABMIz=ULR!5v5_>6nggi)Z*%vDvNh z(z7;=6Ir>}y8;91gAD9e!_#1(?DU(KC%scU;a@L!Dp#jGg`;%pS+KPjN=nZsYFupW zYuO;02$#c9j8nf8AHun)I)weuJMO*D$`8NWj-8ppd+>Na9}HBmlvh3s7Va{0YPX&Y zooN0(8CtwvY?Zqd09y>xy2;~)P7tf>dhzPCUtRU*?@!jT|tc%p;PSBU!20?haH z+VPnS)`QCI!J{}|Pj)9SXB?_$M+-l+I%VfR?yu1NBv8`v19TnlcV0clr5UxZf#BY(kF;ezG!UTd8E_>MkXAh_C^ z3@Ben33-VStW;GjmBS`4`urL+Pn6*6v3=|CnJn$>8ca*Ixm1X@zn4Aqp7pl(2aWuTc0wmNc9ODyWV(Ie5qup5Of( zpmq2L*#N$dT;?l2q1uB8$uEPMq4-{EPi*_iOw4U7#6;x9Ap?}dTSOTA5R96iusVrl zm8A<)w(X4%ST|lhq7m@~GvcLA`YBTCYAPk=wU%%`U*#o#C0?Q@UXkoY^sB|gSB+X{ z`H{#giCqp`6*T!&xVI#zY<@PHistJ(JlS+%ddh0p)U|N>47REsx5d*ZtUi9$48~OA zzGuARQ$l5w@G+C-%o%G;q5$m&Wq5w;_in>6cKyD(?r&ePparFJ7zFe+*qH7x{ zKwgIx(0kM9EfM$wkEhHIqU)Uf)F0YOoT13_ZF&9ctsifTgyUi$Ebwk-w^}2*+GU`v z&~{3vPoEygN92caU{ke*7Na%gAG(7ES`cmmTbj9O7jbOe^ou{T>1Tf6-;%E%J#5V% zzX}7v0yreB;P4IJ!ChGM;-n$Bvf?)OwJJa4C>o^S5o|@ga#%s!B!&*gX8~E%P-*$9 zlVN0V1oZX>smPBky|qcq2vASfkL-C-9eq0K)g!C; zA$~Wu55s1H0Zr8#DOv7c^=eVH^z@Lpvv(lzhX^36&*Qh z6Zl+G4JUDQz4DUv%uiaScb!#wFxiHuD?WbnNsEu!WCBxw3pK#Tq>M)|8cY*Q6LoZZ zIJp6@$=7Ut5wG4X&DbIcme8X$dhix&4_w zLUVrBs^=$c^z?CCH?|S-;J_>3WG8gF96=OUup5M|g6t?GTm;ELgAp-7=_~}sMR;|4 z@TI5i;$vldg-IX$unptj^a>4_oA*)v)Gb#b`3hSOS3L7LjOY0Xmwp~UD{qPv!^BPT zg{wUB{EE`4NAcl|bm`HLeQ12(QVrw*2UawjOI-y)-^_pBiwpP%5k|AzF*KJkdV9 z;1Nz7xwLhnQBf&nlxhClNxOhA5)J(KzizwV`+ghVy4BBM5sz<{>_*917=o2%qpGet8(<>?Je?!qV4tW%AMg*Vb*{WqqUDZEghWgmthx z!P#Ekq%#v`K(#UKO9W`{xeU61-G#F-h6}^JHjPbPb2J!i;;O9MV7)k_un${U`BXE2 zNy9-HQ6CJb7X$4cv_3r;j8!oYgDx~|E|ZVELrYQe6J$>wKW6?o3xU z`63vfAA1W-R~qjw$j5MM6a+FQg(;jV6a{l?;$mk2Uz_gPu+_#c&fC%7`fV8fpzV6c zyKHFF793oTc`I6Xfpa+k7hm}WsF#42!!1fHf{|$vTyiN>#)X&ng;T_fxWX4+>5p&O zGrntZV5r(GRcCRkM%kZ{-Bg6*cN`yU`HihPEJ&WiBm6lS+8n>+ymheyU8JLFr33fn27=r@W@KL&R^;z5Uzy3?xhvV}&jnDZn zFlZx6E2S-AjghtRQ5l&%UHP1I~+$2x1=|DcWB`+D1R=#Xu~H`Yf+@zoygcgABo73>3S(E9R)#EI6+ zit+JNRspnXAr<&Bu@_^cTkp8T)+4{??zqcd`r|*ciLX3q`*v(Xmy1>pM&@Tn=Xm*d zvoaW4HrNbhVOEeamX?uVOff&l1GF2h>hLo-SnG3-*)eQZJNUl$-pC{ zXpOt>wrz)QwT)EXKRP&9aU5)^tR6_SXR1=qqe&AW}RRg8@9wFq$jFLM-t&sdx| zoSmJva|6RR@wx}C@>6%)rh^ApX{fDI9R1!jR9^cI3T) zN9hV=+p-Ct=*A)9Bj`d8@7-g^@wv-6EXZy`YuOzK*zK)cltyA@7DTur@I5G`K*N0b z8O{E=0h>ZThr25__)k7z{TS<&8_*Vv`=)XbKO5s^WxIM3QXgy}_^`n+pPPL!T!Hd9 zPGO!?wI%!U(3s8K_j=p;_J{1wH$GrnFc{{R3$76@VQFFx#Cg}raG256aOBS?FMf5f zAFa_{_ugxp_aC%xVbK0E6nF9Y=WRd6C*=~pERA?8R~iLksT_{b!f46Y4kHOS+OeB7 zY|uaZZT~I6R$j+hC_N@ z+I-mc$oi4r8tdulu3~S{3=TdxHZx;Kw{Nq-U;Guj=K~+I*W7cjjp2!hCxCISh=i$% zDVT)IXLu#?BAzLXg<(tCj{)6QbSXW%_u7g2qMiA{H>?*=+T1$Zg#ot9O8cRc;6-u4 zyk86GA-_n3$5S3FQ$>R_gF9{b_MftT+*I6UK)h78G#ogs{Ws4u<**k1Yr#$PC<@E? ze5wQcfp7%kV%N`a9Q*j@O0{Qt{7lz#c%+_w=g-({e*J&4JMX_AT?IB=p{at&c~dR@ z7csw4Fpk~$9fi45~uVWTcAgsl!QIR;~tEsc_R z7gO<4m@0vO7v{ds9DdpQUVFdwLq9yxR;Qzh?SDx=%dGNCA3lLtD&c#_jfJicjtzgJ zF@Cz|?5_P?HB6Y@fhqj`c-k4m0Ga!VdC;Z^r5G_({Bry&C@yxyW6gKTIA+6V~gZq?P%@Bf#0WnO&aYv*;yV`?_w$=aFvx zsk<;x#p$f*uGmc!IWa6syHPNH^POY3F-$3}!w2qa7#E%G8?xD{8SA?+>2pyX<)-nt z#Uy4E0HHVptNBG&R>9|k&YwDJ)!Xj0^>`}f9w#~~xMLnj&!^?%$-d0=qE;h=~sL1e&5e^9l%o-KPy?s(!_GiiWn~^ zunaN9DS}Br;xRpqub3xjh|h0i^kMw74c%Gq?mc!CH^S)`U$PN=aJL8DF;7O5Eu=iN zaEC;&b~@S>MvON7^o!PY-+eZ^f4|RtEhlfr8-b#7r|D^!<5hM9>65Oe*Mf625RlL$xl7V<>p2AO!3gKq? z{ttf8HelSqts3kGSam{HW;cs3x$?@$%g0J)S$K}(=FMB|%^&%wZU0BVVaHzg06x?3 zGImSCz+gPQh4P)W^S*>(3&3#{FB(t@Gt%=gBJNah$BYxVlAH-@TTta}172a|N_dJk zZ%`DevH>%zHO#B9>1XkMhhCxxDxs5O8kw)fT@H=-r+F>MM`=7|p9eZ@!J8lDH^14p zn4HCWU-vg3x6Rw}DM)l_d_rRhSjw!V3@lSDCRIl(wusk}E}lM3rTOyBa+8XZ38X8! zw46d-3%zLaei7e1PCiZ=U6g??T*srDZ}OPnMRtm;CJG; z9FJ5k-WY6+HsiC8cVqVY8RUNg*3tX&i#Cj|jC-AYTL^T+rz~!1lksGB6!aEEiAwD1 zAGM38PWsV$-0s3WGyEvDWc0KvEO%O_PCB_(aJD=w3x_s&=WnK_!l|%CB$1SmCuCfV zi_$v5(q^y|&PwpL%0>J+jPJH#{qCNJ9=0tX`xSd0FBHyU5|Hyc+)hH*G9DTO{-Uwu z+9&V!cq(iipB10O7GH0@kp~D0MQ8q3quhneuOTqiv+RN}I>mkUB9(y%8pNs4B1-X! z!la`UbA}0PRRkfII?-L4a`hlA!vbd72mAZ&_SfBK{qKFR9T{0?(|AXp-;Hj$U<6c? zww`2765AN+2WkGs$^za_!BR#Y(;nB_b-GzoU8gb-PQ6OE`FM(36jq%pU-A)5_>5-; zL6G(V|L$1f6a*~P0m#t_dunjud z0`)4F84!UoA~KNjX@P2qMAXSw#!OdOK4EFbjLW4sf?bK9=97lW(JVT>Fnx7c}_m3UH?PWsEI<>UFh7#EJ}o%!=p z9(j2(10n(wIdB#eWuRs(4_A8L?}V3!=i_-kmm621JJIu9wSiVw3vQjyOceQ-g2YuGL@>iU;k(ag2fYj2kC1P_W zCiMAargSn~tCMhRrMnz_$xT|xobsV89Qdxs2C?-A4_WQCZ^LK9@ir}x+7uKlB_;K+ z%*x*;;ht_iofPPW{L}?p!YBeLW06h?E0VtxpDTeYfBLF>%FX;4FESqHhsju}qm?}$ z*GNoeyoe*lWX3R^{1#;^v>L^=uv?+arE75rp?sx?FMT?%7_>y|u-q|yRVpB%j#49_UL^z3i{g1$0o$tvQXSG~-Ku^mBg2$k zx+}^wYk`QQf{__5E^kC+piGpJ1jsWdTxluqJYGJY(&f_>UkksKCLgZjw2-k)n{DHr zciQ~UO}@Nw>HB6hINU%YW;=y{?nP=2j#@X)qxSg`qUBtXoYIL<^W{zBst@6=)nAET zd9iol#X6-UoziFnMe{$BrR{_=0ZA;v)QH41H6mIlFQ(;P5iE~W6u(@$B3^QUmVTMJS)W=Q38oC`6UNMxMji~y7p`EQ za0Ne?!%sA6wv7^Ak^_K;T@CEnYjr%0HF3<0zuClQ24)nDMUUU+K8OewUXPlS9xtr7B*ZwEm1X4mMU)t9|spyJ$I7AN&p@A){4NMBs zATS&XE+=?sn+yk-qZ`9SWEK04>Ud|3(*xmgzQv!#mrjEWolBhJvV{w#s){9D5NIVn z$|2<^8JNcUO6yE@L}MqMhQl{c>C>gO4v0U5^YRvm0WnIE(lCvqhnvWe3Ez89?=I5v zVp`s_gkZC3I6 zc8#Ap$IVr=m@2&%=C3@WpXxDBNBxt>YWRpPam7b4`hqcCb*B2I;V3<&$%n<82E=3T z3ZKSOA~NMgLS`n5r2vHSl9K?U5uCo#QrPtf7v{^dpiI0fJU{|Xc2|>|@p)2Olr@%1 zrSrA{r^+sDFzds2KZdX`n(xAqhku1AR~Y4+>L-WN79~FQo2OG;ej8B|N%Ik|V0oYE zG#KVbU&bT6gl$`pbhy|BRcJgIJ2q=D1P%wJr#1pb#F!b%h%`UMG^NvLCUk;{hu}#o zt)%PkLry+*vFqW-d)YnJ`6VGPQ&1JL3@$6BLuCOkNcgq%k&wr68vH>?= z*6UxOVtrGtR5r@Wi*?B12@S`Km&5BMKX|cn7r|qZXC&g_Ipb;|KRUXs0U^E3F>_vY zY>6;N!Z%eyUmBan5)JHTbyR8{-SQlaXZq|}?}mCf#)H6aKoXpWM0>&y4d^WPSeLOE zx@UM4XGG4~Jl_qw4vv*hml{KwEz|R9u~os_>%m|c$Gh!lEW;RfIesbcT$qB?kk|D8 Y2UCV0CyW}kAOHXW07*qoM6N<$g7=f36#xJL diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Icon-72.png b/External/google-plus-ios-sdk/SampleCode/Resources/Icon-72.png deleted file mode 100644 index 6a73473305ef84ed905f801922ed11e75d6c3608..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8666 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 diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Icon.png b/External/google-plus-ios-sdk/SampleCode/Resources/Icon.png deleted file mode 100644 index 8b72f13fae1fe72d382316093acb93c61de46eee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4179 zcmV-Z5UlTsP)2KprF&Dup6%186|8EC@g7rOn3kKch32qbH3;NepfV`&8LAW`aX{12-kImloBbW;Q#2y7-NkwD5b2{+77s7 z-UViW@y;(&N-C8KQcC_md~ze;x-P~T;yA__Q@+J>fwcJMdHBBHGf0}Iq-lz^_J3Uf zA;ie{3L)@356|-ofveRjNs^GJg;=TEIrDwLxEUadqOL}yL^uvO4njI0a`gT@K%AtQ zG#PlQM?fKvwOSumElCuTBuOD)M;0LjNs^800=TYQ2&lCtjuUVkWVMRb2GeSy8cXOC z$IuJ&=%od0+y8~wWL@S~&q;d6)oO$g{#hpWibX?-aMdm;A=lDq*D;a z#&NoKv0z14EbMYbTbub1?TCe-2JhI(1+Tw_KuUCyj6`$?wz58k^gXPQ;CWE3Vy!KX z&b?t6Qm@yMQsOucuH!fYpuO)Ij(p;eNgw?_QfnLmq3hDzd=}>X3vp&PW0M%Y_i2JX zPcq(I#0{z#DM46736(-*!YT_UZey*@6rdE1b1r24Z|~&vOD=$*rOg)5{adf+||fBK`S#u9F|hKfRtZ#|#!xBMnsFS(rh!~~9%SRhGKmJaUc z$o*d?c;G9HI|Adn*dDhOki<04y$Ju+Z$hLAR%?XgaOUMNW^&^UI&87lcx}snbHxq& zl!U~c|HOw7-+mC%6j>ibHJdD4`wGsy{e4WWpTe};*d#9CP!WPtp0||^?|C14cU;24 z$L?k_X=6P<*LOAz;rUEHy_@>nQ8wK2R*bP=EjEc!QFxM}*!HHE5qD~>ySX%a@Egc_ z9U~oxLY6Lm5og_TH&f$ds8$Q3bx$a_)}oRa8MQd)##c~%?>#hxgD|>R)j}YoVChpI z<;2&&ij@K#g_zRIPa<i z61Q3iArNE{$XW~1!3`=b{pH7re!2(gSDsT!wLM}k7k4Nt>V!iZ$LI@Rz{GhMprWux z6T=Q;EjA3<@`hifeZdYy9F=o-HUZbeS)6C#3!lT}e!ZHp2OXk6TQU0nu8{eIN-JtF zz8bGmSrdgbS~E62PW?4+Ce*fwgceamKvAm`fBRdso_rkHM;kL(J0N9oh|+oayTxK{ z_J+gQTCD5h)@oqQ+I__ss$=6+uDFKu$B*Gw zf@Q#xo=^MHAE3erDFj%Htk#(Q#{IPJ{VYzk*7Z8kVMtv@VN!*w6}Dp`-^V$)k7Mt; zwG?`6PmqeIrbx8H?IJTb{Ye%ZHi;R#;-$=f>F@A#nz53C4uNo8^nty^$B$CmbV|lm zg+MJX!2V~TKDM0d_5=^QD9EF?R0^KmJ1|070fdX#R8v$T!dk3K>A-i*#cPr<_Pnhu zoOLcd`9tu7?u12F$q=?kj~|82r($hhzBw6J?iFAdA09x93;6fmBLoQ7N1!uHS_Gsi zrq$|k*fm+wTHHzn=kzntkL^PGA`1^CDrA*Hhb@pLVrvXCRmfE3si)77qHDPhU(Uv~ z2m?~9Wr2*`NJ1%u(zu<7g-S^d9mpVivQ@eeIA?4_SrEM>tcVsi%cKQ*(rTSU6VteP zEocX%c#A+7&HAW;Co<&;3lV~ab?cF(;<{Yah2xW?%H%>~kwOsfegbRE$!BY=@lHLB z*md!&?c=jqa1*sU)?^bhQN;RdZos?jilP!4$a6f8@bDp$KfDc3C7B`87_;p>PQB;j zxOT9MO-xMW^<)kY>G{OFpCF!}!>`q_Cy`2w*0>W>Sl{o|Ry|d`u8-kPZ_Io@pID_* zDJuG*2=P1`ahs#1@vOCYp3BDR>7hc_YqdZht1(Ru`92E6^Q@nve_<67j`uSJ>!@nV?d6JvpCP(eV@m8-r5MXF<2pq zAAbaCO$Mzzm$h3BJ;Ao;;}kwMUfZ>!1TFI>)+*S#4Lw^!B68C*q{;3>)-f>ppZ(?Zwr zt(5rIF!!+!5+2xxtk+i-R7$8+n7jA0I7bhG;~@};sKxP3r?chv?qYm=e8qx!R2o^< z{}8O$`|Yu0PS$fsfb}c5N1o;AUB657>7OFkO@MTkb;ST=C4eB{$X|a7^{ubtNE=I>IOjsP?7W99XPtv;wR-5*FhPb2 zip6M695!*1IIBe3F=-T)xV9ZSrn`9hHiCoyjbja3I^Bs_i>TJ{n~Q{>{4mXb{0FL+ zU5UHpG=%44qZaMmKPGwPdw5Y3uUbb6h?-62uX;IW-u?$nZ`hD^8J^>cg4G&--30nA zzr|vlAf&)3Mg5d5NISSWS%$tic=+(#!N32TsrEPSW3nCMRRXN*V#|C`2yB{WJyap` zo{-IYI+Y-+-Vr3NCJWcy%z5vc;v|`~ zt~>SAL*HfLn_q(`en@cqFo9OMQg)eHURX;%$kS9Gm5w83FSvwlANmCADn2S-RqCuv zt+Yb*TvxdUUF!(xsx-y5mTfy;fO^5D%pE<#>{CBx>1RKI*<%pqJ<@ue^w<$LKKUq~ z?_+yfgqEg|O#jNQtQ#9cg{^_XWsolpil}9!h(5mBf8M#?f35snQ8cT#jSzyF4I9{W z?e&=JZ$uk|F(#{ft2Oq2a3|ui6jSQcSS(U0%=9TtoP8d;-Cp*x{)u+J_glGN;IaV2 zu8m4XMRYCNefb5g6y)m@0&oD~I3&l8V0Zrr>3iM92)dD08ja|ycn3{n*yMTw#To<} zg$kQ5>B-g5Du6T!v0(^8_N4-m(ZSV6PZhr#3yy)AxDvgl~~QFoGZ(47z7iW(>`x}9qHuy z0?PDs3T{?UURz4LdN-}NwZY%FUEm)xP>Kg;i34U7jVYS6g-(N>P4Rt3(D!4Im) ztFEP;CV8&P?-!-Dk4lwb_82Gbx}C#cychfmqOX~}8tbeSP}UN3thK#9IY?VsSp&A+ zX7kOjqH)&w5Jjabw5%M9tprqsCH#wzu>YeUAPGa9AjnFwA@J=42$SD4%3oLO!#xCj z@C^dtI7r_|232IW20_5o<}FO#b_erg>kvle)mgvw!AJ*xY#hG%HTK{6Zko>?D5{xZ zlNmbMNv50LnFs%kMijdVBHi^3JLQ&@S zwkQsq@pXu&9_P@`+nE0S53v4{%hAn7(cmhluhl}hp9J(PsXSH@3mQo>C#5qr`_nyy zd!9t?{Tb1JJ&AsHAEL2{Ok!MXvqe^|GZ*wL#hQe0+>Gnyi#wv9iVFd8MC4bQy!}pQ zuD=P>YA%~_InRw^JcAg{uz*vq*E3po?7@E_-t`cR5B~@5;yex(UrHpPjiGI!>3Agd zb(rx9WUY>DeQA)f&3Lz0~2jm4I3rv+$>PVUvVSH@&hDbXeG5DXp!h zyU_7-@tvzKn%fxoQ*Eu0K+L7A%z4|Xty_ohx(I7P>n!@^J<<+zr0WqG!|tzq9{a_= zWn&T{f+}X2#`Ex>#Iz>XbLyXchOy0CFnKvPNT5NM8&%bazVfgmr1SPOHr=6=t{%Sl z#cX=d``P~L*E4h4Y50zV&(v<1bPGjuq>p3txkNC+`R2?T-8P-kcwt;1ju(G^OYZT^BX64z2 zP0oMq8;P&DHrr~}w+qn3ZFHK9?Boqo?5KbvrR?2y)_KSnLz<=tA#h!Hq%RDcOuxpB zG57+eU-br>UVyZwv|etpo{x0Bk==kn{x&S=bhfo7Nz(I-EKYJ0$8lT;yVh33AcdGX zX8PRo5nIo~s5HMOu-YJ}HsF@_td6qSAO&|6+Yu<+bsZP3SM+#{Fc z)N=hFuTr75X*14&XRayrA1T}om8(iN1*Ne%Y@@N d1OG4Ne*lkzx#gW0Z@T~h002ovPDHLkV1ir-DsKP) diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/Icon@2x.png b/External/google-plus-ios-sdk/SampleCode/Resources/Icon@2x.png deleted file mode 100644 index 4c308280f9d312e06952a57bba3d2a822d95d3f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10599 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 BKcoNv diff --git a/External/google-plus-ios-sdk/SampleCode/Resources/button_background.png b/External/google-plus-ios-sdk/SampleCode/Resources/button_background.png deleted file mode 100644 index b63e8719af8085b37fc3621ce82cbdd1bfd0ad92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6039 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 RgL41?002ovPDHLkV1nvStYH8E diff --git a/External/google-plus-ios-sdk/SampleCode/ShareViewController.h b/External/google-plus-ios-sdk/SampleCode/ShareViewController.h deleted file mode 100644 index c3428dde..00000000 --- a/External/google-plus-ios-sdk/SampleCode/ShareViewController.h +++ /dev/null @@ -1,87 +0,0 @@ -// -// ShareViewController.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 - -// 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 ShareViewController : UIViewController< - UITextFieldDelegate, - UIActionSheetDelegate, - UIPickerViewDataSource, - UIPickerViewDelegate, - MFMailComposeViewControllerDelegate> { - // Whether the keyboard is visible or not. - BOOL keyboardVisible_; - // The text field being edited. - UITextField *activeField_; -} - -@property (retain, nonatomic) NSArray *callToActions; -@property (copy, nonatomic) NSString *selectedCallToAction; -@property (retain, nonatomic) UIPickerView *callToActionPickerView; -// 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; -// A switch to toggle Google+ share with content deep linking. -@property (retain, nonatomic) IBOutlet UISwitch *addContentDeepLinkSwitch; -// The content deep-link ID to be attached with the Google+ share to qualify as -// a deep-link share. -@property (retain, nonatomic) IBOutlet UITextField *contentDeepLinkID; -// The share's title. -@property (retain, nonatomic) IBOutlet UITextField *contentDeepLinkTitle; -// The share's description. -@property (retain, nonatomic) IBOutlet UITextField *contentDeepLinkDescription; -// The share's thumbnail URL. -@property (retain, nonatomic) IBOutlet UITextField *contentDeepLinkThumbnailURL; -// The share view. -@property (retain, nonatomic) IBOutlet UIScrollView *shareScrollView; -@property (retain, nonatomic) IBOutlet UIView *shareView; -// Labels for Google+ share sample. -@property (retain, nonatomic) IBOutlet UILabel *addContentDeepLinkLabel; -@property (retain, nonatomic) IBOutlet UILabel *urlToShareLabel; -@property (retain, nonatomic) IBOutlet UILabel *prefillTextLabel; -@property (retain, nonatomic) IBOutlet UILabel *contentDeepLinkIDLabel; -@property (retain, nonatomic) IBOutlet UILabel *contentDeepLinkTitleLabel; -@property (retain, nonatomic) IBOutlet UILabel *contentDeepLinkDescriptionLabel; -@property (retain, nonatomic) IBOutlet UILabel *contentDeepLinkThumbnailURLLabel; -@property (retain, nonatomic) IBOutlet UIButton *shareButton; -@property (retain, nonatomic) IBOutlet UISwitch *urlForContentDeepLinkMetadataSwitch; -@property (retain, nonatomic) IBOutlet UILabel *urlForContentDeepLinkMetadataLabel; -// The switch for adding call-to-action button. -@property (retain, nonatomic) IBOutlet UISwitch *addCallToActionButtonSwitch; -@property (retain, nonatomic) IBOutlet UILabel *addCallToActionButtonLabel; - -// Called when the switch for content deep link is toggled. -- (IBAction)contentDeepLinkSwitchToggle:(id)sender; -// Called when the switch for metadata from URL preview is toggled. -- (IBAction)urlForContentDeepLinkMetadataSwitchToggle:(id)sender; -// 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/ShareViewController.m b/External/google-plus-ios-sdk/SampleCode/ShareViewController.m deleted file mode 100644 index 9a262414..00000000 --- a/External/google-plus-ios-sdk/SampleCode/ShareViewController.m +++ /dev/null @@ -1,702 +0,0 @@ -// -// ShareViewController.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 "ShareViewController.h" - -#import -#import -#import - -@interface ShareViewController() -- (void)animateKeyboard:(NSNotification *)notification - shouldShow:(BOOL)shouldShow; -- (void)layout; -- (void)placeView:(UIView *)view x:(CGFloat)x y:(CGFloat)y; -- (void)populateTextFields; -@end - -@implementation ShareViewController - -@synthesize callToActions = callToActions_; -@synthesize selectedCallToAction = selectedCallToAction_; -@synthesize callToActionPickerView = callToActionPickerView_; -@synthesize addContentDeepLinkSwitch = addContentDeepLinkSwitch_; -@synthesize contentDeepLinkDescription = contentDeepLinkDescription_; -@synthesize contentDeepLinkID = contentDeepLinkID_; -@synthesize contentDeepLinkTitle = contentDeepLinkTitle_; -@synthesize contentDeepLinkThumbnailURL = contentDeepLinkThumbnailURL_; -@synthesize sharePrefillText = sharePrefillText_; -@synthesize shareURL = shareURL_; -@synthesize shareStatus = shareStatus_; -@synthesize shareToolbar = shareToolbar_; -@synthesize shareScrollView = shareScrollView_; -@synthesize shareView = shareView_; -@synthesize addContentDeepLinkLabel = addContentDeepLinkLabel_; -@synthesize urlToShareLabel = urlToShareLabel_; -@synthesize prefillTextLabel = prefillTextLabel_; -@synthesize contentDeepLinkIDLabel = contentDeepLinkIDLabel_; -@synthesize contentDeepLinkTitleLabel = contentDeepLinkTitleLabel_; -@synthesize contentDeepLinkDescriptionLabel = - contentDeepLinkDescriptionLabel_; -@synthesize contentDeepLinkThumbnailURLLabel = - contentDeepLinkThumbnailURLLabel_; -@synthesize shareButton = shareButton_; -@synthesize urlForContentDeepLinkMetadataSwitch = - urlForContentDeepLinkMetadataSwitch_; -@synthesize urlForContentDeepLinkMetadataLabel = - urlForContentDeepLinkMetadataLabel_; -@synthesize addCallToActionButtonSwitch = addCallToActionButtonSwitch_; -@synthesize addCallToActionButtonLabel = addCallToActionButtonLabel_; - -- (void)dealloc { - [callToActions_ release]; - [selectedCallToAction_ release]; - [callToActionPickerView_ release]; - [addContentDeepLinkSwitch_ release]; - [contentDeepLinkID_ release]; - [contentDeepLinkTitle_ release]; - [contentDeepLinkDescription_ release]; - [contentDeepLinkThumbnailURL_ release]; - [sharePrefillText_ release]; - [shareURL_ release]; - [shareStatus_ release]; - [shareToolbar_ release]; - [shareScrollView_ release]; - [shareView_ release]; - [addContentDeepLinkLabel_ release]; - [urlToShareLabel_ release]; - [prefillTextLabel_ release]; - [contentDeepLinkIDLabel_ release]; - [contentDeepLinkTitleLabel_ release]; - [contentDeepLinkDescriptionLabel_ release]; - [contentDeepLinkThumbnailURLLabel_ release]; - [shareButton_ release]; - [urlForContentDeepLinkMetadataSwitch_ release]; - [urlForContentDeepLinkMetadataLabel_ release]; - [addCallToActionButtonSwitch_ release]; - [addCallToActionButtonLabel_ release]; - [super dealloc]; -} - -#pragma mark - View lifecycle - -- (void)viewDidLoad { - // Set up Google+ share dialog. - [GPPShare sharedInstance].delegate = self; - - [addCallToActionButtonSwitch_ setOn:NO]; - [addContentDeepLinkSwitch_ setOn:NO]; - if (![GPPSignIn sharedInstance].authentication || - ![[GPPSignIn sharedInstance].scopes containsObject: - kGTLAuthScopePlusLogin]) { - addCallToActionButtonLabel_.text = @"Sign in for call-to-action"; - addCallToActionButtonSwitch_.enabled = NO; - } - addCallToActionButtonLabel_.adjustsFontSizeToFitWidth = YES; - - self.callToActions = [NSArray arrayWithObjects: - @"ACCEPT", - @"ACCEPT_GIFT", - @"ADD", - @"ANSWER", - @"ADD_TO_CALENDAR", - @"APPLY", - @"ASK", - @"ATTACK", - @"BEAT", - @"BID", - @"BOOK", - @"BOOKMARK", - @"BROWSE", - @"BUY", - @"CAPTURE", - @"CHALLENGE", - @"CHANGE", - @"CHECKIN", - @"CLICK_HERE", - @"CLICK_ME", - @"COLLECT", - @"COMMENT", - @"COMPARE", - @"COMPLAIN", - @"CONFIRM", - @"CONNECT", - @"CONTRIBUTE", - @"COOK", - @"CREATE", - @"DEFEND", - @"DINE", - @"DISCOVER", - @"DISCUSS", - @"DONATE", - @"DOWNLOAD", - @"EARN", - @"EAT", - @"EXPLAIN", - @"FOLLOW", - @"GET", - @"GIFT", - @"GIVE", - @"GO", - @"HELP", - @"IDENTIFY", - @"INSTALL_APP", - @"INTRODUCE", - @"INVITE", - @"JOIN", - @"JOIN_ME", - @"LEARN", - @"LEARN_MORE", - @"LISTEN", - @"LOVE", - @"MAKE", - @"MATCH", - @"OFFER", - @"OPEN", - @"OPEN_APP", - @"OWN", - @"PAY", - @"PIN", - @"PLAN", - @"PLAY", - @"RATE", - @"READ", - @"RECOMMEND", - @"RECORD", - @"REDEEM", - @"REPLY", - @"RESERVE", - @"REVIEW", - @"RSVP", - @"SAVE", - @"SAVE_OFFER", - @"SELL", - @"SEND", - @"SHARE_X", - @"SIGN_IN", - @"SIGN_UP", - @"START", - @"ST0P", - @"TEST", - @"UPVOTE", - @"VIEW", - @"VIEW_ITEM", - @"VIEW_PROFILE", - @"VISIT", - @"VOTE", - @"WANT", - @"WATCH", - @"WRITE", - nil - ]; - self.selectedCallToAction = [callToActions_ objectAtIndex:0]; - self.callToActionPickerView = [[[UIPickerView alloc] init] autorelease]; - callToActionPickerView_.delegate = self; - callToActionPickerView_.dataSource = self; - [addCallToActionButtonSwitch_ addTarget:self - action:@selector(addCallToActionSwitched) - forControlEvents:UIControlEventValueChanged]; - - [self layout]; - [self populateTextFields]; - [super viewDidLoad]; -} - -- (void)viewDidUnload { - [GPPShare sharedInstance].delegate = nil; - [[NSNotificationCenter defaultCenter] - removeObserver:self - name:UIKeyboardWillShowNotification - object:nil]; - [[NSNotificationCenter defaultCenter] - removeObserver:self - name:UIKeyboardWillHideNotification - object:nil]; - - [self setAddContentDeepLinkSwitch:nil]; - [self setContentDeepLinkID:nil]; - [self setContentDeepLinkTitle:nil]; - [self setContentDeepLinkDescription:nil]; - [self setContentDeepLinkThumbnailURL:nil]; - [self setShareScrollView:nil]; - [self setShareView:nil]; - [self setShareToolbar:nil]; - [self setAddContentDeepLinkLabel:nil]; - [self setUrlToShareLabel:nil]; - [self setPrefillTextLabel:nil]; - [self setContentDeepLinkIDLabel:nil]; - [self setContentDeepLinkTitleLabel:nil]; - [self setContentDeepLinkDescriptionLabel:nil]; - [self setContentDeepLinkThumbnailURLLabel:nil]; - [self setShareButton:nil]; - [self setUrlForContentDeepLinkMetadataSwitch:nil]; - [self setUrlForContentDeepLinkMetadataLabel:nil]; - [self setAddCallToActionButtonSwitch:nil]; - [self setAddCallToActionButtonLabel:nil]; - [super viewDidUnload]; -} - -- (void)viewWillAppear:(BOOL)animated { - if ([[UIDevice currentDevice] userInterfaceIdiom] - == UIUserInterfaceIdiomPad) { - shareScrollView_.frame = self.view.frame; - } - [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 - UITextFieldDelegate - -- (BOOL)textFieldShouldReturn:(UITextField *)textField { - [textField resignFirstResponder]; - return YES; -} - -- (void)textFieldDidBeginEditing:(UITextField *)textField { - activeField_ = textField; -} - -- (void)textFieldDidEndEditing:(UITextField *)textField { - activeField_ = nil; -} - -#pragma mark - GPPShareDelegate - -- (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 - UIKeyboard - -- (void)keyboardWillShow:(NSNotification *)notification { - [self animateKeyboard:notification shouldShow:YES]; -} - -- (void)keyboardWillHide:(NSNotification *)notification { - [self animateKeyboard:notification shouldShow:NO]; -} - -#pragma mark - IBActions - -- (IBAction)shareButton:(id)sender { - shareStatus_.text = @"Status: Sharing..."; - id shareBuilder = [[GPPShare sharedInstance] shareDialog]; - - NSString *inputURL = shareURL_.text; - NSURL *urlToShare = [inputURL length] ? [NSURL URLWithString:inputURL] : nil; - if (urlToShare) { - [shareBuilder setURLToShare:urlToShare]; - } - - if ([contentDeepLinkID_ text]) { - [shareBuilder setContentDeepLinkID:[contentDeepLinkID_ text]]; - NSString *title = [contentDeepLinkTitle_ text]; - NSString *description = [contentDeepLinkDescription_ text]; - if (title && description) { - NSURL *thumbnailURL = - [NSURL URLWithString:[contentDeepLinkThumbnailURL_ text]]; - [shareBuilder setTitle:title - description:description - thumbnailURL:thumbnailURL]; - } - } - - NSString *inputText = sharePrefillText_.text; - NSString *text = [inputText length] ? inputText : nil; - if (text) { - [shareBuilder setPrefillText:text]; - } - - if ([addCallToActionButtonSwitch_ isOn]) { - // Please replace the URL below with your own call-to-action button URL. - NSURL *callToActionURL = [NSURL URLWithString: - @"http://developers.google.com/+/mobile/ios/"]; - [shareBuilder setCallToActionButtonWithLabel:selectedCallToAction_ - URL:callToActionURL - deepLinkID:@"call-to-action"]; - } - - if (![shareBuilder open]) { - shareStatus_.text = @"Status: Error (see console)."; - } -} - -- (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_]; -} - -- (IBAction)urlForContentDeepLinkMetadataSwitchToggle:(id)sender { - [self layout]; - [self populateTextFields]; -} - -- (IBAction)contentDeepLinkSwitchToggle:(id)sender { - if (!addContentDeepLinkSwitch_.on) { - [urlForContentDeepLinkMetadataSwitch_ setOn:YES]; - } - [self layout]; - [self populateTextFields]; -} - -#pragma mark - Helper methods - -- (void)placeView:(UIView *)view x:(CGFloat)x y:(CGFloat)y { - CGSize frameSize = view.frame.size; - view.frame = CGRectMake(x, y, frameSize.width, frameSize.height); -} - -- (void)layout { - CGFloat originX = 20.0; - CGFloat originY = 10.0; - CGFloat yPadding = 10.0; - CGFloat currentY = originY; - CGFloat middleX = 150; - - // Place the switch for adding call-to-action button. - [self placeView:addCallToActionButtonLabel_ x:originX y:currentY]; - [self placeView:addCallToActionButtonSwitch_ x:middleX * 1.5 y:currentY]; - CGSize frameSize = addCallToActionButtonSwitch_.frame.size; - currentY += frameSize.height + yPadding; - - // Place the switch for attaching content deep-link data. - [self placeView:addContentDeepLinkLabel_ x:originX y:currentY]; - [self placeView:addContentDeepLinkSwitch_ x:middleX * 1.5 y:currentY]; - frameSize = addContentDeepLinkSwitch_.frame.size; - currentY += frameSize.height + yPadding; - - // Place the switch for preview URL. - if (addContentDeepLinkSwitch_.on) { - [self placeView:urlForContentDeepLinkMetadataLabel_ x:originX y:currentY]; - [self placeView:urlForContentDeepLinkMetadataSwitch_ - x:middleX * 1.5 - y:currentY]; - frameSize = urlForContentDeepLinkMetadataSwitch_.frame.size; - currentY += frameSize.height + yPadding; - urlForContentDeepLinkMetadataSwitch_.hidden = NO; - urlForContentDeepLinkMetadataLabel_.hidden = NO; - } else { - urlForContentDeepLinkMetadataSwitch_.hidden = YES; - urlForContentDeepLinkMetadataLabel_.hidden = YES; - } - - // Place the field for URL to share. - if (urlForContentDeepLinkMetadataSwitch_.on) { - [self placeView:urlToShareLabel_ x:originX y:currentY]; - frameSize = urlToShareLabel_.frame.size; - currentY += frameSize.height + 0.5 * yPadding; - - [self placeView:shareURL_ x:originX y:currentY]; - frameSize = shareURL_.frame.size; - currentY += frameSize.height + yPadding; - urlToShareLabel_.hidden = NO; - shareURL_.hidden = NO; - } else { - urlToShareLabel_.hidden = YES; - shareURL_.hidden = YES; - } - - // Place the field for prefill text. - [self placeView:prefillTextLabel_ x:originX y:currentY]; - frameSize = prefillTextLabel_.frame.size; - currentY += frameSize.height + 0.5 * yPadding; - [self placeView:sharePrefillText_ x:originX y:currentY]; - frameSize = sharePrefillText_.frame.size; - currentY += frameSize.height + yPadding; - - // Place the content deep-link ID field. - if (addContentDeepLinkSwitch_.on) { - [self placeView:contentDeepLinkIDLabel_ x:originX y:currentY]; - frameSize = contentDeepLinkIDLabel_.frame.size; - currentY += frameSize.height + 0.5 * yPadding; - [self placeView:contentDeepLinkID_ x:originX y:currentY]; - frameSize = contentDeepLinkID_.frame.size; - currentY += frameSize.height + yPadding; - contentDeepLinkIDLabel_.hidden = NO; - contentDeepLinkID_.hidden = NO; - } else { - contentDeepLinkIDLabel_.hidden = YES; - contentDeepLinkID_.hidden = YES; - } - - // Place fields for content deep-link metadata. - if (addContentDeepLinkSwitch_.on && - !urlForContentDeepLinkMetadataSwitch_.on) { - [self placeView:contentDeepLinkTitleLabel_ x:originX y:currentY]; - frameSize = contentDeepLinkTitleLabel_.frame.size; - currentY += frameSize.height + 0.5 * yPadding; - [self placeView:contentDeepLinkTitle_ x:originX y:currentY]; - frameSize = contentDeepLinkTitle_.frame.size; - currentY += frameSize.height + yPadding; - - [self placeView:contentDeepLinkDescriptionLabel_ x:originX y:currentY]; - frameSize = contentDeepLinkDescriptionLabel_.frame.size; - currentY += frameSize.height + 0.5 * yPadding; - [self placeView:contentDeepLinkDescription_ x:originX y:currentY]; - frameSize = contentDeepLinkDescription_.frame.size; - currentY += frameSize.height + yPadding; - - [self placeView:contentDeepLinkThumbnailURLLabel_ x:originX y:currentY]; - frameSize = contentDeepLinkThumbnailURLLabel_.frame.size; - currentY += frameSize.height + 0.5 * yPadding; - [self placeView:contentDeepLinkThumbnailURL_ x:originX y:currentY]; - frameSize = contentDeepLinkThumbnailURL_.frame.size; - currentY += frameSize.height + yPadding; - - contentDeepLinkTitle_.hidden = NO; - contentDeepLinkTitleLabel_.hidden = NO; - contentDeepLinkDescriptionLabel_.hidden = NO; - contentDeepLinkDescription_.hidden = NO; - contentDeepLinkThumbnailURLLabel_.hidden = NO; - contentDeepLinkThumbnailURL_.hidden = NO; - } else { - contentDeepLinkTitle_.hidden = YES; - contentDeepLinkTitleLabel_.hidden = YES; - contentDeepLinkDescriptionLabel_.hidden = YES; - contentDeepLinkDescription_.hidden = YES; - contentDeepLinkThumbnailURLLabel_.hidden = YES; - contentDeepLinkThumbnailURL_.hidden = YES; - } - - // Place the share button and status. - [[shareButton_ layer] setCornerRadius:5]; - [[shareButton_ layer] setMasksToBounds:YES]; - CGColorRef borderColor = [[UIColor colorWithWhite:203.0/255.0 - alpha:1.0] CGColor]; - [[shareButton_ layer] setBorderColor:borderColor]; - [[shareButton_ layer] setBorderWidth:1.0]; - - [self placeView:shareButton_ x:originX y:currentY + yPadding]; - frameSize = shareButton_.frame.size; - currentY += frameSize.height + yPadding * 2; - - [self placeView:shareStatus_ x:originX y:currentY]; - frameSize = shareStatus_.frame.size; - currentY += frameSize.height + yPadding; - - shareScrollView_.contentSize = - CGSizeMake(shareScrollView_.frame.size.width, currentY); -} - -- (void)populateTextFields { - // Pre-populate text fields for Google+ share sample. - if (sharePrefillText_.hidden) { - sharePrefillText_.text = @""; - } else { - sharePrefillText_.text = @"Welcome to Google+ Platform"; - } - - if (shareURL_.hidden) { - shareURL_.text = @""; - } else { - shareURL_.text = @"http://developers.google.com/+/mobile/ios/"; - } - - if (contentDeepLinkID_.hidden) { - contentDeepLinkID_.text = @""; - } else { - contentDeepLinkID_.text = @"playlist/314159265358"; - } - - if (contentDeepLinkTitle_.hidden) { - contentDeepLinkTitle_.text = @""; - } else { - contentDeepLinkTitle_.text = @"Joe's Pop Music Playlist"; - } - - if (contentDeepLinkDescription_.hidden) { - contentDeepLinkDescription_.text = @""; - } else { - contentDeepLinkDescription_.text = - @"Check out this playlist of my favorite pop songs!"; - } - - if (contentDeepLinkThumbnailURL_.hidden) { - contentDeepLinkThumbnailURL_.text = @""; - } else { - contentDeepLinkThumbnailURL_.text = - @"http://www.google.com/logos/2012/childrensday-2012-hp.jpg"; - } -} - -- (void)animateKeyboard:(NSNotification *)notification - shouldShow:(BOOL)shouldShow { - if (!shouldShow) { - UIEdgeInsets contentInsets = UIEdgeInsetsZero; - shareScrollView_.contentInset = contentInsets; - shareScrollView_.scrollIndicatorInsets = contentInsets; - return; - } - - NSDictionary *userInfo = [notification userInfo]; - CGRect kbFrame = - [[userInfo objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue]; - CGSize kbSize = kbFrame.size; - UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0); - shareScrollView_.contentInset = contentInsets; - shareScrollView_.scrollIndicatorInsets = contentInsets; - - // If active text field is hidden by keyboard, scroll so it's visible. - CGRect aRect = self.view.frame; - aRect.size.height -= kbSize.height; - CGPoint bottomLeft = - CGPointMake(0.0, activeField_.frame.origin.y + - activeField_.frame.size.height + 10); - if (!CGRectContainsPoint(aRect, bottomLeft)) { - CGPoint scrollPoint = CGPointMake(0.0, bottomLeft.y - aRect.size.height); - [shareScrollView_ setContentOffset:scrollPoint animated:YES]; - } - return; -} - -- (void)addCallToActionSwitched { - if (!addCallToActionButtonSwitch_.on) { - return; - } - [self.view addSubview:callToActionPickerView_]; -} - -#pragma mark - UIPickerViewDataSource - -- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { - return 1; -} - -- (NSInteger)pickerView:(UIPickerView *)pickerView - numberOfRowsInComponent:(NSInteger)component { - return callToActions_.count; -} - -#pragma mark - UIPickerViewDelegate - -- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row - forComponent:(NSInteger)component reusingView:(UIView *)view { - UITableViewCell *cell = (UITableViewCell *)view; - if (cell == nil) { - cell = [[[UITableViewCell alloc] - initWithStyle:UITableViewCellStyleDefault - reuseIdentifier:nil] autorelease]; - [cell setBackgroundColor:[UIColor clearColor]]; - [cell setBounds: CGRectMake(0, 0, cell.frame.size.width - 20 , 44)]; - UITapGestureRecognizer *singleTapGestureRecognizer = - [[[UITapGestureRecognizer alloc] - initWithTarget:self - action:@selector(toggleSelection:)] autorelease]; - singleTapGestureRecognizer.numberOfTapsRequired = 1; - [cell addGestureRecognizer:singleTapGestureRecognizer]; - } - NSString *callToAction = [callToActions_ objectAtIndex:row]; - if ([selectedCallToAction_ isEqualToString:callToAction]) { - cell.accessoryType = UITableViewCellAccessoryCheckmark; - } else { - cell.accessoryType = UITableViewCellAccessoryNone; - } - cell.textLabel.text = callToAction; - cell.textLabel.font = [UIFont systemFontOfSize:12]; - cell.tag = row; - return cell; -} - -- (void)toggleSelection:(UITapGestureRecognizer *)recognizer { - int row = recognizer.view.tag; - self.selectedCallToAction = [callToActions_ objectAtIndex:row]; - [callToActionPickerView_ removeFromSuperview]; - // Force refresh checked/unchecked marks. - [callToActionPickerView_ reloadAllComponents]; - addCallToActionButtonLabel_.text = - [NSString stringWithFormat:@"Call-to-Action: %@", selectedCallToAction_]; -} - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/ShareViewController.xib b/External/google-plus-ios-sdk/SampleCode/ShareViewController.xib deleted file mode 100644 index 25fa0a57..00000000 --- a/External/google-plus-ios-sdk/SampleCode/ShareViewController.xib +++ /dev/null @@ -1,1231 +0,0 @@ - - - - 1536 - 12C60 - 2844 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 1930 - - - IBProxyObject - IBUIBarButtonItem - IBUIButton - IBUILabel - IBUIScrollView - IBUISwitch - IBUITextField - IBUIToolbar - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 292 - - - - 292 - {{26, 126}, {280, 31}} - - - - NO - YES - IBCocoaTouchFramework - 0 - http://developers.google.com/+/mobile/ios/ - 3 - - 3 - MAA - - 2 - - - YES - 17 - - IBCocoaTouchFramework - - 3 - - 1 - 14 - - - Helvetica - 14 - 16 - - - - - 292 - {{26, 89}, {179, 21}} - - - - NO - YES - 7 - NO - IBCocoaTouchFramework - URL to share (optional) - - 1 - MCAwIDAAA - darkTextColor - - - 1 - 10 - - 1 - 17 - - - Helvetica - 17 - 16 - - - - - 292 - {{31, 261}, {112, 32}} - - - - NO - IBCocoaTouchFramework - 0 - 0 - Share - - 3 - MQA - - - 1 - MC41MjE1Njg2NTYgMC4wNTU3MzQ0MTc0NyAwLjA4MTU0NTQ3OTkzAA - - - 3 - MC41AA - - - NSImage - button_background.png - - - 2 - 15 - - - Helvetica-Bold - 15 - 16 - - - - - 292 - {{26, 165}, {156, 21}} - - - - NO - YES - 7 - NO - IBCocoaTouchFramework - Prefill text (optional) - - - 1 - 10 - - - - - - 290 - {{38, 312}, {268, 21}} - - - - NO - YES - 7 - NO - IBCocoaTouchFramework - Status: - - - 1 - 15 - - - - - - 292 - {{208, 35}, {94, 27}} - - - - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - - 292 - {{20, 38}, {172, 21}} - - - - NO - YES - 7 - NO - IBCocoaTouchFramework - Add content deep link - - - 1 - 10 - - - - - - 292 - {{26, 198}, {280, 31}} - - - - NO - YES - IBCocoaTouchFramework - 0 - Welcome to Google+ Platform - 3 - - 3 - MAA - - - YES - 17 - - IBCocoaTouchFramework - - 3 - - - - - - 292 - {{26, 247}, {280, 30}} - - - - _NS:9 - NO - YES - IBCocoaTouchFramework - 0 - - 3 - - 3 - MAA - - - YES - 17 - - IBCocoaTouchFramework - - 3 - - - - - - 292 - {{26, 292}, {246, 21}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - Content deep-link ID (required) - - - 0 - - - NO - - - - 292 - {{26, 335}, {171, 21}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - Title (required) - - - 0 - - - NO - - - - 292 - {{26, 402}, {280, 21}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - Description (optional) - - - 0 - - - NO - - - - 292 - {{24, 469}, {194, 21}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - Thumbnail URL (optional) - - - 0 - - - NO - - - - 292 - {{26, 431}, {280, 30}} - - - - _NS:9 - NO - YES - IBCocoaTouchFramework - 0 - - 3 - - 3 - MAA - - - YES - 17 - - IBCocoaTouchFramework - - 3 - - - - - - 292 - {{26, 498}, {280, 30}} - - - - _NS:9 - NO - YES - IBCocoaTouchFramework - 0 - - 3 - - 3 - MAA - - - YES - 17 - - IBCocoaTouchFramework - - 3 - - - - - - 292 - {{26, 364}, {280, 30}} - - - - _NS:9 - NO - YES - IBCocoaTouchFramework - 0 - - 3 - - 3 - MAA - - - YES - 17 - - IBCocoaTouchFramework - - 3 - - - - - - 292 - {{208, 66}, {94, 27}} - - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - - 292 - {{20, 4530}, {172, 21}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - Use URL for preview - - - 0 - - - NO - - - - 292 - {{208, 4}, {94, 27}} - - - - _NS:9 - NO - IBCocoaTouchFramework - 0 - 0 - YES - - - - 292 - {{20, 4}, {184, 21}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - Add call-to-action button - - - 0 - - - NO - - - {320, 372} - - - - _NS:9 - YES - YES - IBCocoaTouchFramework - - - - 266 - {{0, 372}, {320, 44}} - - - NO - NO - IBCocoaTouchFramework - - - IBCocoaTouchFramework - - 5 - - - IBCocoaTouchFramework - 1 - - 9 - - - - - {{0, 64}, {320, 416}} - - - - - 3 - MQA - - - - - NO - - IBCocoaTouchFramework - - - - - - - view - - - - 3 - - - - shareView - - - - 42 - - - - shareToolbar - - - - 43 - - - - contentDeepLinkThumbnailURLLabel - - - - 58 - - - - addContentDeepLinkLabel - - - - 52 - - - - shareButton - - - - 59 - - - - contentDeepLinkTitle - - - - 49 - - - - urlToShareLabel - - - - 53 - - - - contentDeepLinkDescriptionLabel - - - - 57 - - - - sharePrefillText - - - - 11 - - - - contentDeepLinkTitleLabel - - - - 56 - - - - urlForContentDeepLinkMetadataLabel - - - - 64 - - - - contentDeepLinkThumbnailURL - - - - 51 - - - - shareURL - - - - 21 - - - - contentDeepLinkDescription - - - - 50 - - - - prefillTextLabel - - - - 54 - - - - addContentDeepLinkSwitch - - - - 28 - - - - shareScrollView - - - - 41 - - - - shareStatus - - - - 14 - - - - contentDeepLinkIDLabel - - - - 55 - - - - urlForContentDeepLinkMetadataSwitch - - - - 62 - - - - contentDeepLinkID - - - - 48 - - - - addCallToActionButtonLabel - - - - 68 - - - - addCallToActionButtonSwitch - - - - 69 - - - - delegate - - - - 23 - - - - delegate - - - - 22 - - - - shareButton: - - - 7 - - 10 - - - - shareToolbar: - - - - 20 - - - - contentDeepLinkSwitchToggle: - - - 13 - - 31 - - - - delegate - - - - 44 - - - - delegate - - - - 46 - - - - delegate - - - - 47 - - - - delegate - - - - 45 - - - - urlForContentDeepLinkMetadataSwitchToggle: - - - 13 - - 63 - - - - - - 0 - - - - - - 1 - - - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 15 - - - - - - - - - 17 - - - - - 18 - - - - - 32 - - - - - - - - - - - - - - - - - - - - - - - - - - - 6 - - - - - 8 - - - - - 5 - - - - - 39 - - - - - 37 - - - - - 38 - - - - - 36 - - - - - 40 - - - - - 9 - - - - - 13 - - - - - 26 - - - - - 29 - - - - - 7 - - - - - 34 - - - - - 35 - - - - - 60 - - - - - 61 - - - - - 33 - - - - - 65 - - - - - 66 - - - - - - - ShareViewController - 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 - 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 - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 69 - - - - - ShareViewController - UIViewController - - id - id - id - id - - - - contentDeepLinkSwitchToggle: - id - - - shareButton: - id - - - shareToolbar: - id - - - urlForContentDeepLinkMetadataSwitchToggle: - id - - - - UILabel - UISwitch - UILabel - UISwitch - UITextField - UILabel - UITextField - UILabel - UITextField - UILabel - UITextField - UILabel - UILabel - UIButton - UITextField - UIScrollView - UILabel - UIToolbar - UITextField - UIView - UILabel - UISwitch - UILabel - - - - addCallToActionButtonLabel - UILabel - - - addCallToActionButtonSwitch - UISwitch - - - addContentDeepLinkLabel - UILabel - - - addContentDeepLinkSwitch - UISwitch - - - contentDeepLinkDescription - UITextField - - - contentDeepLinkDescriptionLabel - UILabel - - - contentDeepLinkID - UITextField - - - contentDeepLinkIDLabel - UILabel - - - contentDeepLinkThumbnailURL - UITextField - - - contentDeepLinkThumbnailURLLabel - UILabel - - - contentDeepLinkTitle - UITextField - - - contentDeepLinkTitleLabel - UILabel - - - prefillTextLabel - UILabel - - - shareButton - UIButton - - - sharePrefillText - UITextField - - - shareScrollView - UIScrollView - - - shareStatus - UILabel - - - shareToolbar - UIToolbar - - - shareURL - UITextField - - - shareView - UIView - - - urlForContentDeepLinkMetadataLabel - UILabel - - - urlForContentDeepLinkMetadataSwitch - UISwitch - - - urlToShareLabel - UILabel - - - - IBProjectSource - ./Classes/ShareViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - - button_background.png - {1, 1} - - 1930 - - diff --git a/External/google-plus-ios-sdk/SampleCode/SignInViewController.h b/External/google-plus-ios-sdk/SampleCode/SignInViewController.h deleted file mode 100644 index 4b15cff5..00000000 --- a/External/google-plus-ios-sdk/SampleCode/SignInViewController.h +++ /dev/null @@ -1,51 +0,0 @@ -// -// SignInViewController.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 GPPSignInButton; - -// 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 SignInViewController : UIViewController - -// The button that handles Google+ sign-in. -@property (retain, nonatomic) IBOutlet GPPSignInButton *signInButton; -// A label to display the result of the sign-in action. -@property (retain, nonatomic) IBOutlet UILabel *signInAuthStatus; -// A label to display the signed-in user's display name. -@property (retain, nonatomic) IBOutlet UILabel *signInDisplayName; -// A button to sign out of this application. -@property (retain, nonatomic) IBOutlet UIButton *signOutButton; -// A button to disconnect user from this application. -@property (retain, nonatomic) IBOutlet UIButton *disconnectButton; -// A switch for whether to request -// https://www.googleapis.com/auth/userinfo.email scope to get user's email -// address after the sign-in action. -@property (retain, nonatomic) IBOutlet UISwitch *userinfoEmailScope; - -// Called when the user presses the "Sign out" button. -- (IBAction)signOut:(id)sender; -// Called when the user presses the "Disconnect" button. -- (IBAction)disconnect:(id)sender; -// Called when the user toggles the -// https://www.googleapis.com/auth/userinfo.email scope. -- (IBAction)userinfoEmailScopeToggle:(id)sender; - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/SignInViewController.m b/External/google-plus-ios-sdk/SampleCode/SignInViewController.m deleted file mode 100644 index 3f9e623c..00000000 --- a/External/google-plus-ios-sdk/SampleCode/SignInViewController.m +++ /dev/null @@ -1,168 +0,0 @@ -// -// SignInViewController.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 "SignInViewController.h" - -#import -#import -#import - -@interface SignInViewController () -- (void)enableSignInSettings:(BOOL)enable; -- (void)reportAuthStatus; -- (void)retrieveUserInfo; -@end - -@implementation SignInViewController - -@synthesize signInButton = signInButton_; -@synthesize signInAuthStatus = signInAuthStatus_; -@synthesize signInDisplayName = signInDisplayName_; -@synthesize signOutButton = signOutButton_; -@synthesize disconnectButton = disconnectButton_; -@synthesize userinfoEmailScope = userinfoEmailScope_; - -- (void)dealloc { - [signInButton_ release]; - [signInAuthStatus_ release]; - [signInDisplayName_ release]; - [signOutButton_ release]; - [userinfoEmailScope_ release]; - [super dealloc]; -} - -#pragma mark - View lifecycle - -- (void)viewDidLoad { - // Make sure the GPPSignInButton class is linked in because references from - // xib file doesn't count. - [GPPSignInButton class]; - - GPPSignIn *signIn = [GPPSignIn sharedInstance]; - userinfoEmailScope_.on = - signIn.shouldFetchGoogleUserEmail; - - // Set up sign-out and disconnect buttons. - [self setUpButton:signOutButton_]; - [self setUpButton:disconnectButton_]; - - // Set up sample view of Google+ sign-in. - // The client ID has been set in the app delegate. - signIn.delegate = self; - signIn.shouldFetchGoogleUserEmail = userinfoEmailScope_.on; - signIn.actions = [NSArray arrayWithObjects: - @"http://schemas.google.com/AddActivity", - @"http://schemas.google.com/BuyActivity", - @"http://schemas.google.com/CheckInActivity", - @"http://schemas.google.com/CommentActivity", - @"http://schemas.google.com/CreateActivity", - @"http://schemas.google.com/ListenActivity", - @"http://schemas.google.com/ReserveActivity", - @"http://schemas.google.com/ReviewActivity", - nil]; - - [self reportAuthStatus]; - [signIn trySilentAuthentication]; - [super viewDidLoad]; -} - -- (void)viewDidUnload { - [self setSignInButton:nil]; - [self setSignInAuthStatus:nil]; - [self setSignInDisplayName:nil]; - [self setSignOutButton:nil]; - [self setDisconnectButton:nil]; - [self setUserinfoEmailScope:nil]; - [super viewDidUnload]; -} - -#pragma mark - GPPSignInDelegate - -- (void)finishedWithAuth:(GTMOAuth2Authentication *)auth - error:(NSError *)error { - if (error) { - signInAuthStatus_.text = - [NSString stringWithFormat:@"Status: Authentication error: %@", error]; - return; - } - [self reportAuthStatus]; -} - -- (void)didDisconnectWithError:(NSError *)error { - if (error) { - signInAuthStatus_.text = - [NSString stringWithFormat:@"Status: Failed to disconnect: %@", error]; - } else { - signInAuthStatus_.text = - [NSString stringWithFormat:@"Status: Disconnected"]; - signInDisplayName_.text = @""; - [self enableSignInSettings:YES]; - } -} - -#pragma mark - Helper methods - -- (void)setUpButton:(UIButton *)button { - [[button layer] setCornerRadius:5]; - [[button layer] setMasksToBounds:YES]; - CGColorRef borderColor = [[UIColor colorWithWhite:203.0/255.0 - alpha:1.0] CGColor]; - [[button layer] setBorderColor:borderColor]; - [[button layer] setBorderWidth:1.0]; -} - -- (void)enableSignInSettings:(BOOL)enable { - userinfoEmailScope_.enabled = enable; -} - -- (void)reportAuthStatus { - if ([GPPSignIn sharedInstance].authentication) { - signInAuthStatus_.text = @"Status: Authenticated"; - [self retrieveUserInfo]; - [self enableSignInSettings:NO]; - } else { - // To authenticate, use Google+ sign-in button. - signInAuthStatus_.text = @"Status: Not authenticated"; - [self enableSignInSettings:YES]; - } -} - -- (void)retrieveUserInfo { - signInDisplayName_.text = [NSString stringWithFormat:@"Email: %@", - [GPPSignIn sharedInstance].authentication.userEmail]; -} - -#pragma mark - IBActions - -- (IBAction)signOut:(id)sender { - [[GPPSignIn sharedInstance] signOut]; - - [self reportAuthStatus]; - signInDisplayName_.text = @""; -} - -- (IBAction)disconnect:(id)sender { - [[GPPSignIn sharedInstance] disconnect]; -} - -- (IBAction)userinfoEmailScopeToggle:(id)sender { - [GPPSignIn sharedInstance].shouldFetchGoogleUserEmail = - userinfoEmailScope_.on; -} - -@end diff --git a/External/google-plus-ios-sdk/SampleCode/SignInViewController.xib b/External/google-plus-ios-sdk/SampleCode/SignInViewController.xib deleted file mode 100644 index 11350f6a..00000000 --- a/External/google-plus-ios-sdk/SampleCode/SignInViewController.xib +++ /dev/null @@ -1,514 +0,0 @@ - - - - 1552 - 12C60 - 3084 - 1187.34 - 625.00 - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - 2083 - - - IBProxyObject - IBUIButton - IBUILabel - IBUISwitch - IBUIView - - - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - PluginDependencyRecalculationVersion - - - - - IBFilesOwner - IBCocoaTouchFramework - - - IBFirstResponder - IBCocoaTouchFramework - - - - 274 - - - - 292 - {{19, 171}, {117, 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, 112}, {118, 32}} - - - - - 3 - MQA - - 2 - - - IBCocoaTouchFramework - - - - 290 - {{20, 241}, {280, 21}} - - - - NO - YES - 7 - NO - IBCocoaTouchFramework - Status: - - 1 - MCAwIDAAA - darkTextColor - - - 1 - 13 - - 1 - 17 - - - Helvetica - 17 - 16 - - - - - 290 - {{20, 270}, {280, 65}} - - - NO - YES - 7 - NO - IBCocoaTouchFramework - - - - 1 - 13 - 2 - - - 280 - - - - 292 - {{18, 15}, {273, 21}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - Sign-in setting (sign out to change) - - - 0 - - - NO - - - - 292 - {{18, 44}, {197, 27}} - - - - _NS:9 - NO - YES - 7 - NO - IBCocoaTouchFramework - get userinfo.email scope - - - 0 - - - NO - - - - 292 - {{208, 44}, {94, 27}} - - - - _NS:9 - NO - IBCocoaTouchFramework - NO - 0 - 0 - - - - 292 - {{181, 171}, {119, 35}} - - - - NO - IBCocoaTouchFramework - 0 - 0 - Disconnect - - 1 - MC42MzUyOTQxMTc2IDAuMzIxNTY4NjI3NSAwLjI1ODgyMzUyOTQAA - - - 1 - MC42MzUyOTQxMTc2IDAuMzIxNTY4NjI3NSAwLjI1ODgyMzUyOTQAA - - - - - - - - {{0, 20}, {320, 460}} - - - - - 3 - MQA - - - - IBCocoaTouchFramework - - - - - - - view - - - - 4 - - - - signInButton - - - - 14 - - - - signInAuthStatus - - - - 23 - - - - signOutButton - - - - 24 - - - - signInDisplayName - - - - 28 - - - - userinfoEmailScope - - - - 39 - - - - disconnectButton - - - - 51 - - - - signOut: - - - 7 - - 26 - - - - userinfoEmailScopeToggle: - - - 13 - - 40 - - - - disconnect: - - - 7 - - 50 - - - - - - 0 - - - - - - 1 - - - - - - - - - - - - - - - -1 - - - File's Owner - - - -2 - - - - - 7 - - - - - 6 - - - - - 22 - - - - - 27 - - - - - 37 - - - - - 38 - - - - - 30 - - - - - 48 - - - - - - - SignInViewController - 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 - - GPPSignInButton - com.apple.InterfaceBuilder.IBCocoaTouchPlugin - - - - - - 51 - - - - - GPPSignInButton - UIButton - - IBProjectSource - ./Classes/GPPSignInButton.h - - - - SignInViewController - UIViewController - - id - id - id - - - - disconnect: - id - - - signOut: - id - - - userinfoEmailScopeToggle: - id - - - - UIButton - UILabel - GPPSignInButton - UILabel - UIButton - UISwitch - - - - disconnectButton - UIButton - - - signInAuthStatus - UILabel - - - signInButton - GPPSignInButton - - - signInDisplayName - UILabel - - - signOutButton - UIButton - - - userinfoEmailScope - UISwitch - - - - IBProjectSource - ./Classes/SignInViewController.h - - - - - 0 - IBCocoaTouchFramework - - com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS - - - YES - 3 - - button_background.png - {1, 1} - - 2083 - - diff --git a/External/google-plus-ios-sdk/SampleCode/en.lproj/InfoPlist.strings b/External/google-plus-ios-sdk/SampleCode/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28ff..00000000 --- a/External/google-plus-ios-sdk/SampleCode/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* 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 deleted file mode 100644 index edb0a020..00000000 --- a/External/google-plus-ios-sdk/SampleCode/main.m +++ /dev/null @@ -1,28 +0,0 @@ -// -// 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 "AppDelegate.h" - -int main(int argc, char *argv[]) { - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, - NSStringFromClass([AppDelegate class])); - } -} diff --git a/MasterPassword/ObjC/iOS/MPUnlockViewController.m b/MasterPassword/ObjC/iOS/MPUnlockViewController.m index 3643b2fa..228b1f8d 100644 --- a/MasterPassword/ObjC/iOS/MPUnlockViewController.m +++ b/MasterPassword/ObjC/iOS/MPUnlockViewController.m @@ -1124,9 +1124,9 @@ - (IBAction)google:(id)sender { - id shareDialog = [[GPPShare sharedInstance] shareDialog]; - [[[shareDialog setURLToShare:[NSURL URLWithString:@"http://masterpasswordapp.com"]] - setPrefillText:@"I've started doing passwords properly thanks to Master Password."] open]; +// id shareDialog = [[GPPShare sharedInstance] shareDialog]; +// [[[shareDialog setURLToShare:[NSURL URLWithString:@"http://masterpasswordapp.com"]] +// setPrefillText:@"I've started doing passwords properly thanks to Master Password."] open]; } - (IBAction)mail:(id)sender { diff --git a/MasterPassword/ObjC/iOS/MPiOSAppDelegate.h b/MasterPassword/ObjC/iOS/MPiOSAppDelegate.h index c806cb75..abeb98b5 100644 --- a/MasterPassword/ObjC/iOS/MPiOSAppDelegate.h +++ b/MasterPassword/ObjC/iOS/MPiOSAppDelegate.h @@ -10,7 +10,6 @@ #import #import "MPAppDelegate_Shared.h" -#import @interface MPiOSAppDelegate : MPAppDelegate_Shared diff --git a/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m b/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m index 3529e5c6..ccd4ea6b 100644 --- a/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m +++ b/MasterPassword/ObjC/iOS/MPiOSAppDelegate.m @@ -62,11 +62,6 @@ TESTFLIGHT_SDK_VERSION, [PearlInfoPlist get].CFBundleName, [PearlInfoPlist get].CFBundleVersion ); } #endif - NSString *googlePlusClientID = [self googlePlusClientID]; - if ([googlePlusClientID length]) { - inf(@"Initializing Google+"); - [[GPPSignIn sharedInstance] setClientID:googlePlusClientID]; - } #ifdef CRASHLYTICS NSString *crashlyticsAPIKey = [self crashlyticsAPIKey]; if ([crashlyticsAPIKey length]) { @@ -118,71 +113,6 @@ @catch (id exception) { err(@"During Analytics Setup: %@", exception); } - @try { - if (floor( NSFoundationVersionNumber ) <= NSFoundationVersionNumber_iOS_6_1) { - UIImage *navBarImage = [[UIImage imageNamed:@"ui_navbar_container"] resizableImageWithCapInsets:UIEdgeInsetsMake( 0, 5, 0, 5 )]; - [[UINavigationBar appearance] setBackgroundImage:navBarImage forBarMetrics:UIBarMetricsDefault]; - [[UINavigationBar appearance] setBackgroundImage:navBarImage forBarMetrics:UIBarMetricsLandscapePhone]; - NSShadow *titleShadow = [NSShadow new]; - titleShadow.shadowColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.8f]; - titleShadow.shadowOffset = CGSizeMake( 0, -1 ); - [[UINavigationBar appearance] setTitleTextAttributes: - @{ - NSForegroundColorAttributeName : [UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f], - NSShadowAttributeName : titleShadow, - NSFontAttributeName : [UIFont fontWithName:@"Exo2.0-Bold" size:20.0f] - }]; - - UIImage *navBarButton = [[UIImage imageNamed:@"ui_navbar_button"] resizableImageWithCapInsets:UIEdgeInsetsMake( 0, 5, 0, 5 )]; - UIImage *navBarBack = [[UIImage imageNamed:@"ui_navbar_back"] resizableImageWithCapInsets:UIEdgeInsetsMake( 0, 13, 0, 5 )]; - [[UIBarButtonItem appearance] setBackgroundImage:navBarButton forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [[UIBarButtonItem appearance] setBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone]; - [[UIBarButtonItem appearance] - setBackButtonBackgroundImage:navBarBack forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - [[UIBarButtonItem appearance] - setBackButtonBackgroundImage:nil forState:UIControlStateNormal barMetrics:UIBarMetricsLandscapePhone]; - NSShadow *barButtonShadow = [NSShadow new]; - barButtonShadow.shadowColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.5f]; - barButtonShadow.shadowOffset = CGSizeMake( 0, 1 ); - [[UIBarButtonItem appearance] setTitleTextAttributes: - @{ - NSForegroundColorAttributeName : [UIColor colorWithRed:1.0f green:1.0f blue:1.0f alpha:1.0f], - NSShadowAttributeName : barButtonShadow, - // Causes a bug in iOS where image views get oddly stretched... or something. - //NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:13.0f] - } - forState:UIControlStateNormal]; - - UIImage *toolBarImage = [[UIImage imageNamed:@"ui_toolbar_container"] - resizableImageWithCapInsets:UIEdgeInsetsMake( 25, 5, 5, 5 )]; - [[UISearchBar appearance] setBackgroundImage:toolBarImage]; - [[UIToolbar appearance] setBackgroundImage:toolBarImage forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault]; - - // UIImage *minImage = [[UIImage imageNamed:@"slider-minimum"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 0)]; - // UIImage *maxImage = [[UIImage imageNamed:@"slider-maximum"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 0)]; - // UIImage *thumbImage = [UIImage imageNamed:@"slider-handle"]; - // - // [[UISlider appearance] setMaximumTrackImage:maxImage forState:UIControlStateNormal]; - // [[UISlider appearance] setMinimumTrackImage:minImage forState:UIControlStateNormal]; - // [[UISlider appearance] setThumbImage:thumbImage forState:UIControlStateNormal]; - // - // UIImage *segmentSelected = [[UIImage imageNamed:@"segcontrol_sel"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 4, 0, 4)]; - // UIImage *segmentUnselected = [[UIImage imageNamed:@"segcontrol_uns"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15, 0, 15)]; - // UIImage *segmentSelectedUnselected = [UIImage imageNamed:@"segcontrol_sel-uns"]; - // UIImage *segUnselectedSelected = [UIImage imageNamed:@"segcontrol_uns-sel"]; - // UIImage *segmentUnselectedUnselected = [UIImage imageNamed:@"segcontrol_uns-uns"]; - // - // [[UISegmentedControl appearance] setBackgroundImage:segmentUnselected forState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - // [[UISegmentedControl appearance] setBackgroundImage:segmentSelected forState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; - // - // [[UISegmentedControl appearance] setDividerImage:segmentUnselectedUnselected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - // [[UISegmentedControl appearance] setDividerImage:segmentSelectedUnselected forLeftSegmentState:UIControlStateSelected rightSegmentState:UIControlStateNormal barMetrics:UIBarMetricsDefault]; - // [[UISegmentedControl appearance] setDividerImage:segUnselectedSelected forLeftSegmentState:UIControlStateNormal rightSegmentState:UIControlStateSelected barMetrics:UIBarMetricsDefault]; - } - } - @catch (id exception) { - err(@"During Theme Setup: %@", exception); - } @try { [[NSNotificationCenter defaultCenter] addObserverForName:MPCheckConfigNotification object:nil queue:nil usingBlock: ^(NSNotification *note) { @@ -249,10 +179,6 @@ if (!url) return NO; - // Google+ - if ([[GPPSignIn sharedInstance] handleURL:url sourceApplication:sourceApplication annotation:annotation]) - return YES; - // Arbitrary URL to mpsites data. dispatch_async( dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0 ), ^{ NSError *error; @@ -808,28 +734,6 @@ } -#pragma mark - Google+ - -- (NSDictionary *)googlePlusInfo { - - static NSDictionary *googlePlusInfo = nil; - if (googlePlusInfo == nil) - googlePlusInfo = [[NSDictionary alloc] initWithContentsOfURL: - [[NSBundle mainBundle] URLForResource:@"Google+" withExtension:@"plist"]]; - - return googlePlusInfo; -} - -- (NSString *)googlePlusClientID { - - NSString *googlePlusClientID = NSNullToNil([[self googlePlusInfo] valueForKeyPath:@"ClientID"]); - if (![googlePlusClientID length]) - wrn(@"Google+ client ID not set. User won't be able to share via Google+."); - - return googlePlusClientID; -} - - #pragma mark - TestFlight - (NSDictionary *)testFlightInfo { diff --git a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj index 6925e779..94ee3340 100644 --- a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj +++ b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/project.pbxproj @@ -225,8 +225,6 @@ DABD3B981711E29800CF925C /* pull-up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D41711E29700CF925C /* pull-up@2x.png */; }; DABD3B991711E29800CF925C /* social-facebook.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D51711E29700CF925C /* social-facebook.png */; }; DABD3B9A1711E29800CF925C /* social-facebook@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D61711E29700CF925C /* social-facebook@2x.png */; }; - DABD3B9B1711E29800CF925C /* social-google+.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D71711E29700CF925C /* social-google+.png */; }; - DABD3B9C1711E29800CF925C /* social-google+@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D81711E29700CF925C /* social-google+@2x.png */; }; DABD3B9D1711E29800CF925C /* social-twitter.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38D91711E29700CF925C /* social-twitter.png */; }; DABD3B9E1711E29800CF925C /* social-twitter@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38DA1711E29700CF925C /* social-twitter@2x.png */; }; DABD3BFD1711E2DC00CF925C /* MPAlgorithm.m in Sources */ = {isa = PBXBuildFile; fileRef = DABD3BA11711E2DC00CF925C /* MPAlgorithm.m */; }; @@ -265,8 +263,6 @@ DABD3FCB1712446200CF925C /* cloud@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD3FC91712446200CF925C /* cloud@2x.png */; }; DABD3FCE1714F45C00CF925C /* identity.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD3FCC1714F45B00CF925C /* identity.png */; }; DABD3FCF1714F45C00CF925C /* identity@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD3FCD1714F45B00CF925C /* identity@2x.png */; }; - DABF632417B744F900DA7E38 /* GoogleOpenSource.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DABF632217B744F900DA7E38 /* GoogleOpenSource.framework */; }; - DABF632517B744F900DA7E38 /* GooglePlus.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DABF632317B744F900DA7E38 /* GooglePlus.framework */; }; DAC6325E1486805C0075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DAC6326D148680650075AEA5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; DAC632891486D9690075AEA5 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAC632871486D95D0075AEA5 /* Security.framework */; }; @@ -279,7 +275,6 @@ DACA22C61705DE9D002C6C22 /* libTestFlight.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DACA22C31705DE9D002C6C22 /* libTestFlight.a */; }; DACA296C1705DF81002C6C22 /* TestFlight.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA26941705DF81002C6C22 /* TestFlight.plist */; }; DACA296D1705DF81002C6C22 /* Localytics.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA26961705DF81002C6C22 /* Localytics.plist */; }; - DACA296E1705DF81002C6C22 /* Google+.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA26981705DF81002C6C22 /* Google+.plist */; }; DACA296F1705DF81002C6C22 /* Crashlytics.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA269A1705DF81002C6C22 /* Crashlytics.plist */; }; DACA29731705E1A8002C6C22 /* ciphers.plist in Resources */ = {isa = PBXBuildFile; fileRef = DACA29711705E1A8002C6C22 /* ciphers.plist */; }; DACA29741705E1A8002C6C22 /* dictionary.lst in Resources */ = {isa = PBXBuildFile; fileRef = DACA29721705E1A8002C6C22 /* dictionary.lst */; }; @@ -311,11 +306,6 @@ DADEF44D1810F9BF0052CA3E /* libLoveLyndir.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DADEF4221810D5530052CA3E /* libLoveLyndir.a */; }; DADEF44E1810FA3B0052CA3E /* LoveLyndir.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DADEF4481810D5A70052CA3E /* LoveLyndir.storyboard */; }; DAE1EF2217E942DE00BC0086 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DAE1EF2417E942DE00BC0086 /* Localizable.strings */; }; - DAE1EF2A17ED112700BC0086 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DA5BFA4A147E415C00F98B1E /* Foundation.framework */; }; - DAE1EF5817ED115E00BC0086 /* DCCrossHairView.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE1EF5017ED115E00BC0086 /* DCCrossHairView.m */; }; - DAE1EF5917ED115E00BC0086 /* DCFrameView.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE1EF5217ED115E00BC0086 /* DCFrameView.m */; }; - DAE1EF5A17ED115E00BC0086 /* DCIntrospect.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE1EF5417ED115E00BC0086 /* DCIntrospect.m */; }; - DAE1EF5B17ED115E00BC0086 /* DCStatusBarOverlay.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE1EF5717ED115E00BC0086 /* DCStatusBarOverlay.m */; }; DAEB933318AA537D000490CC /* crypto_aesctr.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E118AA537D000490CC /* crypto_aesctr.h */; }; DAEB933418AA537D000490CC /* crypto_scrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E218AA537D000490CC /* crypto_scrypt.h */; }; DAEB933518AA537D000490CC /* memlimit.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E318AA537D000490CC /* memlimit.h */; }; @@ -519,15 +509,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DAE1EF2717ED112600BC0086 /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = "include/$(PRODUCT_NAME)"; - dstSubfolderSpec = 16; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -1286,8 +1267,6 @@ DABD38D41711E29700CF925C /* pull-up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "pull-up@2x.png"; sourceTree = ""; }; DABD38D51711E29700CF925C /* social-facebook.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-facebook.png"; sourceTree = ""; }; DABD38D61711E29700CF925C /* social-facebook@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-facebook@2x.png"; sourceTree = ""; }; - DABD38D71711E29700CF925C /* social-google+.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-google+.png"; sourceTree = ""; }; - DABD38D81711E29700CF925C /* social-google+@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-google+@2x.png"; sourceTree = ""; }; DABD38D91711E29700CF925C /* social-twitter.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-twitter.png"; sourceTree = ""; }; DABD38DA1711E29700CF925C /* social-twitter@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "social-twitter@2x.png"; sourceTree = ""; }; DABD3BA01711E2DC00CF925C /* MPAlgorithm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MPAlgorithm.h; sourceTree = ""; }; @@ -1359,8 +1338,6 @@ DABD3FC91712446200CF925C /* cloud@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cloud@2x.png"; sourceTree = ""; }; DABD3FCC1714F45B00CF925C /* identity.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = identity.png; sourceTree = ""; }; DABD3FCD1714F45B00CF925C /* identity@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "identity@2x.png"; sourceTree = ""; }; - DABF632217B744F900DA7E38 /* GoogleOpenSource.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = GoogleOpenSource.framework; sourceTree = ""; }; - DABF632317B744F900DA7E38 /* GooglePlus.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = GooglePlus.framework; sourceTree = ""; }; DAC6325D1486805C0075AEA5 /* libuicolor-utilities.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libuicolor-utilities.a"; sourceTree = BUILT_PRODUCTS_DIR; }; DAC6326C148680650075AEA5 /* libjrswizzle.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjrswizzle.a; sourceTree = BUILT_PRODUCTS_DIR; }; DAC632871486D95D0075AEA5 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; @@ -1375,7 +1352,6 @@ DACA22C31705DE9D002C6C22 /* libTestFlight.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libTestFlight.a; sourceTree = ""; }; DACA26941705DF81002C6C22 /* TestFlight.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = TestFlight.plist; sourceTree = ""; }; DACA26961705DF81002C6C22 /* Localytics.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Localytics.plist; sourceTree = ""; }; - DACA26981705DF81002C6C22 /* Google+.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "Google+.plist"; sourceTree = ""; }; DACA269A1705DF81002C6C22 /* Crashlytics.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Crashlytics.plist; sourceTree = ""; }; DACA29711705E1A8002C6C22 /* ciphers.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ciphers.plist; sourceTree = ""; }; DACA29721705E1A8002C6C22 /* dictionary.lst */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dictionary.lst; sourceTree = ""; }; @@ -1405,17 +1381,7 @@ DADEF4491810E7F30052CA3E /* love-lyndir.picker.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "love-lyndir.picker.png"; sourceTree = ""; }; DADEF44A1810E7F30052CA3E /* love-lyndir.picker@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "love-lyndir.picker@2x.png"; sourceTree = ""; }; DAE1EF2317E942DE00BC0086 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - DAE1EF2917ED112600BC0086 /* libDCIntrospect.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libDCIntrospect.a; sourceTree = BUILT_PRODUCTS_DIR; }; DAE1EF3717ED112700BC0086 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - DAE1EF4F17ED115E00BC0086 /* DCCrossHairView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCCrossHairView.h; sourceTree = ""; }; - DAE1EF5017ED115E00BC0086 /* DCCrossHairView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCCrossHairView.m; sourceTree = ""; }; - DAE1EF5117ED115E00BC0086 /* DCFrameView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCFrameView.h; sourceTree = ""; }; - DAE1EF5217ED115E00BC0086 /* DCFrameView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCFrameView.m; sourceTree = ""; }; - DAE1EF5317ED115E00BC0086 /* DCIntrospect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCIntrospect.h; sourceTree = ""; }; - DAE1EF5417ED115E00BC0086 /* DCIntrospect.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCIntrospect.m; sourceTree = ""; }; - DAE1EF5517ED115E00BC0086 /* DCIntrospectSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCIntrospectSettings.h; sourceTree = ""; }; - DAE1EF5617ED115E00BC0086 /* DCStatusBarOverlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DCStatusBarOverlay.h; sourceTree = ""; }; - DAE1EF5717ED115E00BC0086 /* DCStatusBarOverlay.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DCStatusBarOverlay.m; sourceTree = ""; }; DAEB92E118AA537D000490CC /* crypto_aesctr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_aesctr.h; sourceTree = ""; }; DAEB92E218AA537D000490CC /* crypto_scrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_scrypt.h; sourceTree = ""; }; DAEB92E318AA537D000490CC /* memlimit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memlimit.h; sourceTree = ""; }; @@ -1503,9 +1469,6 @@ DAEC85B318E3DD9A007FC0DF /* PearlUINavigationBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlUINavigationBar.h; sourceTree = ""; }; DAEC85B418E3DD9A007FC0DF /* PearlUIView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PearlUIView.h; sourceTree = ""; }; DAFC5655172C573B00CB5CC5 /* libInAppSettingsKit.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libInAppSettingsKit.a; sourceTree = BUILT_PRODUCTS_DIR; }; - DAFC5659172C573B00CB5CC5 /* InAppSettingsKit-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "InAppSettingsKit-Prefix.pch"; sourceTree = ""; }; - DAFC565A172C573B00CB5CC5 /* InAppSettingsKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InAppSettingsKit.h; sourceTree = ""; }; - DAFC565C172C573B00CB5CC5 /* InAppSettingsKit.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = InAppSettingsKit.m; sourceTree = ""; }; DAFC5664172C57EC00CB5CC5 /* IASKAppSettingsViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsViewController.h; sourceTree = ""; }; DAFC5665172C57EC00CB5CC5 /* IASKAppSettingsViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IASKAppSettingsViewController.m; sourceTree = ""; }; DAFC5666172C57EC00CB5CC5 /* IASKAppSettingsWebViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IASKAppSettingsWebViewController.h; sourceTree = ""; }; @@ -1664,8 +1627,6 @@ 93D399433EA75E50656040CB /* Twitter.framework in Frameworks */, DACA22191705DE28002C6C22 /* Crashlytics.framework in Frameworks */, DACA22C61705DE9D002C6C22 /* libTestFlight.a in Frameworks */, - DABF632417B744F900DA7E38 /* GoogleOpenSource.framework in Frameworks */, - DABF632517B744F900DA7E38 /* GooglePlus.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1713,14 +1674,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DAE1EF2617ED112600BC0086 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - DAE1EF2A17ED112700BC0086 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; DAFC5652172C573B00CB5CC5 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -1738,15 +1691,8 @@ DABD3B9F1711E2DB00CF925C /* ObjC */, DACA23B41705DF7D002C6C22 /* Resources */, DACA22121705DDC5002C6C22 /* External */, - DAFC5657172C573B00CB5CC5 /* InAppSettingsKit */, DA5BFA47147E415C00F98B1E /* Frameworks */, DA5BFA45147E415C00F98B1E /* Products */, - 93D39975CE5AEC99E3F086C7 /* MPPasswordCell.h */, - 93D39DEA995041A13DC9CAF7 /* MPPasswordCell.m */, - 93D39ACBA9F4878B6A1CC33B /* MPEmergencyViewController.m */, - 93D39CDD434AFD6E1B0DA359 /* MPEmergencyViewController.h */, - 93D390381D3D3AE241B5D341 /* MPPreferencesViewControllerOld.m */, - 93D39961CD6A43648CC0B0DB /* MPPreferencesViewControllerOld.h */, ); sourceTree = ""; }; @@ -1760,7 +1706,6 @@ DAD3127115528CD200A3F9ED /* libLocalytics.a */, DA4425CB1557BED40052177D /* libUbiquityStoreManager.a */, DAFC5655172C573B00CB5CC5 /* libInAppSettingsKit.a */, - DAE1EF2917ED112600BC0086 /* libDCIntrospect.a */, DADEF4221810D5530052CA3E /* libLoveLyndir.a */, ); name = Products; @@ -1851,8 +1796,6 @@ DABD38D41711E29700CF925C /* pull-up@2x.png */, DABD38D51711E29700CF925C /* social-facebook.png */, DABD38D61711E29700CF925C /* social-facebook@2x.png */, - DABD38D71711E29700CF925C /* social-google+.png */, - DABD38D81711E29700CF925C /* social-google+@2x.png */, DABD38D91711E29700CF925C /* social-twitter.png */, DABD38DA1711E29700CF925C /* social-twitter@2x.png */, ); @@ -2561,6 +2504,12 @@ DABD3BD71711E2DC00CF925C /* iOS */ = { isa = PBXGroup; children = ( + 93D39975CE5AEC99E3F086C7 /* MPPasswordCell.h */, + 93D39DEA995041A13DC9CAF7 /* MPPasswordCell.m */, + 93D39ACBA9F4878B6A1CC33B /* MPEmergencyViewController.m */, + 93D39CDD434AFD6E1B0DA359 /* MPEmergencyViewController.h */, + 93D390381D3D3AE241B5D341 /* MPPreferencesViewControllerOld.m */, + 93D39961CD6A43648CC0B0DB /* MPPreferencesViewControllerOld.h */, DABD3BD81711E2DC00CF925C /* MPiOSAppDelegate.h */, DABD3BD91711E2DC00CF925C /* MPiOSAppDelegate.m */, DABD3BDA1711E2DC00CF925C /* MPAppViewController.h */, @@ -2654,9 +2603,6 @@ isa = PBXGroup; children = ( DADEF3E91810D1980052CA3E /* LoveLyndir */, - DAE1EF4E17ED115E00BC0086 /* DCIntrospect */, - DABF632217B744F900DA7E38 /* GoogleOpenSource.framework */, - DABF632317B744F900DA7E38 /* GooglePlus.framework */, DACA22181705DE28002C6C22 /* Crashlytics.framework */, DAFC5662172C57EC00CB5CC5 /* InAppSettingsKit */, DACA22C71705DEB0002C6C22 /* Localytics */, @@ -2712,7 +2658,6 @@ DACA29701705E1A8002C6C22 /* Data */, DABD360D1711E29400CF925C /* Media */, DACA26991705DF81002C6C22 /* Crashlytics */, - DACA26971705DF81002C6C22 /* Google+ */, DACA26951705DF81002C6C22 /* Localytics */, DACA26931705DF81002C6C22 /* TestFlight */, DAE1EF2417E942DE00BC0086 /* Localizable.strings */, @@ -2737,14 +2682,6 @@ path = Localytics; sourceTree = ""; }; - DACA26971705DF81002C6C22 /* Google+ */ = { - isa = PBXGroup; - children = ( - DACA26981705DF81002C6C22 /* Google+.plist */, - ); - path = "Google+"; - sourceTree = ""; - }; DACA26991705DF81002C6C22 /* Crashlytics */ = { isa = PBXGroup; children = ( @@ -2832,23 +2769,6 @@ path = Resources; sourceTree = ""; }; - DAE1EF4E17ED115E00BC0086 /* DCIntrospect */ = { - isa = PBXGroup; - children = ( - DAE1EF4F17ED115E00BC0086 /* DCCrossHairView.h */, - DAE1EF5017ED115E00BC0086 /* DCCrossHairView.m */, - DAE1EF5117ED115E00BC0086 /* DCFrameView.h */, - DAE1EF5217ED115E00BC0086 /* DCFrameView.m */, - DAE1EF5317ED115E00BC0086 /* DCIntrospect.h */, - DAE1EF5417ED115E00BC0086 /* DCIntrospect.m */, - DAE1EF5517ED115E00BC0086 /* DCIntrospectSettings.h */, - DAE1EF5617ED115E00BC0086 /* DCStatusBarOverlay.h */, - DAE1EF5717ED115E00BC0086 /* DCStatusBarOverlay.m */, - ); - name = DCIntrospect; - path = DCIntrospect/DCIntrospect; - sourceTree = ""; - }; DAEB92E018AA537D000490CC /* scrypt */ = { isa = PBXGroup; children = ( @@ -2944,24 +2864,6 @@ path = openssl; sourceTree = ""; }; - DAFC5657172C573B00CB5CC5 /* InAppSettingsKit */ = { - isa = PBXGroup; - children = ( - DAFC565A172C573B00CB5CC5 /* InAppSettingsKit.h */, - DAFC565C172C573B00CB5CC5 /* InAppSettingsKit.m */, - DAFC5658172C573B00CB5CC5 /* Supporting Files */, - ); - path = InAppSettingsKit; - sourceTree = ""; - }; - DAFC5658172C573B00CB5CC5 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - DAFC5659172C573B00CB5CC5 /* InAppSettingsKit-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; DAFC5662172C57EC00CB5CC5 /* InAppSettingsKit */ = { isa = PBXGroup; children = ( @@ -3498,23 +3400,6 @@ productReference = DADEF4221810D5530052CA3E /* libLoveLyndir.a */; productType = "com.apple.product-type.library.static"; }; - DAE1EF2817ED112600BC0086 /* DCIntrospect */ = { - isa = PBXNativeTarget; - buildConfigurationList = DAE1EF4617ED112700BC0086 /* Build configuration list for PBXNativeTarget "DCIntrospect" */; - buildPhases = ( - DAE1EF2517ED112600BC0086 /* Sources */, - DAE1EF2617ED112600BC0086 /* Frameworks */, - DAE1EF2717ED112600BC0086 /* CopyFiles */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = DCIntrospect; - productName = DCIntrospect; - productReference = DAE1EF2917ED112600BC0086 /* libDCIntrospect.a */; - productType = "com.apple.product-type.library.static"; - }; DAFC5654172C573B00CB5CC5 /* InAppSettingsKit */ = { isa = PBXNativeTarget; buildConfigurationList = DAFC565E172C573B00CB5CC5 /* Build configuration list for PBXNativeTarget "InAppSettingsKit" */; @@ -3658,7 +3543,6 @@ DAD3127015528CD200A3F9ED /* Localytics */, DA4425CA1557BED40052177D /* UbiquityStoreManager */, DAFC5654172C573B00CB5CC5 /* InAppSettingsKit */, - DAE1EF2817ED112600BC0086 /* DCIntrospect */, DADEF4211810D5530052CA3E /* LoveLyndir */, ); }; @@ -3672,7 +3556,6 @@ DAFE4A5A1503982E003ABA7C /* Pearl.strings in Resources */, DACA296C1705DF81002C6C22 /* TestFlight.plist in Resources */, DACA296D1705DF81002C6C22 /* Localytics.plist in Resources */, - DACA296E1705DF81002C6C22 /* Google+.plist in Resources */, DACA296F1705DF81002C6C22 /* Crashlytics.plist in Resources */, DADEF4171810D2940052CA3E /* love-lyndir.button.red@2x.png in Resources */, DACA29731705E1A8002C6C22 /* ciphers.plist in Resources */, @@ -3819,9 +3702,7 @@ DA452249190628A1008F650A /* icon_wrench.png in Resources */, DABD3B9A1711E29800CF925C /* social-facebook@2x.png in Resources */, DA45224819062899008F650A /* icon_settings@2x.png in Resources */, - DABD3B9B1711E29800CF925C /* social-google+.png in Resources */, DADEF4121810D2940052CA3E /* love-lyndir.button.green.png in Resources */, - DABD3B9C1711E29800CF925C /* social-google+@2x.png in Resources */, DABD3B9D1711E29800CF925C /* social-twitter.png in Resources */, DABD3B9E1711E29800CF925C /* social-twitter@2x.png in Resources */, DABD3C191711E2DC00CF925C /* MPElementListCellView.xib in Resources */, @@ -4065,17 +3946,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - DAE1EF2517ED112600BC0086 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - DAE1EF5817ED115E00BC0086 /* DCCrossHairView.m in Sources */, - DAE1EF5B17ED115E00BC0086 /* DCStatusBarOverlay.m in Sources */, - DAE1EF5917ED115E00BC0086 /* DCFrameView.m in Sources */, - DAE1EF5A17ED115E00BC0086 /* DCIntrospect.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; DAFC5651172C573B00CB5CC5 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -4660,27 +4530,6 @@ }; name = "AppStore-iOS"; }; - DAE1EF4717ED112700BC0086 /* Debug-iOS */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - }; - name = "Debug-iOS"; - }; - DAE1EF4817ED112700BC0086 /* AdHoc-iOS */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - }; - name = "AdHoc-iOS"; - }; - DAE1EF4917ED112700BC0086 /* AppStore-iOS */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_WARN_INHIBIT_ALL_WARNINGS = YES; - }; - name = "AppStore-iOS"; - }; DAFC565F172C573B00CB5CC5 /* Debug-iOS */ = { isa = XCBuildConfiguration; buildSettings = { @@ -4797,16 +4646,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = "AdHoc-iOS"; }; - DAE1EF4617ED112700BC0086 /* Build configuration list for PBXNativeTarget "DCIntrospect" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - DAE1EF4717ED112700BC0086 /* Debug-iOS */, - DAE1EF4817ED112700BC0086 /* AdHoc-iOS */, - DAE1EF4917ED112700BC0086 /* AppStore-iOS */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = "AdHoc-iOS"; - }; DAFC565E172C573B00CB5CC5 /* Build configuration list for PBXNativeTarget "InAppSettingsKit" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/xcshareddata/xcschemes/MasterPassword iOS (Development).xcscheme b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/xcshareddata/xcschemes/MasterPassword iOS (Development).xcscheme index c6b79a40..3a8466bd 100644 --- a/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/xcshareddata/xcschemes/MasterPassword iOS (Development).xcscheme +++ b/MasterPassword/ObjC/iOS/MasterPassword-iOS.xcodeproj/xcshareddata/xcschemes/MasterPassword iOS (Development).xcscheme @@ -59,7 +59,11 @@ + +