[RFC PATCH] Add 'create new trip' option for downloading dives from the dive computer
Linus Torvalds
torvalds at linux-foundation.org
Tue Jul 22 11:05:53 PDT 2014
On Tue, Jul 22, 2014 at 1:00 AM, Martin Gysel <me at bearsh.org> wrote:
>
> I like the idea but why not disable the merging unconditionally in that
> case. I think it's not really intuitive the have an option to create a
> new trip but still allow merging with older dives.
Agreed, it would probably be a good idea to limit merging.
In fact, our old rule of "we can merge dives that are not in a trip
with dives that are in a trip" is probably bogus to begin with, but
the reason we have it is that we actually *do* want to generally merge
newly downloaded dives into existing trips.
So the fix is probably to say "don't merge dives if they have
different trip information, *except* for the special case of a newly
downloaded dive that has no trip data".
Something like the attached patch.
> another option or way to do it would be the create a staging area which
> basically is a special trip which is visible if dives are in it
> otherwise not. from this area the user can edit, move, merge with others
> or delete the dives.
Well, that is basically what that new trip is, except it doesn't
introduce any new artificial grouping, just uses our existing
infrastructure.
Linus
-------------- next part --------------
dive.c | 18 +++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)
diff --git a/dive.c b/dive.c
index acab8ff52b19..856b9c3661de 100644
--- a/dive.c
+++ b/dive.c
@@ -1829,6 +1829,11 @@ static int match_dc_dive(struct divecomputer *a, struct divecomputer *b)
return 0;
}
+static bool new_without_trip(struct dive *a)
+{
+ return a->downloaded && !a->divetrip;
+}
+
/*
* Do we want to automatically try to merge two dives that
* look like they are the same dive?
@@ -1862,9 +1867,16 @@ static int likely_same_dive(struct dive *a, struct dive *b)
{
int match, fuzz = 20 * 60;
- /* Don't try to merge dives in different trips */
- if (a->divetrip && b->divetrip && a->divetrip != b->divetrip)
- return 0;
+ /* Don't try to merge dives with different trip information */
+ if (a->divetrip != b->divetrip) {
+ /*
+ * Exception: if the dive is downloaded without any
+ * explicit trip information, we do want to merge it
+ * with existing old dives even if they have trips.
+ */
+ if (!new_without_trip(a) && !new_without_trip(b))
+ return 0;
+ }
/*
* Do some basic sanity testing of the values we
More information about the subsurface
mailing list