mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
Import and merge GPS data from the webservice
Dive locations marked (and named) via the companion app are downloaded from the webservice, parsed and merged with the existing dives. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
b1db60ba47
commit
c521aec884
4 changed files with 35 additions and 3 deletions
7
dive.c
7
dive.c
|
@ -1209,12 +1209,17 @@ static int max_time(duration_t a, duration_t b)
|
|||
*/
|
||||
static int likely_same_dive(struct dive *a, struct dive *b)
|
||||
{
|
||||
int fuzz, match;
|
||||
int match, fuzz = 20 * 60;
|
||||
|
||||
/* Don't try to merge dives in different trips */
|
||||
if (a->divetrip && b->divetrip && a->divetrip != b->divetrip)
|
||||
return 0;
|
||||
|
||||
/* if one of the dives has no depth and duration this could be
|
||||
* a location marker from the webservice */
|
||||
if ((!a->maxdepth.mm && !a->duration.seconds) ||
|
||||
(!b->maxdepth.mm && !b->duration.seconds))
|
||||
return ((a->when <= b->when + fuzz) && (a->when >= b->when - fuzz));
|
||||
/*
|
||||
* Do some basic sanity testing of the values we
|
||||
* have filled in during 'fixup_dive()'
|
||||
|
|
5
main.c
5
main.c
|
@ -165,7 +165,10 @@ void report_dives(gboolean is_imported, gboolean prefer_imported)
|
|||
struct dive *dive = pp[1];
|
||||
struct dive *merged;
|
||||
|
||||
if (prev->when + prev->duration.seconds < dive->when)
|
||||
/* only try to merge overlapping dives - or if one of the dives has
|
||||
* zero duration (that might be a gps marker from the webservice) */
|
||||
if (prev->duration.seconds && dive->duration.seconds &&
|
||||
prev->when + prev->duration.seconds < dive->when)
|
||||
continue;
|
||||
|
||||
merged = try_to_merge(prev, dive, prefer_imported);
|
||||
|
|
22
parse-xml.c
22
parse-xml.c
|
@ -909,6 +909,22 @@ static degrees_t parse_degrees(char *buf, char **end)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void gps_lat(char *buffer, void *_dive)
|
||||
{
|
||||
char *end;
|
||||
struct dive *dive = _dive;
|
||||
|
||||
dive->latitude = parse_degrees(buffer, &end);
|
||||
}
|
||||
|
||||
static void gps_long(char *buffer, void *_dive)
|
||||
{
|
||||
char *end;
|
||||
struct dive *dive = _dive;
|
||||
|
||||
dive->longitude = parse_degrees(buffer, &end);
|
||||
}
|
||||
|
||||
static void gps_location(char *buffer, void *_dive)
|
||||
{
|
||||
char *end;
|
||||
|
@ -984,8 +1000,14 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf)
|
|||
return;
|
||||
if (MATCH(".gps", gps_location, dive))
|
||||
return;
|
||||
if (MATCH(".latitude", gps_lat, dive))
|
||||
return;
|
||||
if (MATCH(".longitude", gps_long, dive))
|
||||
return;
|
||||
if (MATCH(".location", utf8_string, &dive->location))
|
||||
return;
|
||||
if (MATCH(".name", utf8_string, &dive->location))
|
||||
return;
|
||||
if (MATCH(".suit", utf8_string, &dive->suit))
|
||||
return;
|
||||
if (MATCH(".divesuit", utf8_string, &dive->suit))
|
||||
|
|
|
@ -198,7 +198,9 @@ void webservice_download_dialog(void)
|
|||
result = gtk_dialog_run(GTK_DIALOG(dialog));
|
||||
if (result == GTK_RESPONSE_ACCEPT) {
|
||||
/* apply download */
|
||||
g_message("\napply download should happen here: \n\n %s", state.xmldata);
|
||||
/* g_message("\napply download should happen here: \n\n %s", state.xmldata); */
|
||||
parse_xml_buffer(_("Webservice"), state.xmldata, strlen(state.xmldata), NULL);
|
||||
report_dives(TRUE, FALSE);
|
||||
}
|
||||
download_dialog_release_xml(&state);
|
||||
gtk_widget_destroy(dialog);
|
||||
|
|
Loading…
Reference in a new issue