diff src/protocols/yahoo/yahoo.c @ 12798:09d4ea834370

[gaim-migrate @ 15145] SF Patch #1389870 from Bleeter, building on work in SF Patch #1114194 from Alex Badea "Following on from #1114194, where I thought that sending audibles is a little twitty because we can't see what's going on, I also noted that it would be nice if we could display the URL wheree the audible swf file lived. The example URL provided only supported US locales, which also needed addressing. I've tested this patch with the Taiwain audible, named within the patch, by confirming that the URL pattern match actually works. Whether it actually works when sent from a Taiwanese YIM native client, I have no idea. It looks like it should. Just to re-iterate: This patch displays the the received audible's URL and text only, not the audible swf file itself, nor does it send anything." committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Mon, 09 Jan 2006 22:28:17 +0000
parents eda1572c788b
children ab37a4cc477e
line wrap: on
line diff
--- a/src/protocols/yahoo/yahoo.c	Mon Jan 09 21:29:53 2006 +0000
+++ b/src/protocols/yahoo/yahoo.c	Mon Jan 09 22:28:17 2006 +0000
@@ -1955,7 +1955,7 @@
 
 static void yahoo_process_audible(GaimConnection *gc, struct yahoo_packet *pkt)
 {
-	char *who = NULL, *msg = NULL;
+	char *who = NULL, *msg = NULL, *id = NULL;
 	GSList *l = pkt->hash;
 
 	while (l) {
@@ -1969,7 +1969,9 @@
 			/* us */
 			break;
 		case 230:
-			/* the audible, in foo.bar.baz format */
+			/* the audible, in foo.locale.bar.baz format
+			   eg: base.tw.smiley.smiley43 */
+			id = pair->value;
 			break;
 		case 231:
 			/* the text of the audible */
@@ -1983,6 +1985,8 @@
 		l = l->next;
 	}
 
+	if (!msg)
+		msg = id;
 	if (!who || !msg)
 		return;
 	if (!g_utf8_validate(msg, -1, NULL)) {
@@ -1994,7 +1998,16 @@
 		      gc->account->username, who);
 		return;
 	}
-	serv_got_im(gc, who, msg, 0, time(NULL));
+	if (id) {
+		/* "http://us.dl1.yimg.com/download.yahoo.com/dl/aud/"+locale+"/"+id+".swf" */
+		char **audible_locale = g_strsplit(id, ".", 0);
+		char *buf = g_strdup_printf(_("[ Audible %s/%s/%s.swf ] %s"), YAHOO_AUDIBLE_URL, audible_locale[1], id, msg);
+		g_strfreev(audible_locale);
+
+		serv_got_im(gc, who, buf, 0, time(NULL));
+		g_free(buf);
+	} else
+		serv_got_im(gc, who, msg, 0, time(NULL));
 }
 
 static void yahoo_packet_process(GaimConnection *gc, struct yahoo_packet *pkt)
@@ -2109,6 +2122,7 @@
 		break;
 	case YAHOO_SERVICE_AUDIBLE:
 		yahoo_process_audible(gc, pkt);
+		break;
 	default:
 		gaim_debug(GAIM_DEBUG_ERROR, "yahoo",
 				   "Unhandled service 0x%02x\n", pkt->service);