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 };