diff options
author | Miika Turkia <miika.turkia@gmail.com> | 2014-11-09 20:03:45 +0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-11-10 12:17:32 -0800 |
commit | 9cf7a5d9682414a72488defbc3a1e30a9fe9e25a (patch) | |
tree | e767e56440f71a01c80e0830212ffc6be470adcb | |
parent | 77220cd2c59eaf3f9cbd50cf0731ae6024ea3270 (diff) | |
download | subsurface-9cf7a5d9682414a72488defbc3a1e30a9fe9e25a.tar.gz |
Use the new extra data interface for Poseidon import
Rather than overflowing the notes field, let's add all the details from
DC using the extra data API.
Signed-off-by: Miika Turkia <miika.turkia@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | file.c | 33 |
1 files changed, 30 insertions, 3 deletions
@@ -432,6 +432,22 @@ char *parse_mkvi_value(const char *haystack, const char *needle) return ret; } +char *next_mkvi_key(const char *haystack) +{ + char *valueptr, *endptr, *ret = NULL; + + if ((valueptr = strstr(haystack, "\n")) != NULL) { + valueptr += 1; + } + if ((endptr = strstr(valueptr, ": ")) != NULL) { + *endptr = 0; + ret = strdup(valueptr); + *endptr = ':'; + + } + return ret; +} + int parse_txt_file(const char *filename, const char *csv) { struct memblock memtxt, memcsv; @@ -449,7 +465,7 @@ int parse_txt_file(const char *filename, const char *csv) int hh = 0, mm = 0, ss = 0; int prev_depth = 0, cur_sampletime = 0, prev_setpoint = -1; bool has_depth = false, has_setpoint = false; - char *lineptr; + char *lineptr, *key, *value; int diluent_pressure = 0, cylinder_pressure = 0, cur_cylinder_index = 0; struct dive *dive; @@ -492,8 +508,19 @@ int parse_txt_file(const char *filename, const char *csv) cur_cylinder_index++; lineptr = strstr(memtxt.buffer, "Dive started at"); - if (lineptr) - dive->notes = strdup(lineptr); + while (lineptr && *lineptr && (lineptr = strchr(lineptr, '\n')) && ++lineptr) { + key = next_mkvi_key(lineptr); + if (!key) + break; + value = parse_mkvi_value(lineptr, key); + if (!value) { + free(key); + break; + } + add_extra_data(&dive->dc, key, value); + free(key); + free(value); + } dc = &dive->dc; /* |