summaryrefslogtreecommitdiffstats
path: root/load-git.c
diff options
context:
space:
mode:
Diffstat (limited to 'load-git.c')
-rw-r--r--load-git.c44
1 files changed, 42 insertions, 2 deletions
diff --git a/load-git.c b/load-git.c
index a8304a0af..e80a72d58 100644
--- a/load-git.c
+++ b/load-git.c
@@ -503,9 +503,49 @@ static void parse_dc_time(char *line, struct membuffer *str, void *_dc)
static void parse_dc_watertemp(char *line, struct membuffer *str, void *_dc)
{ struct divecomputer *dc = _dc; dc->watertemp = get_temperature(line); }
-/* FIXME! Events not parsed */
+static void parse_event_keyvalue(void *_event, const char *key, const char *value)
+{
+ struct event *event = _event;
+ int val = atoi(value);
+
+ if (!strcmp(key, "type")) {
+ event->type = val;
+ } else if (!strcmp(key, "flags")) {
+ event->flags = val;
+ } else if (!strcmp(key, "value")) {
+ event->value = val;
+ } else if (!strcmp(key, "name")) {
+ /* We get the name from the string handling */
+ } else
+ report_error("Unexpected event key/value pair (%s/%s)", key, value);
+}
+
static void parse_dc_event(char *line, struct membuffer *str, void *_dc)
-{ }
+{
+ int m, s;
+ const char *name;
+ struct divecomputer *dc = _dc;
+ struct event event = { 0 };
+
+ m = strtol(line, &line, 10);
+ if (*line == ':')
+ s = strtol(line+1, &line, 10);
+ event.time.seconds = m*60+s;
+
+ for (;;) {
+ char c;
+ while (isspace(c = *line))
+ line++;
+ if (!c)
+ break;
+ line = parse_keyvalue_entry(parse_event_keyvalue, &event, line);
+ }
+
+ name = "";
+ if (str->len)
+ name = mb_cstring(str);
+ add_event(dc, event.time.seconds, event.type, event.flags, event.value, name);
+}
static void parse_trip_date(char *line, struct membuffer *str, void *_trip)
{ dive_trip_t *trip = _trip; update_date(&trip->when, line); }