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