<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -18,9 +18,15 @@ typedef enum _SDFacebookTaskType {
 	SDFacebookTaskGetLoginURL,
 	SDFacebookTaskFinishLoginProcess,
 	
+	SDFacebookTaskGetAppPermissions,
+	SDFacebookTaskGetAllowAppPermissionsURL,
+	
 	SDFacebookTaskGetFriends,
 	SDFacebookTaskGetUserInfo,
 	
+	SDFacebookTaskGetNotes,
+	SDFacebookTaskEditNote,
+	
 	SDFacebookTaskGetPublicTimeline,
 	
 	SDFacebookTaskMAX // leave this alone
@@ -30,8 +36,20 @@ typedef enum _SDFacebookTaskType {
 	SDFacebookTaskManager *facebookManager;
 	
 	NSArray *UIDs;
+	
+	NSString *noteID;
+	NSString *title;
+	NSString *content;
+	
+	NSString *appPermissionType;
 }
 
 @property (copy) NSArray *UIDs;
 
+@property (copy) NSString *noteID;
+@property (copy) NSString *title;
+@property (copy) NSString *content;
+
+@property (copy) NSString *appPermissionType;
+
 @end</diff>
      <filename>Source/SDFacebookTask.h</filename>
    </modified>
    <modified>
      <diff>@@ -26,6 +26,12 @@
 
 @synthesize UIDs;
 
+@synthesize noteID;
+@synthesize title;
+@synthesize content;
+
+@synthesize appPermissionType;
+
 - (id) initWithManager:(SDFacebookTaskManager*)newManager {
 	if (self = [super initWithManager:newManager]) {
 		facebookManager = newManager;
@@ -42,11 +48,42 @@
 - (void) dealloc {
 	[UIDs release], UIDs = nil;
 	
+	[noteID release], noteID = nil;
+	[title release], title = nil;
+	[content release], content = nil;
+	
+	[appPermissionType release], appPermissionType = nil;
+	
 	[super dealloc];
 }
 
+- (void) run {
+	if (type == SDFacebookTaskGetAllowAppPermissionsURL) {
+		NSString *URLString = [NSString stringWithFormat:@&quot;http://www.facebook.com/authorize.php?api_key=%@&amp;v=%@&amp;ext_perm=%@&amp;popup&amp;skipcookie&quot;,
+							   facebookManager.apiKey,
+							   facebookManager.apiVersion,
+							   self.appPermissionType];
+		
+		results = [URLString retain];
+		[self sendResultsToDelegate];
+		
+		return;
+	}
+	
+	[super run];
+}
+
 - (id) copyWithZone:(NSZone*)zone {
-	id copy = [super copyWithZone:zone];
+	SDFacebookTask *copy = [super copyWithZone:zone];
+	
+	copy.UIDs = self.UIDs;
+	
+	copy.noteID = self.noteID;
+	copy.title = self.title;
+	copy.content = self.content;
+	
+	copy.appPermissionType = self.appPermissionType;
+
 	return copy;
 }
 
@@ -66,7 +103,12 @@
 }
 
 - (SDHTTPMethod) methodBasedOnTaskType {
-	return SDHTTPMethodGet;
+	switch (type) {
+		case SDFacebookTaskEditNote:
+			return SDHTTPMethodPost;
+		default:
+			return SDHTTPMethodGet;
+	}
 }
 
 - (NSString*) URLStringBasedOnTaskType {
@@ -75,6 +117,7 @@
 
 - (SDParseFormat) parseFormatBasedOnTaskType {
 	switch (type) {
+		case SDFacebookTaskGetAppPermissions:
 		case SDFacebookTaskGetLoginURL:
 			return SDParseFormatNone;
 	}
@@ -82,17 +125,17 @@
 }
 
 - (NSString*) apiMethodBasedOnTaskType {
-	switch (type) {
-		case SDFacebookTaskGetLoginURL:
-			return @&quot;Auth.createToken&quot;;
-		case SDFacebookTaskFinishLoginProcess:
-			return @&quot;Auth.getSession&quot;;
-		case SDFacebookTaskGetUserInfo:
-			return @&quot;Users.getInfo&quot;;
-		case SDFacebookTaskGetFriends:
-			return @&quot;Friends.get&quot;;
-	}
-	return nil;
+	NSString *methods[SDFacebookTaskMAX] = {@&quot;&quot;};
+	
+	methods[SDFacebookTaskGetLoginURL] = @&quot;Auth.createToken&quot;;
+	methods[SDFacebookTaskFinishLoginProcess] = @&quot;Auth.getSession&quot;;
+	methods[SDFacebookTaskGetUserInfo] = @&quot;Users.getInfo&quot;;
+	methods[SDFacebookTaskGetFriends] = @&quot;Friends.get&quot;;
+	methods[SDFacebookTaskGetNotes] = @&quot;Notes.get&quot;;
+	methods[SDFacebookTaskEditNote] = @&quot;Notes.edit&quot;;
+	methods[SDFacebookTaskGetAppPermissions] = @&quot;Users.hasAppPermission&quot;;
+	
+	return methods[type];
 }
 
 - (void) addParametersToDictionary:(NSMutableDictionary*)parameters {
@@ -108,6 +151,19 @@
 	if (type &gt; SDFacebookTaskFinishLoginProcess)
 		[parameters setObject:facebookManager.sessionKey forKey:@&quot;session_key&quot;];
 	
+	if (noteID)
+		[parameters setObject:noteID forKey:@&quot;note_id&quot;];
+	
+	if (title)
+		[parameters setObject:title forKey:@&quot;title&quot;];
+	
+	if (content)
+		[parameters setObject:content forKey:@&quot;content&quot;];
+	
+	if (appPermissionType)
+		[parameters setObject:appPermissionType forKey:@&quot;ext_perm&quot;];
+	
+	
 	if (UIDs)
 		[parameters setObject:[UIDs componentsJoinedByString:@&quot;,&quot;] forKey:@&quot;uids&quot;];
 	
@@ -120,6 +176,12 @@
 }
 
 - (void) sendResultsToDelegate {
+	if ([results isKindOfClass:[NSDictionary class]] &amp;&amp; [[results allKeys] containsObject:@&quot;error_code&quot;]) {
+		error = [NSError errorWithDomain:@&quot;SDNetDomain&quot; code:SDNetTaskErrorServiceDefinedError userInfo:nil];
+		[self sendErrorToDelegate];
+		return;
+	}
+	
 	if (type == SDFacebookTaskGetLoginURL) {
 		NSString *authToken = self.results;
 		
@@ -127,12 +189,10 @@
 		facebookManager.authToken = [authToken substringWithRange:range];
 		
 		NSString *baseURLString = @&quot;http://www.facebook.com/login.php?v=1.0&amp;skipcookie=1&amp;popup=1&amp;api_key=%@&amp;auth_token=%@&quot;;
-		NSString *URLString = NSSTRINGF(baseURLString, facebookManager.apiKey, facebookManager.authToken);
+		NSString *URLString = [NSString stringWithFormat:baseURLString, facebookManager.apiKey, facebookManager.authToken];
 		
 		[results autorelease];
 		results = [URLString retain];
-		
-		[super sendResultsToDelegate];
 	}
 	else if (type == SDFacebookTaskFinishLoginProcess) {
 		facebookManager.sessionSecret = [self.results objectForKey:@&quot;secret&quot;];
@@ -141,16 +201,20 @@
 		NSNumber *sessionUID = [self.results objectForKey:@&quot;uid&quot;];
 		facebookManager.sessionUID = [NSString stringWithFormat:@&quot;%lld&quot;, [sessionUID longLongValue]];
 		
-		BOOL success = YES;
+		NSNumber *expires = [self.results objectForKey:@&quot;expires&quot;];
+		NSDate *expirationDate = [NSDate dateWithTimeIntervalSince1970:[expires doubleValue]];
 		
-		[results autorelease];
-		results = [[NSNumber numberWithBool:success] retain];;
+		NSMutableDictionary *newResults = [NSMutableDictionary dictionary];
+		[newResults setObject:facebookManager.sessionUID forKey:@&quot;sessionIdentifier&quot;];
+		[newResults setObject:[facebookManager sessionCredentials] forKey:@&quot;sessionCredentials&quot;];
+		if ([expires isEqualToNumber:[NSNumber numberWithInt:0]])
+			[newResults setObject:expirationDate forKey:@&quot;sessionExpirationDate&quot;];
 		
-		[super sendResultsToDelegate];
-	}
-	else {
-		[super sendResultsToDelegate];
+		[results autorelease];
+		results = [newResults retain];
 	}
+	
+	[super sendResultsToDelegate];
 }
 
 - (void) sendErrorToDelegate {</diff>
      <filename>Source/SDFacebookTask.m</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>766638c00a8f34db7307d8ca9963a9c15296ff2f</id>
    </parent>
  </parents>
  <author>
    <name>Steven Degutis</name>
    <email>steven@degutis.org</email>
  </author>
  <url>http://github.com/sdegutis/CocoaREST/commit/42fa19e3394b21faa4b766069192a0e9dc4dff14</url>
  <id>42fa19e3394b21faa4b766069192a0e9dc4dff14</id>
  <committed-date>2009-06-25T07:44:44-07:00</committed-date>
  <authored-date>2009-06-25T07:44:44-07:00</authored-date>
  <message>In SDFacebookTask.*: Did a lot of general work on making FB's API more accessible, most notable including laying the groundwork for FB's 'extended permissions' authorization.</message>
  <tree>a3d82bb8c6ef0a38d3ee4623b167318ce472619f</tree>
  <committer>
    <name>Steven Degutis</name>
    <email>steven@degutis.org</email>
  </committer>
</commit>
