adium-1.4 3440:768ae5f17d0a: FBXMPP Account: Refactor Facebook n...
commits at adium.im
commits at adium.im
Mon Mar 21 03:40:28 UTC 2011
details: http://hg.adium.im/adium-1.4/rev/768ae5f17d0a
revision: 3440:768ae5f17d0a
branch: facebook-xmpp
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.
Subject: adium-1.4 3441:4ddd96b14b12: Comment out some extraneous logging statements
details: http://hg.adium.im/adium-1.4/rev/4ddd96b14b12
revision: 3441:4ddd96b14b12
branch: facebook-xmpp
author: Colin Barrett <colin at springsandstruts.com>
date: Sun Mar 20 20:19:18 2011 -0700
Comment out some extraneous logging statements
Subject: adium-1.4 3442:35d923dc71f4: FBXMPP: We now make our network requests off the main thread. Woo!
details: http://hg.adium.im/adium-1.4/rev/35d923dc71f4
revision: 3442:35d923dc71f4
branch: facebook-xmpp
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!
Subject: adium-1.4 3443:2eed27cd9ddf: Merge
details: http://hg.adium.im/adium-1.4/rev/2eed27cd9ddf
revision: 3443:2eed27cd9ddf
branch: facebook-xmpp
author: Colin Barrett <colin at springsandstruts.com>
date: Sun Mar 20 20:39:20 2011 -0700
Merge
diffs (truncated from 1661 to 1000 lines):
diff -r 6ffc02f14020 -r 2eed27cd9ddf Plugins/Purple Service/AIFacebookXMPPAccount.h
--- a/Plugins/Purple Service/AIFacebookXMPPAccount.h Fri Mar 18 20:46:09 2011 -0400
+++ b/Plugins/Purple Service/AIFacebookXMPPAccount.h Sun Mar 20 20:39:20 2011 -0700
@@ -12,7 +12,14 @@
@interface AIFacebookXMPPAccount : CBPurpleAccount {
AIFacebookXMPPOAuthWebViewWindowController *oAuthWC;
- AIAccount *migratingAccount;
+ AIAccount *migratingAccount; // weak
+
+ NSString *oAuthToken;
+ NSUInteger networkState;
+
+ NSURLConnection *connection; // weak
+ NSURLResponse *connectionResponse;
+ NSMutableData *connectionData;
}
@property (nonatomic, retain) AIFacebookXMPPOAuthWebViewWindowController *oAuthWC;
diff -r 6ffc02f14020 -r 2eed27cd9ddf Plugins/Purple Service/AIFacebookXMPPAccount.m
--- a/Plugins/Purple Service/AIFacebookXMPPAccount.m Fri Mar 18 20:46:09 2011 -0400
+++ b/Plugins/Purple Service/AIFacebookXMPPAccount.m Sun Mar 20 20:39:20 2011 -0700
@@ -25,14 +25,43 @@
#import <AIUtilities/AIStringAdditions.h>
#import <Adium/AIService.h>
+enum {
+ AINoNetworkState,
+ AIMeGraphAPINetworkState,
+ AIPromoteSessionNetworkState
+};
+
@interface AIFacebookXMPPAccount ()
- (void)finishMigration;
+
+ at property (nonatomic, copy) NSString *oAuthToken;
+ at property (nonatomic, assign) NSUInteger networkState;
+ at property (nonatomic, assign) NSURLConnection *connection; // assign because NSURLConnection retains its delegate.
+ at property (nonatomic, retain) NSURLResponse *connectionResponse;
+ at property (nonatomic, retain) NSMutableData *connectionData;
+
+- (void)meGraphAPIDidFinishLoading:(NSData *)graphAPIData response:(NSURLResponse *)response error:(NSError *)inError;
+- (void)promoteSessionDidFinishLoading:(NSData *)secretData response:(NSURLResponse *)response error:(NSError *)inError;
@end
@implementation AIFacebookXMPPAccount
@synthesize oAuthWC;
@synthesize migratingAccount;
+ at synthesize oAuthToken;
+ at synthesize networkState, connection, connectionResponse, connectionData;
+
+- (void)dealloc
+{
+ [oAuthWC release];
+ [oAuthToken release];
+
+ [connection cancel];
+ [connectionResponse release];
+ [connectionData release];
+
+ [super dealloc];
+}
#pragma mark Connectivitiy
@@ -124,63 +153,6 @@
}
}
-#pragma mark Status
-
-- (const char *)purpleStatusIDForStatus:(AIStatus *)statusState
- arguments:(NSMutableDictionary *)arguments
-{
- const char *statusID = NULL;
- NSString *statusName = statusState.statusName;
- NSString *statusMessageString = [statusState statusMessageString];
- NSNumber *priority = nil;
-
- if (!statusMessageString) statusMessageString = @"";
-
- switch (statusState.statusType) {
- case AIAvailableStatusType:
- {
- if (([statusName isEqualToString:STATUS_NAME_FREE_FOR_CHAT]) ||
- ([statusMessageString caseInsensitiveCompare:[adium.statusController localizedDescriptionForCoreStatusName:STATUS_NAME_FREE_FOR_CHAT]] == NSOrderedSame))
- statusID = jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_CHAT);
- priority = [self preferenceForKey:KEY_JABBER_PRIORITY_AVAILABLE group:GROUP_ACCOUNT_STATUS];
- break;
- }
-
- case AIAwayStatusType:
- {
- if (([statusName isEqualToString:STATUS_NAME_DND]) ||
- ([statusMessageString caseInsensitiveCompare:[adium.statusController localizedDescriptionForCoreStatusName:STATUS_NAME_DND]] == NSOrderedSame) ||
- [statusName isEqualToString:STATUS_NAME_BUSY]) {
- //Note that Jabber doesn't actually support a 'busy' status; if we have it set because some other service supports it, treat it as DND
- statusID = jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_DND);
-
- } else if (([statusName isEqualToString:STATUS_NAME_EXTENDED_AWAY]) ||
- ([statusMessageString caseInsensitiveCompare:[adium.statusController localizedDescriptionForCoreStatusName:STATUS_NAME_EXTENDED_AWAY]] == NSOrderedSame))
- statusID = jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_XA);
- priority = [self preferenceForKey:KEY_JABBER_PRIORITY_AWAY group:GROUP_ACCOUNT_STATUS];
- break;
- }
-
- case AIInvisibleStatusType:
- AILog(@"Warning: Invisibility is not yet supported in libpurple 2.0.0 jabber");
- priority = [self preferenceForKey:KEY_JABBER_PRIORITY_AWAY group:GROUP_ACCOUNT_STATUS];
- statusID = jabber_buddy_state_get_status_id(JABBER_BUDDY_STATE_AWAY);
- break;
-
- case AIOfflineStatusType:
- break;
- }
-
- //Set our priority, which is actually set along with the status...Default is 0.
- [arguments setObject:(priority ? priority : [NSNumber numberWithInt:0])
- forKey:@"priority"];
-
- //If we didn't get a purple status ID, request one from super
- if (statusID == NULL) statusID = [super purpleStatusIDForStatus:statusState arguments:arguments];
-
- return statusID;
-}
-
#pragma mark Account configuration
- (void)setName:(NSString *)name UID:(NSString *)inUID
@@ -239,6 +211,7 @@
if (self.migratingAccount) {
self.oAuthWC.autoFillUsername = self.migratingAccount.UID;
self.oAuthWC.autoFillPassword = [adium.accountController passwordForAccount:self.migratingAccount];
+ [self.oAuthWC.window setTitle:[NSString stringWithFormat:AILocalizedString(@"Migrating %@", nil), self.migratingAccount.UID]];
}
[self.oAuthWC showWindow:self];
@@ -246,43 +219,123 @@
- (void)oAuthWebViewController:(AIFacebookXMPPOAuthWebViewWindowController *)wc didSucceedWithToken:(NSString *)token
{
- NSString *urlstring = [NSString stringWithFormat:@"https://graph.facebook.com/me?access_token=%@", token];
+ [self setOAuthToken:token];
+
+ NSString *urlstring = [NSString stringWithFormat:@"https://graph.facebook.com/me?access_token=%@", [self oAuthToken]];
NSURL *url = [NSURL URLWithString:[urlstring stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
- NSURLResponse *response;
- NSError *error;
- NSData *conn = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
- NSDictionary *resp = [conn objectFromJSONDataWithParseOptions:JKParseOptionNone error:&error];
+ self.networkState = AIMeGraphAPINetworkState;
+ self.connectionData = [NSMutableData data];
+ self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
+}
+
+- (void)meGraphAPIDidFinishLoading:(NSData *)graphAPIData response:(NSURLResponse *)inResponse error:(NSError *)inError
+{
+ if (inError) {
+ NSLog(@"error loading graph API: %@", inError);
+ // TODO: indicate setup failed
+ return;
+ }
+
+ NSError *error = nil;
+ NSDictionary *resp = [graphAPIData objectFromJSONDataWithParseOptions:JKParseOptionNone error:&error];
+ if (!resp) {
+ NSLog(@"error decoding graph API response: %@", error);
+ // TODO: indicate setup failed
+ return;
+ }
+
NSString *uuid = [resp objectForKey:@"id"];
NSString *name = [resp objectForKey:@"name"];
- NSString *sessionKey = [[token componentsSeparatedByString:@"|"] objectAtIndex:1];
-
- NSString *secretURLString = [NSString stringWithFormat:@"https://api.facebook.com/method/auth.promoteSession?access_token=%@&format=JSON", token];
+ /* Passwords are keyed by UID, so we need to make this change before storing the password */
+ [self setName:name UID:uuid];
+
+ NSString *secretURLString = [NSString stringWithFormat:@"https://api.facebook.com/method/auth.promoteSession?access_token=%@&format=JSON", [self oAuthToken]];
NSURL *secretURL = [NSURL URLWithString:[secretURLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSURLRequest *secretRequest = [NSURLRequest requestWithURL:secretURL];
- NSData *secretData = [NSURLConnection sendSynchronousRequest:secretRequest returningResponse:&response error:&error];
+
+ self.networkState = AIPromoteSessionNetworkState;
+ self.connectionData = [NSMutableData data];
+ self.connection = [NSURLConnection connectionWithRequest:secretRequest delegate:self];
+}
+
+- (void)promoteSessionDidFinishLoading:(NSData *)secretData response:(NSURLResponse *)response error:(NSError *)inError
+{
+ if (inError) {
+ NSLog(@"error promoting session: %@", inError);
+ // TODO: indicate setup failed
+ return;
+ }
+
NSString *secret = [[[NSString alloc] initWithData:secretData encoding:NSUTF8StringEncoding] autorelease];
secret = [secret substringWithRange:NSMakeRange(1, [secret length] - 2)]; // strip off the quotes
-
- /* Passwords are keyed by UID, so we need to make this change before storing the password */
- [self setName:name UID:uuid];
-
+ NSString *sessionKey = [[[self oAuthToken] componentsSeparatedByString:@"|"] objectAtIndex:1];
+
[[adium accountController] setPassword:sessionKey forAccount:self];
[self setPasswordTemporarily:sessionKey];
[self setPreference:secret
forKey:@"FBSessionSecret"
group:GROUP_ACCOUNT_STATUS];
-
+
self.oAuthWC = nil;
-
+ self.oAuthToken = nil;
+
/* When we're newly authorized, connect! */
[self connect];
- if (self.migratingAccount)
- [self finishMigration];
+ if (self.migratingAccount) {
+ [self finishMigration];
+ }
+}
+
+#pragma mark NSURLConnectionDelegate
+
+- (void)connection:(NSURLConnection *)inConnection didReceiveResponse:(NSURLResponse *)response
+{
+ [[self connectionData] setLength:0];
+ [self setConnectionResponse:response];
+}
+
+- (void)connection:(NSURLConnection *)inConnection didReceiveData:(NSData *)data
+{
+ [[self connectionData] appendData:data];
+}
+
+- (void)connection:(NSURLConnection *)inConnection didFailWithError:(NSError *)error
+{
+ NSUInteger state = [self networkState];
+
+ [self setNetworkState:AINoNetworkState];
+ [self setConnection:nil];
+ [self setConnectionResponse:nil];
+ [self setConnectionData:nil];
+
+ if (state == AIMeGraphAPINetworkState) {
+ [self meGraphAPIDidFinishLoading:nil response:nil error:error];
+ } else if (state == AIPromoteSessionNetworkState) {
+ [self promoteSessionDidFinishLoading:nil response:nil error:error];
+ }
+}
+
+- (void)connectionDidFinishLoading:(NSURLConnection *)inConnection
+{
+ NSURLResponse *response = [[[self connectionResponse] retain] autorelease];
+ NSMutableData *data = [[[self connectionData] retain] autorelease];
+ NSUInteger state = [self networkState];
+
+ [self setNetworkState:AINoNetworkState];
+ [self setConnection:nil];
+ [self setConnectionResponse:nil];
+ [self setConnectionData:nil];
+
+ if (state == AIMeGraphAPINetworkState) {
+ [self meGraphAPIDidFinishLoading:data response:response error:nil];
+ } else if (state == AIPromoteSessionNetworkState) {
+ [self promoteSessionDidFinishLoading:data response:response error:nil];
+ }
}
#pragma mark Migration
diff -r 6ffc02f14020 -r 2eed27cd9ddf Plugins/Purple Service/AIFacebookXMPPAccountViewController.m
--- a/Plugins/Purple Service/AIFacebookXMPPAccountViewController.m Fri Mar 18 20:46:09 2011 -0400
+++ b/Plugins/Purple Service/AIFacebookXMPPAccountViewController.m Sun Mar 20 20:39:20 2011 -0700
@@ -9,6 +9,7 @@
#import "AIFacebookXMPPAccount.h"
#import "AIFacebookXMPPAccountViewController.h"
#import <Adium/AIAccount.h>
+#import <Adium/AIAccountControllerProtocol.h>
@implementation AIFacebookXMPPAccountViewController
@synthesize view_migration, textField_migrationStatus, button_migrationHelp, button_migrationOAuthStart, migrationSpinner;
@@ -43,6 +44,19 @@
}
/*!
+ * @brief Configure controls
+ */
+- (void)configureForAccount:(AIAccount *)inAccount
+{
+ [super configureForAccount:inAccount];
+
+ if (account.UID && [[adium.accountController passwordForAccount:account] length]) {
+ [textField_OAuthStatus setStringValue:AILocalizedString(@"Adium currently has access to your account.", nil)];
+ [button_OAuthStart setEnabled:NO];
+ }
+}
+
+/*!
* @brief A preference was changed
*
* Don't save here; merely update controls as necessary.
diff -r 6ffc02f14020 -r 2eed27cd9ddf Plugins/Purple Service/AIFacebookXMPPOAuthWebViewWindowController.m
--- a/Plugins/Purple Service/AIFacebookXMPPOAuthWebViewWindowController.m Fri Mar 18 20:46:09 2011 -0400
+++ b/Plugins/Purple Service/AIFacebookXMPPOAuthWebViewWindowController.m Sun Mar 20 20:39:20 2011 -0700
@@ -136,45 +136,45 @@
- (void)addCookiesToRequest:(NSMutableURLRequest *)request
{
NSURL *requestURL = [request URL];
- NSLog(@"requestURL: %@", requestURL);
+ //NSLog(@"requestURL: %@", requestURL);
NSMutableArray *sentCookies = [NSMutableArray array];
// same origin: domain, port, path.
for (NSHTTPCookie *cookie in cookies) {
if ([[cookie expiresDate] timeIntervalSinceNow] < 0) {
- NSLog(@"****** expired: %@", cookie);
+ //NSLog(@"****** expired: %@", cookie);
continue;
}
if ([cookie isSecure] && ![[requestURL scheme] isEqualToString:@"https"]) {
- NSLog(@"****** secure not https: %@", cookie);
+ //NSLog(@"****** secure not https: %@", cookie);
continue;
}
if ([[cookie domain] hasPrefix:@"."]) { // ".example.com" should match "foo.example.com" and "example.com"
if (!([[requestURL host] hasSuffix:[cookie domain]] ||
[[@"." stringByAppendingString:[requestURL host]] isEqualToString:[cookie domain]])) {
- NSLog(@"****** dot prefix host mismatch: %@", cookie);
+ //NSLog(@"****** dot prefix host mismatch: %@", cookie);
continue;
}
} else {
if (![[requestURL host] isEqualToString:[cookie domain]]) {
- NSLog(@"****** host mismatch: %@", cookie);
+ //NSLog(@"****** host mismatch: %@", cookie);
continue;
}
}
if ([cookie portList] && ![[cookie portList] containsObject:[requestURL port]]) {
- NSLog(@"****** port mismatch: %@", cookie);
+ //NSLog(@"****** port mismatch: %@", cookie);
continue;
}
if (![[requestURL path] hasPrefix:[cookie path]]) {
- NSLog(@"****** path mismatch: %@", cookie);
+ //NSLog(@"****** path mismatch: %@", cookie);
continue;
}
- NSLog(@"adding cookie: %@", cookie);
+ //NSLog(@"adding cookie: %@", cookie);
[sentCookies addObject:cookie];
}
diff -r 6ffc02f14020 -r 2eed27cd9ddf Plugins/Purple Service/AIFacebookXMPPOauthWebViewWindow.xib
--- a/Plugins/Purple Service/AIFacebookXMPPOauthWebViewWindow.xib Fri Mar 18 20:46:09 2011 -0400
+++ b/Plugins/Purple Service/AIFacebookXMPPOauthWebViewWindow.xib Sun Mar 20 20:39:20 2011 -0700
@@ -3,7 +3,7 @@
<data>
<int key="IBDocument.SystemTarget">1050</int>
<string key="IBDocument.SystemVersion">10J567</string>
- <string key="IBDocument.InterfaceBuilderVersion">788</string>
+ <string key="IBDocument.InterfaceBuilderVersion">1305</string>
<string key="IBDocument.AppKitVersion">1038.35</string>
<string key="IBDocument.HIToolboxVersion">462.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
@@ -15,13 +15,17 @@
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
- <string>788</string>
- <string>788</string>
+ <string>1305</string>
+ <string>30</string>
</object>
</object>
- <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
+ <object class="NSArray" key="IBDocument.IntegratedClassDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
- <integer value="1"/>
+ <string>NSWindowTemplate</string>
+ <string>NSView</string>
+ <string>NSProgressIndicator</string>
+ <string>NSCustomObject</string>
+ <string>WebView</string>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -33,9 +37,7 @@
<object class="NSArray" key="dict.sortedKeys" id="0">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
+ <reference key="dict.values" ref="0"/>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
<bool key="EncodedWithXMLCoder">YES</bool>
@@ -53,10 +55,9 @@
<int key="NSWindowBacking">2</int>
<string key="NSWindowRect">{{196, 130}, {640, 380}}</string>
<int key="NSWTFlags">544735232</int>
- <string key="NSWindowTitle">Window</string>
+ <string key="NSWindowTitle">Facebook Account Setup</string>
<string key="NSWindowClass">NSWindow</string>
<nil key="NSViewClass"/>
- <string key="NSWindowContentMaxSize">{1.79769e+308, 1.79769e+308}</string>
<object class="NSView" key="NSWindowView" id="1006">
<reference key="NSNextResponder"/>
<int key="NSvFlags">256</int>
@@ -88,6 +89,7 @@
</object>
<string key="NSFrameSize">{640, 380}</string>
<reference key="NSSuperview" ref="1006"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView"/>
<string key="FrameName"/>
<string key="GroupName"/>
@@ -118,16 +120,19 @@
<object class="NSPSMatrix" key="NSDrawMatrix"/>
<string key="NSFrame">{{304, 174}, {32, 32}}</string>
<reference key="NSSuperview" ref="1006"/>
+ <reference key="NSWindow"/>
+ <reference key="NSNextKeyView"/>
<int key="NSpiFlags">28682</int>
<double key="NSMaxValue">100</double>
</object>
</object>
- <string key="NSFrameSize">{640, 380}</string>
+ <string key="NSFrame">{{7, 11}, {640, 380}}</string>
<reference key="NSSuperview"/>
+ <reference key="NSWindow"/>
<reference key="NSNextKeyView" ref="950810926"/>
</object>
<string key="NSScreenRect">{{0, 0}, {1680, 1028}}</string>
- <string key="NSMaxSize">{1.79769e+308, 1.79769e+308}</string>
+ <string key="NSMaxSize">{1e+13, 1e+13}</string>
<string key="NSFrameAutosaveName">FBXMPPOAUTH</string>
</object>
</object>
@@ -267,17 +272,13 @@
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="dict.sortedKeys" ref="0"/>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
+ <reference key="dict.values" ref="0"/>
</object>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="dict.sortedKeys" ref="0"/>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- </object>
+ <reference key="dict.values" ref="0"/>
</object>
<nil key="sourceID"/>
<int key="maxID">9</int>
@@ -322,7 +323,7 @@
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Plugins/Purple Service/AIFacebookXMPPOAuthWebViewWindowController.h</string>
+ <string key="minorKey">./Classes/AIFacebookXMPPOAuthWebViewWindowController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
@@ -341,1163 +342,25 @@
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/AIWindowController.h</string>
+ <string key="minorKey">./Classes/AIWindowController.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIApplicationAdditions.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMenu</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIMenuAdditions.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIDividedAlternatingRowOutlineView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIMultiCellOutlineView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIObjectAdditions.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIToolbarTabView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIToolbarUtilities.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIVariableHeightFlexibleColumnsOutlineView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIVariableHeightOutlineView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
+ <string key="className">WebView</string>
<object class="NSMutableDictionary" key="actions">
- <string key="NS.key.0">toggleFindPanel:</string>
+ <string key="NS.key.0">reloadFromOrigin:</string>
<string key="NS.object.0">id</string>
</object>
<object class="NSMutableDictionary" key="actionInfosByName">
- <string key="NS.key.0">toggleFindPanel:</string>
+ <string key="NS.key.0">reloadFromOrigin:</string>
<object class="IBActionInfo" key="NS.object.0">
- <string key="name">toggleFindPanel:</string>
+ <string key="name">reloadFromOrigin:</string>
<string key="candidateClassName">id</string>
</object>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/AIAbstractListController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/AIAccountControllerProtocol.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/AICustomSocialNetworkingStatusWindowController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/AIEditStateWindowController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="NSMutableDictionary" key="actions">
- <string key="NS.key.0">adiumPrint:</string>
- <string key="NS.object.0">id</string>
- </object>
- <object class="NSMutableDictionary" key="actionInfosByName">
- <string key="NS.key.0">adiumPrint:</string>
- <object class="IBActionInfo" key="NS.object.0">
- <string key="name">adiumPrint:</string>
- <string key="candidateClassName">id</string>
- </object>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="109735573">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/AIInterfaceControllerProtocol.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/AILocalizationAssistance.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/AIMenuControllerProtocol.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/AIPreferenceControllerProtocol.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/ESContactAlertsViewController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/ESPresetManagementController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/ESPresetNameSheetController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/ESTextAndButtonsWindowController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/JVFontPreviewField.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="NSMutableDictionary" key="actions">
- <string key="NS.key.0">prefsWindowWillClose:</string>
- <string key="NS.object.0">SS_PrefsController</string>
- </object>
- <object class="NSMutableDictionary" key="actionInfosByName">
- <string key="NS.key.0">prefsWindowWillClose:</string>
- <object class="IBActionInfo" key="NS.object.0">
- <string key="name">prefsWindowWillClose:</string>
- <string key="candidateClassName">SS_PrefsController</string>
- </object>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="1040092293">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/Adium Framework/Source/SS_PrefsController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="NSMutableDictionary" key="actions">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>didAdjustSubviews:</string>
- <string>willAdjustSubviews:</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>RBSplitView</string>
- <string>RBSplitView</string>
- </object>
- </object>
- <object class="NSMutableDictionary" key="actionInfosByName">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="NSArray" key="dict.sortedKeys">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <string>didAdjustSubviews:</string>
- <string>willAdjustSubviews:</string>
- </object>
- <object class="NSMutableArray" key="dict.values">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBActionInfo">
- <string key="name">didAdjustSubviews:</string>
- <string key="candidateClassName">RBSplitView</string>
- </object>
- <object class="IBActionInfo">
- <string key="name">willAdjustSubviews:</string>
- <string key="candidateClassName">RBSplitView</string>
- </object>
- </object>
- </object>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="73674137">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/RBSplitView/Source/RBSplitView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/ShortcutRecorder/Source/SRRecorderCell.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/ShortcutRecorder/Source/SRRecorderControl.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/ShortcutRecorder/Source/SRValidator.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Plugins/Bonjour/libezv/Simple HTTP Server/AsyncSocket.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Plugins/Purple Service/SLPurpleCocoaAdapter.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Plugins/WebKit Message View/ESWebView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Source/AIListLayoutWindowController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Source/AIListThemeWindowController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Source/AIMenuItemView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Source/AINewBookmarkWindowController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Source/AIObjectDebug.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Source/AIServiceMenu.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Source/KNShelfSplitView.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Source/OWABSearchWindowController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIViewAdditions.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSWindow</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIWindowAdditions.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSWindow</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Source/NSWindowScriptingAdditions.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSWindowController</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/AIUtilities Framework/Source/AIWindowControllerAdditions.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSWindowController</string>
- <reference key="sourceIdentifier" ref="109735573"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">RBSplitSubview</string>
- <string key="superclassName">NSView</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBProjectSource</string>
- <string key="minorKey">Frameworks/RBSplitView/Source/RBSplitSubview.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">RBSplitView</string>
- <string key="superclassName">RBSplitSubview</string>
- <object class="NSMutableDictionary" key="outlets">
- <string key="NS.key.0">delegate</string>
- <string key="NS.object.0">id</string>
- </object>
- <object class="NSMutableDictionary" key="toOneOutletInfosByName">
- <string key="NS.key.0">delegate</string>
- <object class="IBToOneOutletInfo" key="NS.object.0">
- <string key="name">delegate</string>
- <string key="candidateClassName">id</string>
- </object>
- </object>
- <reference key="sourceIdentifier" ref="73674137"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">SS_PrefsController</string>
- <string key="superclassName">NSObject</string>
- <object class="NSMutableDictionary" key="outlets">
- <string key="NS.key.0">delegate</string>
- <string key="NS.object.0">id</string>
- </object>
- <object class="NSMutableDictionary" key="toOneOutletInfosByName">
- <string key="NS.key.0">delegate</string>
- <object class="IBToOneOutletInfo" key="NS.object.0">
- <string key="name">delegate</string>
- <string key="candidateClassName">id</string>
- </object>
- </object>
- <reference key="sourceIdentifier" ref="1040092293"/>
- </object>
- </object>
- <object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
- <bool key="EncodedWithXMLCoder">YES</bool>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <string key="superclassName">NSResponder</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="275189657">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSApplication.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="356639062">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSApplicationScripting.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="918129567">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSColorPanel.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSHelpManager.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSPageLayout.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSApplication</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSUserInterfaceItemSearching.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSMenu</string>
- <string key="superclassName">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier" id="513132299">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSMenu.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AddressBook.framework/Headers/ABActions.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSAccessibility.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="275189657"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="356639062"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <reference key="sourceIdentifier" ref="918129567"/>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSControl.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDictionaryController.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
- <string key="className">NSObject</string>
- <object class="IBClassDescriptionSource" key="sourceIdentifier">
- <string key="majorKey">IBFrameworkSource</string>
- <string key="minorKey">AppKit.framework/Headers/NSDragging.h</string>
- </object>
- </object>
- <object class="IBPartialClassDescription">
More information about the commits
mailing list