mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
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:
parent
a6336d13b3
commit
0ce215e0d9
3 changed files with 30 additions and 8 deletions
14
divesite.c
14
divesite.c
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
23
load-git.c
23
load-git.c
|
@ -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); }
|
||||
|
|
Loading…
Reference in a new issue