Mercurial > pidgin.yaz
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 { |