Mercurial > pidgin.yaz
comparison src/util.c @ 4184:af2eeb7f7cf8
[gaim-migrate @ 4415]
Moves most of the logging functions into their own file, log.c.
committer: Tailor Script <tailor@pidgin.im>
author | Christian Hammond <chipx86@chipx86.com> |
---|---|
date | Fri, 03 Jan 2003 07:53:15 +0000 |
parents | 858822a27529 |
children | aa20cc16dc08 |
comparison
equal
deleted
inserted
replaced
4183:e6810f691393 | 4184:af2eeb7f7cf8 |
---|---|
339 text[cnt] = 0; | 339 text[cnt] = 0; |
340 g_free(cpy); | 340 g_free(cpy); |
341 return cnt; | 341 return cnt; |
342 } | 342 } |
343 | 343 |
344 | |
345 FILE *open_gaim_log_file(const char *name, int *flag) | |
346 { | |
347 char *buf; | |
348 char *buf2; | |
349 char log_all_file[256]; | |
350 struct stat st; | |
351 FILE *fd; | |
352 #ifndef _WIN32 | |
353 int res; | |
354 #endif | |
355 gchar *gaim_dir; | |
356 | |
357 buf = g_malloc(BUF_LONG); | |
358 buf2 = g_malloc(BUF_LONG); | |
359 gaim_dir = gaim_user_dir(); | |
360 | |
361 /* Dont log yourself */ | |
362 strncpy(log_all_file, gaim_dir, 256); | |
363 | |
364 #ifndef _WIN32 | |
365 stat(log_all_file, &st); | |
366 if (!S_ISDIR(st.st_mode)) | |
367 unlink(log_all_file); | |
368 | |
369 fd = fopen(log_all_file, "r"); | |
370 | |
371 if (!fd) { | |
372 res = mkdir(log_all_file, S_IRUSR | S_IWUSR | S_IXUSR); | |
373 if (res < 0) { | |
374 g_snprintf(buf, BUF_LONG, _("Unable to make directory %s for logging"), | |
375 log_all_file); | |
376 do_error_dialog(buf, NULL, GAIM_ERROR); | |
377 g_free(buf); | |
378 g_free(buf2); | |
379 return NULL; | |
380 } | |
381 } else | |
382 fclose(fd); | |
383 | |
384 g_snprintf(log_all_file, 256, "%s" G_DIR_SEPARATOR_S "logs", gaim_dir); | |
385 | |
386 if (stat(log_all_file, &st) < 0) | |
387 *flag = 1; | |
388 if (!S_ISDIR(st.st_mode)) | |
389 unlink(log_all_file); | |
390 | |
391 fd = fopen(log_all_file, "r"); | |
392 if (!fd) { | |
393 res = mkdir(log_all_file, S_IRUSR | S_IWUSR | S_IXUSR); | |
394 if (res < 0) { | |
395 g_snprintf(buf, BUF_LONG, _("Unable to make directory %s for logging"), | |
396 log_all_file); | |
397 do_error_dialog(buf, NULL, GAIM_ERROR); | |
398 g_free(buf); | |
399 g_free(buf2); | |
400 return NULL; | |
401 } | |
402 } else | |
403 fclose(fd); | |
404 #else /* _WIN32 */ | |
405 g_snprintf(log_all_file, 256, "%s" G_DIR_SEPARATOR_S "logs", gaim_dir); | |
406 | |
407 if( _mkdir(log_all_file) < 0 && errno != EEXIST ) { | |
408 g_snprintf(buf, BUF_LONG, _("Unable to make directory %s for logging"), log_all_file); | |
409 do_error_dialog(buf, NULL, GAIM_ERROR); | |
410 g_free(buf); | |
411 g_free(buf2); | |
412 return NULL; | |
413 } | |
414 #endif | |
415 | |
416 g_snprintf(log_all_file, 256, "%s" G_DIR_SEPARATOR_S "logs" G_DIR_SEPARATOR_S "%s", gaim_dir, name); | |
417 if (stat(log_all_file, &st) < 0) | |
418 *flag = 1; | |
419 | |
420 debug_printf("Logging to: \"%s\"\n", log_all_file); | |
421 | |
422 fd = fopen(log_all_file, "a"); | |
423 | |
424 g_free(buf); | |
425 g_free(buf2); | |
426 return fd; | |
427 } | |
428 | |
429 FILE *open_log_file(const char *name, int is_chat) | |
430 { | |
431 struct stat st; | |
432 char realname[256]; | |
433 struct log_conversation *l; | |
434 FILE *fd; | |
435 int flag = 0; | |
436 | |
437 if (((is_chat == 2) && !(logging_options & OPT_LOG_INDIVIDUAL)) | |
438 || ((is_chat == 1) && !(logging_options & OPT_LOG_CHATS)) | |
439 || ((is_chat == 0) && !(logging_options & OPT_LOG_CONVOS))) { | |
440 | |
441 l = find_log_info(name); | |
442 if (!l) | |
443 return NULL; | |
444 | |
445 if (stat(l->filename, &st) < 0) | |
446 flag = 1; | |
447 | |
448 fd = fopen(l->filename, "a"); | |
449 | |
450 if (flag) { /* is a new file */ | |
451 if (logging_options & OPT_LOG_STRIP_HTML) { | |
452 fprintf(fd, _("IM Sessions with %s\n"), name); | |
453 } else { | |
454 fprintf(fd, "<HTML><HEAD><TITLE>"); | |
455 fprintf(fd, _("IM Sessions with %s"), name); | |
456 fprintf(fd, "</TITLE></HEAD><BODY BGCOLOR=\"ffffff\">\n"); | |
457 } | |
458 } | |
459 | |
460 return fd; | |
461 } | |
462 | |
463 g_snprintf(realname, sizeof(realname), "%s.log", normalize(name)); | |
464 fd = open_gaim_log_file(realname, &flag); | |
465 | |
466 if (fd && flag) { /* is a new file */ | |
467 if (logging_options & OPT_LOG_STRIP_HTML) { | |
468 fprintf(fd, _("IM Sessions with %s\n"), name); | |
469 } else { | |
470 fprintf(fd, "<HTML><HEAD><TITLE>"); | |
471 fprintf(fd, _("IM Sessions with %s"), name); | |
472 fprintf(fd, "</TITLE></HEAD><BODY BGCOLOR=\"ffffff\">\n"); | |
473 } | |
474 } | |
475 | |
476 return fd; | |
477 } | |
478 | |
479 FILE *open_system_log_file(char *name) | |
480 { | |
481 int x; | |
482 | |
483 if (name) | |
484 return open_log_file(name, 2); | |
485 else | |
486 return open_gaim_log_file("system", &x); | |
487 } | |
488 | 344 |
489 const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" "0123456789+/"; | 345 const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" "0123456789+/"; |
490 | 346 |
491 /* XXX Find bug */ | 347 /* XXX Find bug */ |
492 char *tobase64(const char *text) | 348 char *tobase64(const char *text) |
984 do_away_message(NULL, message); | 840 do_away_message(NULL, message); |
985 } | 841 } |
986 return; | 842 return; |
987 } | 843 } |
988 | 844 |
989 void system_log(enum log_event what, struct gaim_connection *gc, struct buddy *who, int why) | |
990 { | |
991 FILE *fd; | |
992 char text[256], html[256]; | |
993 | |
994 if ((logging_options & why) != why) | |
995 return; | |
996 | |
997 if (logging_options & OPT_LOG_INDIVIDUAL) { | |
998 if (why & OPT_LOG_MY_SIGNON) | |
999 fd = open_system_log_file(gc ? gc->username : NULL); | |
1000 else | |
1001 fd = open_system_log_file(who->name); | |
1002 } else | |
1003 fd = open_system_log_file(NULL); | |
1004 | |
1005 if (!fd) | |
1006 return; | |
1007 | |
1008 if (why & OPT_LOG_MY_SIGNON) { | |
1009 switch (what) { | |
1010 case log_signon: | |
1011 g_snprintf(text, sizeof(text), "+++ %s (%s) signed on @ %s", | |
1012 gc->username, gc->prpl->name, full_date()); | |
1013 g_snprintf(html, sizeof(html), "<B>%s</B>", text); | |
1014 break; | |
1015 case log_signoff: | |
1016 g_snprintf(text, sizeof(text), "+++ %s (%s) signed off @ %s", | |
1017 gc->username, gc->prpl->name, full_date()); | |
1018 g_snprintf(html, sizeof(html), "<I><FONT COLOR=GRAY>%s</FONT></I>", text); | |
1019 break; | |
1020 case log_away: | |
1021 g_snprintf(text, sizeof(text), "+++ %s (%s) changed away state @ %s", | |
1022 gc->username, gc->prpl->name, full_date()); | |
1023 g_snprintf(html, sizeof(html), "<FONT COLOR=OLIVE>%s</FONT>", text); | |
1024 break; | |
1025 case log_back: | |
1026 g_snprintf(text, sizeof(text), "+++ %s (%s) came back @ %s", | |
1027 gc->username, gc->prpl->name, full_date()); | |
1028 g_snprintf(html, sizeof(html), "%s", text); | |
1029 break; | |
1030 case log_idle: | |
1031 g_snprintf(text, sizeof(text), "+++ %s (%s) became idle @ %s", | |
1032 gc->username, gc->prpl->name, full_date()); | |
1033 g_snprintf(html, sizeof(html), "<FONT COLOR=GRAY>%s</FONT>", text); | |
1034 break; | |
1035 case log_unidle: | |
1036 g_snprintf(text, sizeof(text), "+++ %s (%s) returned from idle @ %s", | |
1037 gc->username, gc->prpl->name, full_date()); | |
1038 g_snprintf(html, sizeof(html), "%s", text); | |
1039 break; | |
1040 case log_quit: | |
1041 g_snprintf(text, sizeof(text), "+++ Program exit @ %s", full_date()); | |
1042 g_snprintf(html, sizeof(html), "<I><FONT COLOR=GRAY>%s</FONT></I>", text); | |
1043 break; | |
1044 } | |
1045 } else if (strcmp(who->name, who->show)) { | |
1046 switch (what) { | |
1047 case log_signon: | |
1048 g_snprintf(text, sizeof(text), "%s (%s) reported that %s (%s) signed on @ %s", | |
1049 gc->username, gc->prpl->name, who->show, who->name, full_date()); | |
1050 g_snprintf(html, sizeof(html), "<B>%s</B>", text); | |
1051 break; | |
1052 case log_signoff: | |
1053 g_snprintf(text, sizeof(text), "%s (%s) reported that %s (%s) signed off @ %s", | |
1054 gc->username, gc->prpl->name, who->show, who->name, full_date()); | |
1055 g_snprintf(html, sizeof(html), "<I><FONT COLOR=GRAY>%s</FONT></I>", text); | |
1056 break; | |
1057 case log_away: | |
1058 g_snprintf(text, sizeof(text), "%s (%s) reported that %s (%s) went away @ %s", | |
1059 gc->username, gc->prpl->name, who->show, who->name, full_date()); | |
1060 g_snprintf(html, sizeof(html), "<FONT COLOR=OLIVE>%s</FONT>", text); | |
1061 break; | |
1062 case log_back: | |
1063 g_snprintf(text, sizeof(text), "%s (%s) reported that %s (%s) came back @ %s", | |
1064 gc->username, gc->prpl->name, who->show, who->name, full_date()); | |
1065 g_snprintf(html, sizeof(html), "%s", text); | |
1066 break; | |
1067 case log_idle: | |
1068 g_snprintf(text, sizeof(text), "%s (%s) reported that %s (%s) became idle @ %s", | |
1069 gc->username, gc->prpl->name, who->show, who->name, full_date()); | |
1070 g_snprintf(html, sizeof(html), "<FONT COLOR=GRAY>%s</FONT>", text); | |
1071 break; | |
1072 case log_unidle: | |
1073 g_snprintf(text, sizeof(text), | |
1074 "%s (%s) reported that %s (%s) returned from idle @ %s", gc->username, | |
1075 gc->prpl->name, who->show, who->name, full_date()); | |
1076 g_snprintf(html, sizeof(html), "%s", text); | |
1077 break; | |
1078 default: | |
1079 fclose(fd); | |
1080 return; | |
1081 break; | |
1082 } | |
1083 } else { | |
1084 switch (what) { | |
1085 case log_signon: | |
1086 g_snprintf(text, sizeof(text), "%s (%s) reported that %s signed on @ %s", | |
1087 gc->username, gc->prpl->name, who->name, full_date()); | |
1088 g_snprintf(html, sizeof(html), "<B>%s</B>", text); | |
1089 break; | |
1090 case log_signoff: | |
1091 g_snprintf(text, sizeof(text), "%s (%s) reported that %s signed off @ %s", | |
1092 gc->username, gc->prpl->name, who->name, full_date()); | |
1093 g_snprintf(html, sizeof(html), "<I><FONT COLOR=GRAY>%s</FONT></I>", text); | |
1094 break; | |
1095 case log_away: | |
1096 g_snprintf(text, sizeof(text), "%s (%s) reported that %s went away @ %s", | |
1097 gc->username, gc->prpl->name, who->name, full_date()); | |
1098 g_snprintf(html, sizeof(html), "<FONT COLOR=OLIVE>%s</FONT>", text); | |
1099 break; | |
1100 case log_back: | |
1101 g_snprintf(text, sizeof(text), "%s (%s) reported that %s came back @ %s", | |
1102 gc->username, gc->prpl->name, who->name, full_date()); | |
1103 g_snprintf(html, sizeof(html), "%s", text); | |
1104 break; | |
1105 case log_idle: | |
1106 g_snprintf(text, sizeof(text), "%s (%s) reported that %s became idle @ %s", | |
1107 gc->username, gc->prpl->name, who->name, full_date()); | |
1108 g_snprintf(html, sizeof(html), "<FONT COLOR=GRAY>%s</FONT>", text); | |
1109 break; | |
1110 case log_unidle: | |
1111 g_snprintf(text, sizeof(text), | |
1112 "%s (%s) reported that %s returned from idle @ %s", gc->username, | |
1113 gc->prpl->name, who->name, full_date()); | |
1114 g_snprintf(html, sizeof(html), "%s", text); | |
1115 break; | |
1116 default: | |
1117 fclose(fd); | |
1118 return; | |
1119 break; | |
1120 } | |
1121 } | |
1122 | |
1123 if (logging_options & OPT_LOG_STRIP_HTML) { | |
1124 fprintf(fd, "---- %s ----\n", text); | |
1125 } else { | |
1126 if (logging_options & OPT_LOG_INDIVIDUAL) | |
1127 fprintf(fd, "<HR>%s<BR><HR><BR>\n", html); | |
1128 else | |
1129 fprintf(fd, "%s<BR>\n", html); | |
1130 } | |
1131 | |
1132 fclose(fd); | |
1133 } | |
1134 | |
1135 void strip_linefeed(gchar *text) | 845 void strip_linefeed(gchar *text) |
1136 { | 846 { |
1137 int i, j; | 847 int i, j; |
1138 gchar *text2 = g_malloc(strlen(text) + 1); | 848 gchar *text2 = g_malloc(strlen(text) + 1); |
1139 | 849 |