# HG changeset patch # User Elliott Sales de Andrade # Date 1297734551 0 # Node ID 0dade4c34d248803b48f7472b4bd35da84c64854 # Parent d235da74af795c35751573cf7101f188b82be4e3# Parent 6e6379254def7ebd9c6351a4c53e0e25370a883d merge of '25bd5b382cc84daef94ed59dab062fea9d1613f9' and '2679e81d33ef8b6f8087c9d7aa5f4e563a32f3d1' diff -r d235da74af79 -r 0dade4c34d24 libpurple/account.h --- a/libpurple/account.h Sun Feb 13 01:27:17 2011 +0000 +++ b/libpurple/account.h Tue Feb 15 01:49:11 2011 +0000 @@ -143,6 +143,7 @@ * buddies are added to your permit list. Currently we have to * iterate through the entire list if we want to check if someone * is permitted or denied. We should do this for 3.0.0. + * Or maybe use a GTree. */ GSList *permit; /**< Permit list. */ GSList *deny; /**< Deny list. */ diff -r d235da74af79 -r 0dade4c34d24 libpurple/protocols/myspace/myspace.c --- a/libpurple/protocols/myspace/myspace.c Sun Feb 13 01:27:17 2011 +0000 +++ b/libpurple/protocols/myspace/myspace.c Tue Feb 15 01:49:11 2011 +0000 @@ -385,21 +385,22 @@ g_return_val_if_fail(buddy != NULL, NULL); - user = msim_get_user_from_buddy(buddy, TRUE); - account = purple_buddy_get_account(buddy); gc = purple_account_get_connection(account); session = (MsimSession *)gc->proto_data; display_name = headline = NULL; - /* Retrieve display name and/or headline, depending on user preference. */ - if (purple_account_get_bool(session->account, "show_headline", TRUE)) { - headline = user->headline; - } - - if (purple_account_get_bool(session->account, "show_display_name", FALSE)) { - display_name = user->display_name; + user = msim_get_user_from_buddy(buddy, FALSE); + if (user != NULL) { + /* Retrieve display name and/or headline, depending on user preference. */ + if (purple_account_get_bool(account, "show_headline", TRUE)) { + headline = user->headline; + } + + if (purple_account_get_bool(account, "show_display_name", FALSE)) { + display_name = user->display_name; + } } /* Return appropriate combination of display name and/or headline, or neither. */ diff -r d235da74af79 -r 0dade4c34d24 libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Sun Feb 13 01:27:17 2011 +0000 +++ b/libpurple/protocols/oscar/oscar.c Tue Feb 15 01:49:11 2011 +0000 @@ -2828,6 +2828,52 @@ return 1; } +static void oscar_format_username(PurpleConnection *gc, const char *new_display_name) +{ + OscarData *od; + const char *old_display_name, *username; + char *tmp, *at_sign; + + old_display_name = purple_connection_get_display_name(gc); + if (old_display_name && strchr(old_display_name, '@')) { + purple_debug_info("oscar", "Cowardly refusing to attempt to format " + "screen name because the current formatting according to " + "the server (%s) appears to be an email address\n", + old_display_name); + return; + } + + username = purple_account_get_username(purple_connection_get_account(gc)); + if (oscar_util_name_compare(username, new_display_name)) { + purple_notify_error(gc, NULL, _("The new formatting is invalid."), + _("Username formatting can change only capitalization and whitespace.")); + return; + } + + tmp = g_strdup(new_display_name); + + /* + * If our local username is an email address then strip off the domain. + * This allows formatting to work if the user entered their username as + * 'something@aim.com' or possibly other AOL-owned domains. + */ + at_sign = strchr(tmp, '@'); + if (at_sign) + at_sign[0] = '\0'; + + od = purple_connection_get_protocol_data(gc); + if (!flap_connection_getbytype(od, SNAC_FAMILY_ADMIN)) { + /* We don't have a connection to an "admin" server. Make one. */ + od->setnick = TRUE; + g_free(od->newformatting); + od->newformatting = tmp; + aim_srv_requestnew(od, SNAC_FAMILY_ADMIN); + } else { + aim_admin_setnick(od, flap_connection_getbytype(od, SNAC_FAMILY_ADMIN), tmp); + g_free(tmp); + } +} + static int purple_bosrights(OscarData *od, FlapConnection *conn, FlapFrame *fr, ...) { PurpleConnection *gc; PurpleAccount *account; @@ -2860,12 +2906,13 @@ serv_set_info(gc, purple_account_get_user_info(account)); username = purple_account_get_username(account); - if (!od->icq && strcmp(username, purple_connection_get_display_name(gc)) != 0) + if (!od->icq && strcmp(username, purple_connection_get_display_name(gc)) != 0) { /* * Format the username for AIM accounts if it's different * than what's currently set. */ oscar_format_username(gc, username); + } /* Set our available message based on the current status */ status = purple_account_get_active_status(account); @@ -5196,23 +5243,6 @@ gc); } -void oscar_format_username(PurpleConnection *gc, const char *nick) { - OscarData *od = purple_connection_get_protocol_data(gc); - if (!oscar_util_name_compare(purple_account_get_username(purple_connection_get_account(gc)), nick)) { - if (!flap_connection_getbytype(od, SNAC_FAMILY_ADMIN)) { - od->setnick = TRUE; - g_free(od->newformatting); - od->newformatting = g_strdup(nick); - aim_srv_requestnew(od, SNAC_FAMILY_ADMIN); - } else { - aim_admin_setnick(od, flap_connection_getbytype(od, SNAC_FAMILY_ADMIN), nick); - } - } else { - purple_notify_error(gc, NULL, _("The new formatting is invalid."), - _("Username formatting can change only capitalization and whitespace.")); - } -} - static void oscar_confirm_account(PurplePluginAction *action) { PurpleConnection *gc; diff -r d235da74af79 -r 0dade4c34d24 libpurple/protocols/oscar/oscarcommon.h --- a/libpurple/protocols/oscar/oscarcommon.h Sun Feb 13 01:27:17 2011 +0000 +++ b/libpurple/protocols/oscar/oscarcommon.h Tue Feb 15 01:49:11 2011 +0000 @@ -102,6 +102,5 @@ void oscar_send_file(PurpleConnection *gc, const char *who, const char *file); PurpleXfer *oscar_new_xfer(PurpleConnection *gc, const char *who); gboolean oscar_offline_message(const PurpleBuddy *buddy); -void oscar_format_username(PurpleConnection *gc, const char *nick); GList *oscar_actions(PurplePlugin *plugin, gpointer context); void oscar_init(PurplePlugin *plugin, gboolean is_icq); diff -r d235da74af79 -r 0dade4c34d24 libpurple/tests/Makefile.am --- a/libpurple/tests/Makefile.am Sun Feb 13 01:27:17 2011 +0000 +++ b/libpurple/tests/Makefile.am Tue Feb 15 01:49:11 2011 +0000 @@ -14,6 +14,7 @@ test_jabber_digest_md5.c \ test_jabber_jutil.c \ test_jabber_scram.c \ + test_oscar_util.c \ test_qq.c \ test_yahoo_util.c \ test_util.c \ @@ -30,6 +31,7 @@ check_libpurple_LDADD=\ $(top_builddir)/libpurple/protocols/jabber/libjabber.la \ + $(top_builddir)/libpurple/protocols/oscar/liboscar.la \ $(top_builddir)/libpurple/protocols/qq/libqq_tmp.la \ $(top_builddir)/libpurple/protocols/yahoo/libymsg.la \ $(top_builddir)/libpurple/libpurple.la \ diff -r d235da74af79 -r 0dade4c34d24 libpurple/tests/check_libpurple.c --- a/libpurple/tests/check_libpurple.c Sun Feb 13 01:27:17 2011 +0000 +++ b/libpurple/tests/check_libpurple.c Tue Feb 15 01:49:11 2011 +0000 @@ -88,6 +88,7 @@ srunner_add_suite(sr, jabber_digest_md5_suite()); srunner_add_suite(sr, jabber_jutil_suite()); srunner_add_suite(sr, jabber_scram_suite()); + srunner_add_suite(sr, oscar_util_suite()); srunner_add_suite(sr, qq_suite()); srunner_add_suite(sr, yahoo_util_suite()); srunner_add_suite(sr, util_suite()); diff -r d235da74af79 -r 0dade4c34d24 libpurple/tests/test_oscar_util.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/tests/test_oscar_util.c Tue Feb 15 01:49:11 2011 +0000 @@ -0,0 +1,47 @@ +#include + +#include "tests.h" +#include "../protocols/oscar/oscar.h" + +START_TEST(test_oscar_util_name_compare) +{ + int i; + const char *good[] = { + "test", + "TEST", + "Test", + "teSt", + " TesT", + "test ", + " T E s T " + }; + const char *bad[] = { + "toast", + "test@example.com", + "test@aim.com" + }; + + for (i = 0; i < G_N_ELEMENTS(good); i++) { + ck_assert_int_eq(0, oscar_util_name_compare("test", good[i])); + ck_assert_int_eq(0, oscar_util_name_compare(good[i], "test")); + } + for (i = 0; i < G_N_ELEMENTS(bad); i++) { + ck_assert_int_ne(0, oscar_util_name_compare("test", bad[i])); + ck_assert_int_ne(0, oscar_util_name_compare(bad[i], "test")); + } +} +END_TEST + +Suite *oscar_util_suite(void) +{ + Suite *s; + TCase *tc; + + s = suite_create("OSCAR Utility Functions"); + + tc = tcase_create("Convert IM from network format to HTML"); + tcase_add_test(tc, test_oscar_util_name_compare); + suite_add_tcase(s, tc); + + return s; +} diff -r d235da74af79 -r 0dade4c34d24 libpurple/tests/tests.h --- a/libpurple/tests/tests.h Sun Feb 13 01:27:17 2011 +0000 +++ b/libpurple/tests/tests.h Tue Feb 15 01:49:11 2011 +0000 @@ -13,6 +13,7 @@ Suite * jabber_digest_md5_suite(void); Suite * jabber_jutil_suite(void); Suite * jabber_scram_suite(void); +Suite * oscar_util_suite(void); Suite * qq_suite(void); Suite * yahoo_util_suite(void); Suite * util_suite(void); diff -r d235da74af79 -r 0dade4c34d24 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Sun Feb 13 01:27:17 2011 +0000 +++ b/pidgin/gtkconv.c Tue Feb 15 01:49:11 2011 +0000 @@ -78,9 +78,9 @@ #define AUTO_RESPONSE "<AUTO-REPLY> : " -typedef enum -{ - PIDGIN_CONV_SET_TITLE = 1 << 0, +typedef enum +{ + PIDGIN_CONV_SET_TITLE = 1 << 0, PIDGIN_CONV_BUDDY_ICON = 1 << 1, PIDGIN_CONV_MENU = 1 << 2, PIDGIN_CONV_TAB_ICON = 1 << 3, @@ -2192,9 +2192,9 @@ (event->keyval == GDK_Left) || (event->keyval == GDK_Right) || (event->keyval == GDK_Page_Up) || - (event->keyval == GDK_KP_Page_Up) || + (event->keyval == GDK_KP_Page_Up) || (event->keyval == GDK_Page_Down) || - (event->keyval == GDK_KP_Page_Down) || + (event->keyval == GDK_KP_Page_Down) || (event->keyval == GDK_Home) || (event->keyval == GDK_End) || (event->keyval == GDK_Tab) || @@ -2430,8 +2430,8 @@ if (purple_conversation_get_type(conv) == PURPLE_CONV_TYPE_IM) { PurpleBuddy *b = purple_find_buddy(account, name); if (b != NULL) { - PurplePresence *p; - p = purple_buddy_get_presence(b); + PurplePresence *p; + p = purple_buddy_get_presence(b); if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_AWAY)) return away_list; if (purple_presence_is_status_primitive_active(p, PURPLE_STATUS_UNAVAILABLE)) @@ -6127,7 +6127,7 @@ /* Currently GTK+ maintains our sorted list after it's in the tree. * This may change if it turns out we can manage it faster ourselves. - */ + */ gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(ls), CHAT_USERS_ALIAS_KEY_COLUMN, GTK_SORT_ASCENDING); } @@ -6479,13 +6479,13 @@ gtk_widget_show(win->menu.get_info); gtk_widget_hide(win->menu.invite); gtk_widget_show(win->menu.alias); - if (purple_privacy_check(account, purple_conversation_get_name(conv))) { - gtk_widget_hide(win->menu.unblock); - gtk_widget_show(win->menu.block); - } else { - gtk_widget_hide(win->menu.block); - gtk_widget_show(win->menu.unblock); - } + if (purple_privacy_check(account, purple_conversation_get_name(conv))) { + gtk_widget_hide(win->menu.unblock); + gtk_widget_show(win->menu.block); + } else { + gtk_widget_hide(win->menu.block); + gtk_widget_show(win->menu.unblock); + } if ((account == NULL) || purple_find_buddy(account, purple_conversation_get_name(conv)) == NULL) { gtk_widget_show(win->menu.add); @@ -6706,7 +6706,7 @@ char *title; PurpleConvIm *im = NULL; PurpleAccount *account = purple_conversation_get_account(conv); - PurpleBuddy *buddy = NULL; + PurpleBuddy *buddy = NULL; char *markup = NULL; AtkObject *accessibility_obj; /* I think this is a little longer than it needs to be but I'm lazy. */