summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libdivecomputer.c25
-rw-r--r--libdivecomputer.h1
2 files changed, 25 insertions, 1 deletions
diff --git a/libdivecomputer.c b/libdivecomputer.c
index 806ea651f..a10243dd4 100644
--- a/libdivecomputer.c
+++ b/libdivecomputer.c
@@ -216,6 +216,23 @@ static int parse_samples(struct dive **divep, parser_t *parser)
return parser_samples_foreach(parser, sample_cb, divep);
}
+/*
+ * Check if this dive already existed before the import
+ */
+static int find_dive(struct dive *dive, device_data_t *devdata)
+{
+ int i;
+
+ for (i = 0; i < devdata->preexisting; i++) {
+ struct dive *old = dive_table.dives[i];
+
+ if (dive->when != old->when)
+ continue;
+ return 1;
+ }
+ return 0;
+}
+
static int dive_cb(const unsigned char *data, unsigned int size,
const unsigned char *fingerprint, unsigned int fsize,
void *userdata)
@@ -302,15 +319,21 @@ static int dive_cb(const unsigned char *data, unsigned int size,
parser_destroy(parser);
return rc;
}
- record_dive(dive);
parser_destroy(parser);
+
+ /* If we already saw this dive, abort. */
+ if (find_dive(dive, devdata))
+ return 0;
+
+ record_dive(dive);
return 1;
}
static device_status_t import_device_data(device_t *device, device_data_t *devicedata)
{
+ devicedata->preexisting = dive_table.nr;
return device_foreach(device, dive_cb, devicedata);
}
diff --git a/libdivecomputer.h b/libdivecomputer.h
index abb09e2c4..57d274cc6 100644
--- a/libdivecomputer.h
+++ b/libdivecomputer.h
@@ -25,6 +25,7 @@ typedef struct device_data_t {
progressbar_t progress;
device_devinfo_t devinfo;
device_clock_t clock;
+ int preexisting;
} device_data_t;
struct device_list {