comparison src/buddyicon.c @ 11040:3428ad6f5049

[gaim-migrate @ 12940] Patch #1224610 from Richard Laager "Buddy icon cache files are removed when replacing icons but not when unsetting the icon. This patch corrects that." committer: Tailor Script <tailor@pidgin.im>
author Richard Laager <rlaager@wiktel.com>
date Thu, 30 Jun 2005 04:33:21 +0000
parents 50224ac8184d
children 096020ae09a9
comparison
equal deleted inserted replaced
11039:34d2aac7b34f 11040:3428ad6f5049
194 194
195 if (conv != NULL) 195 if (conv != NULL)
196 gaim_conv_im_set_icon(GAIM_CONV_IM(conv), icon); 196 gaim_conv_im_set_icon(GAIM_CONV_IM(conv), icon);
197 } 197 }
198 198
199 static void
200 delete_icon_cache_file(const char *dirname, const char *old_icon)
201 {
202 struct stat st;
203
204 g_return_if_fail(dirname != NULL);
205 g_return_if_fail(old_icon != NULL);
206
207 if (g_stat(old_icon, &st) == 0)
208 g_unlink(old_icon);
209 else
210 {
211 char *filename = g_build_filename(dirname, old_icon, NULL);
212 if (g_stat(filename, &st) == 0)
213 g_unlink(filename);
214 g_free(filename);
215 }
216 }
217
199 void 218 void
200 gaim_buddy_icon_cache(GaimBuddyIcon *icon, GaimBuddy *buddy) 219 gaim_buddy_icon_cache(GaimBuddyIcon *icon, GaimBuddy *buddy)
201 { 220 {
202 const void *data; 221 const void *data;
203 const char *dirname; 222 const char *dirname;
204 char *random; 223 char *random;
205 char *filename; 224 char *filename;
206 const char *old_icon; 225 const char *old_icon;
207 size_t len; 226 size_t len;
208 struct stat st;
209 FILE *file = NULL; 227 FILE *file = NULL;
210 228
211 g_return_if_fail(icon != NULL); 229 g_return_if_fail(icon != NULL);
212 g_return_if_fail(buddy != NULL); 230 g_return_if_fail(buddy != NULL);
213 231
248 icon, buddy, filename, old_icon); 266 icon, buddy, filename, old_icon);
249 267
250 g_free(filename); 268 g_free(filename);
251 269
252 if (old_icon != NULL) 270 if (old_icon != NULL)
253 { 271 delete_icon_cache_file(dirname, old_icon);
254 if(!g_stat(old_icon, &st))
255 g_unlink(old_icon);
256 else {
257 filename = g_build_filename(dirname, old_icon, NULL);
258 if(!g_stat(filename, &st))
259 g_unlink(filename);
260 g_free(filename);
261 }
262 }
263 272
264 gaim_blist_node_set_string((GaimBlistNode *)buddy, "buddy_icon", random); 273 gaim_blist_node_set_string((GaimBlistNode *)buddy, "buddy_icon", random);
265 274
266 g_free(random); 275 g_free(random);
276 }
277
278 void
279 gaim_buddy_icon_uncache(GaimBuddy *buddy)
280 {
281 const char *old_icon;
282
283 g_return_if_fail(buddy != NULL);
284
285 old_icon = gaim_blist_node_get_string((GaimBlistNode *)buddy, "buddy_icon");
286
287 if (old_icon != NULL)
288 delete_icon_cache_file(gaim_buddy_icons_get_cache_dir(), old_icon);
289
290 gaim_blist_node_remove_setting((GaimBlistNode *)buddy, "buddy_icon");
291
292 /* Unset the icon in case this function is called from
293 * something other than gaim_buddy_set_icon(). */
294 if (buddy->icon != NULL)
295 {
296 gaim_buddy_icon_unref(buddy->icon);
297 buddy->icon = NULL;
298 }
267 } 299 }
268 300
269 void 301 void
270 gaim_buddy_icon_set_account(GaimBuddyIcon *icon, GaimAccount *account) 302 gaim_buddy_icon_set_account(GaimBuddyIcon *icon, GaimAccount *account)
271 { 303 {