# HG changeset patch # User Yoshiki Yazawa # Date 1246479343 -32400 # Node ID bc7d8baf79dd0e0ab36f8cc41f72c866c7dc7a11 # Parent 554c8c956a8a4e0ecc342fc13fc7316f3a114feb more robust image type detection. diff -r 554c8c956a8a -r bc7d8baf79dd icon.c --- a/icon.c Sat Jun 13 18:17:54 2009 +0900 +++ b/icon.c Thu Jul 02 05:15:43 2009 +0900 @@ -4,6 +4,14 @@ extern GHashTable *icon_hash[]; extern GRegex *regp[]; +static gchar *ext_list[] = { + "png", + "gif", + "jpg", + "bmp", + NULL +}; + /* prototypes */ static void insert_icon_at_mark(GtkTextMark *requested_mark, gpointer user_data); static void insert_requested_icon(const gchar *user_name, gint service); @@ -245,17 +253,6 @@ gchar *slash = strrchr(url, '/'); *slash = '\0'; - gchar *lower = g_ascii_strdown(slash+1, -1); - - if(strstr(lower, ".png")) - data->img_type = "png"; - else if(strstr(lower, ".gif")) - data->img_type = "gif"; - else if(strstr(lower, ".jpg") || strstr(lower, ".jpeg")) - data->img_type = "jpg"; - - g_free(lower); - gchar *tmp; /* url encode basename. twitter needs this. */ if(service == twitter_service) @@ -340,13 +337,6 @@ return dest; } -static gchar *ext_list[] = { - "png", - "gif", - "jpg", - NULL -}; - /* this function will be called when requested icon has been retrieved */ static void got_icon_cb(PurpleUtilFetchUrlData *url_data, gpointer user_data, @@ -452,16 +442,31 @@ /* find out extension */ gchar *slash = strrchr(url_data->url, '/'); - gchar *lower = g_ascii_strdown(slash+1, -1); + gchar *lower = g_ascii_strdown(purple_url_decode(slash+1), -1); + + gchar **extp; + gchar *dot; + data->img_type = NULL; - if(strstr(lower, ".png")) - data->img_type = "png"; - else if(strstr(lower, ".gif")) - data->img_type = "gif"; - else if(strstr(lower, ".jpg") || strstr(lower, ".jpeg")) - data->img_type = "jpg"; + dot = strrchr(lower, '.'); + if(dot) { + for(extp = ext_list; *extp; extp++) { + if(!strcmp(dot+1, *extp)) { + data->img_type = *extp; + break; + } + } + if(!data->img_type && !strcmp(dot+1, "jpeg")) + data->img_type = ext_list[2]; /* jpg */ + } + g_free(lower); - g_free(lower); + /* return if no suitable image found */ + if(!data->img_type) { + g_free(gotdata->user_name); + g_free(gotdata); + return; + } dirname = purple_prefs_get_string(OPT_ICON_DIR);