| 217 |
218 |
| 218 random = g_strdup_printf("%x", g_random_int()); |
219 random = g_strdup_printf("%x", g_random_int()); |
| 219 dirname = gaim_buddy_icons_get_cache_dir(); |
220 dirname = gaim_buddy_icons_get_cache_dir(); |
| 220 filename = g_build_filename(dirname, random, NULL); |
221 filename = g_build_filename(dirname, random, NULL); |
| 221 old_icon = gaim_blist_node_get_string((GaimBlistNode*)buddy, "buddy_icon"); |
222 old_icon = gaim_blist_node_get_string((GaimBlistNode*)buddy, "buddy_icon"); |
| 222 |
|
| 223 g_free(random); |
|
| 224 |
223 |
| 225 if (!g_file_test(dirname, G_FILE_TEST_IS_DIR)) |
224 if (!g_file_test(dirname, G_FILE_TEST_IS_DIR)) |
| 226 { |
225 { |
| 227 gaim_debug_info("buddy icons", "Creating icon cache directory.\n"); |
226 gaim_debug_info("buddy icons", "Creating icon cache directory.\n"); |
| 228 |
227 |
| 238 { |
237 { |
| 239 fwrite(data, 1, len, file); |
238 fwrite(data, 1, len, file); |
| 240 fclose(file); |
239 fclose(file); |
| 241 } |
240 } |
| 242 |
241 |
| |
242 g_free(filename); |
| |
243 |
| 243 if (old_icon != NULL) |
244 if (old_icon != NULL) |
| 244 unlink(old_icon); |
245 { |
| 245 |
246 if(!stat(old_icon, &st)) |
| 246 gaim_blist_node_set_string((GaimBlistNode *)buddy, "buddy_icon", filename); |
247 unlink(old_icon); |
| 247 |
248 else { |
| 248 g_free(filename); |
249 filename = g_build_filename(dirname, random, NULL); |
| |
250 if(!stat(filename, &st)) |
| |
251 unlink(filename); |
| |
252 g_free(filename); |
| |
253 } |
| |
254 } |
| |
255 |
| |
256 gaim_blist_node_set_string((GaimBlistNode *)buddy, "buddy_icon", random); |
| |
257 |
| |
258 g_free(random); |
| 249 } |
259 } |
| 250 |
260 |
| 251 void |
261 void |
| 252 gaim_buddy_icon_set_account(GaimBuddyIcon *icon, GaimAccount *account) |
262 gaim_buddy_icon_set_account(GaimBuddyIcon *icon, GaimAccount *account) |
| 253 { |
263 { |
| 343 GaimBuddyIcon * |
353 GaimBuddyIcon * |
| 344 gaim_buddy_icons_find(GaimAccount *account, const char *username) |
354 gaim_buddy_icons_find(GaimAccount *account, const char *username) |
| 345 { |
355 { |
| 346 GHashTable *icon_cache; |
356 GHashTable *icon_cache; |
| 347 GaimBuddyIcon *ret = NULL; |
357 GaimBuddyIcon *ret = NULL; |
| |
358 char *filename = NULL; |
| 348 |
359 |
| 349 g_return_val_if_fail(account != NULL, NULL); |
360 g_return_val_if_fail(account != NULL, NULL); |
| 350 g_return_val_if_fail(username != NULL, NULL); |
361 g_return_val_if_fail(username != NULL, NULL); |
| 351 |
362 |
| 352 icon_cache = g_hash_table_lookup(account_cache, account); |
363 icon_cache = g_hash_table_lookup(account_cache, account); |
| 360 return NULL; |
371 return NULL; |
| 361 |
372 |
| 362 if ((file = gaim_blist_node_get_string((GaimBlistNode*)b, "buddy_icon")) == NULL) |
373 if ((file = gaim_blist_node_get_string((GaimBlistNode*)b, "buddy_icon")) == NULL) |
| 363 return NULL; |
374 return NULL; |
| 364 |
375 |
| 365 if (!stat(file, &st)) { |
376 if (!stat(file, &st)) |
| 366 FILE *f = fopen(file, "rb"); |
377 filename = g_strdup(file); |
| |
378 else |
| |
379 filename = g_build_filename(gaim_buddy_icons_get_cache_dir(), file, NULL); |
| |
380 |
| |
381 if (!stat(filename, &st)) { |
| |
382 FILE *f = fopen(filename, "rb"); |
| 367 if (f) { |
383 if (f) { |
| 368 char *data = g_malloc(st.st_size); |
384 char *data = g_malloc(st.st_size); |
| 369 fread(data, 1, st.st_size, f); |
385 fread(data, 1, st.st_size, f); |
| 370 fclose(f); |
386 fclose(f); |
| 371 ret = gaim_buddy_icon_create(account, username); |
387 ret = gaim_buddy_icon_create(account, username); |
| 372 gaim_buddy_icon_ref(ret); |
388 gaim_buddy_icon_ref(ret); |
| 373 gaim_buddy_icon_set_data(ret, data, st.st_size); |
389 gaim_buddy_icon_set_data(ret, data, st.st_size); |
| 374 gaim_buddy_icon_unref(ret); |
390 gaim_buddy_icon_unref(ret); |
| 375 g_free(data); |
391 g_free(data); |
| |
392 g_free(filename); |
| 376 return ret; |
393 return ret; |
| 377 } |
394 } |
| 378 } |
395 } |
| |
396 g_free(filename); |
| 379 } |
397 } |
| 380 |
398 |
| 381 return ret; |
399 return ret; |
| 382 } |
400 } |
| 383 |
401 |