aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Miika Turkia <miika.turkia@gmail.com>2014-11-09 20:03:45 +0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-11-10 12:17:32 -0800
commit9cf7a5d9682414a72488defbc3a1e30a9fe9e25a (patch)
treee767e56440f71a01c80e0830212ffc6be470adcb
parent77220cd2c59eaf3f9cbd50cf0731ae6024ea3270 (diff)
downloadsubsurface-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.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/file.c b/file.c
index fa684dc5f..685a80b9d 100644
--- a/file.c
+++ b/file.c
@@ -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;
/*