summaryrefslogtreecommitdiffstats
path: root/dive.c
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-02-09 07:41:15 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-02-09 07:41:15 -0800
commitebcbe5aedd6188d2dce0cc9dee37daaaab4e8b05 (patch)
treea163cfaa732ed09ee4ebe3c7e88e32fc81beb9af /dive.c
parentb9865d6bbc30ff4f82ffa17d4a2e3e74bc1054ed (diff)
downloadsubsurface-ebcbe5aedd6188d2dce0cc9dee37daaaab4e8b05.tar.gz
Finish removing accesses to first divecomputer instead of dive
This adds watertemp and airtemp to the dive, populates them in fixup and uses them elsewhere in the code. WARNING: as a sideeffect we now edit the airtemp in the dive, but we never display this in the DIve Info notebook (as that always displays the data from the specific selected divecomputer). This is likely to cause confusion. It's consistent behavior, but... odd. This brings back the desire to have a view of "best data available" for a dive, in addition to the "per divecomputer" view. This would also allow us to consolidate the different pressure graphs we may be getting from different divecomputers (consider the case where you dive with multiple air integrated computers that are connected to different tanks - now we could have one profile with all the correct tank pressure plots overlayed - and the best available (or edited) data in the corresponding Dive Info notebook. This commit also fixes a few remaining accesses to the first divecomputer that fell through the cracks earlier and does a couple of other related cleanups. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'dive.c')
-rw-r--r--dive.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/dive.c b/dive.c
index d66c30826..7db239584 100644
--- a/dive.c
+++ b/dive.c
@@ -469,6 +469,36 @@ static void fixup_duration(struct dive *dive)
dive->duration.seconds = duration;
}
+static void fixup_watertemp(struct dive *dive)
+{
+ struct divecomputer *dc;
+ int sum = 0, nr = 0;
+
+ for_each_dc(dive, dc) {
+ if (dc->watertemp.mkelvin) {
+ sum += dc->watertemp.mkelvin;
+ nr++;
+ }
+ }
+ if (nr)
+ dive->watertemp.mkelvin = (sum + nr / 2) / nr;
+}
+
+static void fixup_airtemp(struct dive *dive)
+{
+ struct divecomputer *dc;
+ int sum = 0, nr = 0;
+
+ for_each_dc(dive, dc) {
+ if (dc->airtemp.mkelvin) {
+ sum += dc->airtemp.mkelvin;
+ nr++;
+ }
+ }
+ if (nr)
+ dive->airtemp.mkelvin = (sum + nr / 2) / nr;
+}
+
/*
* events are stored as a linked list, so the concept of
* "consecutive, identical events" is somewhat hard to
@@ -662,6 +692,8 @@ struct dive *fixup_dive(struct dive *dive)
fixup_surface_pressure(dive);
fixup_meandepth(dive);
fixup_duration(dive);
+ fixup_watertemp(dive);
+ fixup_airtemp(dive);
for_each_dc(dive, dc)
fixup_dive_dc(dive, dc);
@@ -1580,7 +1612,6 @@ struct dive *merge_dives(struct dive *a, struct dive *b, int offset, gboolean pr
MERGE_MAX(res, a, b, rating);
MERGE_TXT(res, a, b, suit);
MERGE_MAX(res, a, b, number);
- res->dc.meandepth.mm = 0;
MERGE_NONZERO(res, a, b, cns);
MERGE_NONZERO(res, a, b, visibility);
merge_equipment(res, a, b);