# include "config.h"
#endif
+#include "defs.h"
+
#include <stdio.h>
#include <glib.h>
-#include "defs.h"
#include "utils.h"
+#include "log.h"
+#include "hooks.h"
static FILE *log_fp = NULL;
+gboolean invoke_hook_cb (gpointer data)
+{
+ LogText *logtext = (LogText *)data;
+ hooks_invoke(LOG_APPEND_TEXT_HOOKLIST, logtext);
+ g_free(logtext->text);
+ g_free(logtext);
+ return FALSE;
+}
+
void set_log_file(const gchar *filename)
{
- if (log_fp) return;
+ if (log_fp)
+ return;
+
+ /* backup old logfile if existing */
+ if (is_file_exist(filename)) {
+ gchar *backupname;
+
+ backupname = g_strconcat(filename, ".bak", NULL);
+ if (rename(filename, backupname) < 0)
+ FILE_OP_ERROR(filename, "rename");
+ g_free(backupname);
+ }
+
log_fp = fopen(filename, "wb");
if (!log_fp)
FILE_OP_ERROR(filename, "fopen");
}
}
-static guint log_verbosity_count = 0;
-
-void log_verbosity_set(gboolean verbose)
-{
- if (verbose)
- log_verbosity_count++;
- else if (log_verbosity_count > 0)
- log_verbosity_count--;
-}
-
-#define TIME_LEN 11
-
void log_print(const gchar *format, ...)
{
va_list args;
- gchar buf[BUFFSIZE + TIME_LEN];
+ gchar buf[BUFFSIZE + LOG_TIME_LEN];
time_t t;
-
+ LogText *logtext = g_new0(LogText, 1);
+
time(&t);
- strftime(buf, TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+ strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
va_start(args, format);
- g_vsnprintf(buf + TIME_LEN, BUFFSIZE, format, args);
+ g_vsnprintf(buf + LOG_TIME_LEN, BUFFSIZE, format, args);
va_end(args);
if (debug_get_mode()) fputs(buf, stdout);
-/* FIXME:
- callback for gui logging
- log_window_append(buf, LOG_NORMAL); */
+ logtext->text = g_strdup(buf);
+ logtext->type = LOG_NORMAL;
+
+ g_timeout_add(0, invoke_hook_cb, logtext);
+
if (log_fp) {
fputs(buf, log_fp);
fflush(log_fp);
}
-/* FIXME:
- callback for gui logging
-
- if (log_verbosity_count)
- statusbar_puts_all(buf + TIME_LEN); */
}
void log_message(const gchar *format, ...)
{
va_list args;
- gchar buf[BUFFSIZE + TIME_LEN];
+ gchar buf[BUFFSIZE + LOG_TIME_LEN];
time_t t;
+ LogText *logtext = g_new0(LogText, 1);
time(&t);
- strftime(buf, TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+ strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
va_start(args, format);
- g_vsnprintf(buf + TIME_LEN, BUFFSIZE, format, args);
+ g_vsnprintf(buf + LOG_TIME_LEN, BUFFSIZE, format, args);
va_end(args);
- if (debug_get_mode()) g_message("%s", buf + TIME_LEN);
-/* FIXME:
- callback for gui logging
+ if (debug_get_mode()) g_message("%s", buf + LOG_TIME_LEN);
+ logtext->text = g_strdup(buf + LOG_TIME_LEN);
+ logtext->type = LOG_MSG;
+
+ g_timeout_add(0, invoke_hook_cb, logtext);
- log_window_append(buf + TIME_LEN, LOG_MSG); */
if (log_fp) {
- fwrite(buf, TIME_LEN, 1, log_fp);
+ fwrite(buf, 1, LOG_TIME_LEN, log_fp);
fputs("* message: ", log_fp);
- fputs(buf + TIME_LEN, log_fp);
+ fputs(buf + LOG_TIME_LEN, log_fp);
fflush(log_fp);
}
-/* FIXME:
- callback for gui logging
-
- statusbar_puts_all(buf + TIME_LEN); */
}
void log_warning(const gchar *format, ...)
{
va_list args;
- gchar buf[BUFFSIZE + TIME_LEN];
+ gchar buf[BUFFSIZE + LOG_TIME_LEN];
time_t t;
+ LogText *logtext = g_new0(LogText, 1);
time(&t);
- strftime(buf, TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+ strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
va_start(args, format);
- g_vsnprintf(buf + TIME_LEN, BUFFSIZE, format, args);
+ g_vsnprintf(buf + LOG_TIME_LEN, BUFFSIZE, format, args);
va_end(args);
g_warning("%s", buf);
-/* FIXME:
- callback for gui logging
+ logtext->text = g_strdup(buf + LOG_TIME_LEN);
+ logtext->type = LOG_WARN;
+
+ g_timeout_add(0, invoke_hook_cb, logtext);
- log_window_append(buf + TIME_LEN, LOG_WARN); */
if (log_fp) {
- fwrite(buf, TIME_LEN, 1, log_fp);
+ fwrite(buf, 1, LOG_TIME_LEN, log_fp);
fputs("** warning: ", log_fp);
- fputs(buf + TIME_LEN, log_fp);
+ fputs(buf + LOG_TIME_LEN, log_fp);
fflush(log_fp);
}
}
void log_error(const gchar *format, ...)
{
va_list args;
- gchar buf[BUFFSIZE + TIME_LEN];
+ gchar buf[BUFFSIZE + LOG_TIME_LEN];
time_t t;
+ LogText *logtext = g_new0(LogText, 1);
time(&t);
- strftime(buf, TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
+ strftime(buf, LOG_TIME_LEN + 1, "[%H:%M:%S] ", localtime(&t));
va_start(args, format);
- g_vsnprintf(buf + TIME_LEN, BUFFSIZE, format, args);
+ g_vsnprintf(buf + LOG_TIME_LEN, BUFFSIZE, format, args);
va_end(args);
g_warning("%s", buf);
-/* FIXME:
- callback for gui logging
+ logtext->text = g_strdup(buf + LOG_TIME_LEN);
+ logtext->type = LOG_ERROR;
+
+ g_timeout_add(0, invoke_hook_cb, logtext);
- log_window_append(buf + TIME_LEN, LOG_ERROR); */
if (log_fp) {
- fwrite(buf, TIME_LEN, 1, log_fp);
+ fwrite(buf, 1, LOG_TIME_LEN, log_fp);
fputs("*** error: ", log_fp);
- fputs(buf + TIME_LEN, log_fp);
+ fputs(buf + LOG_TIME_LEN, log_fp);
fflush(log_fp);
}
}