adium 3211:e95f0ef93e76: Whenever libpurple works here again (or...

commits at adium.im commits at adium.im
Tue May 18 21:15:33 UTC 2010


details:	http://hg.adium.im/adium/rev/e95f0ef93e76
revision:	3211:e95f0ef93e76
author:		Evan Schoenberg
date:		Tue May 18 16:00:06 2010 -0500

Whenever libpurple works here again (or is it just me?), this will let us set the MSN display name without the previously needed hack of using an msn prpl internal
Subject: adium 3212:24e9c5b32b43: Use our own password UI when libpurple wants a password. Fixes #14018

details:	http://hg.adium.im/adium/rev/24e9c5b32b43
revision:	3212:24e9c5b32b43
author:		Evan Schoenberg
date:		Tue May 18 16:00:35 2010 -0500

Use our own password UI when libpurple wants a password. Fixes #14018
Subject: adium 3213:3bca5a1ea616: Forgot an important break statement

details:	http://hg.adium.im/adium/rev/3bca5a1ea616
revision:	3213:3bca5a1ea616
author:		Evan Schoenberg
date:		Tue May 18 16:13:01 2010 -0500

Forgot an important break statement
(transplanted from f6954bdef95a9064b969e013cab918008360c515)

diffs (216 lines):

diff -r 0e6958f302a2 -r 3bca5a1ea616 Plugins/Purple Service/ESPurpleMSNAccount.m
--- a/Plugins/Purple Service/ESPurpleMSNAccount.m	Tue May 18 15:00:32 2010 -0500
+++ b/Plugins/Purple Service/ESPurpleMSNAccount.m	Tue May 18 16:13:01 2010 -0500
@@ -16,9 +16,6 @@
 
 #import "ESPurpleMSNAccount.h"
 
-#import <libpurple/state.h>
-#import <libpurple/msn.h>
-
 #import <Adium/AIAccountControllerProtocol.h>
 #import <Adium/AIContactControllerProtocol.h>
 #import <Adium/AIContentControllerProtocol.h>
@@ -361,8 +358,14 @@
 			}
 
 			
-			if (friendlyNameUTF8String && friendlyNameUTF8String[0])
-				msn_act_id(purple_account_get_connection(account), friendlyNameUTF8String);
+			PurplePluginProtocolInfo  *prpl_info = self.protocolInfo;
+			
+			if (prpl_info && prpl_info->set_public_alias) {
+				(prpl_info->set_public_alias)(purple_account_get_connection(account),
+											  friendlyNameUTF8String,
+											  /* success_cb */ NULL,
+											  /* failure_cb */ NULL);
+			}
 
 			[lastFriendlyNameChange release];
 			lastFriendlyNameChange = [now retain];
diff -r 0e6958f302a2 -r 3bca5a1ea616 Plugins/Purple Service/adiumPurpleRequest.h
--- a/Plugins/Purple Service/adiumPurpleRequest.h	Tue May 18 15:00:32 2010 -0500
+++ b/Plugins/Purple Service/adiumPurpleRequest.h	Tue May 18 16:13:01 2010 -0500
@@ -15,6 +15,7 @@
  */
 
 #import <AdiumLibpurple/SLPurpleCocoaAdapter.h>
+#import <Adium/AIPasswordPromptController.h>
 
 PurpleRequestUiOps *adium_purple_request_get_ui_ops();
 
@@ -27,5 +28,5 @@
 	
 }
 + (void)requestCloseWithHandle:(id)handle;
-
++ (void)returnedPassword:(NSString *)password returnCode:(AIPasswordPromptReturn)returnCode context:(id)context;
 @end
diff -r 0e6958f302a2 -r 3bca5a1ea616 Plugins/Purple Service/adiumPurpleRequest.m
--- a/Plugins/Purple Service/adiumPurpleRequest.m	Tue May 18 15:00:32 2010 -0500
+++ b/Plugins/Purple Service/adiumPurpleRequest.m	Tue May 18 16:13:01 2010 -0500
@@ -22,6 +22,7 @@
 #import "AILibpurplePlugin.h"
 #import "AMPurpleRequestFieldsController.h"
 
+#import <Adium/AIAccountControllerProtocol.h>
 #import <Adium/AIContactAlertsControllerProtocol.h>
 #import <Adium/ESFileTransfer.h>
 #import <Adium/AIListContact.h>
@@ -252,91 +253,61 @@
 									PurpleAccount *account, const char *who, PurpleConversation *conv,
 									void *userData)
 {
-	id					requestController = nil;
-	NSString			*titleString = (title ?  [[NSString stringWithUTF8String:title] lowercaseString] : nil);
+	id requestController = nil;
 
-    if (titleString && 
-		[titleString rangeOfString:@"new jabber"].location != NSNotFound) {
+    if (title && (strcmp(title, _("Register New XMPP Account")) == 0)) {
 		/* Jabber registration request. Instead of displaying a request dialogue, we fill in the information automatically.
 		 * And by that, I mean that we accept all the default empty values, since the username and password are preset for us. */
 		((PurpleRequestFieldsCb)okCb)(userData, fields);
 		
+	} else if (purple_request_fields_get_field(fields, "password") &&
+			   purple_request_fields_get_field(fields, "remember")) {
+		/* Password request dialogue. Handle it with our own password request system, which is much prettier. */
+		
+		AIAccount *adiumAccount = accountLookup(account);
+		
+		[adium.accountController passwordForAccount:adiumAccount
+									   promptOption:AIPromptAlways
+									notifyingTarget:[ESPurpleRequestAdapter class]
+										   selector:@selector(returnedPassword:returnCode:context:)
+											context:[NSDictionary dictionaryWithObjectsAndKeys:
+													 adiumAccount, @"Account", 
+													 [NSValue valueWithPointer:fields], @"fields",
+													 [NSValue valueWithPointer:okCb], @"okCb",
+													 [NSValue valueWithPointer:cancelCb], @"cancelCb",
+													 [NSValue valueWithPointer:userData], @"userData",
+													 nil]];
+		
 	} else {
 		AILog(@"adiumPurpleRequestFields: %s\n%s\n%s ",
-				   (title ? title : ""),
-				   (primary ? primary : ""),
-				   (secondary ? secondary : ""));
+			  (title ? title : ""),
+			  (primary ? primary : ""),
+			  (secondary ? secondary : ""));
         
         id self = (CBPurpleAccount*)account->ui_data; // for AILocalizedString
 		
-        requestController = [[AMPurpleRequestFieldsController alloc] initWithTitle:title?[NSString stringWithUTF8String:title]:nil
-                                                                       primaryText:primary?[NSString stringWithUTF8String:primary]:nil
-                                                                     secondaryText:secondary?[NSString stringWithUTF8String:secondary]:nil
+        requestController = [[AMPurpleRequestFieldsController alloc] initWithTitle:(title ? [NSString stringWithUTF8String:title] : nil)
+                                                                       primaryText:(primary ? [NSString stringWithUTF8String:primary] : nil)
+                                                                     secondaryText:(secondary ? [NSString stringWithUTF8String:secondary] : nil)
                                                                      requestFields:fields
-                                                                            okText:okText?[NSString stringWithUTF8String:okText]:AILocalizedString(@"OK",nil)
+                                                                            okText:(okText ? [NSString stringWithUTF8String:okText] : AILocalizedString(@"OK",nil))
                                                                           callback:okCb
-                                                                        cancelText:cancelText?[NSString stringWithUTF8String:cancelText]:AILocalizedString(@"Cancel",nil)
+                                                                        cancelText:(cancelText ? [NSString stringWithUTF8String:cancelText] : AILocalizedString(@"Cancel",nil))
                                                                           callback:cancelCb
                                                                            account:(CBPurpleAccount*)account->ui_data
-                                                                               who:who?[NSString stringWithUTF8String:who]:nil
+                                                                               who:(who ? [NSString stringWithUTF8String:who] : nil)
                                                                       conversation:conv
                                                                           userData:userData];
-#if 0
-		GList					*gl, *fl, *field_list;
-		PurpleRequestFieldGroup	*group;
+	}
 
-		//Look through each group, processing each field
-		for (gl = purple_request_fields_get_groups(fields);
-			 gl != NULL;
-			 gl = gl->next) {
-			
-			group = gl->data;
-			field_list = purple_request_field_group_get_fields(group);
-			
-			for (fl = field_list; fl != NULL; fl = fl->next) {
-				/*
-				typedef enum
-				{
-					PURPLE_REQUEST_FIELD_NONE,
-					PURPLE_REQUEST_FIELD_STRING,
-					PURPLE_REQUEST_FIELD_INTEGER,
-					PURPLE_REQUEST_FIELD_BOOLEAN,
-					PURPLE_REQUEST_FIELD_CHOICE,
-					PURPLE_REQUEST_FIELD_LIST,
-					PURPLE_REQUEST_FIELD_LABEL,
-					PURPLE_REQUEST_FIELD_ACCOUNT
-				} PurpleRequestFieldType;
-				*/
-
-				/*
-				PurpleRequestField		*field;
-				PurpleRequestFieldType	type;
-				
-				field = (PurpleRequestField *)fl->data;
-				type = purple_request_field_get_type(field);
-				if (type == PURPLE_REQUEST_FIELD_STRING) {
-					if (strcasecmp("username", purple_request_field_get_label(field)) == 0) {
-						purple_request_field_string_set_value(field, purple_account_get_username(account));
-					} else if (strcasecmp("password", purple_request_field_get_label(field)) == 0) {
-						purple_request_field_string_set_value(field, purple_account_get_password(account));
-					}
-				}
-				 */
-			}
-			
-		}
-//		((PurpleRequestFieldsCb)okCb)(userData, fields);
-#endif
-	}
-    
 	return requestController;
 }
 
 static void *adiumPurpleRequestFile(const char *title, const char *filename,
-								  gboolean savedialog, GCallback ok_cb,
-								  GCallback cancel_cb,
-								  PurpleAccount *account, const char *who, PurpleConversation *conv,
-								  void *user_data)
+									gboolean savedialog, GCallback ok_cb,
+									GCallback cancel_cb,
+									PurpleAccount *account, const char *who, PurpleConversation *conv,
+									void *user_data)
 {	
 	if (title) {
 		NSString *titleString = (title ? [NSString stringWithUTF8String:title] : nil);
@@ -442,4 +413,30 @@
 	purple_request_close_with_handle(handle);
 }
 
++ (void)returnedPassword:(NSString *)password returnCode:(AIPasswordPromptReturn)returnCode context:(id)context
+{
+	NSDictionary *dict = (NSDictionary *)context;
+	PurpleRequestFields *fields = [[dict objectForKey:@"fields"] pointerValue];
+	void *userData = [[dict objectForKey:@"userData"] pointerValue];
+
+	PurpleRequestFieldsCb cb;
+
+	switch (returnCode) {
+		case AIPasswordPromptOKReturn:
+		{
+			cb = [[dict objectForKey:@"okCb"] pointerValue];
+
+			/* Set the password within the fields structure so libpurple can retrieve it */
+			PurpleRequestField *field = purple_request_fields_get_field(fields, "password");
+			purple_request_field_string_set_value(field, [password UTF8String]);
+			break;
+		}
+		case AIPasswordPromptCancelReturn:
+			cb = [[dict objectForKey:@"cancelCb"] pointerValue];
+			break;
+	}
+	
+	cb(userData, fields);
+}
+
 @end




More information about the commits mailing list