summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-05 09:39:55 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-05 09:48:11 -0700
commit04c98344b3c50b58dcc62eeb6d13e11030eb662d (patch)
tree1eb1da977bf2d97a39673012e0f83a8a818d8154
parent5f79a804b925a8ffbcf933bb6fae4f764b518c8e (diff)
downloadsubsurface-04c98344b3c50b58dcc62eeb6d13e11030eb662d.tar.gz
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>
-rw-r--r--parse-xml.c8
-rw-r--r--save-xml.c34
2 files changed, 35 insertions, 7 deletions
diff --git a/parse-xml.c b/parse-xml.c
index f68aae67e..393ee0061 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -633,6 +633,10 @@ static void try_to_fill_dive(struct dive *dive, const char *name, char *buf)
return;
if (MATCH(".meandepth", depth, &dive->meandepth))
return;
+ if (MATCH(".depth.max", depth, &dive->maxdepth))
+ return;
+ if (MATCH(".depth.mean", depth, &dive->meandepth))
+ return;
if (MATCH(".duration", duration, &dive->duration))
return;
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;
if (MATCH(".watertemp", temperature, &dive->watertemp))
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))
return;
if (MATCH(".cylinderendpressure", pressure, &dive->cylinder[0].end))
diff --git a/save-xml.c b/save-xml.c
index ddee64e2d..07b8b8096 100644
--- a/save-xml.c
+++ b/save-xml.c
@@ -125,13 +125,32 @@ static void show_utf8(FILE *f, const char *text, const char *pre, const char *po
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)
{
- show_depth(f, dive->maxdepth, " <maxdepth>", "</maxdepth>\n");
- show_depth(f, dive->meandepth, " <meandepth>", "</meandepth>\n");
- show_temperature(f, dive->airtemp, " <airtemp>", "</airtemp>\n");
- show_temperature(f, dive->watertemp, " <watertemp>", "</watertemp>\n");
- show_duration(f, dive->duration, " <duration>", "</duration>\n");
+ save_depths(f, dive);
+ save_temperatures(f, dive);
show_duration(f, dive->surfacetime, " <surfacetime>", "</surfacetime>\n");
show_utf8(f, dive->location, " <location>","</location>\n");
show_utf8(f, dive->notes, " <notes>","</notes>\n");
@@ -185,9 +204,10 @@ static void save_dive(FILE *f, struct dive *dive)
int i;
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_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_cylinder_info(f, dive);
for (i = 0; i < dive->samples; i++)