Mercurial > pidgin.yaz
comparison src/log.c @ 11292:ef9280fdc511
[gaim-migrate @ 13492]
Apparently, users like to know when logging is failing. Who knew?
committer: Tailor Script <tailor@pidgin.im>
| author | Richard Laager <rlaager@wiktel.com> |
|---|---|
| date | Thu, 18 Aug 2005 04:14:07 +0000 |
| parents | bb0d7b719af2 |
| children | 4db38b374d3f |
comparison
equal
deleted
inserted
replaced
| 11291:57fccea36e36 | 11292:ef9280fdc511 |
|---|---|
| 47 | 47 |
| 48 /************************************************************************** | 48 /************************************************************************** |
| 49 * PUBLIC LOGGING FUNCTIONS *********************************************** | 49 * PUBLIC LOGGING FUNCTIONS *********************************************** |
| 50 **************************************************************************/ | 50 **************************************************************************/ |
| 51 | 51 |
| 52 GaimLog *gaim_log_new(GaimLogType type, const char *name, GaimAccount *account, time_t time) | 52 GaimLog *gaim_log_new(GaimLogType type, const char *name, GaimAccount *account, |
| 53 GaimConversation *conv, time_t time) | |
| 53 { | 54 { |
| 54 GaimLog *log = g_new0(GaimLog, 1); | 55 GaimLog *log = g_new0(GaimLog, 1); |
| 55 log->name = g_strdup(gaim_normalize(account, name)); | 56 log->name = g_strdup(gaim_normalize(account, name)); |
| 56 log->account = account; | 57 log->account = account; |
| 58 log->conv = conv; | |
| 57 log->time = time; | 59 log->time = time; |
| 58 log->type = type; | 60 log->type = type; |
| 59 log->logger_data = NULL; | 61 log->logger_data = NULL; |
| 60 log->logger = gaim_log_logger_get(); | 62 log->logger = gaim_log_logger_get(); |
| 61 if (log->logger && log->logger->create) | 63 if (log->logger && log->logger->create) |
| 454 | 456 |
| 455 /**************************************************************************** | 457 /**************************************************************************** |
| 456 * LOGGERS ****************************************************************** | 458 * LOGGERS ****************************************************************** |
| 457 ****************************************************************************/ | 459 ****************************************************************************/ |
| 458 | 460 |
| 459 void gaim_log_common_writer(GaimLog *log, time_t time, const char *ext) | 461 void gaim_log_common_writer(GaimLog *log, const char *ext) |
| 460 { | 462 { |
| 461 char date[64]; | 463 char date[64]; |
| 462 GaimLogCommonLoggerData *data = log->logger_data; | 464 GaimLogCommonLoggerData *data = log->logger_data; |
| 463 | 465 |
| 464 if(!data) { | 466 if (data == NULL) |
| 467 { | |
| 465 /* This log is new */ | 468 /* This log is new */ |
| 466 char *dir, *filename, *path; | 469 char *dir, *filename, *path; |
| 467 | 470 |
| 468 dir = gaim_log_get_log_dir(log->type, log->name, log->account); | 471 dir = gaim_log_get_log_dir(log->type, log->name, log->account); |
| 469 if (dir == NULL) | 472 if (dir == NULL) |
| 480 g_free(filename); | 483 g_free(filename); |
| 481 | 484 |
| 482 log->logger_data = data = g_new0(GaimLogCommonLoggerData, 1); | 485 log->logger_data = data = g_new0(GaimLogCommonLoggerData, 1); |
| 483 | 486 |
| 484 data->file = g_fopen(path, "a"); | 487 data->file = g_fopen(path, "a"); |
| 485 if (!data->file) { | 488 if (data->file == NULL) |
| 489 { | |
| 486 gaim_debug(GAIM_DEBUG_ERROR, "log", | 490 gaim_debug(GAIM_DEBUG_ERROR, "log", |
| 487 "Could not create log file %s\n", path); | 491 "Could not create log file %s\n", path); |
| 492 | |
| 493 if (log->conv != NULL) | |
| 494 gaim_conversation_write(log->conv, NULL, _("Logging of this conversation failed."), | |
| 495 GAIM_MESSAGE_ERROR, time(NULL)); | |
| 496 | |
| 488 g_free(path); | 497 g_free(path); |
| 489 return; | 498 return; |
| 490 } | 499 } |
| 491 g_free(path); | 500 g_free(path); |
| 492 } | 501 } |
| 516 strlen(filename) == 17 + strlen(ext)) { | 525 strlen(filename) == 17 + strlen(ext)) { |
| 517 GaimLog *log; | 526 GaimLog *log; |
| 518 GaimLogCommonLoggerData *data; | 527 GaimLogCommonLoggerData *data; |
| 519 time_t stamp = gaim_str_to_time(filename, FALSE); | 528 time_t stamp = gaim_str_to_time(filename, FALSE); |
| 520 | 529 |
| 521 log = gaim_log_new(type, name, account, stamp); | 530 log = gaim_log_new(type, name, account, NULL, stamp); |
| 522 log->logger = logger; | 531 log->logger = logger; |
| 523 log->logger_data = data = g_new0(GaimLogCommonLoggerData, 1); | 532 log->logger_data = data = g_new0(GaimLogCommonLoggerData, 1); |
| 524 data->path = g_build_filename(path, filename, NULL); | 533 data->path = g_build_filename(path, filename, NULL); |
| 525 list = g_list_append(list, log); | 534 list = g_list_append(list, log); |
| 526 } | 535 } |
| 767 GaimLogCommonLoggerData *data = log->logger_data; | 776 GaimLogCommonLoggerData *data = log->logger_data; |
| 768 | 777 |
| 769 if(!data) { | 778 if(!data) { |
| 770 const char *prpl = | 779 const char *prpl = |
| 771 GAIM_PLUGIN_PROTOCOL_INFO(plugin)->list_icon(log->account, NULL); | 780 GAIM_PLUGIN_PROTOCOL_INFO(plugin)->list_icon(log->account, NULL); |
| 772 gaim_log_common_writer(log, time, ".html"); | 781 gaim_log_common_writer(log, ".html"); |
| 773 | 782 |
| 774 data = log->logger_data; | 783 data = log->logger_data; |
| 775 | 784 |
| 776 /* if we can't write to the file, give up before we hurt ourselves */ | 785 /* if we can't write to the file, give up before we hurt ourselves */ |
| 777 if(!data->file) | 786 if(!data->file) |
| 908 * creating a new file there would result in empty files in the case | 917 * creating a new file there would result in empty files in the case |
| 909 * that you open a convo with someone, but don't say anything. | 918 * that you open a convo with someone, but don't say anything. |
| 910 */ | 919 */ |
| 911 const char *prpl = | 920 const char *prpl = |
| 912 GAIM_PLUGIN_PROTOCOL_INFO(plugin)->list_icon(log->account, NULL); | 921 GAIM_PLUGIN_PROTOCOL_INFO(plugin)->list_icon(log->account, NULL); |
| 913 gaim_log_common_writer(log, time, ".txt"); | 922 gaim_log_common_writer(log, ".txt"); |
| 914 | 923 |
| 915 data = log->logger_data; | 924 data = log->logger_data; |
| 916 | 925 |
| 917 /* if we can't write to the file, give up before we hurt ourselves */ | 926 /* if we can't write to the file, give up before we hurt ourselves */ |
| 918 if(!data->file) | 927 if(!data->file) |
| 1090 | 1099 |
| 1091 if(strchr(buf, '\r')) | 1100 if(strchr(buf, '\r')) |
| 1092 newlen--; | 1101 newlen--; |
| 1093 | 1102 |
| 1094 if (newlen != 0) { | 1103 if (newlen != 0) { |
| 1095 log = gaim_log_new(GAIM_LOG_IM, sn, account, -1); | 1104 log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, -1); |
| 1096 log->logger = &old_logger; | 1105 log->logger = &old_logger; |
| 1097 log->time = lasttime; | 1106 log->time = lasttime; |
| 1098 data = g_new0(struct old_logger_data, 1); | 1107 data = g_new0(struct old_logger_data, 1); |
| 1099 data->offset = lastoff; | 1108 data->offset = lastoff; |
| 1100 data->length = newlen; | 1109 data->length = newlen; |
| 1141 } | 1150 } |
| 1142 } | 1151 } |
| 1143 | 1152 |
| 1144 if (logfound) { | 1153 if (logfound) { |
| 1145 if ((newlen = ftell(file) - lastoff) != 0) { | 1154 if ((newlen = ftell(file) - lastoff) != 0) { |
| 1146 log = gaim_log_new(GAIM_LOG_IM, sn, account, -1); | 1155 log = gaim_log_new(GAIM_LOG_IM, sn, account, NULL, -1); |
| 1147 log->logger = &old_logger; | 1156 log->logger = &old_logger; |
| 1148 log->time = lasttime; | 1157 log->time = lasttime; |
| 1149 data = g_new0(struct old_logger_data, 1); | 1158 data = g_new0(struct old_logger_data, 1); |
| 1150 data->offset = lastoff; | 1159 data->offset = lastoff; |
| 1151 data->length = newlen; | 1160 data->length = newlen; |
