# HG changeset patch # User Richard Laager # Date 1178737946 0 # Node ID 21b7f05a2878656c9e92a41ae9840a61dd15f4e0 # Parent 5143cdd8ad79a6d9b93af314c6b3b962572f67cf# Parent a520e48dbfefc3c46b77e51295e0ad8fb03577f3 merge of '4a0f05c690f6ef4c2ebc7f27bc1b7c161b497b8d' and '4ae685b280f8d6e5d3f46bc983e817c037d00142' diff -r 5143cdd8ad79 -r 21b7f05a2878 ChangeLog --- a/ChangeLog Wed May 09 19:12:18 2007 +0000 +++ b/ChangeLog Wed May 09 19:12:26 2007 +0000 @@ -3,6 +3,7 @@ version 2.0.1 (??/??/????): * Buddy list update speedups when buddy icons are not being displayed. (Scott Wolchok) + * Custom smileys on MSN can be saved by right-clicking on them. Finch: * Userlist in chat windows, which can be turned on or off using diff -r 5143cdd8ad79 -r 21b7f05a2878 doc/finch.1.in --- a/doc/finch.1.in Wed May 09 19:12:18 2007 +0000 +++ b/doc/finch.1.in Wed May 09 19:12:26 2007 +0000 @@ -29,11 +29,12 @@ .SH DESCRIPTION .PP -\fBfinch\fR is a console-based modular messaging client capable of using -AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, Novell GroupWise, Lotus Sametime, -Zephyr, Gadu-Gadu, and QQ all at once. It has many common features found in -other clients, as well as many unique features. Finch is not endorsed by or -affiliated with America Online, ICQ, Microsoft, or Yahoo. +\fBfinch\fR is a console-based modular messaging client based on libpurple +which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, +Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ all at once. It has +many common features found in other clients, as well as many unique features. +Finch is not endorsed by or affiliated with America Online, ICQ, Microsoft, or +Yahoo. .SH OPTIONS The following options are provided by \fBfinch\fR using the standard GNU diff -r 5143cdd8ad79 -r 21b7f05a2878 doc/pidgin.1.in --- a/doc/pidgin.1.in Wed May 09 19:12:18 2007 +0000 +++ b/doc/pidgin.1.in Wed May 09 19:12:26 2007 +0000 @@ -28,11 +28,12 @@ .SH DESCRIPTION .PP -Pidgin is a modular messaging client capable of using AIM, MSN, Yahoo!, XMPP, -ICQ, IRC, SILC, SIP/SIMPLE Novell GroupWise, Lotus Sametime, Bonjour, -Zephyr, Gadu-Gadu, and QQ all at once. It has many common features found in -other clients, as well as many unique features. Pidgin is not endorsed by or -affiliated with America Online, ICQ, Microsoft, or Yahoo. +\fBpidgin\fR is a graphical modular messaging client based on libpurple +which is capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, +Novell GroupWise, Lotus Sametime, Zephyr, Gadu-Gadu, and QQ all at once. It has +many common features found in other clients, as well as many unique features. +Finch is not endorsed by or affiliated with America Online, ICQ, Microsoft, or +Yahoo. .SH OPTIONS The following options are provided by Pidgin using the standard GNU diff -r 5143cdd8ad79 -r 21b7f05a2878 finch/gntblist.c --- a/finch/gntblist.c Wed May 09 19:12:18 2007 +0000 +++ b/finch/gntblist.c Wed May 09 19:12:26 2007 +0000 @@ -955,7 +955,7 @@ prompt = g_strdup_printf(_("Please enter the new name for %s"), name); - text = PURPLE_BLIST_NODE_IS_GROUP(node) ? _("Rename") : _("Alias"); + text = PURPLE_BLIST_NODE_IS_GROUP(node) ? _("Rename") : _("Set Alias"); purple_request_input(node, text, prompt, _("Enter empty string to reset the name."), name, FALSE, FALSE, NULL, text, G_CALLBACK(rename_blist_node), _("Cancel"), NULL, diff -r 5143cdd8ad79 -r 21b7f05a2878 finch/gntconv.c --- a/finch/gntconv.c Wed May 09 19:12:18 2007 +0000 +++ b/finch/gntconv.c Wed May 09 19:12:26 2007 +0000 @@ -396,17 +396,26 @@ gnt_menuitem_set_callback(item, toggle_timestamps_cb, ggc); if (purple_conversation_get_type(ggc->active_conv) == PURPLE_CONV_TYPE_IM) { - item = gnt_menuitem_new(_("Send File")); - gnt_menu_add_item(GNT_MENU(sub), item); - gnt_menuitem_set_callback(item, send_file_cb, ggc); + PurpleAccount *account = purple_conversation_get_account(ggc->active_conv); + PurplePluginProtocolInfo *pinfo = account->gc ? PURPLE_PLUGIN_PROTOCOL_INFO(account->gc->prpl) : NULL; + + if (pinfo && pinfo->get_info) { + item = gnt_menuitem_new(_("Get Info")); + gnt_menu_add_item(GNT_MENU(sub), item); + gnt_menuitem_set_callback(item, get_info_cb, ggc); + } item = gnt_menuitem_new(_("Add Buddy Pounce...")); gnt_menu_add_item(GNT_MENU(sub), item); gnt_menuitem_set_callback(item, add_pounce_cb, ggc); - item = gnt_menuitem_new(_("Get Info")); - gnt_menu_add_item(GNT_MENU(sub), item); - gnt_menuitem_set_callback(item, get_info_cb, ggc); + if (pinfo && pinfo->send_file && + (!pinfo->can_receive_file || + pinfo->can_receive_file(account->gc, purple_conversation_get_name(ggc->active_conv)))) { + item = gnt_menuitem_new(_("Send File")); + gnt_menu_add_item(GNT_MENU(sub), item); + gnt_menuitem_set_callback(item, send_file_cb, ggc); + } generate_send_to_menu(ggc); } diff -r 5143cdd8ad79 -r 21b7f05a2878 libpurple/buddyicon.c --- a/libpurple/buddyicon.c Wed May 09 19:12:18 2007 +0000 +++ b/libpurple/buddyicon.c Wed May 09 19:12:26 2007 +0000 @@ -416,7 +416,7 @@ } ref_filename(filename); } - else + else if (!icon->img) { purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "buddy_icon"); purple_blist_node_remove_setting((PurpleBlistNode *)buddy, "icon_checksum"); diff -r 5143cdd8ad79 -r 21b7f05a2878 libpurple/prpl.c --- a/libpurple/prpl.c Wed May 09 19:12:18 2007 +0000 +++ b/libpurple/prpl.c Wed May 09 19:12:26 2007 +0000 @@ -128,7 +128,7 @@ purple_prpl_got_user_status(PurpleAccount *account, const char *name, const char *status_id, ...) { - GSList *list; + GSList *list, *l; PurpleBuddy *buddy; PurplePresence *presence; PurpleStatus *status; @@ -140,24 +140,30 @@ g_return_if_fail(status_id != NULL); g_return_if_fail(purple_account_is_connected(account) || purple_account_is_connecting(account)); - if ((buddy = purple_find_buddy(account, name)) == NULL) + if((list = purple_find_buddies(account, name)) == NULL) return; - presence = purple_buddy_get_presence(buddy); - status = purple_presence_get_status(presence, status_id); + for(l = list; l != NULL; l = l->next) { + buddy = l->data; - g_return_if_fail(status != NULL); + presence = purple_buddy_get_presence(buddy); + status = purple_presence_get_status(presence, status_id); - old_status = purple_presence_get_active_status(presence); + if(NULL == status) + continue; - va_start(args, status_id); - purple_status_set_active_with_attrs(status, TRUE, args); - va_end(args); + old_status = purple_presence_get_active_status(presence); - list = purple_find_buddies(account, name); - g_slist_foreach(list, (GFunc)purple_blist_update_buddy_status, old_status); + va_start(args, status_id); + purple_status_set_active_with_attrs(status, TRUE, args); + va_end(args); + + purple_blist_update_buddy_status(buddy, old_status); + } + g_slist_free(list); + /* we get to re-use the last status we found */ if (!purple_status_is_online(status)) serv_got_typing_stopped(purple_account_get_connection(account), name); } @@ -165,6 +171,7 @@ void purple_prpl_got_user_status_deactive(PurpleAccount *account, const char *name, const char *status_id) { + GSList *list, *l; PurpleBuddy *buddy; PurplePresence *presence; PurpleStatus *status; @@ -174,14 +181,22 @@ g_return_if_fail(status_id != NULL); g_return_if_fail(purple_account_is_connected(account) || purple_account_is_connecting(account)); - if ((buddy = purple_find_buddy(account, name)) == NULL) + if((list = purple_find_buddies(account, name)) == NULL) return; - presence = purple_buddy_get_presence(buddy); - status = purple_presence_get_status(presence, status_id); + for(l = list; l != NULL; l = l->next) { + buddy = l->data; + + presence = purple_buddy_get_presence(buddy); + status = purple_presence_get_status(presence, status_id); - g_return_if_fail(status != NULL); - purple_status_set_active(status, FALSE); + if(NULL == status) + continue; + + purple_status_set_active(status, FALSE); + } + + g_slist_free(list); } static void diff -r 5143cdd8ad79 -r 21b7f05a2878 libpurple/status.c --- a/libpurple/status.c Wed May 09 19:12:18 2007 +0000 +++ b/libpurple/status.c Wed May 09 19:12:26 2007 +0000 @@ -134,8 +134,6 @@ 10 /* Offline messageable */ }; -static GHashTable *buddy_presences = NULL; - #define SCORE_IDLE 8 #define SCORE_IDLE_TIME 9 #define SCORE_OFFLINE_MESSAGE 10 @@ -1118,32 +1116,17 @@ purple_presence_new_for_buddy(PurpleBuddy *buddy) { PurplePresence *presence; - PurpleStatusBuddyKey *key; PurpleAccount *account; g_return_val_if_fail(buddy != NULL, NULL); account = buddy->account; - key = g_new0(PurpleStatusBuddyKey, 1); - key->account = buddy->account; - key->name = g_strdup(buddy->name); - - presence = g_hash_table_lookup(buddy_presences, key); - if (presence == NULL) - { - presence = purple_presence_new(PURPLE_PRESENCE_CONTEXT_BUDDY); + presence = purple_presence_new(PURPLE_PRESENCE_CONTEXT_BUDDY); - presence->u.buddy.name = g_strdup(buddy->name); - presence->u.buddy.account = buddy->account; - presence->statuses = purple_prpl_get_statuses(buddy->account, presence); + presence->u.buddy.name = g_strdup(buddy->name); + presence->u.buddy.account = buddy->account; + presence->statuses = purple_prpl_get_statuses(buddy->account, presence); - g_hash_table_insert(buddy_presences, key, presence); - } - else - { - g_free(key->name); - g_free(key); - } presence->u.buddy.buddy = buddy; return presence; @@ -1156,13 +1139,6 @@ if (purple_presence_get_context(presence) == PURPLE_PRESENCE_CONTEXT_BUDDY) { - PurpleStatusBuddyKey key; - - key.account = presence->u.buddy.account; - key.name = presence->u.buddy.name; - - g_hash_table_remove(buddy_presences, &key); - g_free(presence->u.buddy.name); } else if (purple_presence_get_context(presence) == PURPLE_PRESENCE_CONTEXT_CONV) @@ -1639,41 +1615,6 @@ primitive_scores[index] = GPOINTER_TO_INT(value); } -static guint -purple_buddy_presences_hash(gconstpointer key) -{ - const PurpleStatusBuddyKey *me = key; - guint ret; - char *str; - - str = g_strdup_printf("%p%s", me->account, me->name); - ret = g_str_hash(str); - g_free(str); - - return ret; -} - -static gboolean -purple_buddy_presences_equal(gconstpointer a, gconstpointer b) -{ - PurpleStatusBuddyKey *key_a = (PurpleStatusBuddyKey *)a; - PurpleStatusBuddyKey *key_b = (PurpleStatusBuddyKey *)b; - - if(key_a->account == key_b->account && - !strcmp(key_a->name, key_b->name)) - return TRUE; - else - return FALSE; -} - -static void -purple_buddy_presences_key_free(gpointer a) -{ - PurpleStatusBuddyKey *key = (PurpleStatusBuddyKey *)a; - g_free(key->name); - g_free(key); -} - void * purple_status_get_handle(void) { static int handle; @@ -1725,19 +1666,9 @@ purple_prefs_connect_callback(handle, "/purple/status/scores/offline_msg", score_pref_changed_cb, GINT_TO_POINTER(SCORE_OFFLINE_MESSAGE)); - - buddy_presences = g_hash_table_new_full(purple_buddy_presences_hash, - purple_buddy_presences_equal, - purple_buddy_presences_key_free, NULL); } void purple_status_uninit(void) { - if (buddy_presences != NULL) - { - g_hash_table_destroy(buddy_presences); - - buddy_presences = NULL; - } } diff -r 5143cdd8ad79 -r 21b7f05a2878 pidgin/gtkdialogs.c --- a/pidgin/gtkdialogs.c Wed May 09 19:12:18 2007 +0000 +++ b/pidgin/gtkdialogs.c Wed May 09 19:12:26 2007 +0000 @@ -362,7 +362,8 @@ str = g_string_sized_new(4096); g_string_append_printf(str, - _("%s is a modular messaging client capable of using " + _("%s is a graphical modular messaging client based on " + "libpurple which is capable of connecting to " "AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " "Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, " "Gadu-Gadu, and QQ all at once. " diff -r 5143cdd8ad79 -r 21b7f05a2878 pidgin/pixmaps/emotes/default/22/theme --- a/pidgin/pixmaps/emotes/default/22/theme Wed May 09 19:12:18 2007 +0000 +++ b/pidgin/pixmaps/emotes/default/22/theme Wed May 09 19:12:26 2007 +0000 @@ -21,7 +21,7 @@ moneymouth.png :-$ foot-in-mouth.png :-! shout.png >:o >:O -! skywalker.png C:-) c:-) C:) c:) +! skywalker.png C:-) c:-) C:) c:) ! monkey.png :-(|) ### Following AIM 6.1 @@ -42,6 +42,8 @@ crying.png :'( shut-mouth.png :-X glasses-cool.png 8-) +! skywalker.png C:-) c:-) C:) c:) +! monkey.png :-(|) ### Following Windows Live Messenger 8.1 [MSN] @@ -121,6 +123,14 @@ eyeroll.png 8-) yawn.png |-) goat.png (nah) +! skywalker.png C:-) c:-) C:) c:) +! monkey.png :-(|) + +### Hidden MSN emotes +sigarette.png (ci) (CI) +handcuffs.png (%) +console.png (xx) (XX) +fingers-crossed.png (yn) (YN) ### Following QQ 2006 [QQ] @@ -217,6 +227,8 @@ star.png /星星 /<*> /xixing /star girl.png /女 /<00> /nv /woman boy.png /ç”· /<11> /nan /man +! skywalker.png C:-) c:-) C:) c:) +! monkey.png :-(|) ### Following ICQ 5.1 [ICQ] @@ -248,6 +260,8 @@ good.png *THUMBS\ UP* beer.png *DRINK* in-love.png *IN\ LOVE* +! skywalker.png C:-) c:-) C:) c:) +! monkey.png :-(|) ### Following Yahoo! Messenger 8.1 [Yahoo] @@ -294,7 +308,7 @@ eyeroll.png 8-| silly.png 8-} clap.png =D> =d> -#phbbbt >:P >:p MISSING/YAHOO 6: "You are dumb! - No you are!!" => tongue on pissed of smily +mad-tongue.png >:P >:p #timeout :-t :-T MISSING: "Let's have a break." hug-left.png >:D< >:d< love-over.png =(( @@ -302,8 +316,13 @@ rotfl.png =)) #loser L-) l-) MISSING/YAHOO 6: "Loser!" party.png <:-P <:-p +nailbiting.png :-SS :-Ss :-sS :-ss cowboy.png <):) desire.png 8-> +! skywalker.png C:-) c:-) C:) c:) +! monkey.png :-(|) + +### Hidden Yahoo emotes alien.png =:) >-) beat-up.png b-( B-( chicken.png ~:> @@ -324,17 +343,16 @@ flag.png **== clover.png %%- musical-note.png :-" -nailbiting.png :-SS :-ss giggle.png ;)) worship.png ^:)^ star.png (*) -mad-tongue.png >:p -#yahoo_waving.gif >:/ TODO -#yahoo_talktohand.gif :-@ TODO -#yahoo_youkiddingme.gif :-j :-J TODO +#waving.png >:/ +#talktohand.png :-@ +#youkiddingme.png :-j :-J ### These only work in a certain IMvironment -#yahoo_malefighter1.gif o-> O-> -#yahoo_malefighter2.gif o=> O=> -#yahoo_femalefighter.gif o-+ O-+ +#malefighter1.png o-> O-> +#malefighter2.png o=> O=> +#femalefighter.png o-+ O-+ yin-yang.png (%) + diff -r 5143cdd8ad79 -r 21b7f05a2878 po/th.po --- a/po/th.po Wed May 09 19:12:18 2007 +0000 +++ b/po/th.po Wed May 09 19:12:26 2007 +0000 @@ -3065,7 +3065,7 @@ #: ../src/gtkconv.c:4958 ../src/gtkconv.c:5067 #, c-format msgid "%d person in room" -msgstr "ã¹ËéͧÁÕ %s ¤¹" +msgstr "ã¹ËéͧÁÕ %d ¤¹" #: ../src/gtkconv.c:5624 ../src/gtkstatusbox.c:366 msgid "Typing"