diff src/filefilter.c @ 1309:55ea4962887a

config file format changed to XML save and restore all layout windows save and restore sidebar configuration
author nadvornik
date Sun, 22 Feb 2009 15:35:37 +0000
parents e8f21b91885d
children 8cca18bce950
line wrap: on
line diff
--- a/src/filefilter.c	Sun Feb 22 13:29:49 2009 +0000
+++ b/src/filefilter.c	Sun Feb 22 15:35:37 2009 +0000
@@ -19,6 +19,7 @@
 #include "secure_save.h"
 #include "thumb_standard.h"
 #include "ui_fileops.h"
+#include "rcfile.h"
 
 /*
  *-----------------------------------------------------------------------------
@@ -420,72 +421,73 @@
 	return filter_name_find(file_sidecar_list, name);
 }
 
-void filter_write_list(SecureSaveInfo *ssi)
+void filter_write_list(GString *outstr, gint indent)
 {
 	GList *work;
 
+	write_indent(outstr, indent);
+	g_string_append_printf(outstr, "<filter>\n");
+	indent++;
+
 	work = filter_list;
 	while (work)
 		{
 		FilterEntry *fe = work->data;
 		work = work->next;
 
-		gchar *extensions = escquote_value(fe->extensions);
-		gchar *description = escquote_value(fe->description);
-
-		secure_fprintf(ssi, "file_filter.ext: \"%s%s\" %s %s %d %d %d\n",
-			       (fe->enabled) ? "" : "#",
-			       fe->key, extensions, description, fe->file_class, fe->writable, fe->allow_sidecar);
-		g_free(extensions);
-		g_free(description);
+		write_indent(outstr, indent);
+		g_string_append_printf(outstr, "<file_type\n");
+		indent++;
+		WRITE_CHAR(*fe, key);
+		WRITE_BOOL(*fe, enabled);
+		WRITE_CHAR(*fe, extensions);
+		WRITE_CHAR(*fe, description);
+		WRITE_UINT(*fe, file_class);
+		WRITE_BOOL(*fe, writable);
+		WRITE_BOOL(*fe, allow_sidecar);
+		indent--;
+		write_indent(outstr, indent);
+		g_string_append_printf(outstr, "/>\n");
 		}
+	indent--;
+	write_indent(outstr, indent);
+	g_string_append_printf(outstr, "</filter>\n");
 }
 
-void filter_parse(const gchar *text)
+void filter_load_file_type(const gchar **attribute_names, const gchar **attribute_values)
 {
-	const gchar *p;
-	gchar *key;
-	gchar *ext;
-	gchar *desc;
-	gint enabled = TRUE;
-	guint file_class = FORMAT_CLASS_UNKNOWN;
-	gboolean writable = TRUE;
-	gboolean allow_sidecar = TRUE;
-
-	if (!text || text[0] != '"') return;
-
-	key = quoted_value(text, &p);
-	if (!key) return;
-
-	ext = quoted_value(p, &p);
-	desc = quoted_value(p, &p);
-
-	sscanf(p, "%u %d %d", &file_class, &writable, &allow_sidecar);
-
-	if (file_class >= FILE_FORMAT_CLASSES) file_class = FORMAT_CLASS_UNKNOWN;
+	FilterEntry fe;
+	FilterEntry *old_fe;
+	memset(&fe, 0, sizeof(fe));
+	while (*attribute_names)
+		{
+		const gchar *option = *attribute_names++;
+		const gchar *value = *attribute_values++;
 
-	if (key && key[0] == '#')
-		{
-		gchar *tmp;
-		tmp = g_strdup(key + 1);
-		g_free(key);
-		key = tmp;
-
-		enabled = FALSE;
-		}
+		READ_CHAR(fe, key);
+		READ_BOOL(fe, enabled);
+		READ_CHAR(fe, extensions);
+		READ_CHAR(fe, description);
+		READ_UINT(fe, file_class);
+		READ_BOOL(fe, writable);
+		READ_BOOL(fe, allow_sidecar);
 
-	if (key && strlen(key) > 0 && ext)
+		printf("unknown attribute %s = %s\n", option, value);
+		}
+	if (fe.file_class >= FILE_FORMAT_CLASSES) fe.file_class = FORMAT_CLASS_UNKNOWN;
+	
+	if (fe.key && fe.key[0] != 0)
 		{
-		FilterEntry *fe = filter_get_by_key(key);
+		old_fe = filter_get_by_key(fe.key);
 
-		if (fe != NULL) filter_remove_entry(fe);
-		filter_add(key, desc, ext, file_class, writable, allow_sidecar, enabled);
+		if (old_fe != NULL) filter_remove_entry(old_fe);
+		filter_add(fe.key, fe.description, fe.extensions, fe.file_class, fe.writable, fe.allow_sidecar, fe.enabled);
 		}
+	g_free(fe.key);
+	g_free(fe.extensions);
+	g_free(fe.description);
+}
 
-	g_free(key);
-	g_free(ext);
-	g_free(desc);
-}
 
 /*
  *-----------------------------------------------------------------------------