[PATCH 1/2] Add unzip support to divelogs.de exports

subsurface at henrik.synth.no subsurface at henrik.synth.no
Wed Feb 20 10:01:26 PST 2013


From: Henrik Brautaset Aronsen <subsurface at henrik.synth.no>

Finalize divelog.de import, used with Miiko's divelog.de xslt transform

Signed-off-by: Henrik Brautaset Aronsen <subsurface at henrik.synth.no>
---
 file.c    | 14 +++++++++-----
 gtk-gui.c |  2 ++
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/file.c b/file.c
index cdad961..967afb8 100644
--- a/file.c
+++ b/file.c
@@ -62,7 +62,7 @@ out:
 #ifdef LIBZIP
 #include <zip.h>
 
-static void suunto_read(struct zip_file *file, GError **error)
+static void zip_read(struct zip_file *file, GError **error)
 {
 	int size = 1024, n, read = 0;
 	char *mem = malloc(size);
@@ -72,12 +72,12 @@ static void suunto_read(struct zip_file *file, GError **error)
 		size = read * 3 / 2;
 		mem = realloc(mem, size);
 	}
-	parse_xml_buffer(_("SDE file"), mem, read, &dive_table, error);
+	parse_xml_buffer(_("ZIP file"), mem, read, &dive_table, error);
 	free(mem);
 }
 #endif
 
-static int try_to_open_suunto(const char *filename, struct memblock *mem, GError **error)
+static int try_to_open_zip(const char *filename, struct memblock *mem, GError **error)
 {
 	int success = 0;
 #ifdef LIBZIP
@@ -90,7 +90,7 @@ static int try_to_open_suunto(const char *filename, struct memblock *mem, GError
 			struct zip_file *file = zip_fopen_index(zip, index, 0);
 			if (!file)
 				break;
-			suunto_read(file, error);
+			zip_read(file, error);
 			zip_fclose(file);
 			success++;
 		}
@@ -225,7 +225,11 @@ static int open_by_filename(const char *filename, const char *fmt, struct memblo
 {
 	/* Suunto Dive Manager files: SDE */
 	if (!strcasecmp(fmt, "SDE"))
-		return try_to_open_suunto(filename, mem, error);
+		return try_to_open_zip(filename, mem, error);
+
+	/* divelogs.de files: divelogsData.zip */
+	if (!strcasecmp(fmt, "ZIP"))
+		return try_to_open_zip(filename, mem, error);
 
 	/* Truly nasty intentionally obfuscated Cochran Anal software */
 	if (!strcasecmp(fmt, "CAN"))
diff --git a/gtk-gui.c b/gtk-gui.c
index 40954ba..65a308c 100644
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -126,6 +126,8 @@ static GtkFileFilter *setup_filter(void)
 #ifdef LIBZIP
 	gtk_file_filter_add_pattern(filter, "*.sde");
 	gtk_file_filter_add_pattern(filter, "*.SDE");
+	gtk_file_filter_add_pattern(filter, "*.zip");
+	gtk_file_filter_add_pattern(filter, "*.ZIP");
 #endif
 	gtk_file_filter_add_mime_type(filter, "text/xml");
 	gtk_file_filter_set_name(filter, _("XML file"));
-- 
1.8.1.2



More information about the subsurface mailing list