Mercurial > pidgin.yaz
comparison libpurple/protocols/msn/user.c @ 31273:56ef12440d52
Move queue logic in requesting user display out of slp code.
author | masca@cpw.pidgin.im |
---|---|
date | Tue, 29 Jun 2010 23:33:52 +0000 |
parents | c83902e953c4 |
children | 4445ae4215b8 |
comparison
equal
deleted
inserted
replaced
31272:25a8e3ad7e30 | 31273:56ef12440d52 |
---|---|
505 g_return_if_fail(user != NULL); | 505 g_return_if_fail(user != NULL); |
506 | 506 |
507 user->networkid = network; | 507 user->networkid = network; |
508 } | 508 } |
509 | 509 |
510 static gboolean | |
511 buddy_icon_cached(PurpleConnection *gc, MsnObject *obj) | |
512 { | |
513 PurpleAccount *account; | |
514 PurpleBuddy *buddy; | |
515 const char *old; | |
516 const char *new; | |
517 | |
518 g_return_val_if_fail(obj != NULL, FALSE); | |
519 | |
520 account = purple_connection_get_account(gc); | |
521 | |
522 buddy = purple_find_buddy(account, msn_object_get_creator(obj)); | |
523 if (buddy == NULL) | |
524 return FALSE; | |
525 | |
526 old = purple_buddy_icons_get_checksum_for_user(buddy); | |
527 new = msn_object_get_sha1(obj); | |
528 | |
529 if (new == NULL) | |
530 return FALSE; | |
531 | |
532 /* If the old and new checksums are the same, and the file actually exists, | |
533 * then return TRUE */ | |
534 if (old != NULL && !strcmp(old, new)) | |
535 return TRUE; | |
536 | |
537 return FALSE; | |
538 } | |
539 | |
540 static void | |
541 queue_buddy_icon_request(MsnUser *user) | |
542 { | |
543 PurpleAccount *account; | |
544 MsnObject *obj; | |
545 GQueue *queue; | |
546 | |
547 g_return_if_fail(user != NULL); | |
548 | |
549 account = user->userlist->session->account; | |
550 | |
551 obj = msn_user_get_object(user); | |
552 | |
553 if (obj == NULL) { | |
554 purple_buddy_icons_set_for_user(account, user->passport, NULL, 0, NULL); | |
555 return; | |
556 } | |
557 | |
558 if (!buddy_icon_cached(account->gc, obj)) { | |
559 MsnUserList *userlist; | |
560 | |
561 userlist = user->userlist; | |
562 queue = userlist->buddy_icon_requests; | |
563 | |
564 if (purple_debug_is_verbose()) | |
565 purple_debug_info("msn", "Queueing buddy icon request for %s (buddy_icon_window = %i)\n", | |
566 user->passport, userlist->buddy_icon_window); | |
567 | |
568 g_queue_push_tail(queue, user); | |
569 | |
570 if (userlist->buddy_icon_window > 0) | |
571 msn_release_buddy_icon_request(userlist); | |
572 } | |
573 } | |
574 | |
510 void | 575 void |
511 msn_user_set_object(MsnUser *user, MsnObject *obj) | 576 msn_user_set_object(MsnUser *user, MsnObject *obj) |
512 { | 577 { |
513 g_return_if_fail(user != NULL); | 578 g_return_if_fail(user != NULL); |
514 | 579 |
516 msn_object_destroy(user->msnobj); | 581 msn_object_destroy(user->msnobj); |
517 | 582 |
518 user->msnobj = obj; | 583 user->msnobj = obj; |
519 | 584 |
520 if (user != user->userlist->session->user && user->list_op & MSN_LIST_FL_OP) | 585 if (user != user->userlist->session->user && user->list_op & MSN_LIST_FL_OP) |
521 msn_queue_buddy_icon_request(user); | 586 queue_buddy_icon_request(user); |
522 } | 587 } |
523 | 588 |
524 void | 589 void |
525 msn_user_set_client_caps(MsnUser *user, GHashTable *info) | 590 msn_user_set_client_caps(MsnUser *user, GHashTable *info) |
526 { | 591 { |