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 {