Mercurial > pidgin
comparison src/log.c @ 7457:8bc33ec515a1
[gaim-migrate @ 8070]
this probably isn't perfect, but it werks good for me
committer: Tailor Script <tailor@pidgin.im>
author | Nathan Walp <nwalp@pidgin.im> |
---|---|
date | Sat, 08 Nov 2003 01:32:49 +0000 |
parents | 6f5918e4f668 |
children | c1ddc403fda4 |
comparison
equal
deleted
inserted
replaced
7456:702fbd2460d7 | 7457:8bc33ec515a1 |
---|---|
26 #include "internal.h" | 26 #include "internal.h" |
27 #include "log.h" | 27 #include "log.h" |
28 #include "prefs.h" | 28 #include "prefs.h" |
29 #include "util.h" | 29 #include "util.h" |
30 | 30 |
31 static GaimLogLogger html_logger; | |
31 static GaimLogLogger txt_logger; | 32 static GaimLogLogger txt_logger; |
32 static GaimLogLogger old_logger; | 33 static GaimLogLogger old_logger; |
33 | 34 |
34 /************************************************************************** | 35 /************************************************************************** |
35 * PUBLIC LOGGING FUNCTIONS *********************************************** | 36 * PUBLIC LOGGING FUNCTIONS *********************************************** |
185 | 186 |
186 void gaim_log_init(void) | 187 void gaim_log_init(void) |
187 { | 188 { |
188 gaim_prefs_add_none("/core/logging"); | 189 gaim_prefs_add_none("/core/logging"); |
189 gaim_prefs_add_string("/core/logging/format", "txt"); | 190 gaim_prefs_add_string("/core/logging/format", "txt"); |
191 gaim_log_logger_add(&html_logger); | |
190 gaim_log_logger_add(&txt_logger); | 192 gaim_log_logger_add(&txt_logger); |
191 gaim_log_logger_add(&old_logger); | 193 gaim_log_logger_add(&old_logger); |
192 gaim_prefs_connect_callback("/core/logging/format", | 194 gaim_prefs_connect_callback("/core/logging/format", |
193 logger_pref_cb, NULL); | 195 logger_pref_cb, NULL); |
194 gaim_prefs_trigger_callback("/core/logging/format"); | 196 gaim_prefs_trigger_callback("/core/logging/format"); |
369 NULL | 371 NULL |
370 }; | 372 }; |
371 #endif | 373 #endif |
372 | 374 |
373 /**************************** | 375 /**************************** |
376 ** HTML LOGGER ************* | |
377 ****************************/ | |
378 | |
379 static void html_logger_write(GaimLog *log, GaimMessageFlags type, | |
380 const char *from, time_t time, const char *message) | |
381 { | |
382 char date[64]; | |
383 if(!log->logger_data) { | |
384 /* This log is new */ | |
385 char *ud = gaim_user_dir(); | |
386 char *guy = g_strdup(gaim_normalize(log->account, gaim_account_get_username(log->account))); | |
387 const char *prpl = GAIM_PLUGIN_PROTOCOL_INFO | |
388 (gaim_find_prpl(gaim_account_get_protocol(log->account)))->list_icon(log->account, NULL); | |
389 char *dir; | |
390 char *filename; | |
391 FILE *file; | |
392 | |
393 strftime(date, sizeof(date), "%Y-%m-%d.%H%M%S.html", localtime(&log->time)); | |
394 | |
395 dir = g_build_filename(ud, "logs", NULL); | |
396 mkdir (dir, S_IRUSR | S_IWUSR | S_IXUSR); | |
397 g_free(dir); | |
398 dir = g_build_filename(ud, "logs", | |
399 prpl, NULL); | |
400 mkdir (dir, S_IRUSR | S_IWUSR | S_IXUSR); | |
401 g_free(dir); | |
402 dir = g_build_filename(ud, "logs", | |
403 prpl, guy, NULL); | |
404 mkdir (dir, S_IRUSR | S_IWUSR | S_IXUSR); | |
405 g_free(dir); | |
406 dir = g_build_filename(ud, "logs", | |
407 prpl, guy, gaim_normalize(log->account, log->name), NULL); | |
408 mkdir (dir, S_IRUSR | S_IWUSR | S_IXUSR); | |
409 g_free(guy); | |
410 | |
411 filename = g_build_filename(dir, date, NULL); | |
412 g_free(dir); | |
413 | |
414 file = fopen(dir, "r"); | |
415 if(!file) | |
416 mkdir(dir, S_IRUSR | S_IWUSR | S_IXUSR); | |
417 else | |
418 fclose(file); | |
419 | |
420 log->logger_data = fopen(filename, "a"); | |
421 if (!log->logger_data) { | |
422 gaim_debug(GAIM_DEBUG_ERROR, "log", "Could not create log file %s\n", filename); | |
423 return; | |
424 } | |
425 g_free(filename); | |
426 strftime(date, sizeof(date), "%Y-%m-%d %H:%M:%S", localtime(&log->time)); | |
427 fprintf(log->logger_data, "<html><head><title>"); | |
428 fprintf(log->logger_data, "Conversation with %s at %s on %s (%s)", | |
429 log->name, date, gaim_account_get_username(log->account), prpl); | |
430 fprintf(log->logger_data, "</title></head><body>"); | |
431 fprintf(log->logger_data, | |
432 "<h3>Conversation with %s at %s on %s (%s)</h3>\n", | |
433 log->name, date, gaim_account_get_username(log->account), prpl); | |
434 } | |
435 strftime(date, sizeof(date), "%H:%M:%S", localtime(&time)); | |
436 fprintf(log->logger_data, "(%s) %s%s %s<br/>\n", date, from ? from : "", from ? ":" : "", message); | |
437 fflush(log->logger_data); | |
438 } | |
439 | |
440 static void html_logger_finalize(GaimLog *log) | |
441 { | |
442 fprintf(log->logger_data, "</body></html>"); | |
443 if (log->logger_data) | |
444 fclose(log->logger_data); | |
445 } | |
446 | |
447 static GList *html_logger_list(const char *sn, GaimAccount *account) | |
448 { | |
449 return log_lister_common(sn, account, ".html", &html_logger); | |
450 } | |
451 | |
452 static char *html_logger_read(GaimLog *log, GaimLogReadFlags *flags) | |
453 { | |
454 char *read, *minus_header; | |
455 *flags = GAIM_LOG_READ_NO_NEWLINE; | |
456 if (!log->logger_data) | |
457 return g_strdup("<font color='red'><b>log->logger_data was NULL!</b></font>"); | |
458 if (g_file_get_contents((char *)log->logger_data, &read, NULL, NULL)) { | |
459 minus_header = strchr(read, '\n'); | |
460 if (!minus_header) | |
461 minus_header = g_strdup(read); | |
462 else | |
463 minus_header = g_strdup(minus_header + 1); | |
464 g_free(read); | |
465 return minus_header; | |
466 } | |
467 return g_strdup(_("<font color='red'><b>Could not read file: %s</b></font>")); | |
468 } | |
469 | |
470 static GaimLogLogger html_logger = { | |
471 N_("HTML"), "html", | |
472 NULL, | |
473 html_logger_write, | |
474 html_logger_finalize, | |
475 html_logger_list, | |
476 html_logger_read | |
477 }; | |
478 | |
479 | |
480 | |
481 | |
482 /**************************** | |
374 ** PLAIN TEXT LOGGER ******* | 483 ** PLAIN TEXT LOGGER ******* |
375 ****************************/ | 484 ****************************/ |
376 | 485 |
377 static void txt_logger_write(GaimLog *log, | 486 static void txt_logger_write(GaimLog *log, |
378 GaimMessageFlags type, | 487 GaimMessageFlags type, |
449 } | 558 } |
450 | 559 |
451 static char *txt_logger_read(GaimLog *log, GaimLogReadFlags *flags) | 560 static char *txt_logger_read(GaimLog *log, GaimLogReadFlags *flags) |
452 { | 561 { |
453 char *read, *minus_header; | 562 char *read, *minus_header; |
563 *flags = 0; | |
454 if (!log->logger_data) | 564 if (!log->logger_data) |
455 return g_strdup("<font color='red'><b>log->logger_data was NULL!</b></font>"); | 565 return g_strdup("<font color='red'><b>log->logger_data was NULL!</b></font>"); |
456 if (g_file_get_contents((char *)log->logger_data, &read, NULL, NULL)) { | 566 if (g_file_get_contents((char *)log->logger_data, &read, NULL, NULL)) { |
457 minus_header = strchr(read, '\n'); | 567 minus_header = strchr(read, '\n'); |
458 if (!minus_header) | 568 if (!minus_header) |