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)