Add unzip support to divelogs.de exports

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

Signed-off-by: Henrik Brautaset Aronsen <subsurface@henrik.synth.no>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Henrik Brautaset Aronsen 2013-02-20 19:01:26 +01:00 committed by Dirk Hohndel
parent f6debdc183
commit 80539614b4
2 changed files with 11 additions and 5 deletions

14
file.c
View file

@ -62,7 +62,7 @@ out:
#ifdef LIBZIP #ifdef LIBZIP
#include <zip.h> #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; int size = 1024, n, read = 0;
char *mem = malloc(size); char *mem = malloc(size);
@ -72,12 +72,12 @@ static void suunto_read(struct zip_file *file, GError **error)
size = read * 3 / 2; size = read * 3 / 2;
mem = realloc(mem, size); 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); free(mem);
} }
#endif #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; int success = 0;
#ifdef LIBZIP #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); struct zip_file *file = zip_fopen_index(zip, index, 0);
if (!file) if (!file)
break; break;
suunto_read(file, error); zip_read(file, error);
zip_fclose(file); zip_fclose(file);
success++; success++;
} }
@ -225,7 +225,11 @@ static int open_by_filename(const char *filename, const char *fmt, struct memblo
{ {
/* Suunto Dive Manager files: SDE */ /* Suunto Dive Manager files: SDE */
if (!strcasecmp(fmt, "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 */ /* Truly nasty intentionally obfuscated Cochran Anal software */
if (!strcasecmp(fmt, "CAN")) if (!strcasecmp(fmt, "CAN"))

View file

@ -126,6 +126,8 @@ static GtkFileFilter *setup_filter(void)
#ifdef LIBZIP #ifdef LIBZIP
gtk_file_filter_add_pattern(filter, "*.sde"); gtk_file_filter_add_pattern(filter, "*.sde");
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 #endif
gtk_file_filter_add_mime_type(filter, "text/xml"); gtk_file_filter_add_mime_type(filter, "text/xml");
gtk_file_filter_set_name(filter, _("XML file")); gtk_file_filter_set_name(filter, _("XML file"));