diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2013-02-08 17:48:07 +1100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-02-08 17:48:07 +1100 |
commit | 9846ba9e945c59062463fd43ed09eb73b5a528c8 (patch) | |
tree | 499d3784002a0fbec96e9b7231b888dd9dfbbd6e /statistics.c | |
parent | 5692131a79f2adcfabc30804ccac62e077df402d (diff) | |
download | subsurface-9846ba9e945c59062463fd43ed09eb73b5a528c8.tar.gz |
Duration of a dive is the maximum duration from all divecomputers
So far we always used the duration of the first divecomputer. The same fix
needs to be done for some of the other calculations that always use the
first divecomputer.
This commit also removes some obsolete code from the webservice merging.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'statistics.c')
-rw-r--r-- | statistics.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/statistics.c b/statistics.c index 925eb2856..e0df9c405 100644 --- a/statistics.c +++ b/statistics.c @@ -135,13 +135,14 @@ static void process_temperatures(struct dive *dp, stats_t *stats) static void process_dive(struct dive *dp, stats_t *stats) { int old_tt, sac_time = 0; + int duration = get_duration_in_sec(dp); old_tt = stats->total_time.seconds; - stats->total_time.seconds += dp->dc.duration.seconds; - if (dp->dc.duration.seconds > stats->longest_time.seconds) - stats->longest_time.seconds = dp->dc.duration.seconds; - if (stats->shortest_time.seconds == 0 || dp->dc.duration.seconds < stats->shortest_time.seconds) - stats->shortest_time.seconds = dp->dc.duration.seconds; + stats->total_time.seconds += duration; + if (duration > stats->longest_time.seconds) + stats->longest_time.seconds = duration; + if (stats->shortest_time.seconds == 0 || duration < stats->shortest_time.seconds) + stats->shortest_time.seconds = duration; if (dp->dc.maxdepth.mm > stats->max_depth.mm) stats->max_depth.mm = dp->dc.maxdepth.mm; if (stats->min_depth.mm == 0 || dp->dc.maxdepth.mm < stats->min_depth.mm) @@ -150,14 +151,14 @@ static void process_dive(struct dive *dp, stats_t *stats) process_temperatures(dp, stats); /* Maybe we should drop zero-duration dives */ - if (!dp->dc.duration.seconds) + if (!duration) return; stats->avg_depth.mm = (1.0 * old_tt * stats->avg_depth.mm + - dp->dc.duration.seconds * dp->dc.meandepth.mm) / stats->total_time.seconds; + duration * dp->dc.meandepth.mm) / stats->total_time.seconds; if (dp->sac > 2800) { /* less than .1 cuft/min (2800ml/min) is bogus */ - sac_time = stats->total_sac_time + dp->dc.duration.seconds; + sac_time = stats->total_sac_time + duration; stats->avg_sac.mliter = (1.0 * stats->total_sac_time * stats->avg_sac.mliter + - dp->dc.duration.seconds * dp->sac) / sac_time ; + duration * dp->sac) / sac_time ; if (dp->sac > stats->max_sac.mliter) stats->max_sac.mliter = dp->sac; if (stats->min_sac.mliter == 0 || dp->sac < stats->min_sac.mliter) @@ -421,7 +422,7 @@ static void process_all_dives(struct dive *dive, struct dive **prev_dive) *prev_dive = NULL; memset(&stats, 0, sizeof(stats)); if (dive_table.nr > 0) { - stats.shortest_time.seconds = dive_table.dives[0]->dc.duration.seconds; + stats.shortest_time.seconds = get_duration_in_sec(dive_table.dives[0]); stats.min_depth.mm = dive_table.dives[0]->dc.maxdepth.mm; stats.selection_size = dive_table.nr; } @@ -555,10 +556,10 @@ static void show_single_dive_stats(struct dive *dive) tm.tm_hour, tm.tm_min); set_label(single_w.date, buf); - set_label(single_w.dive_time, _("%d min"), (dive->dc.duration.seconds + 30) / 60); + set_label(single_w.dive_time, _("%d min"), (get_duration_in_sec(dive) + 30) / 60); if (prev_dive) set_label(single_w.surf_intv, - get_time_string(dive->when - (prev_dive->when + prev_dive->dc.duration.seconds), 4)); + get_time_string(dive->when - (prev_dive->when + get_duration_in_sec(prev_dive)), 4)); else set_label(single_w.surf_intv, _("unknown")); value = get_depth_units(dive->dc.maxdepth.mm, &decimals, &unit); |