Mercurial > pidgin
comparison libpurple/buddyicon.c @ 18046:58e28ccf08e6
merge of '9d95292d55daedb7f74c7df323ad2c69d347d384'
and 'fc5f9423f83f31e42ce80066eec30cdbbae7be01'
author | Sadrul Habib Chowdhury <imadil@gmail.com> |
---|---|
date | Tue, 05 Jun 2007 01:38:09 +0000 |
parents | c588a4a9d287 |
children | 4ca97b26a8fb |
comparison
equal
deleted
inserted
replaced
18043:6b7b13adb9b1 | 18046:58e28ccf08e6 |
---|---|
22 * along with this program; if not, write to the Free Software | 22 * along with this program; if not, write to the Free Software |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
24 */ | 24 */ |
25 #include "internal.h" | 25 #include "internal.h" |
26 #include "buddyicon.h" | 26 #include "buddyicon.h" |
27 #include "cipher.h" | |
28 #include "conversation.h" | 27 #include "conversation.h" |
29 #include "dbus-maybe.h" | 28 #include "dbus-maybe.h" |
30 #include "debug.h" | 29 #include "debug.h" |
31 #include "imgstore.h" | 30 #include "imgstore.h" |
32 #include "util.h" | 31 #include "util.h" |
91 g_hash_table_insert(icon_file_cache, g_strdup(filename), | 90 g_hash_table_insert(icon_file_cache, g_strdup(filename), |
92 GINT_TO_POINTER(refs - 1)); | 91 GINT_TO_POINTER(refs - 1)); |
93 } | 92 } |
94 } | 93 } |
95 | 94 |
96 static char * | |
97 purple_buddy_icon_data_calculate_filename(guchar *icon_data, size_t icon_len) | |
98 { | |
99 PurpleCipherContext *context; | |
100 gchar digest[41]; | |
101 | |
102 context = purple_cipher_context_new_by_name("sha1", NULL); | |
103 if (context == NULL) | |
104 { | |
105 purple_debug_error("buddyicon", "Could not find sha1 cipher\n"); | |
106 g_return_val_if_reached(NULL); | |
107 } | |
108 | |
109 /* Hash the icon data */ | |
110 purple_cipher_context_append(context, icon_data, icon_len); | |
111 if (!purple_cipher_context_digest_to_str(context, sizeof(digest), digest, NULL)) | |
112 { | |
113 purple_debug_error("buddyicon", "Failed to get SHA-1 digest.\n"); | |
114 g_return_val_if_reached(NULL); | |
115 } | |
116 purple_cipher_context_destroy(context); | |
117 | |
118 /* Return the filename */ | |
119 return g_strdup_printf("%s.%s", digest, | |
120 purple_util_get_image_extension(icon_data, icon_len)); | |
121 } | |
122 | |
123 static void | 95 static void |
124 purple_buddy_icon_data_cache(PurpleStoredImage *img) | 96 purple_buddy_icon_data_cache(PurpleStoredImage *img) |
125 { | 97 { |
126 const char *dirname; | 98 const char *dirname; |
127 char *path; | 99 char *path; |
236 g_return_val_if_fail(icon_data != NULL, NULL); | 208 g_return_val_if_fail(icon_data != NULL, NULL); |
237 g_return_val_if_fail(icon_len > 0, NULL); | 209 g_return_val_if_fail(icon_len > 0, NULL); |
238 | 210 |
239 if (filename == NULL) | 211 if (filename == NULL) |
240 { | 212 { |
241 file = purple_buddy_icon_data_calculate_filename(icon_data, icon_len); | 213 file = purple_util_get_image_filename(icon_data, icon_len); |
242 if (file == NULL) | 214 if (file == NULL) |
243 { | 215 { |
244 g_free(icon_data); | 216 g_free(icon_data); |
245 return NULL; | 217 return NULL; |
246 } | 218 } |
964 return; | 936 return; |
965 } | 937 } |
966 | 938 |
967 g_free(path); | 939 g_free(path); |
968 | 940 |
969 new_filename = purple_buddy_icon_data_calculate_filename(icon_data, icon_len); | 941 new_filename = purple_util_get_image_filename(icon_data, icon_len); |
970 if (new_filename == NULL) | 942 if (new_filename == NULL) |
971 { | 943 { |
972 purple_debug_error("buddyicon", | 944 purple_debug_error("buddyicon", |
973 "New icon filename is NULL. This should never happen! " | 945 "New icon filename is NULL. This should never happen! " |
974 "The old filename was: %s\n", path); | 946 "The old filename was: %s\n", path); |