Fix dive site creation from v2 git storage

Clearly didn't test that part well enough.

Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
Dirk Hohndel 2015-02-12 12:28:54 -08:00
parent a6336d13b3
commit 0ce215e0d9
3 changed files with 30 additions and 8 deletions

View file

@ -67,3 +67,17 @@ uint32_t dive_site_uuid_by_name(const char *name)
return id;
}
/* if the uuid is valid, just get the site, otherwise create it first;
* so you can call this with dive->dive_site_uuid and you'll either get the existing
* dive site or it will create a new one - so make sure you assign the uuid back to
* dive->dive_site_uuid when using this function! */
struct dive_site *get_or_create_dive_site_by_uuid(uint32_t uuid)
{
struct dive_site *ds = get_dive_site_by_uuid(uuid);
if (!ds)
ds = alloc_dive_site();
return ds;
}

View file

@ -60,6 +60,7 @@ struct dive_site *alloc_dive_site();
uint32_t create_dive_site(const char *name);
uint32_t create_dive_site_with_gps(const char *name, degrees_t latitude, degrees_t longitude);
uint32_t dive_site_uuid_by_name(const char *name);
struct dive_site *get_or_create_dive_site_by_uuid(uint32_t uuid);
#ifdef __cplusplus
}

View file

@ -23,13 +23,6 @@ struct keyword_action {
#define ARRAY_SIZE(array) (sizeof(array)/sizeof(array[0]))
extern degrees_t parse_degrees(char *buf, char **end);
static void parse_dive_gps(char *line, struct membuffer *str, void *_dive)
{
struct dive *dive = _dive;
dive->latitude = parse_degrees(line, &line);
dive->longitude = parse_degrees(line, &line);
}
static char *get_utf8(struct membuffer *b)
{
@ -145,8 +138,22 @@ static int get_index(const char *line)
static int get_hex(const char *line)
{ return strtoul(line, NULL, 16); }
static void parse_dive_gps(char *line, struct membuffer *str, void *_dive)
{
struct dive *dive = _dive;
struct dive_site *ds = get_or_create_dive_site_by_uuid(dive->dive_site_uuid);
dive->dive_site_uuid = ds->uuid;
ds->latitude = parse_degrees(line, &line);
ds->longitude = parse_degrees(line, &line);
}
static void parse_dive_location(char *line, struct membuffer *str, void *_dive)
{ struct dive *dive = _dive; dive->location = get_utf8(str); }
{
struct dive *dive = _dive;
struct dive_site *ds = get_or_create_dive_site_by_uuid(dive->dive_site_uuid);
dive->dive_site_uuid = ds->uuid;
ds->name = get_utf8(str);
}
static void parse_dive_divemaster(char *line, struct membuffer *str, void *_dive)
{ struct dive *dive = _dive; dive->divemaster = get_utf8(str); }