Mercurial > pidgin.yaz
comparison src/buddyicon.c @ 9747:e0060f3b6d92
[gaim-migrate @ 10613]
relative buddy icon paths instead of absolute ones from nosnilmot. this
should save some headaches migrating a ~/.gaim around
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Sat, 14 Aug 2004 13:55:41 +0000 |
parents | 84594a281500 |
children | 7aa5a20519ee |
comparison
equal
deleted
inserted
replaced
9746:3a71d70e3945 | 9747:e0060f3b6d92 |
---|---|
203 const char *dirname; | 203 const char *dirname; |
204 char *random; | 204 char *random; |
205 char *filename; | 205 char *filename; |
206 const char *old_icon; | 206 const char *old_icon; |
207 size_t len; | 207 size_t len; |
208 struct stat st; | |
208 FILE *file = NULL; | 209 FILE *file = NULL; |
209 | 210 |
210 g_return_if_fail(icon != NULL); | 211 g_return_if_fail(icon != NULL); |
211 g_return_if_fail(buddy != NULL); | 212 g_return_if_fail(buddy != NULL); |
212 | 213 |
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 |