Mercurial > pidgin
annotate src/log.c @ 13280:3de53fe8345f
[gaim-migrate @ 15646]
Always show a vertical scrollbar on conversations imhtmls. This will solve the shrinking conversation window bug. I chose this approach instead of saving the size of the window (as I had previous talked about), as this prevents the contents of the scrollback from rewrapping when the scrollbars appear or disappear. It also just seems to feel like the right thing to do, but maybe that's me being lazy.
committer: Tailor Script <tailor@pidgin.im>
author | Richard Laager <rlaager@wiktel.com> |
---|---|
date | Tue, 14 Feb 2006 05:43:43 +0000 |
parents | 87ca2f6bd0dc |
children | b04212d6b115 |
rev | line source |
---|---|
7431 | 1 /** |
2 * @file log.c Logging API | |
3 * @ingroup core | |
4 * | |
5 * gaim | |
6 * | |
8046 | 7 * Gaim is the legal property of its developers, whose names are too numerous |
8 * to list here. Please refer to the COPYRIGHT file distributed with this | |
9 * source distribution. | |
7436 | 10 * |
7431 | 11 * This program is free software; you can redistribute it and/or modify |
12 * it under the terms of the GNU General Public License as published by | |
13 * the Free Software Foundation; either version 2 of the License, or | |
14 * (at your option) any later version. | |
15 * | |
16 * This program is distributed in the hope that it will be useful, | |
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
19 * GNU General Public License for more details. | |
20 * | |
21 * You should have received a copy of the GNU General Public License | |
22 * along with this program; if not, write to the Free Software | |
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
4184 | 24 */ |
4195 | 25 |
7431 | 26 #include "account.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5839
diff
changeset
|
27 #include "debug.h" |
7431 | 28 #include "internal.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5839
diff
changeset
|
29 #include "log.h" |
5548 | 30 #include "prefs.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5839
diff
changeset
|
31 #include "util.h" |
7764 | 32 #include "stringref.h" |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5839
diff
changeset
|
33 |
8096 | 34 static GSList *loggers = NULL; |
35 | |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
36 static GaimLogLogger *html_logger; |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
37 static GaimLogLogger *txt_logger; |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
38 static GaimLogLogger *old_logger; |
5872
059d95c67cda
[gaim-migrate @ 6304]
Christian Hammond <chipx86@chipx86.com>
parents:
5839
diff
changeset
|
39 |
8635 | 40 struct _gaim_logsize_user { |
41 char *name; | |
42 GaimAccount *account; | |
43 }; | |
44 static GHashTable *logsize_users = NULL; | |
45 | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
46 static void log_get_log_sets_common(GHashTable *sets); |
8635 | 47 |
13059 | 48 static gsize html_logger_write(GaimLog *log, GaimMessageFlags type, |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
49 const char *from, time_t time, const char *message); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
50 static void html_logger_finalize(GaimLog *log); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
51 static GList *html_logger_list(GaimLogType type, const char *sn, GaimAccount *account); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
52 static GList *html_logger_list_syslog(GaimAccount *account); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
53 static char *html_logger_read(GaimLog *log, GaimLogReadFlags *flags); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
54 |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
55 static GList *old_logger_list(GaimLogType type, const char *sn, GaimAccount *account); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
56 static int old_logger_total_size(GaimLogType type, const char *name, GaimAccount *account); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
57 static char * old_logger_read (GaimLog *log, GaimLogReadFlags *flags); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
58 static int old_logger_size (GaimLog *log); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
59 static void old_logger_get_log_sets(GaimLogSetCallback cb, GHashTable *sets); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
60 static void old_logger_finalize(GaimLog *log); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
61 |
13059 | 62 static gsize txt_logger_write(GaimLog *log, |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
63 GaimMessageFlags type, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
64 const char *from, time_t time, const char *message); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
65 static void txt_logger_finalize(GaimLog *log); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
66 static GList *txt_logger_list(GaimLogType type, const char *sn, GaimAccount *account); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
67 static GList *txt_logger_list_syslog(GaimAccount *account); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
68 static char *txt_logger_read(GaimLog *log, GaimLogReadFlags *flags); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
69 |
7431 | 70 /************************************************************************** |
71 * PUBLIC LOGGING FUNCTIONS *********************************************** | |
72 **************************************************************************/ | |
4184 | 73 |
11292
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
74 GaimLog *gaim_log_new(GaimLogType type, const char *name, GaimAccount *account, |
13119
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
75 GaimConversation *conv, time_t time, const struct tm *tm) |
7431 | 76 { |
77 GaimLog *log = g_new0(GaimLog, 1); | |
8635 | 78 log->name = g_strdup(gaim_normalize(account, name)); |
7431 | 79 log->account = account; |
11292
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
80 log->conv = conv; |
7431 | 81 log->time = time; |
8573 | 82 log->type = type; |
8096 | 83 log->logger_data = NULL; |
13119
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
84 if (tm != NULL) |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
85 { |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
86 log->tm = g_new0(struct tm, 1); |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
87 *(log->tm) = *tm; |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
88 |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
89 #ifdef HAVE_STRUCT_TM_TM_ZONE |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
90 /* XXX: This is so wrong... */ |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
91 if (log->tm->tm_zone != NULL) |
13160
1b48f0ec55e9
[gaim-migrate @ 15523]
Richard Laager <rlaager@wiktel.com>
parents:
13159
diff
changeset
|
92 { |
1b48f0ec55e9
[gaim-migrate @ 15523]
Richard Laager <rlaager@wiktel.com>
parents:
13159
diff
changeset
|
93 char *tmp = g_locale_from_utf8(log->tm->tm_zone, -1, NULL, NULL, NULL); |
1b48f0ec55e9
[gaim-migrate @ 15523]
Richard Laager <rlaager@wiktel.com>
parents:
13159
diff
changeset
|
94 if (tmp != NULL) |
1b48f0ec55e9
[gaim-migrate @ 15523]
Richard Laager <rlaager@wiktel.com>
parents:
13159
diff
changeset
|
95 log->tm->tm_zone = (const char *)tmp; |
1b48f0ec55e9
[gaim-migrate @ 15523]
Richard Laager <rlaager@wiktel.com>
parents:
13159
diff
changeset
|
96 else |
1b48f0ec55e9
[gaim-migrate @ 15523]
Richard Laager <rlaager@wiktel.com>
parents:
13159
diff
changeset
|
97 /* Just shove the UTF-8 bytes in and hope... */ |
1b48f0ec55e9
[gaim-migrate @ 15523]
Richard Laager <rlaager@wiktel.com>
parents:
13159
diff
changeset
|
98 log->tm->tm_zone = (const char *)g_strdup(log->tm->tm_zone); |
1b48f0ec55e9
[gaim-migrate @ 15523]
Richard Laager <rlaager@wiktel.com>
parents:
13159
diff
changeset
|
99 } |
13119
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
100 #endif |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
101 } |
7431 | 102 log->logger = gaim_log_logger_get(); |
7440 | 103 if (log->logger && log->logger->create) |
104 log->logger->create(log); | |
7431 | 105 return log; |
4184 | 106 } |
107 | |
7431 | 108 void gaim_log_free(GaimLog *log) |
4184 | 109 { |
7431 | 110 g_return_if_fail(log); |
111 if (log->logger && log->logger->finalize) | |
112 log->logger->finalize(log); | |
113 g_free(log->name); | |
13119
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
114 |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
115 if (log->tm != NULL) |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
116 { |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
117 #ifdef HAVE_STRUCT_TM_TM_ZONE |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
118 /* XXX: This is so wrong... */ |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
119 g_free((char *)log->tm->tm_zone); |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
120 #endif |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
121 g_free(log->tm); |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
122 } |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
123 |
7431 | 124 g_free(log); |
125 } | |
7436 | 126 |
127 void gaim_log_write(GaimLog *log, GaimMessageFlags type, | |
7431 | 128 const char *from, time_t time, const char *message) |
129 { | |
10173 | 130 struct _gaim_logsize_user *lu; |
13059 | 131 gsize written, total = 0; |
132 gpointer ptrsize; | |
10173 | 133 |
7431 | 134 g_return_if_fail(log); |
135 g_return_if_fail(log->logger); | |
7442 | 136 g_return_if_fail(log->logger->write); |
7431 | 137 |
13059 | 138 written = (log->logger->write)(log, type, from, time, message); |
10171
829a569993e0
[gaim-migrate @ 11263]
Luke Schierer <lschiere@pidgin.im>
parents:
10087
diff
changeset
|
139 |
829a569993e0
[gaim-migrate @ 11263]
Luke Schierer <lschiere@pidgin.im>
parents:
10087
diff
changeset
|
140 lu = g_new(struct _gaim_logsize_user, 1); |
9892 | 141 |
10171
829a569993e0
[gaim-migrate @ 11263]
Luke Schierer <lschiere@pidgin.im>
parents:
10087
diff
changeset
|
142 lu->name = g_strdup(gaim_normalize(log->account, log->name)); |
829a569993e0
[gaim-migrate @ 11263]
Luke Schierer <lschiere@pidgin.im>
parents:
10087
diff
changeset
|
143 lu->account = log->account; |
13059 | 144 |
145 if(g_hash_table_lookup_extended(logsize_users, lu, NULL, &ptrsize)) { | |
146 total = GPOINTER_TO_INT(ptrsize); | |
147 total += written; | |
148 g_hash_table_replace(logsize_users, lu, GINT_TO_POINTER(total)); | |
13076
f3abb141042a
[gaim-migrate @ 15438]
Richard Laager <rlaager@wiktel.com>
parents:
13069
diff
changeset
|
149 } else { |
f3abb141042a
[gaim-migrate @ 15438]
Richard Laager <rlaager@wiktel.com>
parents:
13069
diff
changeset
|
150 g_free(lu->name); |
f3abb141042a
[gaim-migrate @ 15438]
Richard Laager <rlaager@wiktel.com>
parents:
13069
diff
changeset
|
151 g_free(lu); |
13059 | 152 } |
153 | |
4184 | 154 } |
155 | |
7431 | 156 char *gaim_log_read(GaimLog *log, GaimLogReadFlags *flags) |
4184 | 157 { |
7542 | 158 GaimLogReadFlags mflags; |
7431 | 159 g_return_val_if_fail(log && log->logger, NULL); |
7462 | 160 if (log->logger->read) { |
7535 | 161 char *ret = (log->logger->read)(log, flags ? flags : &mflags); |
11920 | 162 gaim_str_strip_char(ret, '\r'); |
7462 | 163 return ret; |
164 } | |
13106
a0a4b44239e8
[gaim-migrate @ 15468]
Richard Laager <rlaager@wiktel.com>
parents:
13104
diff
changeset
|
165 return g_strdup(_("<b><font color=\"red\">The logger has no read function</font></b>")); |
4184 | 166 } |
7616 | 167 |
7556 | 168 int gaim_log_get_size(GaimLog *log) |
169 { | |
170 g_return_val_if_fail(log && log->logger, 0); | |
8096 | 171 |
7556 | 172 if (log->logger->size) |
173 return log->logger->size(log); | |
174 return 0; | |
175 } | |
176 | |
8635 | 177 static guint _gaim_logsize_user_hash(struct _gaim_logsize_user *lu) |
178 { | |
179 return g_str_hash(lu->name); | |
180 } | |
181 | |
182 static guint _gaim_logsize_user_equal(struct _gaim_logsize_user *lu1, | |
183 struct _gaim_logsize_user *lu2) | |
184 { | |
13077
64ca89ffc639
[gaim-migrate @ 15439]
Richard Laager <rlaager@wiktel.com>
parents:
13076
diff
changeset
|
185 return (lu1->account == lu2->account && (!strcmp(lu1->name, lu2->name))); |
8635 | 186 } |
187 | |
188 static void _gaim_logsize_user_free_key(struct _gaim_logsize_user *lu) | |
189 { | |
190 g_free(lu->name); | |
191 g_free(lu); | |
192 } | |
193 | |
8898 | 194 int gaim_log_get_total_size(GaimLogType type, const char *name, GaimAccount *account) |
7556 | 195 { |
9677 | 196 gpointer ptrsize; |
197 int size = 0; | |
8096 | 198 GSList *n; |
8635 | 199 struct _gaim_logsize_user *lu; |
8096 | 200 |
8635 | 201 lu = g_new(struct _gaim_logsize_user, 1); |
202 lu->name = g_strdup(gaim_normalize(account, name)); | |
203 lu->account = account; | |
204 | |
9677 | 205 if(g_hash_table_lookup_extended(logsize_users, lu, NULL, &ptrsize)) { |
206 size = GPOINTER_TO_INT(ptrsize); | |
8635 | 207 g_free(lu->name); |
208 g_free(lu); | |
209 } else { | |
210 for (n = loggers; n; n = n->next) { | |
211 GaimLogLogger *logger = n->data; | |
7616 | 212 |
8635 | 213 if(logger->total_size){ |
8898 | 214 size += (logger->total_size)(type, name, account); |
8635 | 215 } else if(logger->list) { |
8898 | 216 GList *logs = (logger->list)(type, name, account); |
8635 | 217 int this_size = 0; |
218 | |
219 while (logs) { | |
220 GList *logs2 = logs->next; | |
221 GaimLog *log = (GaimLog*)(logs->data); | |
222 this_size += gaim_log_get_size(log); | |
223 gaim_log_free(log); | |
224 g_list_free_1(logs); | |
225 logs = logs2; | |
226 } | |
227 | |
228 size += this_size; | |
8096 | 229 } |
8635 | 230 } |
8096 | 231 |
8635 | 232 g_hash_table_replace(logsize_users, lu, GINT_TO_POINTER(size)); |
7556 | 233 } |
234 return size; | |
235 } | |
4184 | 236 |
10822 | 237 char * |
10577 | 238 gaim_log_get_log_dir(GaimLogType type, const char *name, GaimAccount *account) |
239 { | |
240 GaimPlugin *prpl; | |
241 GaimPluginProtocolInfo *prpl_info; | |
242 const char *prpl_name; | |
243 char *acct_name; | |
9926 | 244 const char *target; |
10577 | 245 char *dir; |
9926 | 246 |
10577 | 247 prpl = gaim_find_prpl(gaim_account_get_protocol_id(account)); |
248 if (!prpl) | |
249 return NULL; | |
250 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); | |
251 prpl_name = prpl_info->list_icon(account, NULL); | |
252 | |
253 acct_name = g_strdup(gaim_escape_filename(gaim_normalize(account, | |
254 gaim_account_get_username(account)))); | |
9923 | 255 |
256 if (type == GAIM_LOG_CHAT) { | |
257 char *temp = g_strdup_printf("%s.chat", gaim_normalize(account, name)); | |
9926 | 258 target = gaim_escape_filename(temp); |
9923 | 259 g_free(temp); |
260 } else if(type == GAIM_LOG_SYSTEM) { | |
9926 | 261 target = ".system"; |
9923 | 262 } else { |
9926 | 263 target = gaim_escape_filename(gaim_normalize(account, name)); |
9923 | 264 } |
265 | |
10577 | 266 dir = g_build_filename(gaim_user_dir(), "logs", prpl_name, acct_name, target, NULL); |
9926 | 267 |
9923 | 268 g_free(acct_name); |
10577 | 269 |
9923 | 270 return dir; |
271 } | |
272 | |
7431 | 273 /**************************************************************************** |
274 * LOGGER FUNCTIONS ********************************************************* | |
275 ****************************************************************************/ | |
4184 | 276 |
7431 | 277 static GaimLogLogger *current_logger = NULL; |
7436 | 278 |
7431 | 279 static void logger_pref_cb(const char *name, GaimPrefType type, |
12816 | 280 gconstpointer value, gpointer data) |
7431 | 281 { |
282 GaimLogLogger *logger; | |
283 GSList *l = loggers; | |
284 while (l) { | |
285 logger = l->data; | |
286 if (!strcmp(logger->id, value)) { | |
287 gaim_log_logger_set(logger); | |
288 return; | |
4184 | 289 } |
7431 | 290 l = l->next; |
291 } | |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
292 gaim_log_logger_set(txt_logger); |
7431 | 293 } |
4184 | 294 |
295 | |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
296 GaimLogLogger *gaim_log_logger_new(const char *id, const char *name, int functions, ...) |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
297 { |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
298 #if 0 |
8898 | 299 void(*create)(GaimLog *), |
13068
78fa9502715b
[gaim-migrate @ 15430]
Richard Laager <rlaager@wiktel.com>
parents:
13059
diff
changeset
|
300 gsize(*write)(GaimLog *, GaimMessageFlags, const char *, time_t, const char *), |
8898 | 301 void(*finalize)(GaimLog *), |
302 GList*(*list)(GaimLogType type, const char*, GaimAccount*), | |
303 char*(*read)(GaimLog*, GaimLogReadFlags*), | |
11025 | 304 int(*size)(GaimLog*), |
305 int(*total_size)(GaimLogType type, const char *name, GaimAccount *account), | |
306 GList*(*list_syslog)(GaimAccount *account), | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
307 void(*get_log_sets)(GaimLogSetCallback cb, GHashTable *sets)) |
7431 | 308 { |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
309 #endif |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
310 GaimLogLogger *logger; |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
311 va_list args; |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
312 |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
313 g_return_val_if_fail(id != NULL, NULL); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
314 g_return_val_if_fail(name != NULL, NULL); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
315 g_return_val_if_fail(functions >= 1, NULL); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
316 |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
317 logger = g_new0(GaimLogLogger, 1); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
318 logger->id = g_strdup(id); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
319 logger->name = g_strdup(name); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
320 |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
321 va_start(args, functions); |
11025 | 322 |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
323 if (functions >= 1) |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
324 logger->create = va_arg(args, void *); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
325 if (functions >= 2) |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
326 logger->write = va_arg(args, void *); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
327 if (functions >= 3) |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
328 logger->finalize = va_arg(args, void *); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
329 if (functions >= 4) |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
330 logger->list = va_arg(args, void *); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
331 if (functions >= 5) |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
332 logger->read = va_arg(args, void *); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
333 if (functions >= 6) |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
334 logger->size = va_arg(args, void *); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
335 if (functions >= 7) |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
336 logger->total_size = va_arg(args, void *); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
337 if (functions >= 8) |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
338 logger->list_syslog = va_arg(args, void *); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
339 if (functions >= 9) |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
340 logger->get_log_sets = va_arg(args, void *); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
341 |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
342 if (functions > 9) |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
343 gaim_debug_info("log", "Dropping new functions for logger: %s (%s)\n", name, id); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
344 |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
345 va_end(args); |
11025 | 346 |
7431 | 347 return logger; |
4184 | 348 } |
349 | |
7431 | 350 void gaim_log_logger_free(GaimLogLogger *logger) |
4184 | 351 { |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
352 g_free(logger->name); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
353 g_free(logger->id); |
7431 | 354 g_free(logger); |
355 } | |
4184 | 356 |
7431 | 357 void gaim_log_logger_add (GaimLogLogger *logger) |
358 { | |
359 g_return_if_fail(logger); | |
360 if (g_slist_find(loggers, logger)) | |
361 return; | |
362 loggers = g_slist_append(loggers, logger); | |
363 } | |
364 | |
365 void gaim_log_logger_remove (GaimLogLogger *logger) | |
366 { | |
367 g_return_if_fail(logger); | |
12574 | 368 loggers = g_slist_remove(loggers, logger); |
4184 | 369 } |
370 | |
7431 | 371 void gaim_log_logger_set (GaimLogLogger *logger) |
4184 | 372 { |
7431 | 373 g_return_if_fail(logger); |
374 current_logger = logger; | |
7436 | 375 } |
4184 | 376 |
7431 | 377 GaimLogLogger *gaim_log_logger_get() |
378 { | |
379 return current_logger; | |
380 } | |
4184 | 381 |
7431 | 382 GList *gaim_log_logger_get_options(void) |
383 { | |
384 GSList *n; | |
385 GList *list = NULL; | |
386 GaimLogLogger *data; | |
4184 | 387 |
7431 | 388 for (n = loggers; n; n = n->next) { |
389 data = n->data; | |
390 if (!data->write) | |
391 continue; | |
12241
4777c5912068
[gaim-migrate @ 14543]
Richard Laager <rlaager@wiktel.com>
parents:
12240
diff
changeset
|
392 list = g_list_append(list, data->name); |
7431 | 393 list = g_list_append(list, data->id); |
4184 | 394 } |
395 | |
7431 | 396 return list; |
397 } | |
398 | |
8573 | 399 gint gaim_log_compare(gconstpointer y, gconstpointer z) |
7431 | 400 { |
7436 | 401 const GaimLog *a = y; |
402 const GaimLog *b = z; | |
403 | |
7431 | 404 return b->time - a->time; |
405 } | |
406 | |
8898 | 407 GList *gaim_log_get_logs(GaimLogType type, const char *name, GaimAccount *account) |
7431 | 408 { |
409 GList *logs = NULL; | |
410 GSList *n; | |
411 for (n = loggers; n; n = n->next) { | |
412 GaimLogLogger *logger = n->data; | |
413 if (!logger->list) | |
414 continue; | |
11703
a53cef8bd22b
[gaim-migrate @ 13994]
Richard Laager <rlaager@wiktel.com>
parents:
11698
diff
changeset
|
415 logs = g_list_concat(logger->list(type, name, account), logs); |
7431 | 416 } |
7436 | 417 |
8573 | 418 return g_list_sort(logs, gaim_log_compare); |
419 } | |
420 | |
11025 | 421 gint gaim_log_set_compare(gconstpointer y, gconstpointer z) |
422 { | |
423 const GaimLogSet *a = y; | |
424 const GaimLogSet *b = z; | |
425 gint ret = 0; | |
426 | |
427 /* This logic seems weird at first... | |
428 * If either account is NULL, we pretend the accounts are | |
429 * equal. This allows us to detect duplicates that will | |
430 * exist if one logger knows the account and another | |
431 * doesn't. */ | |
432 if (a->account != NULL && b->account != NULL) { | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
433 ret = strcmp(gaim_account_get_username(a->account), gaim_account_get_username(b->account)); |
11025 | 434 if (ret != 0) |
435 return ret; | |
436 } | |
437 | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
438 ret = strcmp(a->normalized_name, b->normalized_name); |
11025 | 439 if (ret != 0) |
440 return ret; | |
441 | |
442 return (gint)b->type - (gint)a->type; | |
443 } | |
444 | |
11677 | 445 static guint |
446 log_set_hash(gconstpointer key) | |
11025 | 447 { |
448 const GaimLogSet *set = key; | |
449 | |
450 /* The account isn't hashed because we need GaimLogSets with NULL accounts | |
451 * to be found when we search by a GaimLogSet that has a non-NULL account | |
452 * but the same type and name. */ | |
453 return g_int_hash((gint *)&set->type) + g_str_hash(set->name); | |
454 } | |
455 | |
11677 | 456 static gboolean |
457 log_set_equal(gconstpointer a, gconstpointer b) | |
11025 | 458 { |
459 /* I realize that the choices made for GList and GHashTable | |
460 * make sense for those data types, but I wish the comparison | |
461 * functions were compatible. */ | |
462 return !gaim_log_set_compare(a, b); | |
463 } | |
464 | |
11677 | 465 static void |
466 log_add_log_set_to_hash(GHashTable *sets, GaimLogSet *set) | |
11025 | 467 { |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
468 GaimLogSet *existing_set = g_hash_table_lookup(sets, set); |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
469 |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
470 if (existing_set == NULL) |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
471 g_hash_table_insert(sets, set, set); |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
472 else if (existing_set->account == NULL && set->account != NULL) |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
473 g_hash_table_replace(sets, set, set); |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
474 else |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
475 gaim_log_set_free(set); |
11025 | 476 } |
477 | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
478 GHashTable *gaim_log_get_log_sets(void) |
11025 | 479 { |
480 GSList *n; | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
481 GHashTable *sets = g_hash_table_new_full(log_set_hash, log_set_equal, |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
482 (GDestroyNotify)gaim_log_set_free, NULL); |
11025 | 483 |
484 /* Get the log sets from all the loggers. */ | |
485 for (n = loggers; n; n = n->next) { | |
486 GaimLogLogger *logger = n->data; | |
487 | |
488 if (!logger->get_log_sets) | |
489 continue; | |
490 | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
491 logger->get_log_sets(log_add_log_set_to_hash, sets); |
11025 | 492 } |
493 | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
494 log_get_log_sets_common(sets); |
11025 | 495 |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
496 /* Return the GHashTable of unique GaimLogSets. */ |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
497 return sets; |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
498 } |
11025 | 499 |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
500 void gaim_log_set_free(GaimLogSet *set) |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
501 { |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
502 g_return_if_fail(set != NULL); |
11025 | 503 |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
504 g_free(set->name); |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
505 if (set->normalized_name != set->name) |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
506 g_free(set->normalized_name); |
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
507 g_free(set); |
11025 | 508 } |
509 | |
8573 | 510 GList *gaim_log_get_system_logs(GaimAccount *account) |
511 { | |
512 GList *logs = NULL; | |
513 GSList *n; | |
514 for (n = loggers; n; n = n->next) { | |
515 GaimLogLogger *logger = n->data; | |
516 if (!logger->list_syslog) | |
517 continue; | |
11703
a53cef8bd22b
[gaim-migrate @ 13994]
Richard Laager <rlaager@wiktel.com>
parents:
11698
diff
changeset
|
518 logs = g_list_concat(logger->list_syslog(account), logs); |
8573 | 519 } |
520 | |
521 return g_list_sort(logs, gaim_log_compare); | |
7431 | 522 } |
523 | |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
524 /**************************************************************************** |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
525 * LOG SUBSYSTEM ************************************************************ |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
526 ****************************************************************************/ |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
527 |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
528 void * |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
529 gaim_log_get_handle(void) |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
530 { |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
531 static int handle; |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
532 |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
533 return &handle; |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
534 } |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
535 |
7431 | 536 void gaim_log_init(void) |
7436 | 537 { |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
538 void *handle = gaim_log_get_handle(); |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
539 |
7431 | 540 gaim_prefs_add_none("/core/logging"); |
7555 | 541 gaim_prefs_add_bool("/core/logging/log_ims", FALSE); |
542 gaim_prefs_add_bool("/core/logging/log_chats", FALSE); | |
8573 | 543 gaim_prefs_add_bool("/core/logging/log_system", FALSE); |
544 | |
7431 | 545 gaim_prefs_add_string("/core/logging/format", "txt"); |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
546 |
12240 | 547 html_logger = gaim_log_logger_new("html", _("HTML"), 8, |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
548 NULL, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
549 html_logger_write, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
550 html_logger_finalize, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
551 html_logger_list, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
552 html_logger_read, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
553 gaim_log_common_sizer, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
554 NULL, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
555 html_logger_list_syslog); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
556 gaim_log_logger_add(html_logger); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
557 |
12240 | 558 txt_logger = gaim_log_logger_new("txt", _("Plain text"), 8, |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
559 NULL, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
560 txt_logger_write, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
561 txt_logger_finalize, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
562 txt_logger_list, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
563 txt_logger_read, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
564 gaim_log_common_sizer, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
565 NULL, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
566 txt_logger_list_syslog); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
567 gaim_log_logger_add(txt_logger); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
568 |
12240 | 569 old_logger = gaim_log_logger_new("old", _("Old Gaim"), 9, |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
570 NULL, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
571 NULL, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
572 old_logger_finalize, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
573 old_logger_list, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
574 old_logger_read, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
575 old_logger_size, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
576 old_logger_total_size, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
577 NULL, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
578 old_logger_get_log_sets); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
579 gaim_log_logger_add(old_logger); |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
580 |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
581 gaim_signal_register(handle, "log-timestamp", |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
582 gaim_marshal_POINTER__POINTER_POINTER, |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
583 gaim_value_new(GAIM_TYPE_POINTER), 2, |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
584 gaim_value_new(GAIM_TYPE_SUBTYPE, |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
585 GAIM_SUBTYPE_LOG), |
12834
03ff00e0bb84
[gaim-migrate @ 15182]
Richard Laager <rlaager@wiktel.com>
parents:
12816
diff
changeset
|
586 gaim_value_new(GAIM_TYPE_BOXED, |
03ff00e0bb84
[gaim-migrate @ 15182]
Richard Laager <rlaager@wiktel.com>
parents:
12816
diff
changeset
|
587 "struct tm *")); |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
588 |
10087 | 589 gaim_prefs_connect_callback(NULL, "/core/logging/format", |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
590 logger_pref_cb, NULL); |
7431 | 591 gaim_prefs_trigger_callback("/core/logging/format"); |
8635 | 592 |
593 logsize_users = g_hash_table_new_full((GHashFunc)_gaim_logsize_user_hash, | |
594 (GEqualFunc)_gaim_logsize_user_equal, | |
595 (GDestroyNotify)_gaim_logsize_user_free_key, NULL); | |
7431 | 596 } |
597 | |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
598 void |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
599 gaim_log_uninit(void) |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
600 { |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
601 gaim_signals_unregister_by_instance(gaim_log_get_handle()); |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
602 } |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
603 |
7431 | 604 /**************************************************************************** |
605 * LOGGERS ****************************************************************** | |
606 ****************************************************************************/ | |
607 | |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
608 static char *log_get_timestamp(GaimLog *log, time_t when) |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
609 { |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
610 char *date; |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
611 struct tm tm = *(localtime(&when)); |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
612 |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
613 date = gaim_signal_emit_return_1(gaim_log_get_handle(), |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
614 "log-timestamp", |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
615 log, &tm); |
13104
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
616 if (date != NULL) |
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
617 return date; |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
618 |
13104
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
619 if (log->type == GAIM_LOG_SYSTEM || time(NULL) > when + 20*60) |
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
620 return g_strdup(gaim_date_format_long(&tm)); |
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
621 else |
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
622 return g_strdup(gaim_time_format(&tm)); |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
623 } |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
624 |
11292
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
625 void gaim_log_common_writer(GaimLog *log, const char *ext) |
9763 | 626 { |
10822 | 627 GaimLogCommonLoggerData *data = log->logger_data; |
9763 | 628 |
11292
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
629 if (data == NULL) |
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
630 { |
9763 | 631 /* This log is new */ |
13104
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
632 char *dir; |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
633 struct tm *tm; |
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
634 const char *tz; |
13104
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
635 const char *date; |
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
636 char *filename; |
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
637 char *path; |
10577 | 638 |
9923 | 639 dir = gaim_log_get_log_dir(log->type, log->name, log->account); |
10577 | 640 if (dir == NULL) |
641 return; | |
642 | |
9923 | 643 gaim_build_dir (dir, S_IRUSR | S_IWUSR | S_IXUSR); |
9763 | 644 |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
645 tm = localtime(&log->time); |
13164
87ca2f6bd0dc
[gaim-migrate @ 15527]
Richard Laager <rlaager@wiktel.com>
parents:
13162
diff
changeset
|
646 #ifdef _WIN32 |
87ca2f6bd0dc
[gaim-migrate @ 15527]
Richard Laager <rlaager@wiktel.com>
parents:
13162
diff
changeset
|
647 tz = ""; |
87ca2f6bd0dc
[gaim-migrate @ 15527]
Richard Laager <rlaager@wiktel.com>
parents:
13162
diff
changeset
|
648 #else |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
649 tz = gaim_escape_filename(gaim_utf8_strftime("%Z", tm)); |
13164
87ca2f6bd0dc
[gaim-migrate @ 15527]
Richard Laager <rlaager@wiktel.com>
parents:
13162
diff
changeset
|
650 #endif |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
651 date = gaim_utf8_strftime("%Y-%m-%d.%H%M%S%z", tm); |
9763 | 652 |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
653 filename = g_strdup_printf("%s%s%s", date, tz, ext ? ext : ""); |
9763 | 654 |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
655 path = g_build_filename(dir, filename, NULL); |
9763 | 656 g_free(dir); |
657 g_free(filename); | |
658 | |
10822 | 659 log->logger_data = data = g_new0(GaimLogCommonLoggerData, 1); |
9763 | 660 |
10589
0f7452b1f777
[gaim-migrate @ 11994]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10577
diff
changeset
|
661 data->file = g_fopen(path, "a"); |
11292
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
662 if (data->file == NULL) |
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
663 { |
9763 | 664 gaim_debug(GAIM_DEBUG_ERROR, "log", |
9892 | 665 "Could not create log file %s\n", path); |
11292
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
666 |
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
667 if (log->conv != NULL) |
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
668 gaim_conversation_write(log->conv, NULL, _("Logging of this conversation failed."), |
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
669 GAIM_MESSAGE_ERROR, time(NULL)); |
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
670 |
9763 | 671 g_free(path); |
672 return; | |
673 } | |
674 g_free(path); | |
10577 | 675 } |
9763 | 676 } |
677 | |
10822 | 678 GList *gaim_log_common_lister(GaimLogType type, const char *name, GaimAccount *account, const char *ext, GaimLogLogger *logger) |
7431 | 679 { |
680 GDir *dir; | |
681 GList *list = NULL; | |
13159
d03013fd39bf
[gaim-migrate @ 15522]
Richard Laager <rlaager@wiktel.com>
parents:
13156
diff
changeset
|
682 const char *filename; |
8111 | 683 char *path; |
684 | |
685 if(!account) | |
686 return NULL; | |
687 | |
9923 | 688 path = gaim_log_get_log_dir(type, name, account); |
10577 | 689 if (path == NULL) |
690 return NULL; | |
7447 | 691 |
12969
b98a28bf29d9
[gaim-migrate @ 15322]
Richard Laager <rlaager@wiktel.com>
parents:
12958
diff
changeset
|
692 if (!(dir = g_dir_open(path, 0, NULL))) |
b98a28bf29d9
[gaim-migrate @ 15322]
Richard Laager <rlaager@wiktel.com>
parents:
12958
diff
changeset
|
693 { |
7431 | 694 g_free(path); |
695 return NULL; | |
696 } | |
8898 | 697 |
13159
d03013fd39bf
[gaim-migrate @ 15522]
Richard Laager <rlaager@wiktel.com>
parents:
13156
diff
changeset
|
698 while ((filename = g_dir_read_name(dir))) |
12969
b98a28bf29d9
[gaim-migrate @ 15322]
Richard Laager <rlaager@wiktel.com>
parents:
12958
diff
changeset
|
699 { |
8577 | 700 if (gaim_str_has_suffix(filename, ext) && |
12969
b98a28bf29d9
[gaim-migrate @ 15322]
Richard Laager <rlaager@wiktel.com>
parents:
12958
diff
changeset
|
701 strlen(filename) >= (17 + strlen(ext))) |
b98a28bf29d9
[gaim-migrate @ 15322]
Richard Laager <rlaager@wiktel.com>
parents:
12958
diff
changeset
|
702 { |
7431 | 703 GaimLog *log; |
10822 | 704 GaimLogCommonLoggerData *data; |
13119
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
705 #if defined (HAVE_TM_GMTOFF) && defined (HAVE_STRUCT_TM_TM_ZONE) |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
706 struct tm tm; |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
707 long tz_off; |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
708 const char *rest; |
13159
d03013fd39bf
[gaim-migrate @ 15522]
Richard Laager <rlaager@wiktel.com>
parents:
13156
diff
changeset
|
709 time_t stamp = gaim_str_to_time(gaim_unescape_filename(filename), FALSE, &tm, &tz_off, &rest); |
13119
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
710 char *end; |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
711 |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
712 /* As zero is a valid offset, GAIM_NO_TZ_OFF means no offset was |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
713 * provided. See util.h. Yes, it's kinda ugly. */ |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
714 if (tz_off != GAIM_NO_TZ_OFF) |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
715 tm.tm_gmtoff = tz_off - tm.tm_gmtoff; |
7431 | 716 |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
717 if (rest == NULL || (end = strchr(rest, '.')) == NULL || strchr(rest, ' ') != NULL) |
13119
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
718 { |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
719 log = gaim_log_new(type, name, account, NULL, stamp, NULL); |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
720 } |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
721 else |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
722 { |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
723 char *tmp = g_strndup(rest, end - rest); |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
724 tm.tm_zone = tmp; |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
725 log = gaim_log_new(type, name, account, NULL, stamp, &tm); |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
726 g_free(tmp); |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
727 } |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
728 #else |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
729 time_t stamp = gaim_str_to_time(filename, FALSE, NULL, NULL, NULL); |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
730 |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
731 log = gaim_log_new(type, name, account, NULL, stamp, NULL); |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
732 #endif |
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
733 |
7431 | 734 log->logger = logger; |
10822 | 735 log->logger_data = data = g_new0(GaimLogCommonLoggerData, 1); |
7616 | 736 data->path = g_build_filename(path, filename, NULL); |
11703
a53cef8bd22b
[gaim-migrate @ 13994]
Richard Laager <rlaager@wiktel.com>
parents:
11698
diff
changeset
|
737 list = g_list_prepend(list, log); |
4184 | 738 } |
739 } | |
7431 | 740 g_dir_close(dir); |
7447 | 741 g_free(path); |
7431 | 742 return list; |
743 } | |
4184 | 744 |
10822 | 745 int gaim_log_common_sizer(GaimLog *log) |
7556 | 746 { |
747 struct stat st; | |
10822 | 748 GaimLogCommonLoggerData *data = log->logger_data; |
7556 | 749 |
10589
0f7452b1f777
[gaim-migrate @ 11994]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10577
diff
changeset
|
750 if (!data->path || g_stat(data->path, &st)) |
7556 | 751 st.st_size = 0; |
752 | |
753 return st.st_size; | |
754 } | |
755 | |
11025 | 756 /* This will build log sets for all loggers that use the common logger |
757 * functions because they use the same directory structure. */ | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
758 static void log_get_log_sets_common(GHashTable *sets) |
11025 | 759 { |
760 gchar *log_path = g_build_filename(gaim_user_dir(), "logs", NULL); | |
761 GDir *log_dir = g_dir_open(log_path, 0, NULL); | |
762 const gchar *protocol; | |
763 | |
764 if (log_dir == NULL) { | |
765 g_free(log_path); | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
766 return; |
11025 | 767 } |
768 | |
769 while ((protocol = g_dir_read_name(log_dir)) != NULL) { | |
770 gchar *protocol_path = g_build_filename(log_path, protocol, NULL); | |
771 GDir *protocol_dir; | |
772 const gchar *username; | |
773 gchar *protocol_unescaped; | |
774 GList *account_iter; | |
775 GList *accounts = NULL; | |
776 | |
777 if ((protocol_dir = g_dir_open(protocol_path, 0, NULL)) == NULL) { | |
778 g_free(protocol_path); | |
779 continue; | |
780 } | |
781 | |
782 /* Using g_strdup() to cover the one-in-a-million chance that a | |
783 * prpl's list_icon function uses gaim_unescape_filename(). */ | |
784 protocol_unescaped = g_strdup(gaim_unescape_filename(protocol)); | |
785 | |
786 /* Find all the accounts for protocol. */ | |
787 for (account_iter = gaim_accounts_get_all() ; account_iter != NULL ; account_iter = account_iter->next) { | |
788 GaimPlugin *prpl; | |
789 GaimPluginProtocolInfo *prpl_info; | |
790 | |
791 prpl = gaim_find_prpl(gaim_account_get_protocol_id((GaimAccount *)account_iter->data)); | |
792 if (!prpl) | |
793 continue; | |
794 prpl_info = GAIM_PLUGIN_PROTOCOL_INFO(prpl); | |
795 | |
796 if (!strcmp(protocol_unescaped, prpl_info->list_icon((GaimAccount *)account_iter->data, NULL))) | |
11703
a53cef8bd22b
[gaim-migrate @ 13994]
Richard Laager <rlaager@wiktel.com>
parents:
11698
diff
changeset
|
797 accounts = g_list_prepend(accounts, account_iter->data); |
11025 | 798 } |
799 g_free(protocol_unescaped); | |
800 | |
801 while ((username = g_dir_read_name(protocol_dir)) != NULL) { | |
802 gchar *username_path = g_build_filename(protocol_path, username, NULL); | |
803 GDir *username_dir; | |
804 const gchar *username_unescaped; | |
805 GaimAccount *account = NULL; | |
806 gchar *name; | |
807 | |
808 if ((username_dir = g_dir_open(username_path, 0, NULL)) == NULL) { | |
809 g_free(username_path); | |
810 continue; | |
811 } | |
812 | |
813 /* Find the account for username in the list of accounts for protocol. */ | |
814 username_unescaped = gaim_unescape_filename(username); | |
815 for (account_iter = g_list_first(accounts) ; account_iter != NULL ; account_iter = account_iter->next) { | |
816 if (!strcmp(((GaimAccount *)account_iter->data)->username, username_unescaped)) { | |
817 account = account_iter->data; | |
818 break; | |
819 } | |
820 } | |
821 | |
822 /* Don't worry about the cast, name will point to dynamically allocated memory shortly. */ | |
823 while ((name = (gchar *)g_dir_read_name(username_dir)) != NULL) { | |
824 size_t len; | |
825 GaimLogSet *set = g_new0(GaimLogSet, 1); | |
826 | |
827 /* Unescape the filename. */ | |
828 name = g_strdup(gaim_unescape_filename(name)); | |
829 | |
830 /* Get the (possibly new) length of name. */ | |
831 len = strlen(name); | |
832 | |
833 set->account = account; | |
834 set->name = name; | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
835 set->normalized_name = g_strdup(gaim_normalize(account, name)); |
11025 | 836 |
837 /* Chat for .chat or .system at the end of the name to determine the type. */ | |
838 set->type = GAIM_LOG_IM; | |
839 if (len > 7) { | |
840 gchar *tmp = &name[len - 7]; | |
841 if (!strcmp(tmp, ".system")) { | |
842 set->type = GAIM_LOG_SYSTEM; | |
843 *tmp = '\0'; | |
844 } | |
845 } | |
846 if (len > 5) { | |
847 gchar *tmp = &name[len - 5]; | |
848 if (!strcmp(tmp, ".chat")) { | |
849 set->type = GAIM_LOG_CHAT; | |
850 *tmp = '\0'; | |
851 } | |
852 } | |
853 | |
854 /* Determine if this (account, name) combination exists as a buddy. */ | |
11458
4db38b374d3f
[gaim-migrate @ 13697]
Richard Laager <rlaager@wiktel.com>
parents:
11292
diff
changeset
|
855 if (account != NULL) |
4db38b374d3f
[gaim-migrate @ 13697]
Richard Laager <rlaager@wiktel.com>
parents:
11292
diff
changeset
|
856 set->buddy = (gaim_find_buddy(account, name) != NULL); |
11025 | 857 |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
858 log_add_log_set_to_hash(sets, set); |
11025 | 859 } |
860 g_free(username_path); | |
861 g_dir_close(username_dir); | |
862 } | |
863 g_free(protocol_path); | |
864 g_dir_close(protocol_dir); | |
865 } | |
866 g_free(log_path); | |
867 g_dir_close(log_dir); | |
868 } | |
869 | |
7431 | 870 #if 0 /* Maybe some other time. */ |
7443 | 871 /**************** |
7431 | 872 ** XML LOGGER ** |
873 ****************/ | |
874 | |
875 static const char *str_from_msg_type (GaimMessageFlags type) | |
876 { | |
7443 | 877 |
7431 | 878 return ""; |
7443 | 879 |
7431 | 880 } |
881 | |
7443 | 882 static void xml_logger_write(GaimLog *log, |
883 GaimMessageFlags type, | |
7431 | 884 const char *from, time_t time, const char *message) |
885 { | |
886 char *xhtml = NULL; | |
10577 | 887 |
7431 | 888 if (!log->logger_data) { |
889 /* This log is new. We could use the loggers 'new' function, but | |
890 * creating a new file there would result in empty files in the case | |
891 * that you open a convo with someone, but don't say anything. | |
892 */ | |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
893 struct tm *tm; |
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
894 const char *tz; |
13104
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
895 const char *date; |
9923 | 896 char *dir = gaim_log_get_log_dir(log->type, log->name, log->account); |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
897 char *name; |
13154
0d755026832c
[gaim-migrate @ 15517]
Richard Laager <rlaager@wiktel.com>
parents:
13119
diff
changeset
|
898 char *filename; |
10577 | 899 |
900 if (dir == NULL) | |
901 return; | |
902 | |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
903 tm = localtime(&log->time); |
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
904 tz = gaim_escape_filename(gaim_utf8_strftime("%Z", tm); |
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
905 date = gaim_utf8_strftime("%Y-%m-%d.%H%M%S%z", tm); |
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
906 |
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
907 name = g_strdup_printf("%s%s%s", date, tz, ext ? ext : ""); |
7443 | 908 |
7612 | 909 gaim_build_dir (dir, S_IRUSR | S_IWUSR | S_IXUSR); |
7443 | 910 |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
911 filename = g_build_filename(dir, name, NULL); |
7431 | 912 g_free(dir); |
13162
dc0375c4984a
[gaim-migrate @ 15525]
Richard Laager <rlaager@wiktel.com>
parents:
13160
diff
changeset
|
913 g_free(name); |
7443 | 914 |
10589
0f7452b1f777
[gaim-migrate @ 11994]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10577
diff
changeset
|
915 log->logger_data = g_fopen(filename, "a"); |
7431 | 916 if (!log->logger_data) { |
917 gaim_debug(GAIM_DEBUG_ERROR, "log", "Could not create log file %s\n", filename); | |
7564 | 918 g_free(filename); |
7431 | 919 return; |
920 } | |
7564 | 921 g_free(filename); |
7431 | 922 fprintf(log->logger_data, "<?xml version='1.0' encoding='UTF-8' ?>\n" |
923 "<?xml-stylesheet href='file:///usr/src/web/htdocs/log-stylesheet.xsl' type='text/xml' ?>\n"); | |
7443 | 924 |
13104
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
925 date = gaim_utf8_strftime("%Y-%m-%d %H:%M:%S", localtime(&log->time)); |
7431 | 926 fprintf(log->logger_data, "<conversation time='%s' screenname='%s' protocol='%s'>\n", |
927 date, log->name, prpl); | |
928 } | |
7443 | 929 |
9923 | 930 /* if we can't write to the file, give up before we hurt ourselves */ |
931 if(!data->file) | |
932 return; | |
933 | |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
934 date = log_get_timestamp(log, time); |
12692
4da7062a06c2
[gaim-migrate @ 15035]
Richard Laager <rlaager@wiktel.com>
parents:
12574
diff
changeset
|
935 |
7431 | 936 gaim_markup_html_to_xhtml(message, &xhtml, NULL); |
937 if (from) | |
7443 | 938 fprintf(log->logger_data, "<message %s %s from='%s' time='%s'>%s</message>\n", |
939 str_from_msg_type(type), | |
7431 | 940 type & GAIM_MESSAGE_SEND ? "direction='sent'" : |
941 type & GAIM_MESSAGE_RECV ? "direction='received'" : "", | |
942 from, date, xhtml); | |
943 else | |
7443 | 944 fprintf(log->logger_data, "<message %s %s time='%s'>%s</message>\n", |
945 str_from_msg_type(type), | |
7431 | 946 type & GAIM_MESSAGE_SEND ? "direction='sent'" : |
947 type & GAIM_MESSAGE_RECV ? "direction='received'" : "", | |
7443 | 948 date, xhtml): |
7431 | 949 fflush(log->logger_data); |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
950 g_free(date); |
7431 | 951 g_free(xhtml); |
7443 | 952 } |
953 | |
7431 | 954 static void xml_logger_finalize(GaimLog *log) |
955 { | |
956 if (log->logger_data) { | |
957 fprintf(log->logger_data, "</conversation>\n"); | |
958 fclose(log->logger_data); | |
959 log->logger_data = NULL; | |
960 } | |
961 } | |
7443 | 962 |
8898 | 963 static GList *xml_logger_list(GaimLogType type, const char *sn, GaimAccount *account) |
7431 | 964 { |
10822 | 965 return gaim_log_common_lister(type, sn, account, ".xml", &xml_logger); |
4184 | 966 } |
967 | |
7431 | 968 static GaimLogLogger xml_logger = { |
969 N_("XML"), "xml", | |
970 NULL, | |
971 xml_logger_write, | |
972 xml_logger_finalize, | |
973 xml_logger_list, | |
8096 | 974 NULL, |
11025 | 975 NULL, |
7431 | 976 NULL |
977 }; | |
978 #endif | |
5563
9eb5b13fd412
[gaim-migrate @ 5965]
Christian Hammond <chipx86@chipx86.com>
parents:
5560
diff
changeset
|
979 |
7431 | 980 /**************************** |
7457 | 981 ** HTML LOGGER ************* |
982 ****************************/ | |
983 | |
13059 | 984 static gsize html_logger_write(GaimLog *log, GaimMessageFlags type, |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
985 const char *from, time_t time, const char *message) |
7457 | 986 { |
9763 | 987 char *msg_fixed; |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
988 char *date; |
9613 | 989 GaimPlugin *plugin = gaim_find_prpl(gaim_account_get_protocol_id(log->account)); |
10822 | 990 GaimLogCommonLoggerData *data = log->logger_data; |
13059 | 991 gsize written = 0; |
9613 | 992 |
7618 | 993 if(!data) { |
9763 | 994 const char *prpl = |
995 GAIM_PLUGIN_PROTOCOL_INFO(plugin)->list_icon(log->account, NULL); | |
13104
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
996 const char *date; |
11292
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
997 gaim_log_common_writer(log, ".html"); |
7457 | 998 |
9763 | 999 data = log->logger_data; |
7457 | 1000 |
9763 | 1001 /* if we can't write to the file, give up before we hurt ourselves */ |
1002 if(!data->file) | |
13059 | 1003 return 0; |
7616 | 1004 |
13119
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
1005 date = gaim_date_format_full(localtime(&log->time)); |
13104
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
1006 |
13059 | 1007 written += fprintf(data->file, "<html><head>"); |
1008 written += fprintf(data->file, "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">"); | |
1009 written += fprintf(data->file, "<title>"); | |
1010 written += fprintf(data->file, "Conversation with %s at %s on %s (%s)", | |
13104
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
1011 log->name, date, gaim_account_get_username(log->account), prpl); |
13059 | 1012 written += fprintf(data->file, "</title></head><body>"); |
1013 written += fprintf(data->file, | |
7457 | 1014 "<h3>Conversation with %s at %s on %s (%s)</h3>\n", |
13104
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
1015 log->name, date, gaim_account_get_username(log->account), prpl); |
7457 | 1016 } |
7623 | 1017 |
9892 | 1018 /* if we can't write to the file, give up before we hurt ourselves */ |
1019 if(!data->file) | |
13059 | 1020 return 0; |
9892 | 1021 |
7882 | 1022 gaim_markup_html_to_xhtml(message, &msg_fixed, NULL); |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1023 date = log_get_timestamp(log, time); |
7882 | 1024 |
8577 | 1025 if(log->type == GAIM_LOG_SYSTEM){ |
13059 | 1026 written += fprintf(data->file, "---- %s @ %s ----<br/>\n", msg_fixed, date); |
8577 | 1027 } else { |
1028 if (type & GAIM_MESSAGE_SYSTEM) | |
13059 | 1029 written += fprintf(data->file, "<font size=\"2\">(%s)</font><b> %s</b><br/>\n", date, msg_fixed); |
13069
42c62476b61b
[gaim-migrate @ 15431]
Richard Laager <rlaager@wiktel.com>
parents:
13068
diff
changeset
|
1030 else if (type & GAIM_MESSAGE_ERROR) |
42c62476b61b
[gaim-migrate @ 15431]
Richard Laager <rlaager@wiktel.com>
parents:
13068
diff
changeset
|
1031 written += fprintf(data->file, "<font color=\"#FF0000\"><font size=\"2\">(%s)</font><b> %s</b></font><br/>\n", date, msg_fixed); |
8577 | 1032 else if (type & GAIM_MESSAGE_WHISPER) |
13059 | 1033 written += fprintf(data->file, "<font color=\"#6C2585\"><font size=\"2\">(%s)</font><b> %s:</b></font> %s<br/>\n", |
8577 | 1034 date, from, msg_fixed); |
1035 else if (type & GAIM_MESSAGE_AUTO_RESP) { | |
1036 if (type & GAIM_MESSAGE_SEND) | |
13059 | 1037 written += fprintf(data->file, _("<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s <AUTO-REPLY>:</b></font> %s<br/>\n"), date, from, msg_fixed); |
8577 | 1038 else if (type & GAIM_MESSAGE_RECV) |
13059 | 1039 written += fprintf(data->file, _("<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s <AUTO-REPLY>:</b></font> %s<br/>\n"), date, from, msg_fixed); |
8577 | 1040 } else if (type & GAIM_MESSAGE_RECV) { |
1041 if(gaim_message_meify(msg_fixed, -1)) | |
13059 | 1042 written += fprintf(data->file, "<font color=\"#062585\"><font size=\"2\">(%s)</font> <b>***%s</b></font> %s<br/>\n", |
10645 | 1043 date, from, msg_fixed); |
8577 | 1044 else |
13059 | 1045 written += fprintf(data->file, "<font color=\"#A82F2F\"><font size=\"2\">(%s)</font> <b>%s:</b></font> %s<br/>\n", |
10645 | 1046 date, from, msg_fixed); |
8577 | 1047 } else if (type & GAIM_MESSAGE_SEND) { |
1048 if(gaim_message_meify(msg_fixed, -1)) | |
13059 | 1049 written += fprintf(data->file, "<font color=\"#062585\"><font size=\"2\">(%s)</font> <b>***%s</b></font> %s<br/>\n", |
10645 | 1050 date, from, msg_fixed); |
8577 | 1051 else |
13059 | 1052 written += fprintf(data->file, "<font color=\"#16569E\"><font size=\"2\">(%s)</font> <b>%s:</b></font> %s<br/>\n", |
10645 | 1053 date, from, msg_fixed); |
13069
42c62476b61b
[gaim-migrate @ 15431]
Richard Laager <rlaager@wiktel.com>
parents:
13068
diff
changeset
|
1054 } else { |
42c62476b61b
[gaim-migrate @ 15431]
Richard Laager <rlaager@wiktel.com>
parents:
13068
diff
changeset
|
1055 gaim_debug_error("log", "Unhandled message type."); |
42c62476b61b
[gaim-migrate @ 15431]
Richard Laager <rlaager@wiktel.com>
parents:
13068
diff
changeset
|
1056 written += fprintf(data->file, "<font size=\"2\">(%s)</font><b> %s:</b></font> %s<br/>\n", |
42c62476b61b
[gaim-migrate @ 15431]
Richard Laager <rlaager@wiktel.com>
parents:
13068
diff
changeset
|
1057 date, from, msg_fixed); |
8577 | 1058 } |
7564 | 1059 } |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1060 g_free(date); |
7882 | 1061 g_free(msg_fixed); |
7616 | 1062 fflush(data->file); |
13059 | 1063 |
1064 return written; | |
7457 | 1065 } |
1066 | |
1067 static void html_logger_finalize(GaimLog *log) | |
1068 { | |
10822 | 1069 GaimLogCommonLoggerData *data = log->logger_data; |
7616 | 1070 if (data) { |
1071 if(data->file) { | |
12881
7e45ccd91e58
[gaim-migrate @ 15233]
Richard Laager <rlaager@wiktel.com>
parents:
12834
diff
changeset
|
1072 fprintf(data->file, "</body></html>\n"); |
7616 | 1073 fclose(data->file); |
1074 } | |
1075 g_free(data->path); | |
7752 | 1076 g_free(data); |
7463 | 1077 } |
7457 | 1078 } |
1079 | |
8898 | 1080 static GList *html_logger_list(GaimLogType type, const char *sn, GaimAccount *account) |
7457 | 1081 { |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
1082 return gaim_log_common_lister(type, sn, account, ".html", html_logger); |
7457 | 1083 } |
1084 | |
8573 | 1085 static GList *html_logger_list_syslog(GaimAccount *account) |
1086 { | |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
1087 return gaim_log_common_lister(GAIM_LOG_SYSTEM, ".system", account, ".html", html_logger); |
8573 | 1088 } |
1089 | |
7457 | 1090 static char *html_logger_read(GaimLog *log, GaimLogReadFlags *flags) |
1091 { | |
12958
6910db1ae6a1
[gaim-migrate @ 15311]
Richard Laager <rlaager@wiktel.com>
parents:
12881
diff
changeset
|
1092 char *read; |
10822 | 1093 GaimLogCommonLoggerData *data = log->logger_data; |
7457 | 1094 *flags = GAIM_LOG_READ_NO_NEWLINE; |
7616 | 1095 if (!data || !data->path) |
1096 return g_strdup(_("<font color=\"red\"><b>Unable to find log path!</b></font>")); | |
1097 if (g_file_get_contents(data->path, &read, NULL, NULL)) { | |
12958
6910db1ae6a1
[gaim-migrate @ 15311]
Richard Laager <rlaager@wiktel.com>
parents:
12881
diff
changeset
|
1098 char *minus_header = strchr(read, '\n'); |
6910db1ae6a1
[gaim-migrate @ 15311]
Richard Laager <rlaager@wiktel.com>
parents:
12881
diff
changeset
|
1099 |
7457 | 1100 if (!minus_header) |
12958
6910db1ae6a1
[gaim-migrate @ 15311]
Richard Laager <rlaager@wiktel.com>
parents:
12881
diff
changeset
|
1101 return read; |
6910db1ae6a1
[gaim-migrate @ 15311]
Richard Laager <rlaager@wiktel.com>
parents:
12881
diff
changeset
|
1102 |
6910db1ae6a1
[gaim-migrate @ 15311]
Richard Laager <rlaager@wiktel.com>
parents:
12881
diff
changeset
|
1103 minus_header = g_strdup(minus_header + 1); |
7457 | 1104 g_free(read); |
12958
6910db1ae6a1
[gaim-migrate @ 15311]
Richard Laager <rlaager@wiktel.com>
parents:
12881
diff
changeset
|
1105 |
7457 | 1106 return minus_header; |
1107 } | |
8578 | 1108 return g_strdup_printf(_("<font color=\"red\"><b>Could not read file: %s</b></font>"), data->path); |
7457 | 1109 } |
1110 | |
1111 | |
1112 | |
1113 /**************************** | |
7431 | 1114 ** PLAIN TEXT LOGGER ******* |
1115 ****************************/ | |
4184 | 1116 |
13059 | 1117 static gsize txt_logger_write(GaimLog *log, |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
1118 GaimMessageFlags type, |
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
1119 const char *from, time_t time, const char *message) |
7431 | 1120 { |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1121 char *date; |
9763 | 1122 GaimPlugin *plugin = gaim_find_prpl(gaim_account_get_protocol_id(log->account)); |
10822 | 1123 GaimLogCommonLoggerData *data = log->logger_data; |
9763 | 1124 char *stripped = NULL; |
1125 | |
13059 | 1126 gsize written = 0; |
1127 | |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
1128 if (data == NULL) { |
7431 | 1129 /* This log is new. We could use the loggers 'new' function, but |
1130 * creating a new file there would result in empty files in the case | |
1131 * that you open a convo with someone, but don't say anything. | |
1132 */ | |
9763 | 1133 const char *prpl = |
1134 GAIM_PLUGIN_PROTOCOL_INFO(plugin)->list_icon(log->account, NULL); | |
11292
ef9280fdc511
[gaim-migrate @ 13492]
Richard Laager <rlaager@wiktel.com>
parents:
11256
diff
changeset
|
1135 gaim_log_common_writer(log, ".txt"); |
8898 | 1136 |
9763 | 1137 data = log->logger_data; |
7436 | 1138 |
9763 | 1139 /* if we can't write to the file, give up before we hurt ourselves */ |
1140 if(!data->file) | |
13059 | 1141 return 0; |
7616 | 1142 |
13059 | 1143 written += fprintf(data->file, "Conversation with %s at %s on %s (%s)\n", |
13119
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
1144 log->name, gaim_date_format_full(localtime(&log->time)), |
13104
e1e5462b7d81
[gaim-migrate @ 15466]
Richard Laager <rlaager@wiktel.com>
parents:
13077
diff
changeset
|
1145 gaim_account_get_username(log->account), prpl); |
7431 | 1146 } |
7436 | 1147 |
7623 | 1148 /* if we can't write to the file, give up before we hurt ourselves */ |
1149 if(!data->file) | |
13059 | 1150 return 0; |
7623 | 1151 |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1152 stripped = gaim_markup_strip_html(message); |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1153 date = log_get_timestamp(log, time); |
12692
4da7062a06c2
[gaim-migrate @ 15035]
Richard Laager <rlaager@wiktel.com>
parents:
12574
diff
changeset
|
1154 |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1155 if(log->type == GAIM_LOG_SYSTEM){ |
13059 | 1156 written += fprintf(data->file, "---- %s @ %s ----\n", stripped, date); |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1157 } else { |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1158 if (type & GAIM_MESSAGE_SEND || |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1159 type & GAIM_MESSAGE_RECV) { |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1160 if (type & GAIM_MESSAGE_AUTO_RESP) { |
13059 | 1161 written += fprintf(data->file, _("(%s) %s <AUTO-REPLY>: %s\n"), date, |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1162 from, stripped); |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1163 } else { |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1164 if(gaim_message_meify(stripped, -1)) |
13059 | 1165 written += fprintf(data->file, "(%s) ***%s %s\n", date, from, |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1166 stripped); |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1167 else |
13059 | 1168 written += fprintf(data->file, "(%s) %s: %s\n", date, from, |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1169 stripped); |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1170 } |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1171 } else if (type & GAIM_MESSAGE_SYSTEM) |
13059 | 1172 written += fprintf(data->file, "(%s) %s\n", date, stripped); |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1173 else if (type & GAIM_MESSAGE_NO_LOG) { |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1174 /* This shouldn't happen */ |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1175 g_free(stripped); |
13059 | 1176 return written; |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1177 } else if (type & GAIM_MESSAGE_WHISPER) |
13059 | 1178 written += fprintf(data->file, "(%s) *%s* %s", date, from, stripped); |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1179 else |
13059 | 1180 written += fprintf(data->file, "(%s) %s%s %s\n", date, from ? from : "", |
12737
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1181 from ? ":" : "", stripped); |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1182 } |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1183 g_free(date); |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1184 g_free(stripped); |
a1e241dd50b6
[gaim-migrate @ 15082]
Richard Laager <rlaager@wiktel.com>
parents:
12692
diff
changeset
|
1185 fflush(data->file); |
13059 | 1186 |
1187 return written; | |
7431 | 1188 } |
1189 | |
1190 static void txt_logger_finalize(GaimLog *log) | |
1191 { | |
10822 | 1192 GaimLogCommonLoggerData *data = log->logger_data; |
7616 | 1193 if (data) { |
1194 if(data->file) | |
1195 fclose(data->file); | |
1196 if(data->path) | |
1197 g_free(data->path); | |
7752 | 1198 g_free(data); |
7616 | 1199 } |
7431 | 1200 } |
1201 | |
8898 | 1202 static GList *txt_logger_list(GaimLogType type, const char *sn, GaimAccount *account) |
7431 | 1203 { |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
1204 return gaim_log_common_lister(type, sn, account, ".txt", txt_logger); |
7431 | 1205 } |
1206 | |
8573 | 1207 static GList *txt_logger_list_syslog(GaimAccount *account) |
1208 { | |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
1209 return gaim_log_common_lister(GAIM_LOG_SYSTEM, ".system", account, ".txt", txt_logger); |
8573 | 1210 } |
1211 | |
7431 | 1212 static char *txt_logger_read(GaimLog *log, GaimLogReadFlags *flags) |
1213 { | |
8517 | 1214 char *read, *minus_header, *minus_header2; |
10822 | 1215 GaimLogCommonLoggerData *data = log->logger_data; |
7457 | 1216 *flags = 0; |
7616 | 1217 if (!data || !data->path) |
1218 return g_strdup(_("<font color=\"red\"><b>Unable to find log path!</b></font>")); | |
1219 if (g_file_get_contents(data->path, &read, NULL, NULL)) { | |
7431 | 1220 minus_header = strchr(read, '\n'); |
1221 if (!minus_header) | |
1222 minus_header = g_strdup(read); | |
7436 | 1223 else |
7431 | 1224 minus_header = g_strdup(minus_header + 1); |
1225 g_free(read); | |
10732
c4cb90065e1d
[gaim-migrate @ 12334]
Luke Schierer <lschiere@pidgin.im>
parents:
10645
diff
changeset
|
1226 minus_header2 = g_markup_escape_text(minus_header, -1); |
8517 | 1227 g_free(minus_header); |
1228 return minus_header2; | |
7431 | 1229 } |
8578 | 1230 return g_strdup_printf(_("<font color=\"red\"><b>Could not read file: %s</b></font>"), data->path); |
7436 | 1231 } |
7431 | 1232 |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
1233 |
7431 | 1234 |
1235 /**************** | |
1236 * OLD LOGGER *** | |
1237 ****************/ | |
1238 | |
1239 /* The old logger doesn't write logs, only reads them. This is to include | |
1240 * old logs in the log viewer transparently. | |
1241 */ | |
1242 | |
1243 struct old_logger_data { | |
7764 | 1244 GaimStringref *pathref; |
7431 | 1245 int offset; |
1246 int length; | |
1247 }; | |
1248 | |
8898 | 1249 static GList *old_logger_list(GaimLogType type, const char *sn, GaimAccount *account) |
7431 | 1250 { |
1251 FILE *file; | |
1252 char buf[BUF_LONG]; | |
1253 struct tm tm; | |
7761 | 1254 char month[4]; |
7431 | 1255 struct old_logger_data *data = NULL; |
1256 char *logfile = g_strdup_printf("%s.log", gaim_normalize(account, sn)); | |
7764 | 1257 char *pathstr = g_build_filename(gaim_user_dir(), "logs", logfile, NULL); |
1258 GaimStringref *pathref = gaim_stringref_new(pathstr); | |
7431 | 1259 char *newlog; |
7761 | 1260 int logfound = 0; |
1261 int lastoff = 0; | |
1262 int newlen; | |
7791 | 1263 time_t lasttime = 0; |
7431 | 1264 |
1265 GaimLog *log = NULL; | |
1266 GList *list = NULL; | |
1267 | |
7473 | 1268 g_free(logfile); |
7764 | 1269 g_free(pathstr); |
7473 | 1270 |
10589
0f7452b1f777
[gaim-migrate @ 11994]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10577
diff
changeset
|
1271 if (!(file = g_fopen(gaim_stringref_value(pathref), "rb"))) { |
7764 | 1272 gaim_stringref_unref(pathref); |
7431 | 1273 return NULL; |
7447 | 1274 } |
7436 | 1275 |
7431 | 1276 while (fgets(buf, BUF_LONG, file)) { |
1277 if ((newlog = strstr(buf, "---- New C"))) { | |
1278 int length; | |
1279 int offset; | |
1280 char convostart[32]; | |
1281 char *temp = strchr(buf, '@'); | |
7436 | 1282 |
7431 | 1283 if (temp == NULL || strlen(temp) < 2) |
1284 continue; | |
7436 | 1285 |
7431 | 1286 temp++; |
1287 length = strcspn(temp, "-"); | |
1288 if (length > 31) length = 31; | |
7436 | 1289 |
7431 | 1290 offset = ftell(file); |
7436 | 1291 |
7761 | 1292 if (logfound) { |
1293 newlen = offset - lastoff - length; | |
7436 | 1294 if(strstr(buf, "----</H3><BR>")) { |
7761 | 1295 newlen -= |
1296 sizeof("<HR><BR><H3 Align=Center> ---- New Conversation @ ") + | |
1297 sizeof("----</H3><BR>") - 2; | |
7436 | 1298 } else { |
7761 | 1299 newlen -= |
1300 sizeof("---- New Conversation @ ") + sizeof("----") - 2; | |
7436 | 1301 } |
1302 | |
7461 | 1303 if(strchr(buf, '\r')) |
7770 | 1304 newlen--; |
7461 | 1305 |
7761 | 1306 if (newlen != 0) { |
13119
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
1307 log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, -1, NULL); |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
1308 log->logger = old_logger; |
7761 | 1309 log->time = lasttime; |
1310 data = g_new0(struct old_logger_data, 1); | |
1311 data->offset = lastoff; | |
1312 data->length = newlen; | |
7764 | 1313 data->pathref = gaim_stringref_ref(pathref); |
7761 | 1314 log->logger_data = data; |
11703
a53cef8bd22b
[gaim-migrate @ 13994]
Richard Laager <rlaager@wiktel.com>
parents:
11698
diff
changeset
|
1315 list = g_list_prepend(list, log); |
7761 | 1316 } |
7431 | 1317 } |
1318 | |
7761 | 1319 logfound = 1; |
1320 lastoff = offset; | |
7436 | 1321 |
7431 | 1322 g_snprintf(convostart, length, "%s", temp); |
7676 | 1323 sscanf(convostart, "%*s %s %d %d:%d:%d %d", |
1324 month, &tm.tm_mday, &tm.tm_hour, &tm.tm_min, &tm.tm_sec, &tm.tm_year); | |
1325 /* Ugly hack, in case current locale is not English */ | |
1326 if (strcmp(month, "Jan") == 0) { | |
1327 tm.tm_mon= 0; | |
1328 } else if (strcmp(month, "Feb") == 0) { | |
1329 tm.tm_mon = 1; | |
1330 } else if (strcmp(month, "Mar") == 0) { | |
1331 tm.tm_mon = 2; | |
1332 } else if (strcmp(month, "Apr") == 0) { | |
1333 tm.tm_mon = 3; | |
1334 } else if (strcmp(month, "May") == 0) { | |
1335 tm.tm_mon = 4; | |
1336 } else if (strcmp(month, "Jun") == 0) { | |
1337 tm.tm_mon = 5; | |
1338 } else if (strcmp(month, "Jul") == 0) { | |
1339 tm.tm_mon = 6; | |
1340 } else if (strcmp(month, "Aug") == 0) { | |
1341 tm.tm_mon = 7; | |
1342 } else if (strcmp(month, "Sep") == 0) { | |
1343 tm.tm_mon = 8; | |
1344 } else if (strcmp(month, "Oct") == 0) { | |
1345 tm.tm_mon = 9; | |
1346 } else if (strcmp(month, "Nov") == 0) { | |
1347 tm.tm_mon = 10; | |
1348 } else if (strcmp(month, "Dec") == 0) { | |
1349 tm.tm_mon = 11; | |
1350 } | |
1351 tm.tm_year -= 1900; | |
7761 | 1352 lasttime = mktime(&tm); |
4184 | 1353 } |
1354 } | |
7613 | 1355 |
7761 | 1356 if (logfound) { |
1357 if ((newlen = ftell(file) - lastoff) != 0) { | |
13119
fcde3faa1f57
[gaim-migrate @ 15481]
Richard Laager <rlaager@wiktel.com>
parents:
13106
diff
changeset
|
1358 log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, -1, NULL); |
11503
cd0c8830d881
[gaim-migrate @ 13748]
Richard Laager <rlaager@wiktel.com>
parents:
11458
diff
changeset
|
1359 log->logger = old_logger; |
7761 | 1360 log->time = lasttime; |
1361 data = g_new0(struct old_logger_data, 1); | |
1362 data->offset = lastoff; | |
1363 data->length = newlen; | |
7764 | 1364 data->pathref = gaim_stringref_ref(pathref); |
7761 | 1365 log->logger_data = data; |
11703
a53cef8bd22b
[gaim-migrate @ 13994]
Richard Laager <rlaager@wiktel.com>
parents:
11698
diff
changeset
|
1366 list = g_list_prepend(list, log); |
7761 | 1367 } |
7613 | 1368 } |
1369 | |
7764 | 1370 gaim_stringref_unref(pathref); |
7431 | 1371 fclose(file); |
1372 return list; | |
4184 | 1373 } |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4227
diff
changeset
|
1374 |
8898 | 1375 static int old_logger_total_size(GaimLogType type, const char *name, GaimAccount *account) |
8096 | 1376 { |
1377 char *logfile = g_strdup_printf("%s.log", gaim_normalize(account, name)); | |
1378 char *pathstr = g_build_filename(gaim_user_dir(), "logs", logfile, NULL); | |
1379 int size; | |
1380 struct stat st; | |
1381 | |
10589
0f7452b1f777
[gaim-migrate @ 11994]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10577
diff
changeset
|
1382 if (g_stat(pathstr, &st)) |
8096 | 1383 size = 0; |
1384 else | |
1385 size = st.st_size; | |
1386 | |
1387 g_free(logfile); | |
1388 g_free(pathstr); | |
1389 | |
1390 return size; | |
1391 } | |
1392 | |
7616 | 1393 static char * old_logger_read (GaimLog *log, GaimLogReadFlags *flags) |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4227
diff
changeset
|
1394 { |
7431 | 1395 struct old_logger_data *data = log->logger_data; |
10589
0f7452b1f777
[gaim-migrate @ 11994]
Daniel Atallah <daniel.atallah@gmail.com>
parents:
10577
diff
changeset
|
1396 FILE *file = g_fopen(gaim_stringref_value(data->pathref), "rb"); |
10906 | 1397 char *tmp, *read = g_malloc(data->length + 1); |
7431 | 1398 fseek(file, data->offset, SEEK_SET); |
1399 fread(read, data->length, 1, file); | |
8370 | 1400 fclose(file); |
7431 | 1401 read[data->length] = '\0'; |
7436 | 1402 *flags = 0; |
1403 if(strstr(read, "<BR>")) | |
1404 *flags |= GAIM_LOG_READ_NO_NEWLINE; | |
10906 | 1405 else { |
1406 tmp = g_markup_escape_text(read, -1); | |
1407 g_free(read); | |
1408 read = tmp; | |
1409 } | |
7431 | 1410 return read; |
1411 } | |
4359
5fb47ec9bfe4
[gaim-migrate @ 4625]
Christian Hammond <chipx86@chipx86.com>
parents:
4227
diff
changeset
|
1412 |
7616 | 1413 static int old_logger_size (GaimLog *log) |
7556 | 1414 { |
1415 struct old_logger_data *data = log->logger_data; | |
7616 | 1416 return data ? data->length : 0; |
1417 } | |
1418 | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
1419 static void old_logger_get_log_sets(GaimLogSetCallback cb, GHashTable *sets) |
11025 | 1420 { |
1421 char *log_path = g_build_filename(gaim_user_dir(), "logs", NULL); | |
1422 GDir *log_dir = g_dir_open(log_path, 0, NULL); | |
1423 gchar *name; | |
1424 GaimBlistNode *gnode, *cnode, *bnode; | |
1425 | |
1426 g_free(log_path); | |
1427 if (log_dir == NULL) | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
1428 return; |
11025 | 1429 |
1430 /* Don't worry about the cast, name will be filled with a dynamically allocated data shortly. */ | |
1431 while ((name = (gchar *)g_dir_read_name(log_dir)) != NULL) { | |
1432 size_t len; | |
1433 gchar *ext; | |
1434 GaimLogSet *set; | |
1435 gboolean found = FALSE; | |
1436 | |
1437 /* Unescape the filename. */ | |
1438 name = g_strdup(gaim_unescape_filename(name)); | |
1439 | |
1440 /* Get the (possibly new) length of name. */ | |
1441 len = strlen(name); | |
1442 | |
1443 if (len < 5) { | |
1444 g_free(name); | |
1445 continue; | |
1446 } | |
1447 | |
1448 /* Make sure we're dealing with a log file. */ | |
1449 ext = &name[len - 4]; | |
1450 if (strcmp(ext, ".log")) { | |
1451 g_free(name); | |
1452 continue; | |
1453 } | |
1454 | |
1455 set = g_new0(GaimLogSet, 1); | |
1456 | |
1457 /* Chat for .chat at the end of the name to determine the type. */ | |
1458 *ext = '\0'; | |
1459 set->type = GAIM_LOG_IM; | |
1460 if (len > 9) { | |
1461 char *tmp = &name[len - 9]; | |
1462 if (!strcmp(tmp, ".chat")) { | |
1463 set->type = GAIM_LOG_CHAT; | |
1464 *tmp = '\0'; | |
1465 } | |
1466 } | |
1467 | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
1468 set->name = set->normalized_name = name; |
11025 | 1469 |
1470 /* Search the buddy list to find the account and to determine if this is a buddy. */ | |
1471 for (gnode = gaim_get_blist()->root; !found && gnode != NULL; gnode = gnode->next) | |
1472 { | |
1473 if (!GAIM_BLIST_NODE_IS_GROUP(gnode)) | |
1474 continue; | |
1475 | |
1476 for (cnode = gnode->child; !found && cnode != NULL; cnode = cnode->next) | |
1477 { | |
1478 if (!GAIM_BLIST_NODE_IS_CONTACT(cnode)) | |
1479 continue; | |
1480 | |
1481 for (bnode = cnode->child; !found && bnode != NULL; bnode = bnode->next) | |
1482 { | |
1483 GaimBuddy *buddy = (GaimBuddy *)bnode; | |
1484 | |
1485 if (!strcmp(buddy->name, name)) { | |
1486 set->account = buddy->account; | |
1487 set->buddy = TRUE; | |
1488 found = TRUE; | |
1489 } | |
1490 } | |
1491 } | |
1492 } | |
1493 | |
11177
3924db2b1ca8
[gaim-migrate @ 13285]
Richard Laager <rlaager@wiktel.com>
parents:
11094
diff
changeset
|
1494 cb(sets, set); |
11025 | 1495 } |
1496 g_dir_close(log_dir); | |
1497 } | |
1498 | |
7616 | 1499 static void old_logger_finalize(GaimLog *log) |
1500 { | |
1501 struct old_logger_data *data = log->logger_data; | |
7764 | 1502 gaim_stringref_unref(data->pathref); |
7616 | 1503 g_free(data); |
7556 | 1504 } |