changeset 16967:e13e5dd8ecb5

merge of '066f7e387d4f546f1a7c777c08743463115d89d7' and '707317b4b82d2c54c4714cf3ddb9852f6e12ccdf'
author Richard Laager <rlaager@wiktel.com>
date Wed, 09 May 2007 18:49:46 +0000
parents 6d8aa9d23019 (diff) b08636a33721 (current diff)
children 84fc71d9241b
files
diffstat 9 files changed, 94 insertions(+), 117 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog	Wed May 09 18:49:40 2007 +0000
+++ b/ChangeLog	Wed May 09 18:49:46 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
--- a/doc/finch.1.in	Wed May 09 18:49:40 2007 +0000
+++ b/doc/finch.1.in	Wed May 09 18:49:46 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
--- a/doc/pidgin.1.in	Wed May 09 18:49:40 2007 +0000
+++ b/doc/pidgin.1.in	Wed May 09 18:49:46 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
--- a/finch/gntblist.c	Wed May 09 18:49:40 2007 +0000
+++ b/finch/gntblist.c	Wed May 09 18:49:46 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,
--- a/finch/gntconv.c	Wed May 09 18:49:40 2007 +0000
+++ b/finch/gntconv.c	Wed May 09 18:49:46 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);
 	}
--- a/libpurple/prpl.c	Wed May 09 18:49:40 2007 +0000
+++ b/libpurple/prpl.c	Wed May 09 18:49:46 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
--- a/libpurple/status.c	Wed May 09 18:49:40 2007 +0000
+++ b/libpurple/status.c	Wed May 09 18:49:46 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;
-	}
 }
--- a/pidgin/gtkdialogs.c	Wed May 09 18:49:40 2007 +0000
+++ b/pidgin/gtkdialogs.c	Wed May 09 18:49:46 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.  "
--- a/pidgin/pixmaps/emotes/default/22/theme	Wed May 09 18:49:40 2007 +0000
+++ b/pidgin/pixmaps/emotes/default/22/theme	Wed May 09 18:49:46 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        (%)
+