adium 5917:4a7c414c0b2d: Merged GoogleOAuth2 into adium-1.5.11. ...
commits at adium.im
commits at adium.im
Thu Apr 2 06:30:09 UTC 2015
details: http://hg.adium.im/adium/rev/4a7c414c0b2d
revision: 5917:4a7c414c0b2d
branch: adium-1.5.11
author: Thijs Alkemade <me at thijsalkema.de>
date: Thu Apr 02 08:29:17 2015 +0200
Merged GoogleOAuth2 into adium-1.5.11. Fixes #16161.
diffs (truncated from 82195 to 1000 lines):
diff -r f3c9fefc59f9 -r 4a7c414c0b2d Adium.xcodeproj/project.pbxproj
--- a/Adium.xcodeproj/project.pbxproj Thu Apr 02 08:22:24 2015 +0200
+++ b/Adium.xcodeproj/project.pbxproj Thu Apr 02 08:29:17 2015 +0200
@@ -1373,9 +1373,12 @@
6EC1684D06C170A000F9FAD3 /* DCInviteToChatPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EC1684806C170A000F9FAD3 /* DCInviteToChatPlugin.m */; };
6EC1684F06C170A000F9FAD3 /* DCInviteToChatWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 6EC1684A06C170A000F9FAD3 /* DCInviteToChatWindowController.m */; };
6EC1685006C170A000F9FAD3 /* InviteToChatWindow.nib in Resources */ = {isa = PBXBuildFile; fileRef = 6EC1684B06C170A000F9FAD3 /* InviteToChatWindow.nib */; };
+ 761D6A251ACC5F0B002079F2 /* ESPurpleGTalkAccountView.nib in Resources */ = {isa = PBXBuildFile; fileRef = 761D6A231ACC5F0B002079F2 /* ESPurpleGTalkAccountView.nib */; };
7664EAA5162E086A008CF995 /* libffi.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7664EAA4162E086A008CF995 /* libffi.framework */; };
7664EAA6162E0874008CF995 /* libffi.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 7664EAA4162E086A008CF995 /* libffi.framework */; };
766ABAB61306D1020049FFB7 /* AIUnreadMessagesTooltip.m in Sources */ = {isa = PBXBuildFile; fileRef = 766ABAB51306D1020049FFB7 /* AIUnreadMessagesTooltip.m */; };
+ 766F66A51ACBDF0D002079F2 /* auth_gtalk.c in Sources */ = {isa = PBXBuildFile; fileRef = 766F66A31ACBDF0D002079F2 /* auth_gtalk.c */; };
+ 766F66A61ACBDF0D002079F2 /* auth_gtalk.h in Headers */ = {isa = PBXBuildFile; fileRef = 766F66A41ACBDF0D002079F2 /* auth_gtalk.h */; };
76731DE215F90538007728C3 /* libgcrypt.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76731DE015F90538007728C3 /* libgcrypt.framework */; };
76731DE315F90538007728C3 /* libgpgerror.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76731DE115F90538007728C3 /* libgpgerror.framework */; };
76731DE415F9057F007728C3 /* libgcrypt.framework in Copy Frameworks */ = {isa = PBXBuildFile; fileRef = 76731DE015F90538007728C3 /* libgcrypt.framework */; };
@@ -4490,11 +4493,41 @@
6FB330A20C7235BF00B001A8 /* EKEzvIncomingFileTransfer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = EKEzvIncomingFileTransfer.m; path = Plugins/Bonjour/libezv/Classes/EKEzvIncomingFileTransfer.m; sourceTree = SOURCE_ROOT; };
6FB330A30C7235BF00B001A8 /* EKEzvOutgoingFileTransfer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = EKEzvOutgoingFileTransfer.h; path = Plugins/Bonjour/libezv/Classes/EKEzvOutgoingFileTransfer.h; sourceTree = SOURCE_ROOT; };
6FB330A40C7235BF00B001A8 /* EKEzvOutgoingFileTransfer.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = EKEzvOutgoingFileTransfer.m; path = Plugins/Bonjour/libezv/Classes/EKEzvOutgoingFileTransfer.m; sourceTree = SOURCE_ROOT; };
+ 761D6A241ACC5F0B002079F2 /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = en; path = "Plugins/Purple Service/Resources/en.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 761D6A261ACC5F0F002079F2 /* sl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sl; path = "Plugins/Purple Service/Resources/sl.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
7664EAA4162E086A008CF995 /* libffi.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libffi.framework; path = Frameworks/libffi.framework; sourceTree = "<group>"; };
766ABAB41306D1020049FFB7 /* AIUnreadMessagesTooltip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIUnreadMessagesTooltip.h; path = Source/AIUnreadMessagesTooltip.h; sourceTree = "<group>"; };
766ABAB51306D1020049FFB7 /* AIUnreadMessagesTooltip.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIUnreadMessagesTooltip.m; path = Source/AIUnreadMessagesTooltip.m; sourceTree = "<group>"; };
+ 766F66A31ACBDF0D002079F2 /* auth_gtalk.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = auth_gtalk.c; sourceTree = "<group>"; };
+ 766F66A41ACBDF0D002079F2 /* auth_gtalk.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = auth_gtalk.h; sourceTree = "<group>"; };
76731DE015F90538007728C3 /* libgcrypt.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libgcrypt.framework; path = Frameworks/libgcrypt.framework; sourceTree = "<group>"; };
76731DE115F90538007728C3 /* libgpgerror.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libgpgerror.framework; path = Frameworks/libgpgerror.framework; sourceTree = "<group>"; };
+ 767A13EC1ACC5F7B002079F2 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sv; path = "Plugins/Purple Service/Resources/sv.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13F01ACC5F94002079F2 /* es */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = es; path = "Plugins/Purple Service/Resources/es.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13F11ACC5FA8002079F2 /* hu */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = hu; path = "Plugins/Purple Service/Resources/hu.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13F21ACC5FB0002079F2 /* it */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = it; path = "Plugins/Purple Service/Resources/it.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13F31ACC5FB8002079F2 /* nl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = nl; path = "Plugins/Purple Service/Resources/nl.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13F41ACC5FC3002079F2 /* da */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = da; path = "Plugins/Purple Service/Resources/da.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13F51ACC5FCB002079F2 /* nb */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = nb; path = "Plugins/Purple Service/Resources/nb.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13F61ACC5FD0002079F2 /* fi */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = fi; path = "Plugins/Purple Service/Resources/fi.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13F71ACC5FD7002079F2 /* ru */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ru; path = "Plugins/Purple Service/Resources/ru.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13F81ACC5FDE002079F2 /* is */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = is; path = "Plugins/Purple Service/Resources/is.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13F91ACC5FE9002079F2 /* ca */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ca; path = "Plugins/Purple Service/Resources/ca.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13FA1ACC5FEE002079F2 /* tr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = tr; path = "Plugins/Purple Service/Resources/tr.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13FB1ACC5FF3002079F2 /* de */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = de; path = "Plugins/Purple Service/Resources/de.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13FC1ACC5FF8002079F2 /* fr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = fr; path = "Plugins/Purple Service/Resources/fr.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13FD1ACC5FFD002079F2 /* uk */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = uk; path = "Plugins/Purple Service/Resources/uk.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13FE1ACC6003002079F2 /* cs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = cs; path = "Plugins/Purple Service/Resources/cs.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A13FF1ACC6009002079F2 /* pl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pl; path = "Plugins/Purple Service/Resources/pl.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A140C1ACC61BA002079F2 /* el_GR */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = el_GR; path = "Plugins/Purple Service/Resources/el_GR.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A140D1ACC61C2002079F2 /* en_AU */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = en_AU; path = "Plugins/Purple Service/Resources/en_AU.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A140E1ACC61C8002079F2 /* en_CA */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = en_CA; path = "Plugins/Purple Service/Resources/en_CA.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A140F1ACC61D1002079F2 /* en_GB */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = en_GB; path = "Plugins/Purple Service/Resources/en_GB.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A14101ACC6223002079F2 /* fr_CA */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = fr_CA; path = "Plugins/Purple Service/Resources/fr_CA.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A14111ACC622C002079F2 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pt_PT; path = "Plugins/Purple Service/Resources/pt_PT.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A14121ACC6235002079F2 /* pt */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pt; path = "Plugins/Purple Service/Resources/pt.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A14131ACC623B002079F2 /* sk_SK */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sk_SK; path = "Plugins/Purple Service/Resources/sk_SK.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
+ 767A14141ACC6254002079F2 /* ja */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ja; path = "Plugins/Purple Service/Resources/ja.lproj/ESPurpleGTalkAccountView.nib"; sourceTree = "<group>"; };
76889DEA12D3CA17007AEF00 /* get-info.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = "get-info.tiff"; path = "Resources/get-info.tiff"; sourceTree = "<group>"; };
76889DEE12D3CA40007AEF00 /* Personal.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = Personal.tiff; path = Resources/Personal.tiff; sourceTree = "<group>"; };
76C1AF9A125A906A00D269A9 /* AIAdiumURLProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIAdiumURLProtocol.h; path = "Plugins/WebKit Message View/AIAdiumURLProtocol.h"; sourceTree = "<group>"; };
@@ -4595,8 +4628,8 @@
9EF0DBF309D944A300FBCC1E /* msg-block-contact.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = "msg-block-contact.tiff"; path = "Resources/msg-block-contact.tiff"; sourceTree = "<group>"; };
9EF0DBF409D944A300FBCC1E /* msg-unblock-contact.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = "msg-unblock-contact.tiff"; path = "Resources/msg-unblock-contact.tiff"; sourceTree = "<group>"; };
A3C042D108D7483100B48CE1 /* PurpleDefaultsGTalk.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; name = PurpleDefaultsGTalk.plist; path = "Plugins/Purple Service/PurpleDefaultsGTalk.plist"; sourceTree = "<group>"; };
- A3C0431B08D74D3100B48CE1 /* AIPurpleGTalkAccount.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AIPurpleGTalkAccount.h; path = "Plugins/Purple Service/AIPurpleGTalkAccount.h"; sourceTree = "<group>"; };
- A3C0431C08D74D3100B48CE1 /* AIPurpleGTalkAccount.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AIPurpleGTalkAccount.m; path = "Plugins/Purple Service/AIPurpleGTalkAccount.m"; sourceTree = "<group>"; };
+ A3C0431B08D74D3100B48CE1 /* AIPurpleGTalkAccount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIPurpleGTalkAccount.h; path = "Plugins/Purple Service/AIPurpleGTalkAccount.h"; sourceTree = "<group>"; };
+ A3C0431C08D74D3100B48CE1 /* AIPurpleGTalkAccount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIPurpleGTalkAccount.m; path = "Plugins/Purple Service/AIPurpleGTalkAccount.m"; sourceTree = "<group>"; };
A3C0431D08D74D3100B48CE1 /* AIPurpleGTalkAccountViewController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AIPurpleGTalkAccountViewController.h; path = "Plugins/Purple Service/AIPurpleGTalkAccountViewController.h"; sourceTree = "<group>"; };
A3C0431E08D74D3100B48CE1 /* AIPurpleGTalkAccountViewController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AIPurpleGTalkAccountViewController.m; path = "Plugins/Purple Service/AIPurpleGTalkAccountViewController.m"; sourceTree = "<group>"; };
A3C0431F08D74D3100B48CE1 /* AIGTalkService.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AIGTalkService.h; path = "Plugins/Purple Service/AIGTalkService.h"; sourceTree = "<group>"; };
@@ -5036,6 +5069,8 @@
children = (
34D8154913B663A80022C8C4 /* auth_fb.c */,
34D8154A13B663A80022C8C4 /* auth_fb.h */,
+ 766F66A31ACBDF0D002079F2 /* auth_gtalk.c */,
+ 766F66A41ACBDF0D002079F2 /* auth_gtalk.h */,
34D8154B13B663A80022C8C4 /* fbapi.c */,
34D8154C13B663A80022C8C4 /* fbapi.h */,
11EE1B490CDCFAF40097F246 /* oscar-adium.c */,
@@ -6413,22 +6448,14 @@
34E6BBE50A78083A0076D7F0 /* Resources */ = {
isa = PBXGroup;
children = (
- 34D8326107CBD598006466F2 /* AccountPrefs.plist */,
317D83670E89F40500298BDB /* msg-bookmark-chat.tiff */,
- 34D8327507CBD5B3006466F2 /* BuiltInStatusStates.plist */,
- 34D8326607CBD598006466F2 /* ContactPrefs.plist */,
- 34D8326707CBD598006466F2 /* default-icon.png */,
- 34D8326207CBD598006466F2 /* DockPrefs.plist */,
3428B33E0815E1FB00C0D3DC /* emoticon32.tiff */,
345F590608199746001F733C /* emoticon32_transparent.tiff */,
- 34B995D9092A832700E31E91 /* FontPanelAccessoryView.nib */,
34DFF53007A62EB100B92233 /* lock-locked.tiff */,
34DFF52607A62EB000B92233 /* lock-unlocked.tiff */,
347E787507CA975900350507 /* remove.tiff */,
- 34D8326307CBD598006466F2 /* msg-send-file.tiff */,
4BB2EB200D88D76100CA7A7D /* timestamp32.tiff */,
4BB2EB210D88D76100CA7A7D /* timestamp32_transparent.tiff */,
- 34D8327607CBD5B3006466F2 /* ToolbarPrefs.plist */,
);
name = Resources;
sourceTree = "<group>";
@@ -8392,6 +8419,7 @@
A3C0405808D744B200B48CE1 /* Google Talk */ = {
isa = PBXGroup;
children = (
+ 761D6A231ACC5F0B002079F2 /* ESPurpleGTalkAccountView.nib */,
A3C0431B08D74D3100B48CE1 /* AIPurpleGTalkAccount.h */,
A3C0431C08D74D3100B48CE1 /* AIPurpleGTalkAccount.m */,
A3C0431D08D74D3100B48CE1 /* AIPurpleGTalkAccountViewController.h */,
@@ -8866,6 +8894,7 @@
3485DB7109EBCE7400232CC4 /* AIPurpleGTalkAccountViewController.h in Headers */,
3485DB7309EBCE7400232CC4 /* AIGTalkService.h in Headers */,
3485DB7609EBCE7400232CC4 /* ESMeanwhileService.h in Headers */,
+ 766F66A61ACBDF0D002079F2 /* auth_gtalk.h in Headers */,
3485DB7809EBCE7400232CC4 /* ESPurpleMeanwhileAccount.h in Headers */,
3485DB7A09EBCE7400232CC4 /* DCPurpleMeanwhileJoinChatViewController.h in Headers */,
3485DB7D09EBCE7400232CC4 /* ESPurpleMeanwhileAccountViewController.h in Headers */,
@@ -9208,7 +9237,7 @@
name = "Unit tests";
productName = "Unit tests";
productReference = 312ED3CA0C7E875B00A6BDA9 /* Unit tests.octest */;
- productType = "com.apple.product-type.bundle";
+ productType = "com.apple.product-type.bundle.ocunit-test";
};
3485D67F09EB416300232CC4 /* AdiumLibpurple */ = {
isa = PBXNativeTarget;
@@ -9384,6 +9413,16 @@
sk_SK,
uk,
pt_PT,
+ "zh-Hant",
+ "zh-Hans",
+ "en-CA",
+ "en-AU",
+ "pt-BR",
+ "fr-CA",
+ "en-GB",
+ "el-GR",
+ "sk-SK",
+ "pt-PT",
);
mainGroup = 29B97314FDCFA39411CA2CEA /* CocAIMe2 */;
projectDirPath = "";
@@ -9489,6 +9528,7 @@
3485DBBB09EBCE7400232CC4 /* ESPurpleZephyrAccountView.nib in Resources */,
3485DBBC09EBCE7400232CC4 /* PurpleDefaultsZephyr.plist in Resources */,
3485DBC309EBCE7400232CC4 /* PurpleMultilineRequestWindow.nib in Resources */,
+ 761D6A251ACC5F0B002079F2 /* ESPurpleGTalkAccountView.nib in Resources */,
3485DBC409EBCE7400232CC4 /* PurpleSinglelineRequestWindow.nib in Resources */,
3485DBD009EBCE8200232CC4 /* Localizable.strings in Resources */,
34E036780A75AA4F00394F11 /* DCPurpleOscarJoinChatView.nib in Resources */,
@@ -9987,6 +10027,7 @@
3485DB7209EBCE7400232CC4 /* AIPurpleGTalkAccountViewController.m in Sources */,
3485DB7409EBCE7400232CC4 /* AIGTalkService.m in Sources */,
3485DB7709EBCE7400232CC4 /* ESMeanwhileService.m in Sources */,
+ 766F66A51ACBDF0D002079F2 /* auth_gtalk.c in Sources */,
3485DB7909EBCE7400232CC4 /* ESPurpleMeanwhileAccount.m in Sources */,
3485DB7B09EBCE7400232CC4 /* DCPurpleMeanwhileJoinChatViewController.m in Sources */,
3485DB7E09EBCE7400232CC4 /* ESPurpleMeanwhileAccountViewController.m in Sources */,
@@ -12338,6 +12379,41 @@
name = Localizable.strings;
sourceTree = "<group>";
};
+ 761D6A231ACC5F0B002079F2 /* ESPurpleGTalkAccountView.nib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 761D6A241ACC5F0B002079F2 /* en */,
+ 761D6A261ACC5F0F002079F2 /* sl */,
+ 767A13EC1ACC5F7B002079F2 /* sv */,
+ 767A13F01ACC5F94002079F2 /* es */,
+ 767A13F11ACC5FA8002079F2 /* hu */,
+ 767A13F21ACC5FB0002079F2 /* it */,
+ 767A13F31ACC5FB8002079F2 /* nl */,
+ 767A13F41ACC5FC3002079F2 /* da */,
+ 767A13F51ACC5FCB002079F2 /* nb */,
+ 767A13F61ACC5FD0002079F2 /* fi */,
+ 767A13F71ACC5FD7002079F2 /* ru */,
+ 767A13F81ACC5FDE002079F2 /* is */,
+ 767A13F91ACC5FE9002079F2 /* ca */,
+ 767A13FA1ACC5FEE002079F2 /* tr */,
+ 767A13FB1ACC5FF3002079F2 /* de */,
+ 767A13FC1ACC5FF8002079F2 /* fr */,
+ 767A13FD1ACC5FFD002079F2 /* uk */,
+ 767A13FE1ACC6003002079F2 /* cs */,
+ 767A13FF1ACC6009002079F2 /* pl */,
+ 767A140C1ACC61BA002079F2 /* el_GR */,
+ 767A140D1ACC61C2002079F2 /* en_AU */,
+ 767A140E1ACC61C8002079F2 /* en_CA */,
+ 767A140F1ACC61D1002079F2 /* en_GB */,
+ 767A14101ACC6223002079F2 /* fr_CA */,
+ 767A14111ACC622C002079F2 /* pt_PT */,
+ 767A14121ACC6235002079F2 /* pt */,
+ 767A14131ACC623B002079F2 /* sk_SK */,
+ 767A14141ACC6254002079F2 /* ja */,
+ );
+ name = ESPurpleGTalkAccountView.nib;
+ sourceTree = "<group>";
+ };
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
diff -r f3c9fefc59f9 -r 4a7c414c0b2d ChangeLogs/Changes.txt
--- a/ChangeLogs/Changes.txt Thu Apr 02 08:22:24 2015 +0200
+++ b/ChangeLogs/Changes.txt Thu Apr 02 08:29:17 2015 +0200
@@ -6,6 +6,8 @@
* Fixed a crash upon file transfer completion on Bonjour. (Quentin Les) (#16038, #16182)
* Fixed a problem with signing in to Twitter and updating the timeline on 10.10. (#16882)
* Fixed a problem with signing in to Yahoo!. (reanimus) (#16678)
+ * Google Talk now authenticates using OAuth2, making logging in simpler when using two-factor authentication and more secure. (#16161)
+
Version 1.5.10 (05/19/2014)
* Updated libpurple to 2.10.9, fixing many security issues.
diff -r f3c9fefc59f9 -r 4a7c414c0b2d Plugins/Purple Service/AIPurpleGTalkAccount.h
--- a/Plugins/Purple Service/AIPurpleGTalkAccount.h Thu Apr 02 08:22:24 2015 +0200
+++ b/Plugins/Purple Service/AIPurpleGTalkAccount.h Thu Apr 02 08:29:17 2015 +0200
@@ -16,8 +16,15 @@
#import "ESPurpleJabberAccount.h"
+#define KEY_GTALK_CODE @"GTalk:Code"
+#define KEY_GTALK_UPGRADED_OAUTH2 @"GTalk:OAuth2 Upgraded"
+
+#define ADIUM_GTALK_CLIENT_ID @"853036734951.apps.googleusercontent.com"
+#define ADIUM_GTALK_SECRET @"TSXNUaq34k_0YU7DZT4HbmQd"
+
@interface AIPurpleGTalkAccount : ESPurpleJabberAccount {
-
+ NSMutableData *response;
+ NSURLConnection *conn;
}
@end
diff -r f3c9fefc59f9 -r 4a7c414c0b2d Plugins/Purple Service/AIPurpleGTalkAccount.m
--- a/Plugins/Purple Service/AIPurpleGTalkAccount.m Thu Apr 02 08:22:24 2015 +0200
+++ b/Plugins/Purple Service/AIPurpleGTalkAccount.m Thu Apr 02 08:29:17 2015 +0200
@@ -15,6 +15,17 @@
*/
#import "AIPurpleGTalkAccount.h"
+#import "auth_gtalk.h"
+#import "AIKeychain.h"
+
+#import "JSONKit.h"
+
+#import "AIService.h"
+
+#import <Adium/AIAccountControllerProtocol.h>
+#import <Adium/AIInterfaceControllerProtocol.h>
+
+#import "NSData+Base64.h"
@implementation AIPurpleGTalkAccount
@@ -39,6 +50,13 @@
return [completeUserName UTF8String];
}
+- (void)dealloc {
+ [response release];
+ [conn release];
+
+ [super dealloc];
+}
+
- (NSString *)serverSuffix
{
return @"@gmail.com";
@@ -84,4 +102,230 @@
return NO;
}
+/* Add the authentication mechanism for X-OAUTH2. Note that if the server offers it,
+ * it will be used preferentially over any other mechanism e.g. PLAIN. */
+- (void)setGTalkMechEnabled:(BOOL)inEnabled
+{
+ static BOOL enabledGTalkMech = NO;
+ if (inEnabled != enabledGTalkMech) {
+ if (inEnabled)
+ jabber_auth_add_mech(jabber_auth_get_gtalk_mech());
+ else
+ jabber_auth_remove_mech(jabber_auth_get_gtalk_mech());
+
+ enabledGTalkMech = inEnabled;
+ }
+}
+
+- (void)promptUpgrade:(NSNumber *)number userInfo:(id)info suppression:(NSNumber *)suppressed {
+ if ([number integerValue] == 1) {
+ [adium.accountController editAccount:self onWindow:nil notifyingTarget:self];
+ }
+}
+
+- (void)connect
+{
+ if (!self.UID.length) {
+ [self requestAccessToken];
+ } else {
+ NSString *refresh_token = [[AIKeychain defaultKeychain_error:NULL] findGenericPasswordForService:self.service.serviceID
+ account:self.UID
+ keychainItem:NULL error:NULL];
+
+ if (refresh_token && refresh_token.length) {
+ [self useRefreshToken:refresh_token];
+ } else {
+ if ([self preferenceForKey:KEY_GTALK_CODE group:GROUP_ACCOUNT_STATUS] ||
+ [[self preferenceForKey:KEY_GTALK_UPGRADED_OAUTH2 group:GROUP_ACCOUNT_STATUS] boolValue]) {
+ [self requestAccessToken];
+ } else {
+ [adium.interfaceController displayQuestion:AILocalizedString(@"Upgrade Google Talk account", nil)
+ withDescription:[NSString stringWithFormat:AILocalizedString(@"Adium uses a new, more secure way to sign in to Google Talk. To use this, you must authorize your account.", nil)]
+ withWindowTitle:nil
+ defaultButton:AILocalizedString(@"OK", nil)
+ alternateButton:AILocalizedString(@"Later", nil)
+ otherButton:nil
+ suppression:nil
+ target:self
+ selector:@selector(promptUpgrade:userInfo:suppression:)
+ userInfo:nil];
+ }
+ }
+ }
+}
+
+- (void)didConnect
+{
+ [self setGTalkMechEnabled:NO];
+ [super didConnect];
+}
+
+- (void)didDisconnect
+{
+ [self setGTalkMechEnabled:NO];
+ [super didDisconnect];
+}
+
+- (void)useRefreshToken:(NSString *)token {
+ NSString *body = [NSString stringWithFormat:@"refresh_token=%@&client_id=" ADIUM_GTALK_CLIENT_ID
+ @"&client_secret=" ADIUM_GTALK_SECRET
+ @"&redirect_uri=urn:ietf:wg:oauth:2.0:oob"
+ @"&grant_type=refresh_token", token];
+
+ NSData *data = [body dataUsingEncoding:NSUTF8StringEncoding];
+
+ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.googleapis.com/oauth2/v3/token"]];
+ [request setHTTPMethod:@"POST"];
+ [request setValue:@"application/x-www-form-urlencoded ; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
+ [request setValue:[NSString stringWithFormat:@"%u", (unsigned int)[data length]] forHTTPHeaderField:@"Content-Length"];
+ [request setHTTPBody:data];
+
+ AILogWithSignature(@"%@", request);
+
+ conn = [[NSURLConnection connectionWithRequest:request delegate:self] retain];
+
+ response = [[NSMutableData alloc] init];
+}
+
+- (void)requestAccessToken {
+ NSString *body = [NSString stringWithFormat:@"code=%@&client_id=" ADIUM_GTALK_CLIENT_ID
+ @"&client_secret=" ADIUM_GTALK_SECRET
+ @"&redirect_uri=urn:ietf:wg:oauth:2.0:oob"
+ @"&grant_type=authorization_code", [self preferenceForKey:KEY_GTALK_CODE group:GROUP_ACCOUNT_STATUS]];
+
+ NSData *data = [body dataUsingEncoding:NSUTF8StringEncoding];
+
+ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://www.googleapis.com/oauth2/v3/token"]];
+ [request setHTTPMethod:@"POST"];
+ [request setValue:@"application/x-www-form-urlencoded ; charset=UTF-8" forHTTPHeaderField:@"Content-Type"];
+ [request setValue:[NSString stringWithFormat:@"%u", (unsigned int)[data length]] forHTTPHeaderField:@"Content-Length"];
+ [request setHTTPBody:data];
+
+ AILogWithSignature(@"%@", request);
+
+ conn = [[NSURLConnection connectionWithRequest:request delegate:self] retain];
+
+ response = [[NSMutableData alloc] init];
+}
+
+- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)urlResponse {
+ AILogWithSignature(@"%@", urlResponse);
+}
+
+- (void)connection:(NSURLConnection *)inConnection didReceiveData:(NSData *)data {
+ [response appendData:data];
+}
+
+- (void)connectionDidFinishLoading:(NSURLConnection *)inConnection {
+ NSDictionary *responseDict = [response objectFromJSONData];
+
+ AILogWithSignature(@"%@", responseDict);
+
+ if ([responseDict objectForKey:@"error"]) {
+ // Delete the refresh token, so we don't use it again.
+ [[AIKeychain defaultKeychain_error:NULL] deleteGenericPasswordForService:self.service.serviceID
+ account:self.UID
+ error:NULL];
+
+ [self setLastDisconnectionError:[NSString stringWithFormat:AILocalizedString(@"Retrieving OAuth token failed: %@", nil), [responseDict objectForKey:@"error_description"]]];
+ [self serverReportedInvalidPassword];
+ return;
+ }
+
+ if (!self.UID.length) {
+ NSString *jsonWebToken = [responseDict objectForKey:@"id_token"];
+
+ if (!jsonWebToken) {
+ AILogWithSignature(@"id_token missing, can't set JID!");
+ } else {
+ NSArray *components = [jsonWebToken componentsSeparatedByString:@"."];
+
+ if (components.count == 3) {
+ NSString *base64EncodedIdentity = [components objectAtIndex:1];
+
+ // Restore the padding
+ switch (base64EncodedIdentity.length % 4) {
+ case 2: {
+ base64EncodedIdentity = [base64EncodedIdentity stringByAppendingString:@"=="];
+ break;
+ }
+ case 3: {
+ base64EncodedIdentity = [base64EncodedIdentity stringByAppendingString:@"="];
+ break;
+ }
+ default: {
+ }
+ }
+
+ NSData *identityData = [NSData dataFromBase64String:base64EncodedIdentity];
+ NSDictionary *identity = [identityData objectFromJSONData];
+
+ AILogWithSignature(@"%@", identity);
+
+ [self filterAndSetUID:[identity objectForKey:@"email"]];
+ }
+ }
+ }
+
+ if (!self.UID.length) {
+ [self setLastDisconnectionError:AILocalizedString(@"Obtaining your JID failed", nil)];
+ return;
+ }
+
+ [self setPreference:nil forKey:KEY_GTALK_CODE group:GROUP_ACCOUNT_STATUS];
+ [self setPreference:@(YES) forKey:KEY_GTALK_UPGRADED_OAUTH2 group:GROUP_ACCOUNT_STATUS];
+
+ if ([responseDict objectForKey:@"refresh_token"]) {
+ [[AIKeychain defaultKeychain_error:NULL] deleteGenericPasswordForService:self.service.serviceID
+ account:self.UID
+ error:NULL];
+ [[AIKeychain defaultKeychain_error:NULL] addGenericPassword:[responseDict objectForKey:@"refresh_token"]
+ forService:self.service.serviceID
+ account:self.UID
+ keychainItem:NULL
+ error:NULL];
+ }
+
+ [password release];
+ password = [[responseDict objectForKey:@"access_token"] retain];
+
+ [conn release]; conn = nil;
+ [response release]; response = nil;
+
+ if (password) {
+ [self setGTalkMechEnabled:YES];
+ [super connect];
+ } else {
+ [self serverReportedInvalidPassword];
+ }
+}
+
+-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
+ [self setLastDisconnectionError:[NSString stringWithFormat:AILocalizedString(@"OAuth authentication failed: %@", nil), error.description]];
+}
+
+- (void)retrievePasswordThenConnect
+{
+ if ([self boolValueForProperty:@"Prompt For Password On Next Connect"] ||
+ [self boolValueForProperty:@"mustPromptForPasswordOnNextConnect"]) {
+ [adium.accountController editAccount:self onWindow:nil notifyingTarget:self];
+
+ } else {
+ /* Retrieve the user's password. Never prompt for a password, as we'll implement our own authorization handling
+ * if the password can't be retrieved.
+ */
+ [adium.accountController passwordForAccount:self
+ promptOption:AIPromptNever
+ notifyingTarget:self
+ selector:@selector(passwordReturnedForConnect:returnCode:context:)
+ context:nil];
+ }
+}
+
+- (void)editAccountSheetDidEndForAccount:(AIAccount *)inAccount withSuccess:(BOOL)successful {
+ if (successful) {
+ [self connect];
+ }
+}
+
@end
diff -r f3c9fefc59f9 -r 4a7c414c0b2d Plugins/Purple Service/AIPurpleGTalkAccountViewController.h
--- a/Plugins/Purple Service/AIPurpleGTalkAccountViewController.h Thu Apr 02 08:22:24 2015 +0200
+++ b/Plugins/Purple Service/AIPurpleGTalkAccountViewController.h Thu Apr 02 08:29:17 2015 +0200
@@ -17,7 +17,13 @@
#import "ESPurpleJabberAccountViewController.h"
@interface AIPurpleGTalkAccountViewController : ESPurpleJabberAccountViewController {
-
+ IBOutlet NSTextField *textField_code;
+
+ IBOutlet NSTextField *label_code;
+
+ IBOutlet NSButton *button_requestAccess;
}
+-(IBAction)requestAccess:(id)sender;
+
@end
diff -r f3c9fefc59f9 -r 4a7c414c0b2d Plugins/Purple Service/AIPurpleGTalkAccountViewController.m
--- a/Plugins/Purple Service/AIPurpleGTalkAccountViewController.m Thu Apr 02 08:22:24 2015 +0200
+++ b/Plugins/Purple Service/AIPurpleGTalkAccountViewController.m Thu Apr 02 08:29:17 2015 +0200
@@ -15,17 +15,19 @@
*/
#import "AIPurpleGTalkAccountViewController.h"
+#import "AIPurpleGTalkAccount.h"
@implementation AIPurpleGTalkAccountViewController
+- (NSString *)nibName{
+ return @"ESPurpleGTalkAccountView";
+}
+
- (void)awakeFromNib
{
[super awakeFromNib];
- //GTalk forces the use of TLS
- [checkBox_useTLS setEnabled:NO];
-
[checkBox_checkMail setEnabled:YES];
}
@@ -33,9 +35,49 @@
{
[super configureForAccount:inAccount];
[textField_connectServer setStringValue:@"talk.google.com"];
- [textField_connectServer setEditable:NO];
- [textField_connectServer setBordered:NO];
- [textField_connectServer setDrawsBackground:NO];
+
+ if (account.online) {
+ [button_requestAccess setEnabled:FALSE];
+ }
+}
+
+- (void)saveConfiguration
+{
+ [super saveConfiguration];
+
+ //Connection security
+ [account setPreference:[NSNumber numberWithBool:FALSE]
+ forKey:KEY_JABBER_FORCE_OLD_SSL group:GROUP_ACCOUNT_STATUS];
+ [account setPreference:[NSNumber numberWithBool:TRUE]
+ forKey:KEY_JABBER_REQUIRE_TLS group:GROUP_ACCOUNT_STATUS];
+ [account setPreference:[NSNumber numberWithBool:TRUE]
+ forKey:KEY_JABBER_VERIFY_CERTS group:GROUP_ACCOUNT_STATUS];
+ [account setPreference:[NSNumber numberWithBool:FALSE]
+ forKey:KEY_JABBER_ALLOW_PLAINTEXT group:GROUP_ACCOUNT_STATUS];
+
+ [account setPreference:textField_code.stringValue
+ forKey:KEY_GTALK_CODE group:GROUP_ACCOUNT_STATUS];
+}
+
+- (IBAction)requestAccess:(id)sender {
+ NSString *urlString = @"https://accounts.google.com/o/oauth2/auth?"
+ @"scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgoogletalk%20https://www.googleapis.com/auth/userinfo.email"
+ @"&redirect_uri=urn:ietf:wg:oauth:2.0:oob"
+ @"&response_type=code"
+ @"&client_id=" ADIUM_GTALK_CLIENT_ID;
+
+ if (account.UID) {
+ urlString = [urlString stringByAppendingFormat:@"&login_hint=%@", account.UID];
+ }
+
+ NSURL *url = [NSURL URLWithString:urlString];
+
+ [[NSWorkspace sharedWorkspace] openURL:url];
+
+ [label_code setHidden:FALSE];
+ [textField_code setHidden:FALSE];
+
+ [button_requestAccess setHidden:TRUE];
}
@end
diff -r f3c9fefc59f9 -r 4a7c414c0b2d Plugins/Purple Service/Resources/ca.lproj/ESPurpleGTalkAccountView.nib/designable.nib
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Plugins/Purple Service/Resources/ca.lproj/ESPurpleGTalkAccountView.nib/designable.nib Thu Apr 02 08:29:17 2015 +0200
@@ -0,0 +1,2905 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00">
+ <data>
+ <int key="IBDocument.SystemTarget">1060</int>
+ <string key="IBDocument.SystemVersion">14C109</string>
+ <string key="IBDocument.InterfaceBuilderVersion">6751</string>
+ <string key="IBDocument.AppKitVersion">1344.72</string>
+ <string key="IBDocument.HIToolboxVersion">757.30</string>
+ <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
+ <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
+ <string key="NS.object.0">6751</string>
+ </object>
+ <array key="IBDocument.IntegratedClassDependencies">
+ <string>NSButton</string>
+ <string>NSButtonCell</string>
+ <string>NSComboBox</string>
+ <string>NSComboBoxCell</string>
+ <string>NSCustomObject</string>
+ <string>NSCustomView</string>
+ <string>NSMenu</string>
+ <string>NSMenuItem</string>
+ <string>NSPopUpButton</string>
+ <string>NSPopUpButtonCell</string>
+ <string>NSTextField</string>
+ <string>NSTextFieldCell</string>
+ </array>
+ <array key="IBDocument.PluginDependencies">
+ <string>com.apple.InterfaceBuilder.CocoaPlugin</string>
+ </array>
+ <object class="NSMutableDictionary" key="IBDocument.Metadata">
+ <string key="NS.key.0">PluginDependencyRecalculationVersion</string>
+ <integer value="1" key="NS.object.0"/>
+ </object>
+ <array class="NSMutableArray" key="IBDocument.RootObjects" id="520546697">
+ <object class="NSCustomObject" id="393462939">
+ <string key="NSClassName">AIPurpleGTalkAccountViewController</string>
+ </object>
+ <object class="NSCustomObject" id="8487832">
+ <string key="NSClassName">FirstResponder</string>
+ </object>
+ <object class="NSCustomObject" id="356620541">
+ <string key="NSClassName">NSApplication</string>
+ </object>
+ <object class="NSCustomView" id="837853317">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSTextField" id="594525611">
+ <reference key="NSNextResponder" ref="837853317"/>
+ <int key="NSvFlags">-2147483380</int>
+ <string key="NSFrame">{{18, 70}, {140, 17}}</string>
+ <reference key="NSSuperview" ref="837853317"/>
+ <reference key="NSWindow"/>
+ <string key="NSReuseIdentifierKey">_NS:526</string>
+ <string key="NSHuggingPriority">{251, 750}</string>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="861855949">
+ <int key="NSCellFlags">68157504</int>
+ <int key="NSCellFlags2">71304192</int>
+ <string key="NSContents">Code:</string>
+ <object class="NSFont" key="NSSupport" id="745543233">
+ <bool key="IBIsSystemFont">YES</bool>
+ <double key="NSSize">13</double>
+ <int key="NSfFlags">1044</int>
+ </object>
+ <string key="NSCellIdentifier">_NS:526</string>
+ <reference key="NSControlView" ref="594525611"/>
+ <object class="NSColor" key="NSBackgroundColor" id="701108434">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlColor</string>
+ <object class="NSColor" key="NSColor" id="835004027">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="327057890">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">labelColor</string>
+ <object class="NSColor" key="NSColor" id="38993316">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MAA</bytes>
+ </object>
+ </object>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+ </object>
+ <object class="NSTextField" id="449664804">
+ <reference key="NSNextResponder" ref="837853317"/>
+ <int key="NSvFlags">-2147483380</int>
+ <string key="NSFrame">{{164, 20}, {273, 70}}</string>
+ <reference key="NSSuperview" ref="837853317"/>
+ <reference key="NSWindow"/>
+ <string key="NSReuseIdentifierKey">_NS:9</string>
+ <string key="NSAntiCompressionPriority">{250, 750}</string>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="790192952">
+ <int key="NSCellFlags">-1805647871</int>
+ <int key="NSCellFlags2">272630272</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="745543233"/>
+ <string key="NSCellIdentifier">_NS:9</string>
+ <reference key="NSControlView" ref="449664804"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <object class="NSColor" key="NSBackgroundColor" id="427835941">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textBackgroundColor</string>
+ <object class="NSColor" key="NSColor" id="571380249">
+ <int key="NSColorSpace">3</int>
+ <bytes key="NSWhite">MQA</bytes>
+ </object>
+ </object>
+ <object class="NSColor" key="NSTextColor" id="185594471">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">textColor</string>
+ <reference key="NSColor" ref="38993316"/>
+ </object>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+ </object>
+ <object class="NSButton" id="272517914">
+ <reference key="NSNextResponder" ref="837853317"/>
+ <int key="NSvFlags">256</int>
+ <string key="NSFrame">{{158, 62}, {140, 32}}</string>
+ <reference key="NSSuperview" ref="837853317"/>
+ <reference key="NSWindow"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="712274320">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">134217728</int>
+ <string key="NSContents">Request Access</string>
+ <reference key="NSSupport" ref="745543233"/>
+ <reference key="NSControlView" ref="272517914"/>
+ <int key="NSButtonFlags">-2038284288</int>
+ <int key="NSButtonFlags2">1</int>
+ <reference key="NSAlternateImage" ref="745543233"/>
+ <string key="NSAlternateContents"/>
+ <object class="NSMutableString" key="NSKeyEquivalent">
+ <characters key="NS.bytes"/>
+ </object>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSTextField" id="486429290">
+ <reference key="NSNextResponder" ref="837853317"/>
+ <int key="NSvFlags">268</int>
+ <string key="NSFrame">{{18, 98}, {421, 34}}</string>
+ <reference key="NSSuperview" ref="837853317"/>
+ <reference key="NSWindow"/>
+ <string key="NSReuseIdentifierKey">_NS:9</string>
+ <string key="NSAntiCompressionPriority">{250, 750}</string>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="827828256">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">272629760</int>
+ <string key="NSContents">You need to grant Adium access to your Google account in a web browser and copy the generated code to Adium.</string>
+ <reference key="NSSupport" ref="745543233"/>
+ <string key="NSCellIdentifier">_NS:9</string>
+ <reference key="NSControlView" ref="486429290"/>
+ <reference key="NSBackgroundColor" ref="701108434"/>
+ <reference key="NSTextColor" ref="327057890"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <bool key="NSControlAutosetMaxLayoutWidth">YES</bool>
+ <double key="NSPreferredMaxLayoutWidth">417</double>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+ </object>
+ </array>
+ <string key="NSFrameSize">{457, 152}</string>
+ <reference key="NSSuperview"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="272517914"/>
+ <string key="NSClassName">NSView</string>
+ <string key="NSExtension">NSResponder</string>
+ </object>
+ <object class="NSCustomView" id="881248978">
+ <reference key="NSNextResponder"/>
+ <int key="NSvFlags">256</int>
+ <array class="NSMutableArray" key="NSSubviews">
+ <object class="NSButton" id="767871570">
+ <reference key="NSNextResponder" ref="881248978"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{160, 95}, {211, 18}}</string>
+ <reference key="NSSuperview" ref="881248978"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="13153345"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSButtonCell" key="NSCell" id="355466928">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">0</int>
+ <string key="NSContents">Display new mail notifications</string>
+ <reference key="NSSupport" ref="745543233"/>
+ <reference key="NSControlView" ref="767871570"/>
+ <int key="NSButtonFlags">1211912448</int>
+ <int key="NSButtonFlags2">2</int>
+ <object class="NSCustomResource" key="NSNormalImage" id="206195486">
+ <string key="NSClassName">NSImage</string>
+ <string key="NSResourceName">NSSwitch</string>
+ </object>
+ <object class="NSButtonImageSource" key="NSAlternateImage" id="10299655">
+ <string key="NSImageName">NSSwitch</string>
+ </object>
+ <string key="NSAlternateContents"/>
+ <string key="NSKeyEquivalent"/>
+ <int key="NSPeriodicDelay">200</int>
+ <int key="NSPeriodicInterval">25</int>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ </object>
+ <object class="NSTextField" id="23953802">
+ <reference key="NSNextResponder" ref="881248978"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{162, 218}, {240, 22}}</string>
+ <reference key="NSSuperview" ref="881248978"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="1071692987"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="557983517">
+ <int key="NSCellFlags">-1804599231</int>
+ <int key="NSCellFlags2">4195328</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="745543233"/>
+ <reference key="NSControlView" ref="23953802"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="427835941"/>
+ <reference key="NSTextColor" ref="185594471"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+ </object>
+ <object class="NSTextField" id="795157005">
+ <reference key="NSNextResponder" ref="881248978"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{17, 220}, {140, 17}}</string>
+ <reference key="NSSuperview" ref="881248978"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="23953802"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="1046731873">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">71303168</int>
+ <string key="NSContents">BOSH Server:</string>
+ <reference key="NSSupport" ref="745543233"/>
+ <reference key="NSControlView" ref="795157005"/>
+ <reference key="NSBackgroundColor" ref="701108434"/>
+ <object class="NSColor" key="NSTextColor" id="564835922">
+ <int key="NSColorSpace">6</int>
+ <string key="NSCatalogName">System</string>
+ <string key="NSColorName">controlTextColor</string>
+ <reference key="NSColor" ref="38993316"/>
+ </object>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+ </object>
+ <object class="NSTextField" id="993950755">
+ <reference key="NSNextResponder" ref="881248978"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{162, 246}, {240, 22}}</string>
+ <reference key="NSSuperview" ref="881248978"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="795157005"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="897297612">
+ <int key="NSCellFlags">-2077228991</int>
+ <int key="NSCellFlags2">4195328</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="745543233"/>
+ <reference key="NSControlView" ref="993950755"/>
+ <reference key="NSBackgroundColor" ref="427835941"/>
+ <reference key="NSTextColor" ref="185594471"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+ </object>
+ <object class="NSTextField" id="416544706">
+ <reference key="NSNextResponder" ref="881248978"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{17, 248}, {140, 17}}</string>
+ <reference key="NSSuperview" ref="881248978"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="993950755"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="675922156">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">71303168</int>
+ <string key="NSContents">Connect Server:</string>
+ <reference key="NSSupport" ref="745543233"/>
+ <reference key="NSControlView" ref="416544706"/>
+ <reference key="NSBackgroundColor" ref="701108434"/>
+ <reference key="NSTextColor" ref="564835922"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+ </object>
+ <object class="NSTextField" id="223022732">
+ <reference key="NSNextResponder" ref="881248978"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{162, 188}, {240, 22}}</string>
+ <reference key="NSSuperview" ref="881248978"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="164156726"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="483716033">
+ <int key="NSCellFlags">-1804599231</int>
+ <int key="NSCellFlags2">4195328</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="745543233"/>
+ <reference key="NSControlView" ref="223022732"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="427835941"/>
+ <reference key="NSTextColor" ref="185594471"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+ </object>
+ <object class="NSTextField" id="1071692987">
+ <reference key="NSNextResponder" ref="881248978"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{17, 190}, {140, 17}}</string>
+ <reference key="NSSuperview" ref="881248978"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="223022732"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="275398507">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">71303168</int>
+ <string key="NSContents">File Transfer Proxies:</string>
+ <reference key="NSSupport" ref="745543233"/>
+ <reference key="NSControlView" ref="1071692987"/>
+ <reference key="NSBackgroundColor" ref="701108434"/>
+ <reference key="NSTextColor" ref="564835922"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+ </object>
+ <object class="NSTextField" id="979941359">
+ <reference key="NSNextResponder" ref="881248978"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{329, 158}, {73, 22}}</string>
+ <reference key="NSSuperview" ref="881248978"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="909698960"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="474262400">
+ <int key="NSCellFlags">-1804599231</int>
+ <int key="NSCellFlags2">4195328</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="745543233"/>
+ <reference key="NSControlView" ref="979941359"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="427835941"/>
+ <reference key="NSTextColor" ref="185594471"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+ </object>
+ <object class="NSTextField" id="198507305">
+ <reference key="NSNextResponder" ref="881248978"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{286, 160}, {38, 17}}</string>
+ <reference key="NSSuperview" ref="881248978"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="979941359"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="937801845">
+ <int key="NSCellFlags">67108864</int>
+ <int key="NSCellFlags2">71303168</int>
+ <string key="NSContents">Port:</string>
+ <reference key="NSSupport" ref="745543233"/>
+ <reference key="NSControlView" ref="198507305"/>
+ <reference key="NSBackgroundColor" ref="701108434"/>
+ <reference key="NSTextColor" ref="564835922"/>
+ </object>
+ <bool key="NSAllowsLogicalLayoutDirection">NO</bool>
+ <int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
+ </object>
+ <object class="NSTextField" id="56382938">
+ <reference key="NSNextResponder" ref="881248978"/>
+ <int key="NSvFlags">264</int>
+ <string key="NSFrame">{{162, 158}, {119, 22}}</string>
+ <reference key="NSSuperview" ref="881248978"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView" ref="198507305"/>
+ <bool key="NSEnabled">YES</bool>
+ <object class="NSTextFieldCell" key="NSCell" id="27008867">
+ <int key="NSCellFlags">-1804599231</int>
+ <int key="NSCellFlags2">4195328</int>
+ <string key="NSContents"/>
+ <reference key="NSSupport" ref="745543233"/>
+ <reference key="NSControlView" ref="56382938"/>
+ <bool key="NSDrawsBackground">YES</bool>
+ <reference key="NSBackgroundColor" ref="427835941"/>
More information about the commits
mailing list