Mercurial > pidgin.yaz
comparison src/log.c @ 8096:81079e3eda47
[gaim-migrate @ 8795]
i tend to agree with javabsp that even though this doesn't affect the
O(n^2)-ness of the sort, that its still better than before since reading
the whole file over is huge in and of itself
committer: Tailor Script <tailor@pidgin.im>
author | Luke Schierer <lschiere@pidgin.im> |
---|---|
date | Tue, 13 Jan 2004 17:16:08 +0000 |
parents | 3c4313120c63 |
children | 869d5a5495b8 |
comparison
equal
deleted
inserted
replaced
8095:4396d1088273 | 8096:81079e3eda47 |
---|---|
29 #include "log.h" | 29 #include "log.h" |
30 #include "prefs.h" | 30 #include "prefs.h" |
31 #include "util.h" | 31 #include "util.h" |
32 #include "stringref.h" | 32 #include "stringref.h" |
33 | 33 |
34 static GSList *loggers = NULL; | |
35 | |
34 static GaimLogLogger html_logger; | 36 static GaimLogLogger html_logger; |
35 static GaimLogLogger txt_logger; | 37 static GaimLogLogger txt_logger; |
36 static GaimLogLogger old_logger; | 38 static GaimLogLogger old_logger; |
37 | 39 |
38 /************************************************************************** | 40 /************************************************************************** |
43 { | 45 { |
44 GaimLog *log = g_new0(GaimLog, 1); | 46 GaimLog *log = g_new0(GaimLog, 1); |
45 log->name = g_strdup(name); | 47 log->name = g_strdup(name); |
46 log->account = account; | 48 log->account = account; |
47 log->time = time; | 49 log->time = time; |
50 log->logger_data = NULL; | |
48 log->logger = gaim_log_logger_get(); | 51 log->logger = gaim_log_logger_get(); |
49 if (log->logger && log->logger->create) | 52 if (log->logger && log->logger->create) |
50 log->logger->create(log); | 53 log->logger->create(log); |
51 return log; | 54 return log; |
52 } | 55 } |
86 } | 89 } |
87 | 90 |
88 int gaim_log_get_size(GaimLog *log) | 91 int gaim_log_get_size(GaimLog *log) |
89 { | 92 { |
90 g_return_val_if_fail(log && log->logger, 0); | 93 g_return_val_if_fail(log && log->logger, 0); |
94 | |
91 if (log->logger->size) | 95 if (log->logger->size) |
92 return log->logger->size(log); | 96 return log->logger->size(log); |
93 return 0; | 97 return 0; |
94 } | 98 } |
95 | 99 |
96 int gaim_log_get_total_size(const char *name, GaimAccount *account) | 100 int gaim_log_get_total_size(const char *name, GaimAccount *account) |
97 { | 101 { |
98 GList *logs = gaim_log_get_logs(name, account); | |
99 int size = 0; | 102 int size = 0; |
100 | 103 GSList *n; |
101 | 104 |
102 while (logs) { | 105 for (n = loggers; n; n = n->next) { |
103 GList *logs2 = logs->next; | 106 GaimLogLogger *logger = n->data; |
104 GaimLog *log = (GaimLog*)(logs->data); | 107 |
105 size += gaim_log_get_size(log); | 108 if(logger->total_size){ |
106 gaim_log_free(log); | 109 size += (logger->total_size)(name, account); |
107 g_list_free_1(logs); | 110 } else if(logger->list) { |
108 logs = logs2; | 111 GList *logs = (logger->list)(name, account); |
112 int this_size = 0; | |
113 | |
114 while (logs) { | |
115 GList *logs2 = logs->next; | |
116 GaimLog *log = (GaimLog*)(logs->data); | |
117 this_size += gaim_log_get_size(log); | |
118 gaim_log_free(log); | |
119 g_list_free_1(logs); | |
120 logs = logs2; | |
121 } | |
122 | |
123 size += this_size; | |
124 } | |
109 } | 125 } |
110 | 126 |
111 return size; | 127 return size; |
112 } | 128 } |
113 | 129 |
114 /**************************************************************************** | 130 /**************************************************************************** |
115 * LOGGER FUNCTIONS ********************************************************* | 131 * LOGGER FUNCTIONS ********************************************************* |
116 ****************************************************************************/ | 132 ****************************************************************************/ |
117 | 133 |
118 static GaimLogLogger *current_logger = NULL; | 134 static GaimLogLogger *current_logger = NULL; |
119 static GSList *loggers = NULL; | |
120 | 135 |
121 static void logger_pref_cb(const char *name, GaimPrefType type, | 136 static void logger_pref_cb(const char *name, GaimPrefType type, |
122 gpointer value, gpointer data) | 137 gpointer value, gpointer data) |
123 { | 138 { |
124 GaimLogLogger *logger; | 139 GaimLogLogger *logger; |
410 N_("XML"), "xml", | 425 N_("XML"), "xml", |
411 NULL, | 426 NULL, |
412 xml_logger_write, | 427 xml_logger_write, |
413 xml_logger_finalize, | 428 xml_logger_finalize, |
414 xml_logger_list, | 429 xml_logger_list, |
430 NULL, | |
415 NULL | 431 NULL |
416 }; | 432 }; |
417 #endif | 433 #endif |
418 | 434 |
419 /**************************** | 435 /**************************** |
551 NULL, | 567 NULL, |
552 html_logger_write, | 568 html_logger_write, |
553 html_logger_finalize, | 569 html_logger_finalize, |
554 html_logger_list, | 570 html_logger_list, |
555 html_logger_read, | 571 html_logger_read, |
556 log_sizer_common | 572 log_sizer_common, |
573 NULL | |
557 }; | 574 }; |
558 | 575 |
559 | 576 |
560 | 577 |
561 | 578 |
686 NULL, | 703 NULL, |
687 txt_logger_write, | 704 txt_logger_write, |
688 txt_logger_finalize, | 705 txt_logger_finalize, |
689 txt_logger_list, | 706 txt_logger_list, |
690 txt_logger_read, | 707 txt_logger_read, |
691 log_sizer_common | 708 log_sizer_common, |
709 NULL | |
692 }; | 710 }; |
693 | 711 |
694 /**************** | 712 /**************** |
695 * OLD LOGGER *** | 713 * OLD LOGGER *** |
696 ****************/ | 714 ****************/ |
829 gaim_stringref_unref(pathref); | 847 gaim_stringref_unref(pathref); |
830 fclose(file); | 848 fclose(file); |
831 return list; | 849 return list; |
832 } | 850 } |
833 | 851 |
852 static int old_logger_total_size(const char *name, GaimAccount *account) | |
853 { | |
854 char *logfile = g_strdup_printf("%s.log", gaim_normalize(account, name)); | |
855 char *pathstr = g_build_filename(gaim_user_dir(), "logs", logfile, NULL); | |
856 int size; | |
857 struct stat st; | |
858 | |
859 if (stat(pathstr, &st)) | |
860 size = 0; | |
861 else | |
862 size = st.st_size; | |
863 | |
864 g_free(logfile); | |
865 g_free(pathstr); | |
866 | |
867 return size; | |
868 } | |
869 | |
834 static char * old_logger_read (GaimLog *log, GaimLogReadFlags *flags) | 870 static char * old_logger_read (GaimLog *log, GaimLogReadFlags *flags) |
835 { | 871 { |
836 struct old_logger_data *data = log->logger_data; | 872 struct old_logger_data *data = log->logger_data; |
837 FILE *file = fopen(gaim_stringref_value(data->pathref), "rb"); | 873 FILE *file = fopen(gaim_stringref_value(data->pathref), "rb"); |
838 char *read = g_malloc(data->length + 1); | 874 char *read = g_malloc(data->length + 1); |
862 "old logger", "old", | 898 "old logger", "old", |
863 NULL, NULL, | 899 NULL, NULL, |
864 old_logger_finalize, | 900 old_logger_finalize, |
865 old_logger_list, | 901 old_logger_list, |
866 old_logger_read, | 902 old_logger_read, |
867 old_logger_size | 903 old_logger_size, |
904 old_logger_total_size | |
868 }; | 905 }; |