mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Start handling dive events
Parse them, save them, take them from libdivecomputer. This doesn't merge them or show them in the profile yet, though. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
50c2bb7c71
commit
3a77eb8510
5 changed files with 112 additions and 8 deletions
45
parse-xml.c
45
parse-xml.c
|
@ -92,8 +92,14 @@ const struct units IMPERIAL_units = {
|
|||
*/
|
||||
static struct dive *dive;
|
||||
static struct sample *sample;
|
||||
static struct {
|
||||
int active;
|
||||
duration_t time;
|
||||
int type, flags, value;
|
||||
const char *name;
|
||||
} event;
|
||||
static struct tm tm;
|
||||
static int event_index, cylinder_index;
|
||||
static int cylinder_index;
|
||||
|
||||
static enum import_source {
|
||||
UNKNOWN,
|
||||
|
@ -558,6 +564,32 @@ static int uddf_fill_sample(struct sample *sample, const char *name, int len, ch
|
|||
0;
|
||||
}
|
||||
|
||||
static void eventtime(char *buffer, void *_duration)
|
||||
{
|
||||
duration_t *duration = _duration;
|
||||
sampletime(buffer, duration);
|
||||
if (sample)
|
||||
duration->seconds += sample->time.seconds;
|
||||
}
|
||||
|
||||
static void try_to_fill_event(const char *name, char *buf)
|
||||
{
|
||||
int len = strlen(name);
|
||||
|
||||
start_match("event", name, buf);
|
||||
if (MATCH(".event", utf8_string, &event.name))
|
||||
return;
|
||||
if (MATCH(".name", utf8_string, &event.name))
|
||||
return;
|
||||
if (MATCH(".time", eventtime, &event.time))
|
||||
return;
|
||||
if (MATCH(".type", get_index, &event.type))
|
||||
return;
|
||||
if (MATCH(".flags", get_index, &event.flags))
|
||||
return;
|
||||
nonmatch("event", name, buf);
|
||||
}
|
||||
|
||||
/* We're in samples - try to convert the random xml value to something useful */
|
||||
static void try_to_fill_sample(struct sample *sample, const char *name, char *buf)
|
||||
{
|
||||
|
@ -1137,11 +1169,15 @@ static void dive_end(void)
|
|||
|
||||
static void event_start(void)
|
||||
{
|
||||
memset(&event, 0, sizeof(event));
|
||||
event.active = 1;
|
||||
}
|
||||
|
||||
static void event_end(void)
|
||||
{
|
||||
event_index++;
|
||||
if (event.name)
|
||||
add_event(dive, event.time.seconds, event.type, event.flags, event.value, event.name);
|
||||
event.active = 0;
|
||||
}
|
||||
|
||||
static void cylinder_start(void)
|
||||
|
@ -1156,7 +1192,6 @@ static void cylinder_end(void)
|
|||
static void sample_start(void)
|
||||
{
|
||||
sample = prepare_sample(&dive);
|
||||
event_index = 0;
|
||||
}
|
||||
|
||||
static void sample_end(void)
|
||||
|
@ -1176,6 +1211,10 @@ static void entry(const char *name, int size, const char *raw)
|
|||
return;
|
||||
memcpy(buf, raw, size);
|
||||
buf[size] = 0;
|
||||
if (event.active) {
|
||||
try_to_fill_event(name, buf);
|
||||
return;
|
||||
}
|
||||
if (sample) {
|
||||
try_to_fill_sample(sample, name, buf);
|
||||
return;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue