diff icon.c @ 310:aa1f0dd1a723

use .dat extension for icons uniformly.
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Thu, 02 Jul 2009 15:54:44 +0900
parents e922ad73c07e
children c5b2c6bc2815
line wrap: on
line diff
--- a/icon.c	Thu Jul 02 05:54:58 2009 +0900
+++ b/icon.c	Thu Jul 02 15:54:44 2009 +0900
@@ -4,14 +4,6 @@
 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);
@@ -294,16 +286,15 @@
     data->use_count = 0;
     data->mtime = time(NULL); /* xxx is there a better way? */
 
-    twitter_debug("requested url=%s\n", url);
-
     /* request fetch image */
     if(url) {
+        twitter_debug("request %s's icon\n", user_name);
+        twitter_debug("requested url = %s\n", url);
         /* reuse gotdata. just pass given one */
         /* gotdata will be released in got_icon_cb */
         data->fetch_data =
             purple_util_fetch_url_request(url, TRUE, NULL, TRUE, NULL,
                                           FALSE, got_icon_cb, gotdata);
-        twitter_debug("request %s's icon\n", user_name);
         g_free(url);
     }
 }
@@ -440,30 +431,6 @@
     if(hash)
         g_hash_table_insert(hash, g_strdup(user_name), data);
 
-    /* find out extension */
-    gchar *slash = strrchr(url_data->url, '/');
-    gchar *lower = g_ascii_strdown(purple_url_decode(slash+1), -1);
-
-    gchar **extp;
-    data->img_type = NULL;
-
-    for(extp = ext_list; *extp; extp++) {
-        if(g_strrstr(lower, *extp)) {
-            data->img_type = *extp+1;
-            break;
-        }
-    }
-    if(!data->img_type && g_strrstr(lower, ".jpeg"))
-        data->img_type = ext_list[2]+1; /* jpg */
-
-    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);
 
@@ -472,7 +439,6 @@
         gchar *filename = NULL;
         gchar *path = NULL;
         const gchar *suffix = NULL;
-        gchar **extp;
 
         switch(service) {
         case twitter_service:
@@ -496,19 +462,17 @@
         }
 
         /* remove old file first */
-        for(extp = ext_list; *extp; extp++) {
-            filename = g_strdup_printf("%s_%s.%s",
-                                       user_name, suffix, *extp);
-            path = g_build_filename(dirname, filename, NULL);
-            g_remove(path);
+        filename = g_strdup_printf("%s_%s.dat",
+                                   user_name, suffix);
+        path = g_build_filename(dirname, filename, NULL);
+        g_remove(path);
 
-            g_free(filename);
-            g_free(path);
-        }
+        g_free(filename);
+        g_free(path);
 
         /* setup path */
-        filename = g_strdup_printf("%s_%s.%s",
-                                   user_name, suffix, data->img_type);
+        filename = g_strdup_printf("%s_%s.dat",
+                                   user_name, suffix);
 
         path = g_build_filename(dirname, filename, NULL);
         g_free(filename); filename = NULL;
@@ -581,57 +545,52 @@
     /* check if saved file exists */
     if(suffix && !renew) {
         gchar *filename = NULL;
-        gchar **extp;
 
-        for(extp = ext_list; *extp; extp++) {
-            filename = g_strdup_printf("%s_%s.%s", user_name, suffix, *extp);
-            path = g_build_filename(purple_prefs_get_string(OPT_ICON_DIR),
-                                    filename, NULL);
-            g_free(filename);
+        filename = g_strdup_printf("%s_%s.dat", user_name, suffix);
+        path = g_build_filename(purple_prefs_get_string(OPT_ICON_DIR),
+                                filename, NULL);
+        g_free(filename);
+
+        twitter_debug("path = %s\n", path);
 
-            twitter_debug("path = %s\n", path);
-
-            /* build image from file, if file exists */
-            if(g_file_test(path, G_FILE_TEST_EXISTS)) {
-                gchar *imgdata = NULL;
-                size_t len;
-                GError *err = NULL;
-                GdkPixbuf *pixbuf = NULL;
-                struct stat buf;
+        /* build image from file, if file exists */
+        if(g_file_test(path, G_FILE_TEST_EXISTS)) {
+            gchar *imgdata = NULL;
+            size_t len;
+            GError *err = NULL;
+            GdkPixbuf *pixbuf = NULL;
+            struct stat buf;
 
-                if (!g_file_get_contents(path, &imgdata, &len, &err)) {
-                    twitter_debug("Error reading %s: %s\n",
-                                  path, err->message);
-                    g_error_free(err);
-                }
+            if (!g_file_get_contents(path, &imgdata, &len, &err)) {
+                twitter_debug("Error reading %s: %s\n",
+                              path, err->message);
+                g_error_free(err);
+            }
 
-                if(stat(path, &buf))
-                    data->mtime = buf.st_mtime;
-
-                pixbuf = make_scaled_pixbuf(imgdata, len);
-                g_free(imgdata);
+            if(stat(path, &buf))
+                data->mtime = buf.st_mtime;
 
-                if(pixbuf) {
-                    data->pixbuf = pixbuf;
+            pixbuf = make_scaled_pixbuf(imgdata, len);
+            g_free(imgdata);
 
-                    twitter_debug("new icon pixbuf = %p size = %d\n",
-                                  pixbuf,
-                                  gdk_pixbuf_get_rowstride(pixbuf) *
-                                  gdk_pixbuf_get_height(pixbuf));
+            if(pixbuf) {
+                data->pixbuf = pixbuf;
 
-                    data->img_type = *extp;
+                twitter_debug("new icon pixbuf = %p size = %d\n",
+                              pixbuf,
+                              gdk_pixbuf_get_rowstride(pixbuf) *
+                              gdk_pixbuf_get_height(pixbuf));
 
-                    twitter_debug("icon data has been loaded from file\n");
-                    insert_requested_icon(user_name, service);
-                }
-
-                g_free(path);
-                return;
+                twitter_debug("icon data has been loaded from file\n");
+                insert_requested_icon(user_name, service);
             }
 
             g_free(path);
+            return;
+        }
 
-        } /* for */
+        g_free(path);
+
     } /* suffix */
 
     /* Return if user's icon has been requested already. */
@@ -648,8 +607,8 @@
     case wassr_service:
         url = g_strdup_printf("http://wassr.jp/user/%s", user_name);
         break;
-    case identica_service: /* make use of Version0 API */
-        url = g_strdup_printf("http://identi.ca/%s/avatar/96", user_name);
+    case identica_service:
+        url = g_strdup_printf("http://identi.ca/%s", user_name);
         break;
     case jisko_service:
         url = g_strdup_printf("http://jisko.net/%s", user_name);
@@ -667,23 +626,26 @@
         gotdata->user_name = g_strdup(user_name);
         gotdata->service = service;
 
+        twitter_debug("request %s's icon\n", user_name);
+
         /* gotdata will be released in got_icon_cb */
         if(service == twitter_service ||
            service == wassr_service ||
+           service == identica_service ||
            service == jisko_service ||
            service == ffeed_service) {
             data->fetch_data =
                 purple_util_fetch_url_request(url, TRUE, NULL, TRUE, NULL,
                                               TRUE, got_page_cb, gotdata);
+            twitter_debug("requested url = %s\n", url);
         }
-        else { /* typically, identica_service */
+        else { /* probably it is unnecessary */
             data->fetch_data =
                 purple_util_fetch_url_request(url, TRUE, NULL, TRUE, NULL,
                                               FALSE, got_icon_cb, gotdata);
+            twitter_debug("requested url = %s\n", url);
         }
         g_free(url); url = NULL;
-
-        twitter_debug("request %s's icon\n", user_name);
     }
 }