diff options
author | Robert C. Helling <helling@atdotde.de> | 2020-08-17 22:04:53 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2020-08-24 08:30:00 -0700 |
commit | 62d87e9d25763e81757de417640f464e2bf5a2c0 (patch) | |
tree | 47ad686f6b44f5429340fe47e33198bfc5ed18b6 /qt-models/diveplannermodel.cpp | |
parent | c5b1fd9f5336a8bb4ae048f6f31ac3e3651a5ea3 (diff) | |
download | subsurface-62d87e9d25763e81757de417640f464e2bf5a2c0.tar.gz |
Planner: handle zero length segments when replanning
When setting up a dive for replanning, we ignored zero length segments as those
tend to be generated by gas changes. But it is possible to enter those in the
planner and the replanning should not ignore those. So be
more clever about gas changes. Let's add 10 seconds so we are not at two depths
at the same time and help since add_stop also does not like zero length
segments (it thinks we are trying to replace a waypoint).
Fixes #2901
Signed-off-by: Robert C. Helling <helling@atdotde.de>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-models/diveplannermodel.cpp')
-rw-r--r-- | qt-models/diveplannermodel.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp index ebcbeb51e..bdc79c9e6 100644 --- a/qt-models/diveplannermodel.cpp +++ b/qt-models/diveplannermodel.cpp @@ -128,6 +128,7 @@ void DivePlannerPointsModel::loadFromDive(dive *d) int plansamples = dc->samples <= 100 ? dc->samples : 100; int j = 0; int cylinderid = 0; + last_sp.mbar = 0; for (int i = 0; i < plansamples - 1; i++) { if (dc->last_manual_time.seconds && dc->last_manual_time.seconds > 120 && lasttime.seconds >= dc->last_manual_time.seconds) @@ -145,7 +146,11 @@ void DivePlannerPointsModel::loadFromDive(dive *d) } if (samplecount) { cylinderid = get_cylinderid_at_time(d, dc, lasttime); - if (newtime.seconds - lastrecordedtime.seconds > 10) { + duration_t nexttime = newtime; + ++nexttime.seconds; + if (newtime.seconds - lastrecordedtime.seconds > 10 || cylinderid == get_cylinderid_at_time(d, dc, nexttime)) { + if (newtime.seconds == lastrecordedtime.seconds) + newtime.seconds += 10; current_divemode = get_current_divemode(dc, newtime.seconds - 1, &evd, ¤t_divemode); addStop(depthsum / samplecount, newtime.seconds, cylinderid, last_sp.mbar, true, current_divemode); lastrecordedtime = newtime; |