Skip to content

Instantly share code, notes, and snippets.

@masuidrive
Created July 19, 2010 11:06
Show Gist options
  • Save masuidrive/481280 to your computer and use it in GitHub Desktop.
Save masuidrive/481280 to your computer and use it in GitHub Desktop.
diff --git a/iphone/Classes/FacebookModule.h b/iphone/Classes/FacebookModule.h
index d52bd55..b073a57 100644
--- a/iphone/Classes/FacebookModule.h
+++ b/iphone/Classes/FacebookModule.h
@@ -11,7 +11,7 @@
#import "FBConnect.h"
#import "KrollCallback.h"
-@interface FacebookModule : TiModule<FBSessionDelegate,FBDialogDelegate,FBRequestDelegate> {
+@interface FacebookModule : TiModule<FBSessionDelegate,FBDialogDelegate,FBRequestDelegate,FBSessionDelegate> {
@private
FBSession *session;
FBLoginDialog *dialog;
@@ -56,6 +56,10 @@
@end
+@interface FBLoginCallback : FBDialogCallback {
+}
+@end
+
@interface FBPermissionCallback : FBDialogCallback {
NSString *permission;
}
@@ -70,4 +74,4 @@
@end
-#endif
\ No newline at end of file
+#endif
diff --git a/iphone/Classes/FacebookModule.m b/iphone/Classes/FacebookModule.m
index caedea8..97ecea6 100644
--- a/iphone/Classes/FacebookModule.m
+++ b/iphone/Classes/FacebookModule.m
@@ -169,6 +169,54 @@
@end
+@implementation FBLoginCallback
+
+- (id)initWithCallback:(KrollCallback*)callback_ module:(FacebookModule*)module_
+{
+ if (self = [super initWithCallback:callback_ module:module_])
+ {
+ // Nothing
+ }
+ return self;
+}
+
+- (void)dealloc
+{
+ [super dealloc];
+}
+
+- (FBDialog*)newDialog
+{
+ FBLoginDialog *dialog_ = [[FBLoginDialog alloc] init];
+ return dialog_;
+}
+
+- (void)dialogDidSucceed:(FBDialog*)dialog_
+{
+ NSLog(@"[DEBUG] Facebook login dialogDidSucceed");
+ NSDictionary *event = [NSDictionary dictionaryWithObjectsAndKeys:[NSNull null],@"error",[NSNumber numberWithBool:true],@"success",[NSNumber numberWithBool:false],@"cancel",@"login",@"event",nil];
+ [module _fireEventToListener:@"login" withObject:event listener:callback thisObject:nil];
+ [self autorelease];
+}
+
+- (void)dialogDidCancel:(FBDialog*)dialog_
+{
+ NSLog(@"[DEBUG] Facebook login dialogDidCancel");
+ NSDictionary *event = [NSDictionary dictionaryWithObjectsAndKeys:[NSNull null],@"error",[NSNumber numberWithBool:false],@"success",[NSNumber numberWithBool:true],@"cancel",@"login",@"event",nil];
+ [module _fireEventToListener:@"login" withObject:event listener:callback thisObject:nil];
+ [self autorelease];
+}
+
+- (void)dialog:(FBDialog*)dialog_ didFailWithError:(NSError*)error
+{
+ NSLog(@"[ERROR] Facebook login dialog failed with error = %@",[error description]);
+ NSDictionary *event = [NSDictionary dictionaryWithObjectsAndKeys:[error description],@"error",[NSNumber numberWithBool:false],@"success",[NSNumber numberWithBool:false],@"cancel",@"login",@"event",nil];
+ [module _fireEventToListener:@"login" withObject:event listener:callback thisObject:nil];
+ [self autorelease];
+}
+@end
+
+
@implementation FBPermissionCallback
- (id)initWithCallback:(KrollCallback*)callback_ module:(FacebookModule*)module_ permission:(NSString*) permission_
@@ -348,8 +396,16 @@
[lock unlock];
}
+
#pragma mark Public APIs
+- (void)login:(id)args
+{
+ ENSURE_ARG_COUNT(args, 0);
+ FBLoginCallback *cb = [[FBLoginCallback alloc] initWithCallback:nil module:self];
+ [self performSelectorOnMainThread:@selector(showDialog:) withObject:cb waitUntilDone:NO];
+}
+
- (void)logout
{
if (session!=nil)
@@ -635,4 +691,4 @@ MAKE_SYSTEM_PROP(LOGIN_BUTTON_STYLE_NORMAL,FBLoginButtonStyleNormal);
@end
-#endif
\ No newline at end of file
+#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment