adium-1.4 2971:24a796fc57a9: Use our own password UI when libpur...
commits at adium.im
commits at adium.im
Tue May 18 21:15:33 UTC 2010
details: http://hg.adium.im/adium-1.4/rev/24a796fc57a9
revision: 2971:24a796fc57a9
author: Evan Schoenberg
date: Tue May 18 16:00:35 2010 -0500
Use our own password UI when libpurple wants a password. Fixes #14018
(transplanted from 24e9c5b32b433104a03087a2bbe1679ef03da98f)
Subject: adium-1.4 2972:f6954bdef95a: Forgot an important break statement
details: http://hg.adium.im/adium-1.4/rev/f6954bdef95a
revision: 2972:f6954bdef95a
author: Evan Schoenberg
date: Tue May 18 16:13:01 2010 -0500
Forgot an important break statement
diffs (186 lines):
diff -r fbb20179fa22 -r f6954bdef95a Plugins/Purple Service/adiumPurpleRequest.h
--- a/Plugins/Purple Service/adiumPurpleRequest.h Mon May 17 23:00:45 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 fbb20179fa22 -r f6954bdef95a Plugins/Purple Service/adiumPurpleRequest.m
--- a/Plugins/Purple Service/adiumPurpleRequest.m Mon May 17 23:00:45 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);
@@ -440,4 +411,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