summaryrefslogtreecommitdiff
path: root/aoview/aoview_log.c
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2009-05-20 09:44:55 -0700
committerKeith Packard <keithp@keithp.com>2009-05-20 09:44:55 -0700
commitaa6d87aeb616dd62f0debaded297232022b4f8bd (patch)
tree3fb8b12bcb2796fdcf7ce1dd16c45fd44176937d /aoview/aoview_log.c
parentb730c8bcbce649cdddba935e1112aaae538bc526 (diff)
Make file handling more general so it can be reused.
The log file handling stuff will be useful for saving eeprom data, so pull it out of the real-time log handling code and make a general interface. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'aoview/aoview_log.c')
-rw-r--r--aoview/aoview_log.c152
1 files changed, 14 insertions, 138 deletions
diff --git a/aoview/aoview_log.c b/aoview/aoview_log.c
index 0afdb64e..2f2b9560 100644
--- a/aoview/aoview_log.c
+++ b/aoview/aoview_log.c
@@ -17,121 +17,25 @@
#include "aoview.h"
-#define LOG_DIR_PATH "/apps/aoview/log_dir"
-#define DEFAULT_LOG "AltOS"
-
-static char *aoview_log_dir;
-static FILE *aoview_log_file;
-static int aoview_log_serial;
-static int aoview_log_sequence;
-static GtkMessageDialog *log_fail_dialog;
-static int aoview_log_failed;
-
-static void
-aoview_log_save_conf(void)
-{
- GConfClient *gconf_client;
-
- gconf_client = gconf_client_get_default();
- if (gconf_client)
- {
- gconf_client_set_string(gconf_client,
- LOG_DIR_PATH,
- aoview_log_dir,
- NULL);
- g_object_unref(G_OBJECT(gconf_client));
- }
-}
-
-static void
-aoview_log_configure(GtkWidget *widget, gpointer data)
-{
- GtkFileChooser *chooser = data;
- aoview_log_dir = gtk_file_chooser_get_filename(chooser);
- aoview_log_save_conf();
- gtk_widget_hide(GTK_WIDGET(chooser));
-}
+static struct aoview_file *aoview_log;
void
aoview_log_new(void)
{
- if (aoview_log_file) {
- fclose(aoview_log_file);
- aoview_log_file = NULL;
- }
- aoview_log_failed = 0;
+ aoview_file_finish(aoview_log);
aoview_state_new();
}
-static void
-aoview_log_new_item(GtkWidget *widget, gpointer data)
-{
- aoview_log_new();
-}
-
void
aoview_log_set_serial(int serial)
{
- aoview_log_serial = serial;
+ aoview_file_set_serial(aoview_log, serial);
}
int
aoview_log_get_serial(void)
{
- return aoview_log_serial;
-}
-
-static void
-aoview_log_open_failed(char *name)
-{
- char *utf8_file;
- utf8_file = g_filename_to_utf8(name, -1, NULL, NULL, NULL);
- if (!utf8_file)
- utf8_file = name;
- gtk_message_dialog_format_secondary_text(log_fail_dialog,
- "\"%s\"", utf8_file);
- if (utf8_file != name)
- g_free(utf8_file);
- gtk_dialog_run(GTK_DIALOG(log_fail_dialog));
- gtk_widget_hide(GTK_WIDGET(log_fail_dialog));
- aoview_log_failed = 1;
-}
-
-static void
-aoview_log_start(void)
-{
- if (!aoview_log_file) {
- char base[50];
- struct tm tm;
- time_t now;
- char *full;
- int r;
-
- now = time(NULL);
- (void) localtime_r(&now, &tm);
- aoview_mkdir(aoview_log_dir);
- for (;;) {
- sprintf(base, "%04d-%02d-%02d-serial-%03d-flight-%03d.log",
- tm.tm_year + 1900,
- tm.tm_mon + 1,
- tm.tm_mday,
- aoview_log_serial,
- aoview_log_sequence);
- full = aoview_fullname(aoview_log_dir, base);
- r = access(full, F_OK);
- if (r < 0) {
- aoview_log_file = fopen(full, "w");
- if (!aoview_log_file)
- aoview_log_open_failed(full);
- else
- setlinebuf(aoview_log_file);
- free(full);
- break;
- }
- free (full);
- aoview_log_sequence++;
- }
- }
+ return aoview_file_get_serial(aoview_log);
}
void
@@ -139,56 +43,28 @@ aoview_log_printf(char *format, ...)
{
va_list ap;
- if (aoview_log_failed)
- return;
- aoview_log_start();
va_start(ap, format);
- vfprintf(aoview_log_file, format, ap);
+ aoview_file_vprintf(aoview_log, format, ap);
va_end(ap);
}
+static void
+aoview_log_new_item(GtkWidget *widget, gpointer data)
+{
+ aoview_file_finish(aoview_log);
+}
+
void
aoview_log_init(GladeXML *xml)
{
- GConfClient *gconf_client;
- char *log_dir = NULL;
- GtkFileChooser *log_chooser_dialog;
- GtkWidget *log_configure_ok;
GtkWidget *log_new;
- g_type_init();
- gconf_client = gconf_client_get_default();
- if (gconf_client)
- {
- log_dir = gconf_client_get_string(gconf_client,
- LOG_DIR_PATH,
- NULL);
- g_object_unref(G_OBJECT(gconf_client));
- }
- if (!log_dir) {
- aoview_log_dir = aoview_fullname(getenv("HOME"), DEFAULT_LOG);
- aoview_log_save_conf();
- } else {
- aoview_log_dir = strdup(log_dir);
- }
+ aoview_log = aoview_file_new("log");
+ assert(aoview_log);
- log_chooser_dialog = GTK_FILE_CHOOSER(glade_xml_get_widget(xml, "log_chooser_dialog"));
- assert(log_chooser_dialog);
- gtk_file_chooser_set_filename(log_chooser_dialog, aoview_log_dir);
-
- log_configure_ok = glade_xml_get_widget(xml, "log_configure_ok");
- assert(log_configure_ok);
-
- g_signal_connect(G_OBJECT(log_configure_ok), "clicked",
- G_CALLBACK(aoview_log_configure),
- log_chooser_dialog);
-
- log_new = glade_xml_get_widget(xml, "ao_log_new");
+ log_new = glade_xml_get_widget(xml, "log_new");
assert(log_new);
g_signal_connect(G_OBJECT(log_new), "activate",
G_CALLBACK(aoview_log_new_item),
NULL);
-
- log_fail_dialog = GTK_MESSAGE_DIALOG(glade_xml_get_widget(xml, "log_fail_dialog"));
- assert(log_fail_dialog);
}