adium 3937:34325dc02f45: Disable the live updating of user icons...
commits at adium.im
commits at adium.im
Sat Jun 25 19:16:28 UTC 2011
details: http://hg.adium.im/adium/rev/34325dc02f45
revision: 3937:34325dc02f45
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 08:56:34 2011 -0500
Disable the live updating of user icons in the message window. I've seen it turn icons into unknown-image question marks many times, and I can't figure out why. Better just not to update than to have that ugly a bug.
(transplanted from fc44da247ca25b55efda7ae4bcbedbce0dad46e3)
Subject: adium 3938:035ebbd633af: First pass at Facebook XMPP. Definitely **NOT** ready for actual use, but it does connect.
details: http://hg.adium.im/adium/rev/035ebbd633af
revision: 3938:035ebbd633af
branch: (none)
author: Colin Barrett <colin at springsandstruts.com>
date: Sun Mar 06 17:09:40 2011 -0800
First pass at Facebook XMPP. Definitely **NOT** ready for actual use, but it does connect.
(transplanted from f46d1476809049a1512b3c48e10493651b934773)
Subject: adium 3939:93e60948301f: Remove crud from the project file -- don't know how this got in there. It's possible it was breaking buildbot.
details: http://hg.adium.im/adium/rev/93e60948301f
revision: 3939:93e60948301f
branch: (none)
author: Colin Barrett <colin at springsandstruts.com>
date: Sun Mar 06 18:06:52 2011 -0800
Remove crud from the project file -- don't know how this got in there. It's possible it was breaking buildbot.
(transplanted from 81360ec3dd0a363f0f0075dc111b16fc49ac930d)
Subject: adium 3940:f121619ec7c0: Added facebook auth code to adium-space instead of libpurple-space
details: http://hg.adium.im/adium/rev/f121619ec7c0
revision: 3940:f121619ec7c0
branch: (none)
author: Evan Schoenberg
date: Wed Nov 17 21:13:09 2010 -0600
Added facebook auth code to adium-space instead of libpurple-space
(transplanted from dcd570c0a79ea93debdd26d9c856aeb84bf50a17)
Subject: adium 3941:60518a970646: Add Release-Debug config for JSON.framework. We should probably be using Adium's xcconfigs. Filing a ticket about that.
details: http://hg.adium.im/adium/rev/60518a970646
revision: 3941:60518a970646
branch: (none)
author: Colin Barrett <colin at springsandstruts.com>
date: Sun Mar 06 19:06:08 2011 -0800
Add Release-Debug config for JSON.framework. We should probably be using Adium's xcconfigs. Filing a ticket about that.
(transplanted from 153eb0ac7c31953ef27a3ffe9d19baca92a8fbe1)
Subject: adium 3942:e7e849a712ac: Max priority is 127, not 255; X-FACEBOOK-PLATFORM will now be used first where applicable
details: http://hg.adium.im/adium/rev/e7e849a712ac
revision: 3942:e7e849a712ac
branch: (none)
author: Evan Schoenberg
date: Tue Mar 08 23:27:54 2011 -0600
Max priority is 127, not 255; X-FACEBOOK-PLATFORM will now be used first where applicable
(transplanted from 90a8ddc300fd1fc85f251b3abbf5771077d8b500)
Subject: adium 3943:f1ec1687f4f4: Added a AILibpurpleDidInitialize notification which is useful for performing actions once all libpurple plugins and prpsl are guaranteed to have been loaded.
details: http://hg.adium.im/adium/rev/f1ec1687f4f4
revision: 3943:f1ec1687f4f4
branch: (none)
author: Evan Schoenberg
date: Tue Mar 08 23:29:24 2011 -0600
Added a AILibpurpleDidInitialize notification which is useful for performing actions once all libpurple plugins and prpsl are guaranteed to have been loaded.
(transplanted from dc60412e591dc5e8903d0fff0d7d67313efb0d5d)
Subject: adium 3944:c1223c4257ad: Make use of AILibpurpleDidInitialize to add the fb auth mech
details: http://hg.adium.im/adium/rev/c1223c4257ad
revision: 3944:c1223c4257ad
branch: (none)
author: Evan Schoenberg
date: Tue Mar 08 23:29:50 2011 -0600
Make use of AILibpurpleDidInitialize to add the fb auth mech
(transplanted from aaa065c24e994ef409494cffc6a4a4f12c03cfc4)
Subject: adium 3945:fc1608a06b06: Don't remove mechs; this was previously needed because of the bug fixed in [90a8ddc300fd]. We now add the fb mech when libpurple initializes; we don't need to do it at each connect (which, in turn was adding it in a duplicate fashion with every connect cycle)
details: http://hg.adium.im/adium/rev/fc1608a06b06
revision: 3945:fc1608a06b06
branch: (none)
author: Evan Schoenberg
date: Tue Mar 08 23:31:06 2011 -0600
Don't remove mechs; this was previously needed because of the bug fixed in [90a8ddc300fd]. We now add the fb mech when libpurple initializes; we don't need to do it at each connect (which, in turn was adding it in a duplicate fashion with every connect cycle)
(transplanted from deeb7fda7a0e13bf5cb8d61f5939cee8d91fa62b)
Subject: adium 3946:147fda16f856: The session secret is used with each connect cycle, and it should be stable. Store it when we get it during OAuth, then retrieve it when connecting. Refs #15038 (fixing the most broken part; the account now works across restarting ADium)
details: http://hg.adium.im/adium/rev/147fda16f856
revision: 3946:147fda16f856
branch: (none)
author: Evan Schoenberg
date: Tue Mar 08 23:44:01 2011 -0600
The session secret is used with each connect cycle, and it should be stable. Store it when we get it during OAuth, then retrieve it when connecting. Refs #15038 (fixing the most broken part; the account now works across restarting ADium)
(transplanted from 5807e50e35ddb940ffe7743700acadcce84a2418)
Subject: adium 3947:6ca0e4c7cdcf: Specify a host for network-reachability-code purposes
details: http://hg.adium.im/adium/rev/6ca0e4c7cdcf
revision: 3947:6ca0e4c7cdcf
branch: (none)
author: Evan Schoenberg
date: Tue Mar 08 23:50:22 2011 -0600
Specify a host for network-reachability-code purposes
(transplanted from fa5325ebbbfd5af65d3d1f3051e321db58234ca7)
Subject: adium 3948:cff40b2c53f7: Use 'KEY_FORMATTED_UID' as per implicit coding style
details: http://hg.adium.im/adium/rev/cff40b2c53f7
revision: 3948:cff40b2c53f7
branch: (none)
author: Evan Schoenberg
date: Wed Mar 09 00:04:23 2011 -0600
Use 'KEY_FORMATTED_UID' as per implicit coding style
(transplanted from 06dc28223b62f1f38a7bf4740fd304525b4da0c6)
Subject: adium 3949:96337afdd956: An account needs to store its formatted UID for use later. This was being done manually in some places, and since an API exists (in AIListObject) it should be overridden to just do the right thing.
details: http://hg.adium.im/adium/rev/96337afdd956
revision: 3949:96337afdd956
branch: (none)
author: Evan Schoenberg
date: Wed Mar 09 00:05:25 2011 -0600
An account needs to store its formatted UID for use later. This was being done manually in some places, and since an API exists (in AIListObject) it should be overridden to just do the right thing.
(transplanted from 85f1f82bb56f675ebae200c96b8c8e67d46a2d2b)
Subject: adium 3950:75ae78134168: Properly store and restore the formatted UID that we're given by Facebook - that is, our name. Fixes #15038
details: http://hg.adium.im/adium/rev/75ae78134168
revision: 3950:75ae78134168
branch: (none)
author: Evan Schoenberg
date: Wed Mar 09 00:06:34 2011 -0600
Properly store and restore the formatted UID that we're given by Facebook - that is, our name. Fixes #15038
(transplanted from 7a7d72afcd486d03cc3cc41bec8f098de038f9db)
Subject: adium 3951:983d9c761506: Use the setFormattedUID:notify: setter rather than setting values manually; reduces fragility
details: http://hg.adium.im/adium/rev/983d9c761506
revision: 3951:983d9c761506
branch: (none)
author: Evan Schoenberg
date: Wed Mar 09 00:07:00 2011 -0600
Use the setFormattedUID:notify: setter rather than setting values manually; reduces fragility
(transplanted from 3409e80ebced408a0b81c21963c325862c308ccd)
Subject: adium 3952:5e891ba7f283: Turn on building independent targets in parallel. Organize some FB files to be with their FB brethren.
details: http://hg.adium.im/adium/rev/5e891ba7f283
revision: 3952:5e891ba7f283
branch: (none)
author: Evan Schoenberg
date: Wed Mar 09 00:07:47 2011 -0600
Turn on building independent targets in parallel. Organize some FB files to be with their FB brethren.
(transplanted from 92acd521a497fed04878761a02d5b95572f91f69)
Subject: adium 3953:e3560542497a: A little cleanup and adding #pragma marks
details: http://hg.adium.im/adium/rev/e3560542497a
revision: 3953:e3560542497a
branch: (none)
author: Evan Schoenberg
date: Wed Mar 09 08:53:26 2011 -0600
A little cleanup and adding #pragma marks
(transplanted from f5bd2f3b50a5e006e46783e1a236d8612f1360b0)
Subject: adium 3954:dcbfaa8761b3: The facebook JID is not useful to 99.9% of our users. We could include the Facebook User ID in the Get Info window's info. Treat the person's name as their formatted UID so that we don't show the JID. Fixes #15040
details: http://hg.adium.im/adium/rev/dcbfaa8761b3
revision: 3954:dcbfaa8761b3
branch: (none)
author: Evan Schoenberg
date: Wed Mar 09 08:59:35 2011 -0600
The facebook JID is not useful to 99.9% of our users. We could include the Facebook User ID in the Get Info window's info. Treat the person's name as their formatted UID so that we don't show the JID. Fixes #15040
(transplanted from 840423f53d4921196bb08baaac704d5420896b84)
Subject: adium 3955:2890658820d1: Include the Facebook ID in the get info window. Refs #15040
details: http://hg.adium.im/adium/rev/2890658820d1
revision: 3955:2890658820d1
branch: (none)
author: Evan Schoenberg
date: Wed Mar 09 09:06:41 2011 -0600
Include the Facebook ID in the get info window. Refs #15040
(transplanted from d35bd7b6949f7d10d292f7407ae014d989db16fc)
Subject: adium 3956:85f315663501: Improved accuracy of documentation
details: http://hg.adium.im/adium/rev/85f315663501
revision: 3956:85f315663501
branch: (none)
author: Evan Schoenberg
date: Fri Mar 11 19:46:23 2011 -0600
Improved accuracy of documentation
(transplanted from c0d3471f6b92ad4225488cf295dd2b8d7ab7879e)
Subject: adium 3957:cc27feb7ef95: Make password return selector known to subclasses
details: http://hg.adium.im/adium/rev/cc27feb7ef95
revision: 3957:cc27feb7ef95
branch: (none)
author: Evan Schoenberg
date: Fri Mar 11 19:46:56 2011 -0600
Make password return selector known to subclasses
(transplanted from 158d4ff7cb9059c7ab790a22a96ad2d32a4805f0)
Subject: adium 3958:eae6d181f858: Fixed handling of Facebook authorization failures by reprompting for authorization rather than showing a useless password prompt window. Also, reorganized related code and simplified the code path. Fixes #15039
details: http://hg.adium.im/adium/rev/eae6d181f858
revision: 3958:eae6d181f858
branch: (none)
author: Evan Schoenberg
date: Fri Mar 11 19:48:12 2011 -0600
Fixed handling of Facebook authorization failures by reprompting for authorization rather than showing a useless password prompt window. Also, reorganized related code and simplified the code path. Fixes #15039
(transplanted from 4b731f6f797279859e9a70caf885ef765a6c0d32)
Subject: adium 3959:fd639c9e7ad0: Don't throw an assertion if the user canceled the authorization prompt; just close the window. Even better would be handling failures; as-is this will end up reprompting when the account attempts to connect again
details: http://hg.adium.im/adium/rev/fd639c9e7ad0
revision: 3959:fd639c9e7ad0
branch: (none)
author: Evan Schoenberg
date: Wed Mar 16 20:56:48 2011 -0500
Don't throw an assertion if the user canceled the authorization prompt; just close the window. Even better would be handling failures; as-is this will end up reprompting when the account attempts to connect again
(transplanted from 164cd4fc0d3f736c487e6879dba8ad04614162e1)
Subject: adium 3960:86bc954e0e92: Move to from SBJSON to JSONKit -- less files FTW
details: http://hg.adium.im/adium/rev/86bc954e0e92
revision: 3960:86bc954e0e92
branch: (none)
author: Colin Barrett <colin at springsandstruts.com>
date: Tue Mar 15 20:43:15 2011 -0700
Move to from SBJSON to JSONKit -- less files FTW
(transplanted from b78df89f27417a9caab4b24ddcd891f9d64bac46)
Subject: adium 3961:610b75b6c95c: AIFacebookXMPPOAuthWebViewWindowController should only be responsible for getting the OAuth token; the account should get the rest of the data.
details: http://hg.adium.im/adium/rev/610b75b6c95c
revision: 3961:610b75b6c95c
branch: (none)
author: Colin Barrett <colin at springsandstruts.com>
date: Tue Mar 15 22:01:45 2011 -0700
AIFacebookXMPPOAuthWebViewWindowController should only be responsible for getting the OAuth token; the account should get the rest of the data.
(transplanted from c3c7a69e75ee607f18c970443769ef2f75a4d66e)
Subject: adium 3962:c2ca7cc7ab0e: Transplanted 3420 manually
details: http://hg.adium.im/adium/rev/c2ca7cc7ab0e
revision: 3962:c2ca7cc7ab0e
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 12:44:52 2011 -0500
Transplanted 3420 manually
Subject: adium 3963:6008215541da: Don't throw an assertion if the user canceled the authorization prompt; just close the window. Even better would be handling failures; as-is this will end up reprompting when the account attempts to connect again
details: http://hg.adium.im/adium/rev/6008215541da
revision: 3963:6008215541da
branch: (none)
author: Evan Schoenberg
date: Wed Mar 16 20:56:48 2011 -0500
Don't throw an assertion if the user canceled the authorization prompt; just close the window. Even better would be handling failures; as-is this will end up reprompting when the account attempts to connect again
(transplanted from 8ac164d54672f3ec36456769f6f99c86326ae05c)
Subject: adium 3964:d625c06bf4df: Access 'account' through the accessor, which will lazily create as necessary, to ensure proper behavior. There's no guarantee the PurpleaAccount has already been initialized.
details: http://hg.adium.im/adium/rev/d625c06bf4df
revision: 3964:d625c06bf4df
branch: (none)
author: Evan Schoenberg
date: Wed Mar 16 21:08:44 2011 -0500
Access 'account' through the accessor, which will lazily create as necessary, to ensure proper behavior. There's no guarantee the PurpleaAccount has already been initialized.
(transplanted from 78f14fe416d99e97c4c382d71caeeb3d3d1e8044)
Subject: adium 3965:5ae89994b4b6: Whitespace fixing
details: http://hg.adium.im/adium/rev/5ae89994b4b6
revision: 3965:5ae89994b4b6
branch: (none)
author: Evan Schoenberg
date: Wed Mar 16 21:16:32 2011 -0500
Whitespace fixing
(transplanted from 0c89a4d454d9206d04e2102cff5855e0f6ada5a6)
Subject: adium 3966:eecb81105c6f: Better whitespace fixing
details: http://hg.adium.im/adium/rev/eecb81105c6f
revision: 3966:eecb81105c6f
branch: (none)
author: Evan Schoenberg
date: Wed Mar 16 21:17:01 2011 -0500
Better whitespace fixing
(transplanted from e83db11c295b0032478c38fdd7209844b483661a)
Subject: adium 3967:9579e0cc8426: Only attempt to update the account's UID in -[AIAccountViewController saveConfiguration] if there is an input field for the UID (textField_accountUID). This prevents our Facebook account from having its UID overwritten with NULL when the window closes, which in turn means that if it is closed _after_ authorization completes it overwrites. Additionally, that led to the PurpleAccount being reconfigured with a NULL username, which led to assertions. Fixes #15061
details: http://hg.adium.im/adium/rev/9579e0cc8426
revision: 3967:9579e0cc8426
branch: (none)
author: Evan Schoenberg
date: Wed Mar 16 21:57:14 2011 -0500
Only attempt to update the account's UID in -[AIAccountViewController saveConfiguration] if there is an input field for the UID (textField_accountUID). This prevents our Facebook account from having its UID overwritten with NULL when the window closes, which in turn means that if it is closed _after_ authorization completes it overwrites. Additionally, that led to the PurpleAccount being reconfigured with a NULL username, which led to assertions. Fixes #15061
(transplanted from 07a3fd67571fdac31f6a45756395904683d6e784)
Subject: adium 3968:dffff23e9918: Don't allow a Facebook account to unregister itself with the server.
details: http://hg.adium.im/adium/rev/dffff23e9918
revision: 3968:dffff23e9918
branch: (none)
author: Frank Dowsett <wixardy at adium.im>
date: Fri Mar 18 20:00:11 2011 -0400
Don't allow a Facebook account to unregister itself with the server.
(transplanted from b16a295429b2d889a5eb06a2be6523d713bda34f)
Subject: adium 3969:48ebf40c9b36: Similarly to 07a3fd67571f don't forget the account's password if there isn't a textfield for it.
details: http://hg.adium.im/adium/rev/48ebf40c9b36
revision: 3969:48ebf40c9b36
branch: (none)
author: Frank Dowsett <wixardy at adium.im>
date: Fri Mar 18 20:01:14 2011 -0400
Similarly to 07a3fd67571f don't forget the account's password if there isn't a textfield for it.
(transplanted from 38bb3e2f52512b4626e43d75535e93a8e813b86c)
Subject: adium 3970:00653d87cf77: Migrate pidgin-facebook accounts to xmpp accounts fixes #13999. The account will start its migration on connect or when the account is being edited (I might be misusing the AIEditAccount notification for that). Users with more than one Facebook account will only get one auto-migrated.
details: http://hg.adium.im/adium/rev/00653d87cf77
revision: 3970:00653d87cf77
branch: (none)
author: Frank Dowsett <wixardy at adium.im>
date: Fri Mar 18 20:46:09 2011 -0400
Migrate pidgin-facebook accounts to xmpp accounts fixes #13999. The account will start its migration on connect or when the account is being edited (I might be misusing the AIEditAccount notification for that). Users with more than one Facebook account will only get one auto-migrated.
Also move the old account's transcripts to the new account's location changing the names along the way.
(transplanted from 6ffc02f14020f759e3483bf85e05f40e81013b76)
Subject: adium 3971:93f2381d9713: Disable the auth button if we're already authorized refs #15041
details: http://hg.adium.im/adium/rev/93f2381d9713
revision: 3971:93f2381d9713
branch: (none)
author: Frank Dowsett <wixardy at adium.im>
date: Sun Mar 20 20:12:57 2011 -0400
Disable the auth button if we're already authorized refs #15041
(transplanted from 07c90e9565337dd1f1cadbbb22a76a7f859c3341)
Subject: adium 3972:47b190b7fdc3: Give a more meaningful title to the OAuth login window.
details: http://hg.adium.im/adium/rev/47b190b7fdc3
revision: 3972:47b190b7fdc3
branch: (none)
author: Frank Dowsett <wixardy at adium.im>
date: Sun Mar 20 20:14:00 2011 -0400
Give a more meaningful title to the OAuth login window.
(transplanted from b61d7600f94e5ed8fe2eda3c659adb42eaa34d94)
Subject: adium 3973:b1c868c00f34: Connecting after setup is handled elsewhere for us.
details: http://hg.adium.im/adium/rev/b1c868c00f34
revision: 3973:b1c868c00f34
branch: (none)
author: Frank Dowsett <wixardy at adium.im>
date: Sun Mar 20 20:14:53 2011 -0400
Connecting after setup is handled elsewhere for us.
(transplanted from 7e125be4fa805808558ae25a06c43f000a6c9715)
Subject: adium 3974:461d9685f252: The default statuses should be good enough.
details: http://hg.adium.im/adium/rev/461d9685f252
revision: 3974:461d9685f252
branch: (none)
author: Frank Dowsett <wixardy at adium.im>
date: Sun Mar 20 20:15:43 2011 -0400
The default statuses should be good enough.
(transplanted from 1ac6df526f60a2539655a61624306160e6a9a32e)
Subject: adium 3975:771435291351: Switch to async requests for FB setup. Refs #15041
details: http://hg.adium.im/adium/rev/771435291351
revision: 3975:771435291351
branch: (none)
author: Frank Dowsett <wixardy at adium.im>
date: Sun Mar 20 20:15:53 2011 -0400
Switch to async requests for FB setup. Refs #15041
(transplanted from 6c5ec0f20dcd3f3dddf622b0a5d1605979da9aea)
Subject: adium 3976:d161e82d8792: FBXMPP Account: Refactor Facebook network code in preparation for making it asynchronous.
details: http://hg.adium.im/adium/rev/d161e82d8792
revision: 3976:d161e82d8792
branch: (none)
author: Colin Barrett <colin at springsandstruts.com>
date: Sun Mar 20 18:13:49 2011 -0700
FBXMPP Account: Refactor Facebook network code in preparation for making it asynchronous.
(transplanted from 768ae5f17d0af7bc50dfa5cffcd622ee73171180)
Subject: adium 3977:258a9798ae9b: Comment out some extraneous logging statements
details: http://hg.adium.im/adium/rev/258a9798ae9b
revision: 3977:258a9798ae9b
branch: (none)
author: Colin Barrett <colin at springsandstruts.com>
date: Sun Mar 20 20:19:18 2011 -0700
Comment out some extraneous logging statements
(transplanted from 4ddd96b14b123364e66783ef535617530d5616c5)
Subject: adium 3978:b1075fa1748f: FBXMPP: We now make our network requests off the main thread. Woo!
details: http://hg.adium.im/adium/rev/b1075fa1748f
revision: 3978:b1075fa1748f
branch: (none)
author: Colin Barrett <colin at springsandstruts.com>
date: Sun Mar 20 20:19:55 2011 -0700
FBXMPP: We now make our network requests off the main thread. Woo!
(transplanted from 35d923dc71f44a0c11331077640667c380004de8)
Subject: adium 3979:09451954edb9: Facebook accounts are registered by email address; returning nil here is wrong and makes the setup wizard, at a minimum, break
details: http://hg.adium.im/adium/rev/09451954edb9
revision: 3979:09451954edb9
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 13:22:08 2011 -0500
Facebook accounts are registered by email address; returning nil here is wrong and makes the setup wizard, at a minimum, break
(transplanted from 2bd99c8bd47ded859f4f82cce40380c79542b6ee)
Subject: adium 3980:19ad494dc235: Update to our new app id, api key, and app secret. Also, prevent a crash by not returning nil within the webView willLoadResource method.
details: http://hg.adium.im/adium/rev/19ad494dc235
revision: 3980:19ad494dc235
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 14:20:49 2011 -0500
Update to our new app id, api key, and app secret. Also, prevent a crash by not returning nil within the webView willLoadResource method.
(transplanted from da2a143f916836c30d1322dc2516ff2729147eae)
Subject: adium 3981:f23a27da30e1: Allow any characters for facebook IDs, which are just email addresses. Better yet would be the email-acceptable-characters regexp, but I don't particularly care to handhold that much. Exercise for the reader if desired.
details: http://hg.adium.im/adium/rev/f23a27da30e1
revision: 3981:f23a27da30e1
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 14:24:56 2011 -0500
Allow any characters for facebook IDs, which are just email addresses. Better yet would be the email-acceptable-characters regexp, but I don't particularly care to handhold that much. Exercise for the reader if desired.
(transplanted from 272bc5ce6c122b5eeb1a3610ab0ebeac2a3b1981)
Subject: adium 3982:ceae6a826ea5: If allowing all characters, permit returning nil rather than requiring concoction of an awkward character set. Similarly, if ignoring no characters, return nil.
details: http://hg.adium.im/adium/rev/ceae6a826ea5
revision: 3982:ceae6a826ea5
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 14:37:47 2011 -0500
If allowing all characters, permit returning nil rather than requiring concoction of an awkward character set. Similarly, if ignoring no characters, return nil.
(transplanted from 59b9cde2a3a4a0301a088a464af66a10a3557ae0)
Subject: adium 3983:438f058cffd4: Properly prompt for auth when coming from the setup wizard, and autofill as indicated. Added commented-out code which uses the keychain to store the session secret, which we don't use since it doesn't actually work for authorization.
details: http://hg.adium.im/adium/rev/438f058cffd4
revision: 3983:438f058cffd4
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 15:38:55 2011 -0500
Properly prompt for auth when coming from the setup wizard, and autofill as indicated. Added commented-out code which uses the keychain to store the session secret, which we don't use since it doesn't actually work for authorization.
(transplanted from 72840c15430413821faff950da8f3b6703f503a5)
Subject: adium 3984:3d87ec339a65: * Added indication of progress in the Facebook XMPP account setup window
details: http://hg.adium.im/adium/rev/3d87ec339a65
revision: 3984:3d87ec339a65
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 15:55:08 2011 -0500
* Added indication of progress in the Facebook XMPP account setup window
* Handle failure more gracefully
Fixes #15041
(transplanted from d591088f7a6ffab17ffac49ee1b7879aa0d0ecc6)
Subject: adium 3985:a835e75b8381: Better default for allowedCharacters: [[NSCharacterSet illegalCharacterSet] invertedSet]
details: http://hg.adium.im/adium/rev/a835e75b8381
revision: 3985:a835e75b8381
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 16:03:23 2011 -0500
Better default for allowedCharacters: [[NSCharacterSet illegalCharacterSet] invertedSet]
(transplanted from 3ef930b8c262930682d988c80a84680c7bb33c6b)
Subject: adium 3986:ca7146a5b0d4: label improvements
details: http://hg.adium.im/adium/rev/ca7146a5b0d4
revision: 3986:ca7146a5b0d4
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 16:03:48 2011 -0500
label improvements
(transplanted from 8ba5791c2240efcf725d509b086c06f813bbdd93)
Subject: adium 3987:dbb1e4d81592: Remove unneeded parts of the old facebook account code. Refs #15077
details: http://hg.adium.im/adium/rev/dbb1e4d81592
revision: 3987:dbb1e4d81592
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 16:04:07 2011 -0500
Remove unneeded parts of the old facebook account code. Refs #15077
(transplanted from 7e2f115c44224ab10cd7246ce192217695185e8a)
Subject: adium 3988:e5c03377544b: Remove old PurpleFacebookAccountView.nib. Refs #15077
details: http://hg.adium.im/adium/rev/e5c03377544b
revision: 3988:e5c03377544b
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 16:49:51 2011 -0500
Remove old PurpleFacebookAccountView.nib. Refs #15077
(transplanted from 571c527ae057ca61231b8d5382bae3babdd07256)
Subject: adium 3989:21b1799465d4: Project updates for removing the nib. Refs #15077
details: http://hg.adium.im/adium/rev/21b1799465d4
revision: 3989:21b1799465d4
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 16:50:07 2011 -0500
Project updates for removing the nib. Refs #15077
(transplanted from 7127fc0c82a3fb722ebfd9092747d7a6e7c69c2c)
Subject: adium 3990:beeb331399c4: A little song and dance so we can do the upgrade from one service to another more smoothly
details: http://hg.adium.im/adium/rev/beeb331399c4
revision: 3990:beeb331399c4
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 17:01:37 2011 -0500
A little song and dance so we can do the upgrade from one service to another more smoothly
(transplanted from b6256c3fb26ccb2dbb933293db278d98194c6e6d)
Subject: adium 3991:d76ec06721f2: More changes for smooth service upgrading (for facebook-xmpp)
details: http://hg.adium.im/adium/rev/d76ec06721f2
revision: 3991:d76ec06721f2
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 17:02:10 2011 -0500
More changes for smooth service upgrading (for facebook-xmpp)
(transplanted from ade4668efa7a53ba5adfbaeced4b30e62472c136)
Subject: adium 3992:8af85a76ef99: Reworked the migration process for facebook-http to facebook-xmpp:
details: http://hg.adium.im/adium/rev/8af85a76ef99
revision: 3992:8af85a76ef99
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 17:04:11 2011 -0500
Reworked the migration process for facebook-http to facebook-xmpp:
- Now happens seamlessly when the first connect attempt succeeds.
- The old service plugin will be kept around solely for upgrade purposes, but the same account gets to shift over to the new service (which, in turn, means a smoother first-launch experience for existing users)
- Improved feedback in the account view controller
(transplanted from 9e53b161122a1336dce1f12c0a19cd25fa72007b)
Subject: adium 3993:df16cf60aed0: Remove errant log
details: http://hg.adium.im/adium/rev/df16cf60aed0
revision: 3993:df16cf60aed0
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 17:31:36 2011 -0500
Remove errant log
(transplanted from fe1a296ad08ea5a524d41646b825655c4a5fe849)
Subject: adium 3994:230f06900706: Hide the old facebook service from service lists. Closes #15077
details: http://hg.adium.im/adium/rev/230f06900706
revision: 3994:230f06900706
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 17:43:34 2011 -0500
Hide the old facebook service from service lists. Closes #15077
(transplanted from 3dfe1c87356ac48a22d6ac3a0f571300a9d9be96)
Subject: adium 3995:f9379bfbb48a: It's the real deal
details: http://hg.adium.im/adium/rev/f9379bfbb48a
revision: 3995:f9379bfbb48a
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 18:06:38 2011 -0500
It's the real deal
(transplanted from b0a985db87ce0dad10a83989238badd5a43930ab)
Subject: adium 3996:15ab135fd1ce: Set the 'keep me logged in' checkbox if possible
details: http://hg.adium.im/adium/rev/15ab135fd1ce
revision: 3996:15ab135fd1ce
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 18:07:04 2011 -0500
Set the 'keep me logged in' checkbox if possible
(transplanted from 442187d53cb38d3b503f2ad074788abb9e509733)
Subject: adium 3997:d71c52e92e91: Synthesize as needed
details: http://hg.adium.im/adium/rev/d71c52e92e91
revision: 3997:d71c52e92e91
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 18:07:22 2011 -0500
Synthesize as needed
(transplanted from 35a081dcb7f635333bc65b42fbfe6b9bbc144fce)
Subject: adium 3998:9af09ef5198a: Add an outlet for the help button in case it might be useful later
details: http://hg.adium.im/adium/rev/9af09ef5198a
revision: 3998:9af09ef5198a
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 18:07:39 2011 -0500
Add an outlet for the help button in case it might be useful later
(transplanted from 4a4b2da4663693b44b3fa4265fb554d3031db23e)
Subject: adium 3999:ef00f9d8cf12: Update the text of the account view
details: http://hg.adium.im/adium/rev/ef00f9d8cf12
revision: 3999:ef00f9d8cf12
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 18:08:11 2011 -0500
Update the text of the account view
(transplanted from 97e2f2d3d82fd80b5516586e89226b58732ca1a8)
Subject: adium 4000:f6b5032e42e3: Made the Facebook authorization window properly localizable
details: http://hg.adium.im/adium/rev/f6b5032e42e3
revision: 4000:f6b5032e42e3
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 18:13:26 2011 -0500
Made the Facebook authorization window properly localizable
(transplanted from fcd78a53a9a016fd49c419fe4b298e62e461770e)
Subject: adium 4001:8f4c7d9dd9f5: AILocalizationTextField
details: http://hg.adium.im/adium/rev/8f4c7d9dd9f5
revision: 4001:8f4c7d9dd9f5
branch: (none)
author: Evan Schoenberg
date: Fri Jun 24 18:13:52 2011 -0500
AILocalizationTextField
(transplanted from a0a460790cfe67c398a8fb23f26de965ed57e109)
Subject: adium 4002:190394c802ee: Restored the project file to rev 3870, where it stood before the facebook-xmpp merge
details: http://hg.adium.im/adium/rev/190394c802ee
revision: 4002:190394c802ee
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 13:13:26 2011 -0500
Restored the project file to rev 3870, where it stood before the facebook-xmpp merge
Subject: adium 4003:eb38813cb9d8: Updated project for facebook-xmpp files
details: http://hg.adium.im/adium/rev/eb38813cb9d8
revision: 4003:eb38813cb9d8
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 13:20:36 2011 -0500
Updated project for facebook-xmpp files
Subject: adium 4004:c0b5a6f809fe: Remove file as folder
details: http://hg.adium.im/adium/rev/c0b5a6f809fe
revision: 4004:c0b5a6f809fe
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 13:33:27 2011 -0500
Remove file as folder
Subject: adium 4005:177c3a5b95c1: Added pt infoplist.strings
details: http://hg.adium.im/adium/rev/177c3a5b95c1
revision: 4005:177c3a5b95c1
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 13:33:39 2011 -0500
Added pt infoplist.strings
Subject: adium 4006:4360b6d86185: ADded a blank schema.strings file; will need translation eventually
details: http://hg.adium.im/adium/rev/4360b6d86185
revision: 4006:4360b6d86185
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 13:34:26 2011 -0500
ADded a blank schema.strings file; will need translation eventually
Subject: adium 4007:2c52376b250a: Let's try this again. Project to [3870].
details: http://hg.adium.im/adium/rev/2c52376b250a
revision: 4007:2c52376b250a
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 13:38:48 2011 -0500
Let's try this again. Project to [3870].
Subject: adium 4008:266016ee1607: Fixed a syntax error I created
details: http://hg.adium.im/adium/rev/266016ee1607
revision: 4008:266016ee1607
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 13:58:21 2011 -0500
Fixed a syntax error I created
Subject: adium 4009:b004937dea25: Removed a stray character
details: http://hg.adium.im/adium/rev/b004937dea25
revision: 4009:b004937dea25
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 13:58:45 2011 -0500
Removed a stray character
Subject: adium 4010:2d2df07686e3: Further project work
details: http://hg.adium.im/adium/rev/2d2df07686e3
revision: 4010:2d2df07686e3
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 13:59:07 2011 -0500
Further project work
Subject: adium 4011:53543288ad84: Newline at end of file and a semicolon where it belongs
details: http://hg.adium.im/adium/rev/53543288ad84
revision: 4011:53543288ad84
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 14:01:04 2011 -0500
Newline at end of file and a semicolon where it belongs
Subject: adium 4012:7ab7845b6f73: Resolved some warnings
details: http://hg.adium.im/adium/rev/7ab7845b6f73
revision: 4012:7ab7845b6f73
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 14:01:14 2011 -0500
Resolved some warnings
Subject: adium 4013:b4009e98ad3d: Silencing mercurial, who got confused
details: http://hg.adium.im/adium/rev/b4009e98ad3d
revision: 4013:b4009e98ad3d
branch: (none)
author: Evan Schoenberg
date: Sat Jun 25 14:16:19 2011 -0500
Silencing mercurial, who got confused
diffs (truncated from 27806 to 1000 lines):
diff -r af2c953c613e -r b4009e98ad3d Adium.xcodeproj/project.pbxproj
--- a/Adium.xcodeproj/project.pbxproj Sat Jun 18 01:35:01 2011 +0200
+++ b/Adium.xcodeproj/project.pbxproj Sat Jun 25 14:16:19 2011 -0500
@@ -96,7 +96,6 @@
111E89020F93FE3900A5F18B /* AIUserHostTooltip.m in Sources */ = {isa = PBXBuildFile; fileRef = 111E89000F93FE3900A5F18B /* AIUserHostTooltip.m */; };
1121B29A0F896A720047EC66 /* AIContactVisibilityControlPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 1121B2990F896A720047EC66 /* AIContactVisibilityControlPlugin.m */; };
112523190F5F7F86003FC58A /* AITwitterURLHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 112523180F5F7F86003FC58A /* AITwitterURLHandler.m */; };
- 1125DD3C0FF5A5D600544B92 /* PurpleFacebookAccountView.nib in Resources */ = {isa = PBXBuildFile; fileRef = 1125DD3B0FF5A5D600544B92 /* PurpleFacebookAccountView.nib */; };
112939020FD5AC1B00FA8F53 /* AIConfirmationsAdvancedPreferences.nib in Resources */ = {isa = PBXBuildFile; fileRef = 112939010FD5AC1B00FA8F53 /* AIConfirmationsAdvancedPreferences.nib */; };
112939100FD5AE1400FA8F53 /* AIConfirmationsAdvancedPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 1129390F0FD5AE1400FA8F53 /* AIConfirmationsAdvancedPreferences.m */; };
112B47240F82DC2300690E84 /* AIGroupChatStatusIcons.h in Headers */ = {isa = PBXBuildFile; fileRef = 112B47220F82DC2300690E84 /* AIGroupChatStatusIcons.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -698,6 +697,22 @@
34D0FDD20956186200DCB678 /* ESPersonalPreferencesPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D0FDD00956186200DCB678 /* ESPersonalPreferencesPlugin.m */; };
34D0FDD80956187700DCB678 /* ESPersonalPreferences.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D0FDD60956187700DCB678 /* ESPersonalPreferences.m */; };
34D0FF8509569FE500DCB678 /* PersonalPreferencesDefaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = 34D0FF8409569FE500DCB678 /* PersonalPreferencesDefaults.plist */; };
+ 34D8153A13B663650022C8C4 /* AIFacebookXMPPAccount.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D8153013B663650022C8C4 /* AIFacebookXMPPAccount.h */; };
+ 34D8153B13B663650022C8C4 /* AIFacebookXMPPAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8153113B663650022C8C4 /* AIFacebookXMPPAccount.m */; };
+ 34D8153C13B663650022C8C4 /* AIFacebookXMPPAccountView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34D8153213B663650022C8C4 /* AIFacebookXMPPAccountView.xib */; };
+ 34D8153D13B663650022C8C4 /* AIFacebookXMPPAccountViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D8153313B663650022C8C4 /* AIFacebookXMPPAccountViewController.h */; };
+ 34D8153E13B663650022C8C4 /* AIFacebookXMPPAccountViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8153413B663650022C8C4 /* AIFacebookXMPPAccountViewController.m */; };
+ 34D8153F13B663650022C8C4 /* AIFacebookXMPPOauthWebViewWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 34D8153513B663650022C8C4 /* AIFacebookXMPPOauthWebViewWindow.xib */; };
+ 34D8154013B663650022C8C4 /* AIFacebookXMPPOAuthWebViewWindowController.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D8153613B663650022C8C4 /* AIFacebookXMPPOAuthWebViewWindowController.h */; };
+ 34D8154113B663650022C8C4 /* AIFacebookXMPPOAuthWebViewWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8153713B663650022C8C4 /* AIFacebookXMPPOAuthWebViewWindowController.m */; };
+ 34D8154213B663650022C8C4 /* AIFacebookXMPPService.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D8153813B663650022C8C4 /* AIFacebookXMPPService.h */; };
+ 34D8154313B663650022C8C4 /* AIFacebookXMPPService.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8153913B663650022C8C4 /* AIFacebookXMPPService.m */; };
+ 34D8154613B663700022C8C4 /* JSONKit.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D8154413B663700022C8C4 /* JSONKit.h */; };
+ 34D8154713B663700022C8C4 /* JSONKit.m in Sources */ = {isa = PBXBuildFile; fileRef = 34D8154513B663700022C8C4 /* JSONKit.m */; };
+ 34D8154D13B663A80022C8C4 /* auth_fb.c in Sources */ = {isa = PBXBuildFile; fileRef = 34D8154913B663A80022C8C4 /* auth_fb.c */; };
+ 34D8154E13B663A80022C8C4 /* auth_fb.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D8154A13B663A80022C8C4 /* auth_fb.h */; };
+ 34D8154F13B663A80022C8C4 /* fbapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 34D8154B13B663A80022C8C4 /* fbapi.c */; };
+ 34D8155013B663A80022C8C4 /* fbapi.h in Headers */ = {isa = PBXBuildFile; fileRef = 34D8154C13B663A80022C8C4 /* fbapi.h */; };
34D832A007CBD61A006466F2 /* ContactListDefaults.plist in Resources */ = {isa = PBXBuildFile; fileRef = 34D8329F07CBD61A006466F2 /* ContactListDefaults.plist */; };
34D832AE07CBD62C006466F2 /* AdiumEmoticonset.icns in Resources */ = {isa = PBXBuildFile; fileRef = 34D832A507CBD62B006466F2 /* AdiumEmoticonset.icns */; };
34D832AF07CBD62C006466F2 /* AdiumScripts.icns in Resources */ = {isa = PBXBuildFile; fileRef = 34D832A607CBD62B006466F2 /* AdiumScripts.icns */; };
@@ -1816,32 +1831,6 @@
1121B2990F896A720047EC66 /* AIContactVisibilityControlPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIContactVisibilityControlPlugin.m; path = Source/AIContactVisibilityControlPlugin.m; sourceTree = "<group>"; };
112523170F5F7F86003FC58A /* AITwitterURLHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AITwitterURLHandler.h; path = "Plugins/Twitter Plugin/AITwitterURLHandler.h"; sourceTree = "<group>"; };
112523180F5F7F86003FC58A /* AITwitterURLHandler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AITwitterURLHandler.m; path = "Plugins/Twitter Plugin/AITwitterURLHandler.m"; sourceTree = "<group>"; };
- 1125DD380FF5A58F00544B92 /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = "Plugins/Purple Service/en.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD3D0FF5A5DB00544B92 /* ca */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ca; path = "Plugins/Purple Service/ca.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD3E0FF5A5DD00544B92 /* cs */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = cs; path = "Plugins/Purple Service/cs.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD3F0FF5A5DF00544B92 /* da */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = da; path = "Plugins/Purple Service/da.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD400FF5A5E100544B92 /* de */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = de; path = "Plugins/Purple Service/de.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD410FF5A5E300544B92 /* el_GR */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = el_GR; path = "Plugins/Purple Service/el_GR.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD420FF5A5E500544B92 /* en_GB */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = en_GB; path = "Plugins/Purple Service/en_GB.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD430FF5A5E700544B92 /* es */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = es; path = "Plugins/Purple Service/es.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD440FF5A5E900544B92 /* fi */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = fi; path = "Plugins/Purple Service/fi.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD450FF5A5EC00544B92 /* fr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = fr; path = "Plugins/Purple Service/fr.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD460FF5A5EE00544B92 /* fr_CA */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = fr_CA; path = "Plugins/Purple Service/fr_CA.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD470FF5A5F000544B92 /* hu */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = hu; path = "Plugins/Purple Service/hu.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD480FF5A5F200544B92 /* is */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = is; path = "Plugins/Purple Service/is.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD490FF5A5F400544B92 /* it */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = it; path = "Plugins/Purple Service/it.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD4A0FF5A5F600544B92 /* ja */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ja; path = "Plugins/Purple Service/ja.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD4B0FF5A5F800544B92 /* nb */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = nb; path = "Plugins/Purple Service/nb.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD4C0FF5A5FA00544B92 /* nl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = nl; path = "Plugins/Purple Service/nl.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD4D0FF5A5FB00544B92 /* pl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pl; path = "Plugins/Purple Service/pl.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD4E0FF5A5FD00544B92 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pt_PT; path = "Plugins/Purple Service/pt_PT.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD4F0FF5A5FF00544B92 /* pt */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = pt; path = "Plugins/Purple Service/pt.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD500FF5A60100544B92 /* ru */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ru; path = "Plugins/Purple Service/ru.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD510FF5A60300544B92 /* sl */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sl; path = "Plugins/Purple Service/sl.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD520FF5A60500544B92 /* sv */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sv; path = "Plugins/Purple Service/sv.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD530FF5A60700544B92 /* tr */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = tr; path = "Plugins/Purple Service/tr.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD540FF5A60900544B92 /* zh_CN */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = zh_CN; path = "Plugins/Purple Service/zh_CN.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
- 1125DD550FF5A60B00544B92 /* zh_TW */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = zh_TW; path = "Plugins/Purple Service/zh_TW.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
112939010FD5AC1B00FA8F53 /* AIConfirmationsAdvancedPreferences.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = AIConfirmationsAdvancedPreferences.nib; path = Resources/AIConfirmationsAdvancedPreferences.nib; sourceTree = "<group>"; };
1129390E0FD5AE1400FA8F53 /* AIConfirmationsAdvancedPreferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIConfirmationsAdvancedPreferences.h; path = Source/AIConfirmationsAdvancedPreferences.h; sourceTree = "<group>"; };
1129390F0FD5AE1400FA8F53 /* AIConfirmationsAdvancedPreferences.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIConfirmationsAdvancedPreferences.m; path = Source/AIConfirmationsAdvancedPreferences.m; sourceTree = "<group>"; };
@@ -3641,6 +3630,22 @@
34D369ED08E7544D00E15E40 /* AIColorPickerSliders.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIColorPickerSliders.h; path = "Frameworks/Adium Framework/Source/AIColorPickerSliders.h"; sourceTree = "<group>"; };
34D369EE08E7544D00E15E40 /* AIColorPickerSliders.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIColorPickerSliders.m; path = "Frameworks/Adium Framework/Source/AIColorPickerSliders.m"; sourceTree = "<group>"; };
34D43504051ADC10003B2F21 /* DualWindowDefaults.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = DualWindowDefaults.plist; path = "Plugins/Dual Window Interface/DualWindowDefaults.plist"; sourceTree = "<group>"; };
+ 34D8153013B663650022C8C4 /* AIFacebookXMPPAccount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIFacebookXMPPAccount.h; path = "Plugins/Purple Service/AIFacebookXMPPAccount.h"; sourceTree = "<group>"; };
+ 34D8153113B663650022C8C4 /* AIFacebookXMPPAccount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIFacebookXMPPAccount.m; path = "Plugins/Purple Service/AIFacebookXMPPAccount.m"; sourceTree = "<group>"; };
+ 34D8153213B663650022C8C4 /* AIFacebookXMPPAccountView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = AIFacebookXMPPAccountView.xib; path = "Plugins/Purple Service/AIFacebookXMPPAccountView.xib"; sourceTree = "<group>"; };
+ 34D8153313B663650022C8C4 /* AIFacebookXMPPAccountViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIFacebookXMPPAccountViewController.h; path = "Plugins/Purple Service/AIFacebookXMPPAccountViewController.h"; sourceTree = "<group>"; };
+ 34D8153413B663650022C8C4 /* AIFacebookXMPPAccountViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIFacebookXMPPAccountViewController.m; path = "Plugins/Purple Service/AIFacebookXMPPAccountViewController.m"; sourceTree = "<group>"; };
+ 34D8153513B663650022C8C4 /* AIFacebookXMPPOauthWebViewWindow.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; name = AIFacebookXMPPOauthWebViewWindow.xib; path = "Plugins/Purple Service/AIFacebookXMPPOauthWebViewWindow.xib"; sourceTree = "<group>"; };
+ 34D8153613B663650022C8C4 /* AIFacebookXMPPOAuthWebViewWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIFacebookXMPPOAuthWebViewWindowController.h; path = "Plugins/Purple Service/AIFacebookXMPPOAuthWebViewWindowController.h"; sourceTree = "<group>"; };
+ 34D8153713B663650022C8C4 /* AIFacebookXMPPOAuthWebViewWindowController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AIFacebookXMPPOAuthWebViewWindowController.m; path = "Plugins/Purple Service/AIFacebookXMPPOAuthWebViewWindowController.m"; sourceTree = "<group>"; };
+ 34D8153813B663650022C8C4 /* AIFacebookXMPPService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIFacebookXMPPService.h; path = "Plugins/Purple Service/AIFacebookXMPPService.h"; sourceTree = "<group>"; };
+ 34D8153913B663650022C8C4 /* AIFacebookXMPPService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIFacebookXMPPService.m; path = "Plugins/Purple Service/AIFacebookXMPPService.m"; sourceTree = "<group>"; };
+ 34D8154413B663700022C8C4 /* JSONKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSONKit.h; path = Frameworks/JSONKit/JSONKit.h; sourceTree = "<group>"; };
+ 34D8154513B663700022C8C4 /* JSONKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = JSONKit.m; path = Frameworks/JSONKit/JSONKit.m; sourceTree = "<group>"; };
+ 34D8154913B663A80022C8C4 /* auth_fb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = auth_fb.c; sourceTree = "<group>"; };
+ 34D8154A13B663A80022C8C4 /* auth_fb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = auth_fb.h; sourceTree = "<group>"; };
+ 34D8154B13B663A80022C8C4 /* fbapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = fbapi.c; sourceTree = "<group>"; };
+ 34D8154C13B663A80022C8C4 /* fbapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fbapi.h; sourceTree = "<group>"; };
34D8324807CBD53A006466F2 /* FTProgressRevealRollover.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = FTProgressRevealRollover.tif; path = Resources/FTProgressRevealRollover.tif; sourceTree = "<group>"; };
34D8324907CBD53A006466F2 /* FTProgressRevealRollover_Selected.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = FTProgressRevealRollover_Selected.tif; path = Resources/FTProgressRevealRollover_Selected.tif; sourceTree = "<group>"; };
34D8324A07CBD53A006466F2 /* FTProgressStopRollover_Selected.tif */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; name = FTProgressStopRollover_Selected.tif; path = Resources/FTProgressStopRollover_Selected.tif; sourceTree = "<group>"; };
@@ -3937,7 +3942,7 @@
4B539C4B05EFD6CD00E5921A /* AIWebKitMessageViewPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIWebKitMessageViewPlugin.h; path = "Plugins/WebKit Message View/AIWebKitMessageViewPlugin.h"; sourceTree = "<group>"; };
4B539C4C05EFD6CD00E5921A /* AIWebKitMessageViewPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIWebKitMessageViewPlugin.m; path = "Plugins/WebKit Message View/AIWebKitMessageViewPlugin.m"; sourceTree = "<group>"; };
4B539C5105EFD6FA00E5921A /* AIWebKitMessageViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIWebKitMessageViewController.h; path = "Plugins/WebKit Message View/AIWebKitMessageViewController.h"; sourceTree = "<group>"; };
- 4B539C5205EFD6FB00E5921A /* AIWebKitMessageViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIWebKitMessageViewController.m; path = "Plugins/WebKit Message View/AIWebKitMessageViewController.m"; sourceTree = "<group>"; };
+ 4B539C5205EFD6FB00E5921A /* AIWebKitMessageViewController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AIWebKitMessageViewController.m; path = "Plugins/WebKit Message View/AIWebKitMessageViewController.m"; sourceTree = "<group>"; };
4B5827E80613CE9D0004BD25 /* AIMessageEntryTextView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AIMessageEntryTextView.h; path = "Frameworks/Adium Framework/Source/AIMessageEntryTextView.h"; sourceTree = "<group>"; };
4B5827E90613CE9D0004BD25 /* AIMessageEntryTextView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = AIMessageEntryTextView.m; path = "Frameworks/Adium Framework/Source/AIMessageEntryTextView.m"; sourceTree = "<group>"; };
4B588C9807AC23A9001832A9 /* en */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = en; path = "Frameworks/Adium Framework/Resources/en.lproj/EditStateSheet.nib"; sourceTree = "<group>"; };
@@ -4721,7 +4726,6 @@
C4D29CC70C3C2E49001545A2 /* ICImport.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = ICImport.nib; path = Resources/ICImport.nib; sourceTree = SOURCE_ROOT; };
D10A3A2A122C61EF003B5A7E /* source-destination.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "source-destination.png"; path = "Resources/source-destination.png"; sourceTree = "<group>"; };
D182F1B411DFF23700E33AE2 /* sk_SK */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = sk_SK; path = sk_SK.lproj/InfoPlist.strings; sourceTree = "<group>"; };
- D182F1B511DFF23700E33AE2 /* sk_SK */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = sk_SK; path = "Plugins/Purple Service/sk_SK.lproj/PurpleFacebookAccountView.nib"; sourceTree = "<group>"; };
D182F1B611DFF23700E33AE2 /* sk_SK */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = sk_SK; path = sk_SK.lproj/schema.strings; sourceTree = "<group>"; };
D3DA2E3E052E65DE00A8010B /* LNAboutBoxController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = LNAboutBoxController.m; path = Source/LNAboutBoxController.m; sourceTree = "<group>"; };
D3DA2E40052E65E400A8010B /* LNAboutBoxController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = LNAboutBoxController.h; path = Source/LNAboutBoxController.h; sourceTree = "<group>"; };
@@ -4733,6 +4737,18 @@
EE147A7F0896B33400A21377 /* OWABSearchWindowController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = OWABSearchWindowController.h; path = Source/OWABSearchWindowController.h; sourceTree = "<group>"; };
EEC461B4096D68580028632F /* OWSpellingPerContactPlugin.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = OWSpellingPerContactPlugin.m; path = Source/OWSpellingPerContactPlugin.m; sourceTree = "<group>"; };
EEC461B5096D68580028632F /* OWSpellingPerContactPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = OWSpellingPerContactPlugin.h; path = Source/OWSpellingPerContactPlugin.h; sourceTree = "<group>"; };
+ EFA39C031296658B00B36EBB /* AIFacebookXMPPAccount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIFacebookXMPPAccount.h; path = "Plugins/Purple Service/AIFacebookXMPPAccount.h"; sourceTree = "<group>"; };
+ EFA39C041296658B00B36EBB /* AIFacebookXMPPAccount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIFacebookXMPPAccount.m; path = "Plugins/Purple Service/AIFacebookXMPPAccount.m"; sourceTree = "<group>"; };
+ EFA39C051296658B00B36EBB /* AIFacebookXMPPAccountView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = AIFacebookXMPPAccountView.xib; path = "Plugins/Purple Service/AIFacebookXMPPAccountView.xib"; sourceTree = "<group>"; };
+ EFA39C061296658B00B36EBB /* AIFacebookXMPPAccountViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIFacebookXMPPAccountViewController.h; path = "Plugins/Purple Service/AIFacebookXMPPAccountViewController.h"; sourceTree = "<group>"; };
+ EFA39C071296658B00B36EBB /* AIFacebookXMPPAccountViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIFacebookXMPPAccountViewController.m; path = "Plugins/Purple Service/AIFacebookXMPPAccountViewController.m"; sourceTree = "<group>"; };
+ EFA39C081296658B00B36EBB /* AIFacebookXMPPService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIFacebookXMPPService.h; path = "Plugins/Purple Service/AIFacebookXMPPService.h"; sourceTree = "<group>"; };
+ EFA39C091296658B00B36EBB /* AIFacebookXMPPService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIFacebookXMPPService.m; path = "Plugins/Purple Service/AIFacebookXMPPService.m"; sourceTree = "<group>"; };
+ EFA39C2F12966B2600B36EBB /* AIFacebookXMPPOAuthWebViewWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AIFacebookXMPPOAuthWebViewWindowController.h; path = "Plugins/Purple Service/AIFacebookXMPPOAuthWebViewWindowController.h"; sourceTree = "<group>"; };
+ EFA39C3012966B2600B36EBB /* AIFacebookXMPPOAuthWebViewWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AIFacebookXMPPOAuthWebViewWindowController.m; path = "Plugins/Purple Service/AIFacebookXMPPOAuthWebViewWindowController.m"; sourceTree = "<group>"; };
+ EFA39CF512966F5D00B36EBB /* AIFacebookXMPPOauthWebViewWindow.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = AIFacebookXMPPOauthWebViewWindow.xib; path = "Plugins/Purple Service/AIFacebookXMPPOauthWebViewWindow.xib"; sourceTree = "<group>"; };
+ EFB036A213305E8800CB421E /* JSONKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = JSONKit.h; path = Frameworks/JSONKit/JSONKit.h; sourceTree = SOURCE_ROOT; };
+ EFB036A313305E8800CB421E /* JSONKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = JSONKit.m; path = Frameworks/JSONKit/JSONKit.m; sourceTree = SOURCE_ROOT; };
EFB1C3120DDBDA3100B3973D /* AITwitterIMPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AITwitterIMPlugin.h; path = Source/AITwitterIMPlugin.h; sourceTree = "<group>"; };
EFB1C3130DDBDA3100B3973D /* AITwitterIMPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AITwitterIMPlugin.m; path = Source/AITwitterIMPlugin.m; sourceTree = "<group>"; };
F11B9621051CDB3B0000000E /* AIMessageAliasPlugin.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AIMessageAliasPlugin.h; path = "Plugins/Message Alias Support/AIMessageAliasPlugin.h"; sourceTree = "<group>"; };
@@ -5091,6 +5107,10 @@
11EE1B480CDCFAF40097F246 /* libpurple_extensions */ = {
isa = PBXGroup;
children = (
+ 34D8154913B663A80022C8C4 /* auth_fb.c */,
+ 34D8154A13B663A80022C8C4 /* auth_fb.h */,
+ 34D8154B13B663A80022C8C4 /* fbapi.c */,
+ 34D8154C13B663A80022C8C4 /* fbapi.h */,
11EE1B490CDCFAF40097F246 /* oscar-adium.c */,
11EE1B4A0CDCFAF40097F246 /* oscar-adium.h */,
811033500CDE170B00EC6038 /* ssl-cdsa.c */,
@@ -5724,15 +5744,18 @@
345D689D0F1FD575002F2D01 /* Facebook */ = {
isa = PBXGroup;
children = (
- 1125DD3B0FF5A5D600544B92 /* PurpleFacebookAccountView.nib */,
- 345D68A60F1FD5AA002F2D01 /* PurpleFacebookAccount.h */,
- 345D68A70F1FD5AA002F2D01 /* PurpleFacebookAccount.m */,
- 34064D0E0F21B34200AA6FE3 /* PurpleFacebookAccountViewController.m */,
- 34064D0F0F21B34200AA6FE3 /* PurpleFacebookAccountViewController.h */,
- 345D68A00F1FD59F002F2D01 /* PurpleFacebookService.h */,
- 345D68A10F1FD59F002F2D01 /* PurpleFacebookService.m */,
- 345D68950F1FD563002F2D01 /* facebook.png */,
- 345D68960F1FD563002F2D01 /* facebook-small.png */,
+ 34D8153013B663650022C8C4 /* AIFacebookXMPPAccount.h */,
+ 34D8153113B663650022C8C4 /* AIFacebookXMPPAccount.m */,
+ 34D8153213B663650022C8C4 /* AIFacebookXMPPAccountView.xib */,
+ 34D8153313B663650022C8C4 /* AIFacebookXMPPAccountViewController.h */,
+ 34D8153413B663650022C8C4 /* AIFacebookXMPPAccountViewController.m */,
+ 34D8153513B663650022C8C4 /* AIFacebookXMPPOauthWebViewWindow.xib */,
+ 34D8153613B663650022C8C4 /* AIFacebookXMPPOAuthWebViewWindowController.h */,
+ 34D8153713B663650022C8C4 /* AIFacebookXMPPOAuthWebViewWindowController.m */,
+ 34D8153813B663650022C8C4 /* AIFacebookXMPPService.h */,
+ 34D8153913B663650022C8C4 /* AIFacebookXMPPService.m */,
+ 34D8154813B663730022C8C4 /* JSON Kit */,
+ 34D8152D13B6634A0022C8C4 /* Legacy (Upgrade path) */,
);
name = Facebook;
sourceTree = "<group>";
@@ -6367,6 +6390,30 @@
name = "Localization Assistance";
sourceTree = "<group>";
};
+ 34D8152D13B6634A0022C8C4 /* Legacy (Upgrade path) */ = {
+ isa = PBXGroup;
+ children = (
+ 345D68A60F1FD5AA002F2D01 /* PurpleFacebookAccount.h */,
+ 345D68A70F1FD5AA002F2D01 /* PurpleFacebookAccount.m */,
+ 34064D0E0F21B34200AA6FE3 /* PurpleFacebookAccountViewController.m */,
+ 34064D0F0F21B34200AA6FE3 /* PurpleFacebookAccountViewController.h */,
+ 345D68A00F1FD59F002F2D01 /* PurpleFacebookService.h */,
+ 345D68A10F1FD59F002F2D01 /* PurpleFacebookService.m */,
+ 345D68950F1FD563002F2D01 /* facebook.png */,
+ 345D68960F1FD563002F2D01 /* facebook-small.png */,
+ );
+ name = "Legacy (Upgrade path)";
+ sourceTree = "<group>";
+ };
+ 34D8154813B663730022C8C4 /* JSON Kit */ = {
+ isa = PBXGroup;
+ children = (
+ 34D8154413B663700022C8C4 /* JSONKit.h */,
+ 34D8154513B663700022C8C4 /* JSONKit.m */,
+ );
+ name = "JSON Kit";
+ sourceTree = "<group>";
+ };
34D8342B07CBE6A4006466F2 /* External Sources */ = {
isa = PBXGroup;
children = (
@@ -7262,6 +7309,7 @@
4BD672C406001B530049CAF7 /* Services */ = {
isa = PBXGroup;
children = (
+ EFA39B5C1294F9FB00B36EBB /* FB XMPP */,
11F738F40F58D15500B3285B /* Twitter */,
4947F5BB0655E7C400B791E5 /* Bonjour */,
4B7F278605440C6200CDFC90 /* Libpurple */,
@@ -8586,6 +8634,33 @@
name = "Spelling Per Contact";
sourceTree = "<group>";
};
+ EFA39B5C1294F9FB00B36EBB /* FB XMPP */ = {
+ isa = PBXGroup;
+ children = (
+ EFB036A113305E6500CB421E /* JSONKit */,
+ EFA39C031296658B00B36EBB /* AIFacebookXMPPAccount.h */,
+ EFA39C041296658B00B36EBB /* AIFacebookXMPPAccount.m */,
+ EFA39C051296658B00B36EBB /* AIFacebookXMPPAccountView.xib */,
+ EFA39C061296658B00B36EBB /* AIFacebookXMPPAccountViewController.h */,
+ EFA39C071296658B00B36EBB /* AIFacebookXMPPAccountViewController.m */,
+ EFA39C081296658B00B36EBB /* AIFacebookXMPPService.h */,
+ EFA39C091296658B00B36EBB /* AIFacebookXMPPService.m */,
+ EFA39C2F12966B2600B36EBB /* AIFacebookXMPPOAuthWebViewWindowController.h */,
+ EFA39C3012966B2600B36EBB /* AIFacebookXMPPOAuthWebViewWindowController.m */,
+ EFA39CF512966F5D00B36EBB /* AIFacebookXMPPOauthWebViewWindow.xib */,
+ );
+ name = "FB XMPP";
+ sourceTree = "<group>";
+ };
+ EFB036A113305E6500CB421E /* JSONKit */ = {
+ isa = PBXGroup;
+ children = (
+ EFB036A213305E8800CB421E /* JSONKit.h */,
+ EFB036A313305E8800CB421E /* JSONKit.m */,
+ );
+ name = JSONKit;
+ sourceTree = "<group>";
+ };
F1D0C631051AC2380000000E /* Message Alias Support */ = {
isa = PBXGroup;
children = (
@@ -9061,6 +9136,13 @@
34064D110F21B34200AA6FE3 /* PurpleFacebookAccountViewController.h in Headers */,
113E06AF10D0ABE3005D5B9A /* adiumPurpleMedia.h in Headers */,
1181981310D0B17C003E8ECA /* adiumPurpleMedia.h in Headers */,
+ 34D8153A13B663650022C8C4 /* AIFacebookXMPPAccount.h in Headers */,
+ 34D8153D13B663650022C8C4 /* AIFacebookXMPPAccountViewController.h in Headers */,
+ 34D8154013B663650022C8C4 /* AIFacebookXMPPOAuthWebViewWindowController.h in Headers */,
+ 34D8154213B663650022C8C4 /* AIFacebookXMPPService.h in Headers */,
+ 34D8154613B663700022C8C4 /* JSONKit.h in Headers */,
+ 34D8154E13B663A80022C8C4 /* auth_fb.h in Headers */,
+ 34D8155013B663A80022C8C4 /* fbapi.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -9453,7 +9535,7 @@
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
attributes = {
- BuildIndependentTargetsInParallel = NO;
+ BuildIndependentTargetsInParallel = YES;
};
buildConfigurationList = DADE8E3A085507450062B664 /* Build configuration list for PBXProject "Adium" */;
compatibilityVersion = "Xcode 3.1";
@@ -9638,7 +9720,8 @@
345D68990F1FD56B002F2D01 /* facebook.png in Resources */,
345D689A0F1FD56B002F2D01 /* facebook-small.png in Resources */,
1150A9960FBE48D600E0BD31 /* ESIRCAccountView.nib in Resources */,
- 1125DD3C0FF5A5D600544B92 /* PurpleFacebookAccountView.nib in Resources */,
+ 34D8153C13B663650022C8C4 /* AIFacebookXMPPAccountView.xib in Resources */,
+ 34D8153F13B663650022C8C4 /* AIFacebookXMPPOauthWebViewWindow.xib in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -10186,6 +10269,13 @@
345D68A30F1FD59F002F2D01 /* PurpleFacebookService.m in Sources */,
345D68A90F1FD5AA002F2D01 /* PurpleFacebookAccount.m in Sources */,
34064D100F21B34200AA6FE3 /* PurpleFacebookAccountViewController.m in Sources */,
+ 34D8153B13B663650022C8C4 /* AIFacebookXMPPAccount.m in Sources */,
+ 34D8153E13B663650022C8C4 /* AIFacebookXMPPAccountViewController.m in Sources */,
+ 34D8154113B663650022C8C4 /* AIFacebookXMPPOAuthWebViewWindowController.m in Sources */,
+ 34D8154313B663650022C8C4 /* AIFacebookXMPPService.m in Sources */,
+ 34D8154713B663700022C8C4 /* JSONKit.m in Sources */,
+ 34D8154D13B663A80022C8C4 /* auth_fb.c in Sources */,
+ 34D8154F13B663A80022C8C4 /* fbapi.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -10878,40 +10968,6 @@
name = "Shared Dock Icon Images";
sourceTree = "<group>";
};
- 1125DD3B0FF5A5D600544B92 /* PurpleFacebookAccountView.nib */ = {
- isa = PBXVariantGroup;
- children = (
- 1125DD380FF5A58F00544B92 /* English */,
- 1125DD3D0FF5A5DB00544B92 /* ca */,
- 1125DD3E0FF5A5DD00544B92 /* cs */,
- 1125DD3F0FF5A5DF00544B92 /* da */,
- 1125DD400FF5A5E100544B92 /* de */,
- 1125DD410FF5A5E300544B92 /* el_GR */,
- 1125DD420FF5A5E500544B92 /* en_GB */,
- 1125DD430FF5A5E700544B92 /* es */,
- 1125DD440FF5A5E900544B92 /* fi */,
- 1125DD450FF5A5EC00544B92 /* fr */,
- 1125DD460FF5A5EE00544B92 /* fr_CA */,
- 1125DD470FF5A5F000544B92 /* hu */,
- 1125DD480FF5A5F200544B92 /* is */,
- 1125DD490FF5A5F400544B92 /* it */,
- 1125DD4A0FF5A5F600544B92 /* ja */,
- 1125DD4B0FF5A5F800544B92 /* nb */,
- 1125DD4C0FF5A5FA00544B92 /* nl */,
- 1125DD4D0FF5A5FB00544B92 /* pl */,
- 1125DD4E0FF5A5FD00544B92 /* pt_PT */,
- 1125DD4F0FF5A5FF00544B92 /* pt */,
- 1125DD500FF5A60100544B92 /* ru */,
- 1125DD510FF5A60300544B92 /* sl */,
- 1125DD520FF5A60500544B92 /* sv */,
- 1125DD530FF5A60700544B92 /* tr */,
- 1125DD540FF5A60900544B92 /* zh_CN */,
- 1125DD550FF5A60B00544B92 /* zh_TW */,
- D182F1B511DFF23700E33AE2 /* sk_SK */,
- );
- name = PurpleFacebookAccountView.nib;
- sourceTree = "<group>";
- };
1150A9950FBE48D600E0BD31 /* ESIRCAccountView.nib */ = {
isa = PBXVariantGroup;
children = (
@@ -12589,6 +12645,8 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/Frameworks\"",
+ "\"$(SRCROOT)/Frameworks/json-framework/build/Debug\"",
+ "\"$(SRCROOT)/build/Debug\"",
);
};
name = Debug;
@@ -12600,6 +12658,8 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/Frameworks\"",
+ "\"$(SRCROOT)/Frameworks/json-framework/build/Debug\"",
+ "\"$(SRCROOT)/build/Debug\"",
);
GCC_PREPROCESSOR_DEFINITIONS = RELEASE_BUILD;
};
@@ -12612,6 +12672,8 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/Frameworks\"",
+ "\"$(SRCROOT)/Frameworks/json-framework/build/Debug\"",
+ "\"$(SRCROOT)/build/Debug\"",
);
GCC_PREPROCESSOR_DEFINITIONS = (
RELEASE_BUILD,
diff -r af2c953c613e -r b4009e98ad3d Frameworks/Adium Framework/Source/AIAbstractAccount.h
--- a/Frameworks/Adium Framework/Source/AIAbstractAccount.h Sat Jun 18 01:35:01 2011 +0200
+++ b/Frameworks/Adium Framework/Source/AIAbstractAccount.h Sat Jun 25 14:16:19 2011 -0500
@@ -15,6 +15,7 @@
*/
#import <Adium/AIAccount.h>
+#import <Adium/AIPasswordPromptController.h>
typedef enum {
AIReconnectNever = 0,
@@ -115,4 +116,8 @@
@interface AIAccount (Abstract_ForSubclasses)
//Chats
- (void)displayYouHaveConnectedInChat:(AIChat *)chat;
+
+- (void)passwordReturnedForConnect:(NSString *)inPassword
+ returnCode:(AIPasswordPromptReturn)returnCode
+ context:(id)inContext;
@end
diff -r af2c953c613e -r b4009e98ad3d Frameworks/Adium Framework/Source/AIAbstractAccount.m
--- a/Frameworks/Adium Framework/Source/AIAbstractAccount.m Sat Jun 18 01:35:01 2011 +0200
+++ b/Frameworks/Adium Framework/Source/AIAbstractAccount.m Sat Jun 25 14:16:19 2011 -0500
@@ -48,7 +48,6 @@
#define ACCOUNT_STATUS_UPDATE_COALESCING_KEY @"Account Status Update"
@interface AIAccount (Abstract_PRIVATE)
-- (void)passwordReturnedForConnect:(NSString *)inPassword returnCode:(AIPasswordPromptReturn)returnCode context:(id)inContext;
- (void)requestImmediateDynamicContentUpdate:(NSNotification *)notification;
- (void)adiumDidLoad:(NSNotification *)inNotification;
- (void)_endSilenceAllUpdates;
@@ -320,9 +319,7 @@
//Set our formatted UID if necessary
if (![newProposedFormattedUID isEqualToString:self.formattedUID]) {
- [self setPreference:newProposedFormattedUID
- forKey:@"formattedUID"
- group:GROUP_ACCOUNT_STATUS];
+ [self setFormattedUID:newProposedFormattedUID notify:NotifyNow];
}
if (didChangeUID) {
@@ -481,6 +478,22 @@
}
/*!
+ * @brief Set the way our UID is displayed to the user
+ *
+ * For accounts, this is stored as a preference in addition to being set as an in-memory property
+ */
+- (void)setFormattedUID:(NSString *)inFormattedUID notify:(NotifyTiming)notify
+{
+ [self setPreference:inFormattedUID
+ forKey:KEY_FORMATTED_UID
+ group:GROUP_ACCOUNT_STATUS];
+
+ [self setValue:inFormattedUID
+ forProperty:KEY_FORMATTED_UID
+ notify:notify];
+}
+
+/*!
* @brief Handle common account status updates
*
* We handle some common account status updates here for convenience. Things that the majority of protocols will use
@@ -528,7 +541,7 @@
}
} else if ([key isEqualToString:@"formattedUID"]) {
- //Transfer formatted UID to status dictionary
+ //Transfer formatted UID from the stored preference to an in-memory property
[self setValue:[self preferenceForKey:@"formattedUID" group:GROUP_ACCOUNT_STATUS]
forProperty:@"formattedUID"
notify:NotifyNow];
diff -r af2c953c613e -r b4009e98ad3d Frameworks/Adium Framework/Source/AIAccountControllerProtocol.h
--- a/Frameworks/Adium Framework/Source/AIAccountControllerProtocol.h Sat Jun 18 01:35:01 2011 +0200
+++ b/Frameworks/Adium Framework/Source/AIAccountControllerProtocol.h Sat Jun 25 14:16:19 2011 -0500
@@ -119,7 +119,7 @@
* @brief Retrieve the password of an account, prompting the user if necessary
*
* @param inAccount account whose password is desired
- * @param promptOption An AIPromptOption determining whether and how a prompt for the password should be displayed if it is needed. This allows forcing or suppressing of the prompt dialogue.
+ * @param promptOption An AIPromptOption determining whether and how a prompt for the password should be displayed if it is needed. This allows forcing or suppressing of the prompt dialogue. If AIPromptOptionNever is used, the returnCode sent to the target will always be AIPasswordPromptOKReturn.
* @param inTarget target to notify when password is available
* @param inSelector selector to notify when password is available. Selector is of the form - (void)returnedPassword:(NSString *)p returnCode:(AIPasswordPromptReturn)returnCode context:(id)context
* @param inContext context passed to target
@@ -173,6 +173,22 @@
- (NSUInteger)moveAccount:(AIAccount *)account toIndex:(NSUInteger)destIndex;
- (void)accountDidChangeUID:(AIAccount *)inAccount;
+/*!
+ * @brief Change an account's current and future service
+ *
+ * This should only be used by an AIAccount to upgrade itself to a new service, as may happen when
+ * transitioning from one implementation to another.
+ *
+ * Generally, this is not necessary, as migration can be performed by simply substituting the new service ID
+ * for the old one in -[AdiumAccounts _upgradeServiceID:forAccountDict:]. However, if that is insufficient,
+ * because for example some processing must be done with information from both old and new accounts,
+ * this may be useful for performing a move at runtime.
+ *
+ * It will save the change; account immediately becomes on service, and it will be on service when it is
+ * next loaded.
+ */
+- (void)moveAccount:(AIAccount *)account toService:(AIService *)service;
+
//Preferred Accounts
- (AIAccount *)preferredAccountForSendingContentType:(NSString *)inType toContact:(AIListContact *)inContact;
diff -r af2c953c613e -r b4009e98ad3d Frameworks/Adium Framework/Source/AIAccountViewController.h
--- a/Frameworks/Adium Framework/Source/AIAccountViewController.h Sat Jun 18 01:35:01 2011 +0200
+++ b/Frameworks/Adium Framework/Source/AIAccountViewController.h Sat Jun 25 14:16:19 2011 -0500
@@ -71,7 +71,9 @@
- (void)didBeginRegistration;
- (void)usernameAndPasswordRegistered:(NSNotification*)notification;
-//For subclasses
+ at end
+
+ at interface AIAccountViewController (ForSubclasses)
- (NSDictionary *)keyToKeyDict;
-
+- (void)localizeStrings;
@end
diff -r af2c953c613e -r b4009e98ad3d Frameworks/Adium Framework/Source/AIAccountViewController.m
--- a/Frameworks/Adium Framework/Source/AIAccountViewController.m Sat Jun 18 01:35:01 2011 +0200
+++ b/Frameworks/Adium Framework/Source/AIAccountViewController.m Sat Jun 25 14:16:19 2011 -0500
@@ -263,10 +263,12 @@
- (void)saveConfiguration
{
//UID - account; only set if the account doesn't handle setting its own UID based on a combination of fields.
- NSString *newUID = [textField_accountUID stringValue];
- if (![account.UID isEqualToString:newUID] ||
- ![account.formattedUID isEqualToString:newUID]) {
- [account filterAndSetUID:newUID];
+ if (textField_accountUID) {
+ NSString *newUID = [textField_accountUID stringValue];
+ if (![account.UID isEqualToString:newUID] ||
+ ![account.formattedUID isEqualToString:newUID]) {
+ [account filterAndSetUID:newUID];
+ }
}
//Connect Host - save first in case the account uses the server name for password storage.
@@ -286,7 +288,7 @@
if (![password isEqualToString:oldPassword]) {
[adium.accountController setPassword:password forAccount:account];
}
- } else if (oldPassword && [oldPassword length] != 0) {
+ } else if ((oldPassword && [oldPassword length] != 0) && textField_password) {
[adium.accountController forgetPasswordForAccount:account];
}
diff -r af2c953c613e -r b4009e98ad3d Frameworks/Adium Framework/Source/AIListObject.h
--- a/Frameworks/Adium Framework/Source/AIListObject.h Sat Jun 18 01:35:01 2011 +0200
+++ b/Frameworks/Adium Framework/Source/AIListObject.h Sat Jun 25 14:16:19 2011 -0500
@@ -22,6 +22,8 @@
#define KEY_ORDER_INDEX @"Order Index"
#define KEY_IS_BLOCKED @"isBlocked"
+#define KEY_FORMATTED_UID @"FormattedUID"
+
typedef enum {
AIAvailableStatus = 'avaL',
AIAwayStatus = 'awaY',
@@ -118,7 +120,7 @@
//Identifying information
@property (readonly, nonatomic) NSString *UID;
- at property (readonly, nonatomic) AIService *service;
+ at property (readonly, assign, nonatomic) AIService *service;
@property (readonly, nonatomic) NSString *internalObjectID;
+ (NSString *)internalObjectIDForServiceID:(NSString *)inServiceID UID:(NSString *)inUID;
diff -r af2c953c613e -r b4009e98ad3d Frameworks/Adium Framework/Source/AIListObject.m
--- a/Frameworks/Adium Framework/Source/AIListObject.m Sat Jun 18 01:35:01 2011 +0200
+++ b/Frameworks/Adium Framework/Source/AIListObject.m Sat Jun 25 14:16:19 2011 -0500
@@ -40,6 +40,9 @@
- (void)setContainingGroup:(AIListGroup *)inGroup;
- (void)setupObservedValues;
- (void)updateOrderCache;
+
+ at property (nonatomic, assign) AIService *service;
+
@end
/*!
@@ -360,7 +363,7 @@
- (void)setFormattedUID:(NSString *)inFormattedUID notify:(NotifyTiming)notify
{
[self setValue:inFormattedUID
- forProperty:FormattedUID
+ forProperty:KEY_FORMATTED_UID
notify:notify];
}
@@ -402,7 +405,7 @@
*/
- (NSString *)formattedUID
{
- NSString *outName = [self valueForProperty:FormattedUID];
+ NSString *outName = [self valueForProperty:KEY_FORMATTED_UID];
return outName ? outName : UID;
}
diff -r af2c953c613e -r b4009e98ad3d Frameworks/Adium Framework/Source/AIService.m
--- a/Frameworks/Adium Framework/Source/AIService.m Sat Jun 18 01:35:01 2011 +0200
+++ b/Frameworks/Adium Framework/Source/AIService.m Sat Jun 25 14:16:19 2011 -0500
@@ -262,7 +262,7 @@
*/
- (NSCharacterSet *)allowedCharacters
{
- return nil;
+ return [[NSCharacterSet illegalCharacterSet] invertedSet];
}
/*!
@@ -284,7 +284,8 @@
* Offers further distinction of allowed characters, for situations where certain characters are allowed
* for our account name only, or characters which are allowed in user names are forbidden in our own account name.
* If this distinction is not made, do not subclass this methods and instead subclass allowedCharacters.
- * @return NSCharacterSet of allowed characters
+ *
+ * @return NSCharacterSet of allowed characters, or nil if all characters are allowed
*/
- (NSCharacterSet *)allowedCharactersForUIDs
{
@@ -297,11 +298,12 @@
* Ignored characters for user names on this service. Ignored characters are stripped from account and contact names
* before they are used, but the user is free to type them and they may be used by the service code. For instance,
* spaces are allowed in AIM usernames, but "ad am" is treated as equal to "adam" because space is an ignored character.
- * @return NSCharacterSet of ignored characters
+ *
+ * @return NSCharacterSet of ignored characters, or nil if no characters are ignored
*/
- (NSCharacterSet *)ignoredCharacters
{
- return [NSCharacterSet characterSetWithCharactersInString:@""];
+ return nil;
}
/*!
@@ -475,6 +477,11 @@
NSCharacterSet *allowedCharacters = [self allowedCharactersForUIDs];
NSCharacterSet *ignoredCharacters = [self ignoredCharacters];
+ /* If all characters are allowed, and we're either not removing ignored characters OR there are none, no change
+ * needed. */
+ if (!allowedCharacters && (!removeIgnored || !ignoredCharacters))
+ return [[inUID copy] autorelease];
+
//Prepare a little buffer for our filtered UID
NSUInteger destLength = 0;
NSUInteger workingStringLength = [workingString length];
diff -r af2c953c613e -r b4009e98ad3d Frameworks/JSONKit/.github_commit_id
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/JSONKit/.github_commit_id Sat Jun 25 14:16:19 2011 -0500
@@ -0,0 +1,1 @@
+7c66203
diff -r af2c953c613e -r b4009e98ad3d Frameworks/JSONKit/CHANGELOG.md
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/JSONKit/CHANGELOG.md Sat Jun 25 14:16:19 2011 -0500
@@ -0,0 +1,69 @@
+# JSONKit Changelog
+
+## Version 1.3 2011/05/04
+
+### New Features
+
+* Added the `JK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS` pre-processor define flag.
+
+ This is typically enabled by adding <span style="white-space: nowrap;">`-DJK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS`</span> to the compilers command line arguments or in `Xcode.app` by adding `JK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS` to a projects / targets `Pre-Processor Macros` settings.
+
+ The `JK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS` option enables the use of custom Core Foundation collection call backs which omit the [`CFRetain`][CFRetain] calls. This results in saving several [`CFRetain`][CFRetain] and [`CFRelease`][CFRelease] calls typically needed for every single object from the parsed JSON. While the author has used this technique for years without any issues, an unexpected interaction with the Foundation [`-mutableCopy`][-mutableCopy] method and Core Foundation Toll-Free Bridging resulting in a condition in which the objects contained in the collection to be over released. This problem does not occur with the use of [`-copy`][-copy] due to the fact that the objects created by JSONKit are immutable, and therefore [`-copy`][-copy] does not require creating a completely new object and copying the contents, instead [`-copy`][-copy] simply returns a [`-retain`][-retain]'d version of the immutable object which is significantly faster along with the!
obvious reduction in memory usage.
+
+ Prior to version 1.3, JSONKit always used custom "Transfer of Ownership Collection Callbacks", and thus `JK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS` was effectively implicitly defined.
+
+ Beginning with version 1.3, the default behavior of JSONKit is to use the standard Core Foundation collection callbacks ([`kCFTypeArrayCallBacks`][kCFTypeArrayCallBacks], [`kCFTypeDictionaryKeyCallBacks`][kCFTypeDictionaryKeyCallBacks], and [`kCFTypeDictionaryValueCallBacks`][kCFTypeDictionaryValueCallBacks]). The intention is to follow "the principle of least surprise", and the author believes the use of the standard Core Foundation collection callbacks as the default behavior for JSONKit results in the least surprise.
+
+ **NOTE**: `JK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS` is only applicable to `(CF|NS)` `Dictionary` and `Array` class objects.
+
+ For the vast majority of users, the author believes JSONKits custom "Transfer of Ownership Collection Callbacks" will not cause any problems. As previously stated, the author has used this technique in performance critical code for years and has never had a problem. Until a user reported a problem with [`-mutableCopy`][-mutableCopy], the author was unaware that the use of the custom callbacks could even cause a problem. This is probably due to the fact that the vast majority of time the typical usage pattern tends to be "iterate the contents of the collection" and very rarely mutate the returned collection directly (although this last part is likely to vary significantly from programmer to programmer). The author tends to avoid the use of [`-mutableCopy`][-mutableCopy] as it results in a significant performance and memory consumption penalty. The reason for this is in "typical" Cocoa coding patterns, using [`-mutableCopy`][-mutableCopy] will instantiate an identica!
l, albeit mutable, version of the original object. This requires both memory for the new object and time to iterate the contents of the original object and add them to the new object. Furthermore, under "typical" Cocoa coding patterns, the original collection object continues to consume memory until the autorelease pool is released. However, clearly there are cases where the use of [`-mutableCopy`][-mutableCopy] makes sense or may be used by an external library which is out of your direct control.
+
+ The use of the standard Core Foundation collection callbacks results in a 9% to 23% reduction in parsing performance, with an "eye-balled average" of around 13% according to some benchmarking done by the author using Real World™ JSON (i.e., actual JSON from various web services, such as Twitter, etc) using `gcc-4.2 -arch x86_64 -O3 -DNS_BLOCK_ASSERTIONS` with the only change being the addition of <span style="white-space: nowrap;">`-DJK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS`</span>.
+
+ `JK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS` is only applicable to parsing / deserializing (i.e. converting from) of JSON. Serializing (i.e., converting to JSON) is completely unaffected by this change.
+
+### Bug Fixes
+
+* Fixed a [bug report regarding `-mutableCopy`](https://github.com/johnezang/JSONKit/issues#issue/3). This is related to the addition of the pre-processor define flag `JK_ENABLE_CF_TRANSFER_OWNERSHIP_CALLBACKS`.
+
+### Other Changes
+
+* Added `JK_EXPECTED` optimization hints around several conditionals.
+* When serializing objects, JSONKit first starts with a small, on stack buffer. If the encoded JSON exceeds the size of the stack buffer, JSONKit switches to a heap allocated buffer. If JSONKit switched to a heap allocated buffer, [`CFDataCreateWithBytesNoCopy`][CFDataCreateWithBytesNoCopy] is used to create the [`NSData`][NSData] object, which in most cases causes the heap allocated buffer to "transfer" to the [`NSData`][NSData] object which is substantially faster than allocating a new buffer and copying the bytes.
+* Added a pre-processor check in `JSONKit.m` to see if Objective-C Garbage Collection is enabled and issue a `#error` notice that JSONKit does not support Objective-C Garbage Collection.
+* Various other minor or trivial modifications, such as updating `README.md`.
+
+### Other Issues
+
+* When using the `clang` static analyzer (the version used at the time of this writing was `Apple clang version 1.5 (tags/Apple/clang-60)`), the static analyzer reports a number of problems with `JSONKit.m`.
+
+ The author has investigated these issues and determined that the problems reported by the current version of the static analyzer are "false positives". Not only that, the reported problems are not only "false positives", they are very clearly and obviously wrong. Therefore, the author has made the decision that no action will be taken on these non-problems, which includes not modifying the code for the sole purpose of silencing the static analyzer. The justification for this is "the dog wags the tail, not the other way around."
+
+## Version 1.2 2011/01/08
+
+### Bug Fixes
+
+* When JSONKit attempted to parse and decode JSON that contained `{"key": value}` dictionaries that contained the same key more than once would likely result in a crash. This was a serious bug.
+* Under some conditions, JSONKit could potentially leak memory.
+* There was an off by one error in the code that checked whether or not the parser was at the end of the `UTF8` buffer. This could result in JSONKit reading one by past the buffer bounds in some cases.
+
+### Other Changes
+
+* Some of the methods were missing `NULL` pointer checks for some of their arguments. This was fixed. In generally, when JSONKit encounters invalid arguments, it throws a `NSInvalidArgumentException` exception.
+* Various other minor changes such as tightening up numeric literals with `UL` or `L` qualification, assertion check tweaks and additions, etc.
+* The README.md file was updated with additional information.
+
+### Version 1.1
+
+No change log information was kept for versions prior to 1.2.
+
+[kCFTypeArrayCallBacks]: http://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFArrayRef/Reference/reference.html#//apple_ref/c/data/kCFTypeArrayCallBacks
+[kCFTypeDictionaryKeyCallBacks]: http://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFDictionaryRef/Reference/reference.html#//apple_ref/c/data/kCFTypeDictionaryKeyCallBacks
+[kCFTypeDictionaryValueCallBacks]: http://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFDictionaryRef/Reference/reference.html#//apple_ref/c/data/kCFTypeDictionaryValueCallBacks
+[-mutableCopy]: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html%23//apple_ref/occ/instm/NSObject/mutableCopy
+[-copy]: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html%23//apple_ref/occ/instm/NSObject/copy
+[-retain]: http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/retain
+[CFRetain]: http://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFTypeRef/Reference/reference.html#//apple_ref/c/func/CFRetain
+[CFRelease]: http://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFTypeRef/Reference/reference.html#//apple_ref/c/func/CFRelease
+[CFDataCreateWithBytesNoCopy]: http://developer.apple.com/library/mac/documentation/CoreFoundation/Reference/CFDataRef/Reference/reference.html#//apple_ref/c/func/CFDataCreateWithBytesNoCopy
+[NSData]: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/index.html
diff -r af2c953c613e -r b4009e98ad3d Frameworks/JSONKit/JSONKit.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/JSONKit/JSONKit.h Sat Jun 25 14:16:19 2011 -0500
@@ -0,0 +1,263 @@
+//
+// JSONKit.h
+// http://github.com/johnezang/JSONKit
+// Licensed under the terms of the BSD License, as specified below.
+//
+
+/*
+ Copyright (c) 2011, John Engelhart
+
+ 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 the Zang Industries 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.
+*/
+
+#include <stddef.h>
+#include <stdint.h>
+#include <limits.h>
+#include <TargetConditionals.h>
+#include <AvailabilityMacros.h>
+
+#ifdef __OBJC__
+#import <Foundation/NSArray.h>
+#import <Foundation/NSData.h>
+#import <Foundation/NSDictionary.h>
+#import <Foundation/NSError.h>
+#import <Foundation/NSObjCRuntime.h>
+#import <Foundation/NSString.h>
+#endif // __OBJC__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+// For Mac OS X < 10.5.
+#ifndef NSINTEGER_DEFINED
+#define NSINTEGER_DEFINED
+#if defined(__LP64__) || defined(NS_BUILD_32_LIKE_64)
+typedef long NSInteger;
+typedef unsigned long NSUInteger;
+#define NSIntegerMin LONG_MIN
+#define NSIntegerMax LONG_MAX
+#define NSUIntegerMax ULONG_MAX
+#else // defined(__LP64__) || defined(NS_BUILD_32_LIKE_64)
+typedef int NSInteger;
+typedef unsigned int NSUInteger;
+#define NSIntegerMin INT_MIN
+#define NSIntegerMax INT_MAX
+#define NSUIntegerMax UINT_MAX
+#endif // defined(__LP64__) || defined(NS_BUILD_32_LIKE_64)
+#endif // NSINTEGER_DEFINED
+
+
+#ifndef _JSONKIT_H_
+#define _JSONKIT_H_
+
+#define JSONKIT_VERSION_MAJOR 1
+#define JSONKIT_VERSION_MINOR 3
+
+typedef NSUInteger JKHash;
+typedef NSUInteger JKFlags;
+typedef NSUInteger JKTokenType;
+typedef JKFlags JKManagedBufferFlags;
+typedef JKFlags JKObjectStackFlags;
+
+typedef struct {
+ unsigned char *ptr;
+ size_t length;
+} JKPtrRange;
+
+typedef struct {
+ const unsigned char *ptr;
+ size_t length;
+} JKConstPtrRange;
+
+typedef struct {
+ size_t location, length;
+} JKRange;
+
+typedef struct {
+ JKPtrRange bytes;
+ JKManagedBufferFlags flags;
+ size_t roundSizeUpToMultipleOf;
+} JKManagedBuffer;
+
+typedef struct {
+ void **objects, **keys;
+ JKHash *hashes;
+ size_t *sizes;
+ size_t count, index, roundSizeUpToMultipleOf;
+ JKObjectStackFlags flags;
+} JKObjectStack;
+
+typedef struct {
+ JKPtrRange bytes;
+} JKBuffer;
+
+typedef struct {
+ JKConstPtrRange bytes;
+} JKConstBuffer;
+
+typedef NSUInteger JKValueType;
+
+typedef struct {
+ JKConstPtrRange ptrRange;
+ JKHash hash;
+ JKValueType type;
+ union {
+ long long longLongValue;
+ unsigned long long unsignedLongLongValue;
+ double doubleValue;
+ } number;
+} JKTokenValue;
+
+typedef struct {
+ JKConstPtrRange tokenPtrRange;
+ JKTokenType type;
+ JKTokenValue value;
+ JKManagedBuffer tokenBuffer;
+} JKParseToken;
+
+
+typedef struct {
+ void *object;
+ JKHash hash;
+ size_t size;
+ unsigned char *bytes;
+ JKValueType type;
+ unsigned char age;
+} JKTokenCacheItem;
+
+typedef struct {
+ JKTokenCacheItem *items;
+ size_t count, clockIdx;
+} JKTokenCache;
+
+/*
+ JKParseOptionComments : Allow C style // and /_* ... *_/ (without a _, obviously) comments in JSON.
+ JKParseOptionUnicodeNewlines : Allow Unicode recommended (?:\r\n|[\n\v\f\r\x85\p{Zl}\p{Zp}]) newlines.
+ JKParseOptionLooseUnicode : Normally the decoder will stop with an error at any malformed Unicode.
+ This option allows JSON with malformed Unicode to be parsed without reporting an error.
+ Any malformed Unicode is replaced with \uFFFD, or "REPLACEMENT CHARACTER".
+ */
+
+enum {
+ JKParseOptionNone = 0,
+ JKParseOptionStrict = 0,
+ JKParseOptionComments = (1 << 0),
+ JKParseOptionUnicodeNewlines = (1 << 1),
+ JKParseOptionLooseUnicode = (1 << 2),
+ JKParseOptionPermitTextAfterValidJSON = (1 << 3),
+ JKParseOptionValidFlags = (JKParseOptionComments | JKParseOptionUnicodeNewlines | JKParseOptionLooseUnicode | JKParseOptionPermitTextAfterValidJSON),
+};
+typedef JKFlags JKParseOptionFlags;
+
+typedef id (*NSNumberAllocImp)(id object, SEL selector);
+typedef id (*NSNumberInitWithUnsignedLongLongImp)(id object, SEL selector, unsigned long long value);
+
+typedef struct {
+ Class NSNumberClass;
+ NSNumberAllocImp NSNumberAlloc;
+ NSNumberInitWithUnsignedLongLongImp NSNumberInitWithUnsignedLongLong;
+} JKObjCImpCache;
+
+typedef struct {
+ JKParseOptionFlags parseOptionFlags;
+ JKConstBuffer stringBuffer;
+ size_t atIndex, lineNumber, lineStartIndex;
+ size_t prev_atIndex, prev_lineNumber, prev_lineStartIndex;
+ int errorIsPrev;
+ JKParseToken token;
+ JKObjectStack objectStack;
+ JKTokenCache cache;
+ JKObjCImpCache objCImpCache;
+ NSError *error;
+} JKParseState;
+
+
+enum {
+ JKSerializeOptionNone = 0,
+ JKSerializeOptionPretty = (1 << 0), // Not implemented yet...
+ JKSerializeOptionEscapeUnicode = (1 << 1),
+ JKSerializeOptionValidFlags = (JKSerializeOptionPretty | JKSerializeOptionEscapeUnicode),
+};
+typedef JKFlags JKSerializeOptionFlags;
+
+
+#ifdef __OBJC__
+
+// As a general rule of thumb, if you use a method that doesn't accept a JKParseOptionFlags argument, it defaults to JKParseOptionStrict
+
+ at interface JSONDecoder : NSObject {
+ JKParseState parseState;
+}
++ (id)decoder;
++ (id)decoderWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
+- (id)initWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
+- (void)clearCache;
+- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length;
+- (id)parseUTF8String:(const unsigned char *)string length:(size_t)length error:(NSError **)error;
+// The NSData MUST be UTF8 encoded JSON.
+- (id)parseJSONData:(NSData *)jsonData;
+- (id)parseJSONData:(NSData *)jsonData error:(NSError **)error;
+ at end
+
+ at interface NSString (JSONKit)
+- (id)objectFromJSONString;
+- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
+- (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
+ at end
+
+ at interface NSData (JSONKit)
+// The NSData MUST be UTF8 encoded JSON.
+- (id)objectFromJSONData;
+- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags;
+- (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error;
+ at end
+
+ at interface NSArray (JSONKit)
+- (NSData *)JSONData;
+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
+- (NSString *)JSONString;
+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
+ at end
+
+ at interface NSDictionary (JSONKit)
+- (NSData *)JSONData;
+- (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
+- (NSString *)JSONString;
+- (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error;
+ at end
+
+#endif // __OBJC__
+
+#endif // _JSONKIT_H_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff -r af2c953c613e -r b4009e98ad3d Frameworks/JSONKit/JSONKit.m
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/Frameworks/JSONKit/JSONKit.m Sat Jun 25 14:16:19 2011 -0500
@@ -0,0 +1,1889 @@
+//
+// JSONKit.m
+// http://github.com/johnezang/JSONKit
+// Licensed under the terms of the BSD License, as specified below.
+//
+
+/*
+ Copyright (c) 2011, John Engelhart
+
+ 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 the Zang Industries 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.
+*/
+
+
+/*
+ Acknowledgments:
+
+ The bulk of the UTF8 / UTF32 conversion and verification comes
+ from ConvertUTF.[hc]. It has been modified from the original sources.
More information about the commits
mailing list