| 680 { |
687 { |
| 681 debug_enabled_timer = g_timeout_add(0, debug_enabled_timeout_cb, |
688 debug_enabled_timer = g_timeout_add(0, debug_enabled_timeout_cb, |
| 682 (gpointer)value); |
689 (gpointer)value); |
| 683 } |
690 } |
| 684 |
691 |
| 685 static GLogWriterOutput |
692 static gboolean |
| 686 pidgin_debug_g_log_handler(GLogLevelFlags log_level, const GLogField *fields, |
693 pidgin_debug_g_log_handler_cb(gpointer data) |
| 687 gsize n_fields, G_GNUC_UNUSED gpointer user_data) |
694 { |
| 688 { |
695 PidginDebugMessage *message = data; |
| 689 const gchar *domain = NULL; |
|
| 690 const gchar *arg_s = NULL; |
|
| 691 GtkTextTag *level_tag = NULL; |
696 GtkTextTag *level_tag = NULL; |
| 692 GDateTime *local_date_time = NULL; |
|
| 693 gchar *local_time = NULL; |
697 gchar *local_time = NULL; |
| 694 GtkTextIter end; |
698 GtkTextIter end; |
| 695 gboolean scroll; |
699 gboolean scroll; |
| 696 gsize i; |
|
| 697 |
700 |
| 698 if (debug_win == NULL || |
701 if (debug_win == NULL || |
| 699 !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled")) { |
702 !purple_prefs_get_bool(PIDGIN_PREFS_ROOT "/debug/enabled")) { |
| 700 if (debug_print_enabled) { |
703 /* The Debug Window may have been closed/disabled after the thread that |
| 701 return g_log_writer_default(log_level, fields, n_fields, user_data); |
704 * sent this message. */ |
| 702 } else { |
705 g_date_time_unref(message->timestamp); |
| 703 return G_LOG_WRITER_UNHANDLED; |
706 g_free(message->domain); |
| 704 } |
707 g_free(message->message); |
| 705 } |
708 g_free(message); |
| 706 |
709 return FALSE; |
| 707 for (i = 0; i < n_fields; i++) { |
|
| 708 if (purple_strequal(fields[i].key, "GLIB_DOMAIN")) { |
|
| 709 domain = fields[i].value; |
|
| 710 } else if (purple_strequal(fields[i].key, "MESSAGE")) { |
|
| 711 arg_s = fields[i].value; |
|
| 712 } |
|
| 713 } |
|
| 714 |
|
| 715 if((log_level & G_LOG_LEVEL_ERROR) != 0) { |
|
| 716 level_tag = debug_win->tags.level[PURPLE_DEBUG_ERROR]; |
|
| 717 } else if((log_level & G_LOG_LEVEL_CRITICAL) != 0) { |
|
| 718 level_tag = debug_win->tags.level[PURPLE_DEBUG_FATAL]; |
|
| 719 } else if((log_level & G_LOG_LEVEL_WARNING) != 0) { |
|
| 720 level_tag = debug_win->tags.level[PURPLE_DEBUG_WARNING]; |
|
| 721 } else if((log_level & G_LOG_LEVEL_MESSAGE) != 0) { |
|
| 722 level_tag = debug_win->tags.level[PURPLE_DEBUG_INFO]; |
|
| 723 } else if((log_level & G_LOG_LEVEL_INFO) != 0) { |
|
| 724 level_tag = debug_win->tags.level[PURPLE_DEBUG_INFO]; |
|
| 725 } else if((log_level & G_LOG_LEVEL_DEBUG) != 0) { |
|
| 726 level_tag = debug_win->tags.level[PURPLE_DEBUG_MISC]; |
|
| 727 } else { |
|
| 728 level_tag = debug_win->tags.level[PURPLE_DEBUG_MISC]; |
|
| 729 } |
710 } |
| 730 |
711 |
| 731 scroll = view_near_bottom(debug_win); |
712 scroll = view_near_bottom(debug_win); |
| 732 gtk_text_buffer_get_end_iter(debug_win->buffer, &end); |
713 gtk_text_buffer_get_end_iter(debug_win->buffer, &end); |
| 733 gtk_text_buffer_move_mark(debug_win->buffer, debug_win->start_mark, &end); |
714 gtk_text_buffer_move_mark(debug_win->buffer, debug_win->start_mark, &end); |
| 734 |
715 |
| 735 local_date_time = g_date_time_new_now_local(); |
716 level_tag = debug_win->tags.level[message->level]; |
| 736 local_time = g_date_time_format(local_date_time, "(%H:%M:%S) "); |
717 local_time = g_date_time_format(message->timestamp, "(%H:%M:%S) "); |
| 737 g_date_time_unref(local_date_time); |
|
| 738 |
718 |
| 739 gtk_text_buffer_insert_with_tags( |
719 gtk_text_buffer_insert_with_tags( |
| 740 debug_win->buffer, |
720 debug_win->buffer, |
| 741 &end, |
721 &end, |
| 742 local_time, |
722 local_time, |
| 743 -1, |
723 -1, |
| 744 level_tag, |
724 level_tag, |
| 745 debug_win->paused ? debug_win->tags.paused : NULL, |
725 debug_win->paused ? debug_win->tags.paused : NULL, |
| 746 NULL); |
726 NULL); |
| 747 |
727 |
| 748 g_free(local_time); |
728 if (message->domain != NULL && *message->domain != '\0') { |
| 749 |
|
| 750 if (domain != NULL && *domain != '\0') { |
|
| 751 gtk_text_buffer_insert_with_tags( |
729 gtk_text_buffer_insert_with_tags( |
| 752 debug_win->buffer, |
730 debug_win->buffer, |
| 753 &end, |
731 &end, |
| 754 domain, |
732 message->domain, |
| 755 -1, |
733 -1, |
| 756 level_tag, |
734 level_tag, |
| 757 debug_win->tags.category, |
735 debug_win->tags.category, |
| 758 debug_win->paused ? debug_win->tags.paused : NULL, |
736 debug_win->paused ? debug_win->tags.paused : NULL, |
| 759 NULL); |
737 NULL); |
| 802 gtk_text_view_scroll_to_mark( |
780 gtk_text_view_scroll_to_mark( |
| 803 GTK_TEXT_VIEW(debug_win->textview), |
781 GTK_TEXT_VIEW(debug_win->textview), |
| 804 debug_win->end_mark, 0, TRUE, 0, 1); |
782 debug_win->end_mark, 0, TRUE, 0, 1); |
| 805 } |
783 } |
| 806 |
784 |
| |
785 g_free(local_time); |
| |
786 g_date_time_unref(message->timestamp); |
| |
787 g_free(message->domain); |
| |
788 g_free(message->message); |
| |
789 g_free(message); |
| |
790 |
| |
791 return FALSE; |
| |
792 } |
| |
793 |
| |
794 static GLogWriterOutput |
| |
795 pidgin_debug_g_log_handler(GLogLevelFlags log_level, const GLogField *fields, |
| |
796 gsize n_fields, G_GNUC_UNUSED gpointer user_data) |
| |
797 { |
| |
798 PidginDebugMessage *message = NULL; |
| |
799 gsize i; |
| |
800 |
| |
801 if (debug_win == NULL) { |
| |
802 if (debug_print_enabled) { |
| |
803 return g_log_writer_default(log_level, fields, n_fields, user_data); |
| |
804 } else { |
| |
805 return G_LOG_WRITER_UNHANDLED; |
| |
806 } |
| |
807 } |
| |
808 |
| |
809 message = g_new0(PidginDebugMessage, 1); |
| |
810 message->timestamp = g_date_time_new_now_local(); |
| |
811 |
| |
812 for (i = 0; i < n_fields; i++) { |
| |
813 if (purple_strequal(fields[i].key, "GLIB_DOMAIN")) { |
| |
814 message->domain = g_strdup(fields[i].value); |
| |
815 } else if (purple_strequal(fields[i].key, "MESSAGE")) { |
| |
816 message->message = g_strdup(fields[i].value); |
| |
817 } |
| |
818 } |
| |
819 |
| |
820 if((log_level & G_LOG_LEVEL_ERROR) != 0) { |
| |
821 message->level = PURPLE_DEBUG_ERROR; |
| |
822 } else if((log_level & G_LOG_LEVEL_CRITICAL) != 0) { |
| |
823 message->level = PURPLE_DEBUG_FATAL; |
| |
824 } else if((log_level & G_LOG_LEVEL_WARNING) != 0) { |
| |
825 message->level = PURPLE_DEBUG_WARNING; |
| |
826 } else if((log_level & G_LOG_LEVEL_MESSAGE) != 0) { |
| |
827 message->level = PURPLE_DEBUG_INFO; |
| |
828 } else if((log_level & G_LOG_LEVEL_INFO) != 0) { |
| |
829 message->level = PURPLE_DEBUG_INFO; |
| |
830 } else if((log_level & G_LOG_LEVEL_DEBUG) != 0) { |
| |
831 message->level = PURPLE_DEBUG_MISC; |
| |
832 } else { |
| |
833 message->level = PURPLE_DEBUG_MISC; |
| |
834 } |
| |
835 |
| |
836 g_timeout_add(0, pidgin_debug_g_log_handler_cb, message); |
| |
837 |
| 807 if (debug_print_enabled) { |
838 if (debug_print_enabled) { |
| 808 return g_log_writer_default(log_level, fields, n_fields, user_data); |
839 return g_log_writer_default(log_level, fields, n_fields, user_data); |
| 809 } else { |
840 } else { |
| 810 return G_LOG_WRITER_HANDLED; |
841 return G_LOG_WRITER_HANDLED; |
| 811 } |
842 } |