From 3b9e0b59311908f6cbc099f3b7fd5294fd5d0d30 Mon Sep 17 00:00:00 2001 From: Berthold Stoeger Date: Sun, 18 Nov 2018 11:06:24 +0100 Subject: [PATCH] Core: remove ASSIGNED_TRIP trip flag The distinction between ASSIGNED_TRIP and IN_TRIP was used to prefer non-autogenerated trips on merging of dives. But owing to bit rot this seem to have worked only partially anyway: The IN_TRIP field was set in create_and_hookup_trip_from_dive() and immediately overwritten in add_dive_to_trip() called in the next line. Instead, use the trip->autogen flag to check for priority and remove the ASSIGNED_TRIP flag alltogether. Signed-off-by: Berthold Stoeger --- core/dive.c | 21 +++++++++------------ core/dive.h | 1 - core/divelist.c | 3 +-- core/parse.c | 4 +--- 4 files changed, 11 insertions(+), 18 deletions(-) diff --git a/core/dive.c b/core/dive.c index d6fba1714..22f88d43f 100644 --- a/core/dive.c +++ b/core/dive.c @@ -2578,24 +2578,21 @@ static const struct dive *get_preferred_trip(const struct dive *a, const struct { dive_trip_t *atrip, *btrip; - /* - * The larger tripflag is more relevant: we prefer - * take manually assigned trips over auto-generated - * ones. - */ - if (a->tripflag > b->tripflag) - return a; - - if (a->tripflag < b->tripflag) - return b; - - /* Otherwise, look at the trip data and pick the "better" one */ + /* If only one dive has a trip, choose that */ atrip = a->divetrip; btrip = b->divetrip; if (!atrip) return b; if (!btrip) return a; + + /* Both dives have a trip - prefer the non-autogenerated one */ + if (atrip->autogen && !btrip->autogen) + return b; + if (!atrip->autogen && btrip->autogen) + return a; + + /* Otherwise, look at the trip data and pick the "better" one */ if (!atrip->location) return b; if (!btrip->location) diff --git a/core/dive.h b/core/dive.h index ef02d3ce6..cc21c3447 100644 --- a/core/dive.h +++ b/core/dive.h @@ -282,7 +282,6 @@ typedef enum { TF_NONE, NO_TRIP, IN_TRIP, - ASSIGNED_TRIP, NUM_TRIPFLAGS } tripflag_t; diff --git a/core/divelist.c b/core/divelist.c index 7f946b039..f887cc82c 100644 --- a/core/divelist.c +++ b/core/divelist.c @@ -896,7 +896,7 @@ void add_dive_to_trip(struct dive *dive, dive_trip_t *trip) remove_dive_from_trip(dive, false); add_dive_to_table(&trip->dives, -1, dive); dive->divetrip = trip; - dive->tripflag = ASSIGNED_TRIP; + dive->tripflag = IN_TRIP; } dive_trip_t *alloc_trip(void) @@ -921,7 +921,6 @@ dive_trip_t *create_and_hookup_trip_from_dive(struct dive *dive) dive_trip = create_trip_from_dive(dive); insert_trip(dive_trip); - dive->tripflag = IN_TRIP; add_dive_to_trip(dive, dive_trip); return dive_trip; } diff --git a/core/parse.c b/core/parse.c index 6f12736a8..8683daed4 100644 --- a/core/parse.c +++ b/core/parse.c @@ -254,10 +254,8 @@ void dive_end(struct parser_state *state) free_dive(state->cur_dive); else record_dive_to_table(state->cur_dive, state->target_table); - if (state->cur_trip) { + if (state->cur_trip) add_dive_to_trip(state->cur_dive, state->cur_trip); - state->cur_dive->tripflag = IN_TRIP; - } state->cur_dive = NULL; state->cur_dc = NULL; state->cur_location.lat.udeg = 0;