]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Turn dive depth, temperature and duration into xml attributes
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 5 Sep 2011 16:39:55 +0000 (09:39 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 5 Sep 2011 16:48:11 +0000 (09:48 -0700)
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>
parse-xml.c
save-xml.c

index f68aae67e32f4f5417c1d27a8414b66bb610a5f8..393ee0061069bf1ea361144bff343d6c28dccd57 100644 (file)
@@ -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))
index ddee64e2d1bfd13e97e118863f922eda4fef42d6..07b8b80969d25f28616499083b8aab452127fd22 100644 (file)
@@ -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++)