| 679 gtk_widget_show_all(lv->window); |
679 gtk_widget_show_all(lv->window); |
| 680 |
680 |
| 681 return lv; |
681 return lv; |
| 682 } |
682 } |
| 683 |
683 |
| 684 void pidgin_log_show(PurpleLogType type, const char *screenname, PurpleAccount *account) { |
684 void pidgin_log_show(PurpleLogType type, const char *buddyname, PurpleAccount *account) { |
| 685 struct log_viewer_hash_t *ht; |
685 struct log_viewer_hash_t *ht; |
| 686 PidginLogViewer *lv = NULL; |
686 PidginLogViewer *lv = NULL; |
| 687 const char *name = screenname; |
687 const char *name = buddyname; |
| 688 char *title; |
688 char *title; |
| 689 GdkPixbuf *prpl_icon; |
689 GdkPixbuf *prpl_icon; |
| 690 |
690 |
| 691 g_return_if_fail(account != NULL); |
691 g_return_if_fail(account != NULL); |
| 692 g_return_if_fail(screenname != NULL); |
692 g_return_if_fail(buddyname != NULL); |
| 693 |
693 |
| 694 ht = g_new0(struct log_viewer_hash_t, 1); |
694 ht = g_new0(struct log_viewer_hash_t, 1); |
| 695 |
695 |
| 696 ht->type = type; |
696 ht->type = type; |
| 697 ht->screenname = g_strdup(screenname); |
697 ht->buddyname = g_strdup(buddyname); |
| 698 ht->account = account; |
698 ht->account = account; |
| 699 |
699 |
| 700 if (log_viewers == NULL) { |
700 if (log_viewers == NULL) { |
| 701 log_viewers = g_hash_table_new(log_viewer_hash, log_viewer_equal); |
701 log_viewers = g_hash_table_new(log_viewer_hash, log_viewer_equal); |
| 702 } else if ((lv = g_hash_table_lookup(log_viewers, ht))) { |
702 } else if ((lv = g_hash_table_lookup(log_viewers, ht))) { |
| 703 gtk_window_present(GTK_WINDOW(lv->window)); |
703 gtk_window_present(GTK_WINDOW(lv->window)); |
| 704 g_free(ht->screenname); |
704 g_free(ht->buddyname); |
| 705 g_free(ht); |
705 g_free(ht); |
| 706 return; |
706 return; |
| 707 } |
707 } |
| 708 |
708 |
| 709 if (type == PURPLE_LOG_CHAT) { |
709 if (type == PURPLE_LOG_CHAT) { |
| 710 PurpleChat *chat; |
710 PurpleChat *chat; |
| 711 |
711 |
| 712 chat = purple_blist_find_chat(account, screenname); |
712 chat = purple_blist_find_chat(account, buddyname); |
| 713 if (chat != NULL) |
713 if (chat != NULL) |
| 714 name = purple_chat_get_name(chat); |
714 name = purple_chat_get_name(chat); |
| 715 |
715 |
| 716 title = g_strdup_printf(_("Conversations in %s"), name); |
716 title = g_strdup_printf(_("Conversations in %s"), name); |
| 717 } else { |
717 } else { |
| 718 PurpleBuddy *buddy; |
718 PurpleBuddy *buddy; |
| 719 |
719 |
| 720 buddy = purple_find_buddy(account, screenname); |
720 buddy = purple_find_buddy(account, buddyname); |
| 721 if (buddy != NULL) |
721 if (buddy != NULL) |
| 722 name = purple_buddy_get_contact_alias(buddy); |
722 name = purple_buddy_get_contact_alias(buddy); |
| 723 |
723 |
| 724 title = g_strdup_printf(_("Conversations with %s"), name); |
724 title = g_strdup_printf(_("Conversations with %s"), name); |
| 725 } |
725 } |
| 726 |
726 |
| 727 prpl_icon = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_MEDIUM); |
727 prpl_icon = pidgin_create_prpl_icon(account, PIDGIN_PRPL_ICON_MEDIUM); |
| 728 |
728 |
| 729 display_log_viewer(ht, purple_log_get_logs(type, screenname, account), |
729 display_log_viewer(ht, purple_log_get_logs(type, buddyname, account), |
| 730 title, gtk_image_new_from_pixbuf(prpl_icon), |
730 title, gtk_image_new_from_pixbuf(prpl_icon), |
| 731 purple_log_get_total_size(type, screenname, account)); |
731 purple_log_get_total_size(type, buddyname, account)); |
| 732 |
732 |
| 733 if (prpl_icon) |
733 if (prpl_icon) |
| 734 g_object_unref(prpl_icon); |
734 g_object_unref(prpl_icon); |
| 735 g_free(title); |
735 g_free(title); |
| 736 } |
736 } |
| 758 gtk_window_present(GTK_WINDOW(lv->window)); |
758 gtk_window_present(GTK_WINDOW(lv->window)); |
| 759 g_free(ht); |
759 g_free(ht); |
| 760 return; |
760 return; |
| 761 } |
761 } |
| 762 |
762 |
| 763 for (child = contact->node.child ; child ; child = child->next) { |
763 for (child = purple_blist_node_get_first_child((PurpleBlistNode*)contact) ; |
| |
764 child != NULL ; |
| |
765 child = purple_blist_node_get_sibling_next(child)) { |
| |
766 const char *buddy_name; |
| |
767 PurpleAccount *account; |
| |
768 |
| 764 if (!PURPLE_BLIST_NODE_IS_BUDDY(child)) |
769 if (!PURPLE_BLIST_NODE_IS_BUDDY(child)) |
| 765 continue; |
770 continue; |
| 766 |
771 |
| 767 logs = g_list_concat(purple_log_get_logs(PURPLE_LOG_IM, ((PurpleBuddy *)child)->name, |
772 buddy_name = purple_buddy_get_name((PurpleBuddy *)child); |
| 768 ((PurpleBuddy *)child)->account), logs); |
773 account = purple_buddy_get_account((PurpleBuddy *)child); |
| 769 total_log_size += purple_log_get_total_size(PURPLE_LOG_IM, ((PurpleBuddy *)child)->name, ((PurpleBuddy *)child)->account); |
774 logs = g_list_concat(purple_log_get_logs(PURPLE_LOG_IM, buddy_name, account), logs); |
| |
775 total_log_size += purple_log_get_total_size(PURPLE_LOG_IM, buddy_name, account); |
| 770 } |
776 } |
| 771 logs = g_list_sort(logs, purple_log_compare); |
777 logs = g_list_sort(logs, purple_log_compare); |
| 772 |
778 |
| 773 image = gtk_image_new(); |
779 image = gtk_image_new(); |
| 774 pixbuf = gtk_widget_render_icon(image, PIDGIN_STOCK_STATUS_PERSON, |
780 pixbuf = gtk_widget_render_icon(image, PIDGIN_STOCK_STATUS_PERSON, |