aboutsummaryrefslogtreecommitdiffstats
path: root/dive.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2012-11-10 19:51:03 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2012-11-11 05:17:00 +0100
commit38c79d149db09cbb856e4827ce7a24d742c91917 (patch)
treee828d5d1c93d21cfa44532a6296ce998f7736dd2 /dive.c
parentf53788e5e4066f0ef36041031de6bc2726274fc9 (diff)
downloadsubsurface-38c79d149db09cbb856e4827ce7a24d742c91917.tar.gz
Simplify and clean up dive trip management
This adds a couple of helper functions to manage dive trips ("add_dive_to_trip()" and "remove_dive_from_trip()") and makes those functions do the trip statistics maintenance (trip beginning times, number of dives, etc). This was needed because the dive merge cases for multiple dive computers showed some rather nasty special cases: especially if the new dive information has been loaded into an XML file with trips auto-generated, merging several of these kinds of xml files with multiple dives in several overlapping trips would completely confuse our previous code. In particular, auto-generated trips that had the exact same date as previous trips (because they were generated from the same dive computer) really confused the code that used the trip timestamp to manage the trips. Adding the helper functions allows us to get the general case right without having to have each piece of code that handles trip information having to bother about all the odd rules. It will eventually also allow us to make the dive trip data structures more logical: right now the dive trip list is largely designed around the odd gtk model handling, rather than some more higher-level conceptual relationship with the actual dives. But for now, this keeps all the data structures unchanged, and just modifies them using the new helper functions. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'dive.c')
-rw-r--r--dive.c27
1 files changed, 3 insertions, 24 deletions
diff --git a/dive.c b/dive.c
index 19d3cc5b0..4b894cb48 100644
--- a/dive.c
+++ b/dive.c
@@ -811,30 +811,9 @@ static void pick_and_delete_trip(struct dive *res, struct dive *pick, struct div
dive_trip_t *trip = pick->divetrip;
res->tripflag = tripflag;
- res->divetrip = trip;
-
- /*
- * We may have to change the trip date if we picked an earlier
- * date for the dive that now uses it.
- */
- if (res->when < trip->when)
- trip->when = res->when;
-
- /* Was it the same trip as the removed dive? All good*/
- if (trip == remove->divetrip)
- return;
-
- /* Ok, we're dropping a dive. We may need to fix up the date on it */
- trip = remove->divetrip;
- if (trip->when != remove->when)
- return;
-
- if (next && next->divetrip == trip) {
- trip->when = next->when;
- return;
- }
-
- delete_trip(trip);
+ add_dive_to_trip(res, trip);
+ remove_dive_from_trip(pick);
+ remove_dive_from_trip(remove);
}
/*