Turn dive depth, temperature and duration into xml attributes

This makes the xml save-file look way nicer: it's both smaller and
better organized.  Using individual xml nodes for random small details
is silly.

The duration even parses exactly the same, because it still ends up
being '.depth.duration' (now it's the 'duration' attribute of the dive
node, it used to be the 'duration' child node of the dive node).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Linus Torvalds 2011-09-05 09:39:55 -07:00
parent 5f79a804b9
commit 04c98344b3
2 changed files with 35 additions and 7 deletions

View file

@ -633,6 +633,10 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf)
return; return;
if (MATCH(".meandepth", depth, &dive->meandepth)) if (MATCH(".meandepth", depth, &dive->meandepth))
return; return;
if (MATCH(".depth.max", depth, &dive->maxdepth))
return;
if (MATCH(".depth.mean", depth, &dive->meandepth))
return;
if (MATCH(".duration", duration, &dive->duration)) if (MATCH(".duration", duration, &dive->duration))
return; return;
if (MATCH(".divetime", duration, &dive->duration)) if (MATCH(".divetime", duration, &dive->duration))
@ -645,6 +649,10 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf)
return; return;
if (MATCH(".watertemp", temperature, &dive->watertemp)) if (MATCH(".watertemp", temperature, &dive->watertemp))
return; return;
if (MATCH(".temperature.air", temperature, &dive->airtemp))
return;
if (MATCH(".temperature.water", temperature, &dive->watertemp))
return;
if (MATCH(".cylinderstartpressure", pressure, &dive->cylinder[0].start)) if (MATCH(".cylinderstartpressure", pressure, &dive->cylinder[0].start))
return; return;
if (MATCH(".cylinderendpressure", pressure, &dive->cylinder[0].end)) if (MATCH(".cylinderendpressure", pressure, &dive->cylinder[0].end))

View file

@ -125,13 +125,32 @@ static void show_utf8(FILE *f, const char *text, const char *pre, const char *po
fputs(post, f); fputs(post, f);
} }
static void save_depths(FILE *f, struct dive *dive)
{
/* What's the point of this dive entry again? */
if (!dive->maxdepth.mm && !dive->meandepth.mm)
return;
fputs(" <depth", f);
show_depth(f, dive->maxdepth, " max='", "'");
show_depth(f, dive->meandepth, " mean='", "'");
fputs(" />\n", f);
}
static void save_temperatures(FILE *f, struct dive *dive)
{
if (!dive->airtemp.mkelvin && !dive->watertemp.mkelvin)
return;
fputs(" <temperature", f);
show_temperature(f, dive->airtemp, " air='", "'");
show_temperature(f, dive->watertemp, " water='", "'");
fputs(" />\n", f);
}
static void save_overview(FILE *f, struct dive *dive) static void save_overview(FILE *f, struct dive *dive)
{ {
show_depth(f, dive->maxdepth, " <maxdepth>", "</maxdepth>\n"); save_depths(f, dive);
show_depth(f, dive->meandepth, " <meandepth>", "</meandepth>\n"); save_temperatures(f, dive);
show_temperature(f, dive->airtemp, " <airtemp>", "</airtemp>\n");
show_temperature(f, dive->watertemp, " <watertemp>", "</watertemp>\n");
show_duration(f, dive->duration, " <duration>", "</duration>\n");
show_duration(f, dive->surfacetime, " <surfacetime>", "</surfacetime>\n"); show_duration(f, dive->surfacetime, " <surfacetime>", "</surfacetime>\n");
show_utf8(f, dive->location, " <location>","</location>\n"); show_utf8(f, dive->location, " <location>","</location>\n");
show_utf8(f, dive->notes, " <notes>","</notes>\n"); show_utf8(f, dive->notes, " <notes>","</notes>\n");
@ -185,9 +204,10 @@ static void save_dive(FILE *f, struct dive *dive)
int i; int i;
struct tm *tm = gmtime(&dive->when); struct tm *tm = gmtime(&dive->when);
fprintf(f, "<dive date='%04u-%02u-%02u' time='%02u:%02u:%02u'>\n", fprintf(f, "<dive date='%04u-%02u-%02u' time='%02u:%02u:%02u' duration='%u:%02u min'>\n",
tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday, tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec); tm->tm_hour, tm->tm_min, tm->tm_sec,
FRACTION(dive->duration.seconds, 60));
save_overview(f, dive); save_overview(f, dive);
save_cylinder_info(f, dive); save_cylinder_info(f, dive);
for (i = 0; i < dive->samples; i++) for (i = 0; i < dive->samples; i++)