diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-01-13 08:12:47 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-01-19 13:48:17 -0800 |
commit | 1cd0863cca678cf54dfa8a71f3ca9f94bfc4f693 (patch) | |
tree | 6c93ffdab364c718bb9876ee9ac463b773e8ea5d /core/divelist.c | |
parent | 31eb86c73365deefc2bcf51f7ad86bf4ba314379 (diff) | |
download | subsurface-1cd0863cca678cf54dfa8a71f3ca9f94bfc4f693.tar.gz |
Import: add add_to_new_trip flag to process_imported_dives()
If this flag is set, dives that are not assigned to a trip will
be assigned to a new trip. This flag is set if the user checked
"add to new trip" in the download dialog of the desktop version.
Currently this is a no-op as the dives will already have been
added to a new trip by the downloading code. This will be removed
in a subsequent commit.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core/divelist.c')
-rw-r--r-- | core/divelist.c | 53 |
1 files changed, 37 insertions, 16 deletions
diff --git a/core/divelist.c b/core/divelist.c index 99d570065..fc4e58877 100644 --- a/core/divelist.c +++ b/core/divelist.c @@ -1487,7 +1487,7 @@ static bool dive_is_after_last(struct dive *d) /* Merge dives from "dives_from" into "dives_to". Overlapping dives will be merged, * non-overlapping dives will be moved. The results will be added to the "dives_to_add" * table. Dives that were merged are added to the "dives_to_remove" table. - * Any newly added (not merged) dive will be assigned to the trip from the "trip" + * Any newly added (not merged) dive will be assigned to the trip of the "trip" * paremeter. If "delete_from" is non-null dives will be removed from this table. * This function supposes that all input tables are sorted. * Returns true if any dive was added (not merged) that is not past the @@ -1571,7 +1571,8 @@ static bool merge_dive_tables(struct dive_table *dives_from, struct dive_table * * and dive_table "dives_to". If "prefer_imported" is true, dive data of "from" takes * precedence */ void add_imported_dives(struct dive_table *import_table, struct trip_table *import_trip_table, - bool prefer_imported, bool downloaded, bool merge_all_trips) + bool prefer_imported, bool downloaded, bool merge_all_trips, + bool add_to_new_trip) { int i, idx; struct dive_table dives_to_add = { 0 }; @@ -1581,7 +1582,7 @@ void add_imported_dives(struct dive_table *import_table, struct trip_table *impo /* Process imported dives and generate lists of dives * to-be-added and to-be-removed */ process_imported_dives(import_table, import_trip_table, - prefer_imported, downloaded, merge_all_trips, + prefer_imported, downloaded, merge_all_trips, add_to_new_trip, &dives_to_add, &dives_to_remove, &trips_to_add); /* Add new dives to trip, so that trips don't get deleted @@ -1625,7 +1626,7 @@ void add_imported_dives(struct dive_table *import_table, struct trip_table *impo * The bool pointed to by "sequence_changed" is set to true, if the sequence of * the existing dives changes. * The int pointed to by "start_renumbering_at" keeps track of the first dive - * to be renumbered. + * to be renumbered in the dives_to_add table. * For other parameters see process_imported_dives() * Returns true if trip was merged. In this case, the trip will be * freed. @@ -1669,21 +1670,22 @@ bool try_to_merge_trip(struct dive_trip *trip_import, struct dive_table *import_ * *not* be part of the trip. The caller has to add them to the trip. * * The lists are generated by merging dives if possible. This is - * performed trip-wise. If prefer_imported is true, data of the - * new dives are prioritized in such a case. If merge_all_trips is + * performed trip-wise. If "prefer_imported" is true, data of the + * new dives are prioritized in such a case. If "merge_all_trips" is * true, all overlapping trips will be merged, not only non-autogenerated - * trips. If downloaded is true, only the divecomputer of the first dive + * trips. If "downloaded" is true, only the divecomputer of the first dive * will be considered, as it is assumed that all dives come from - * the same computer. + * the same computer. If "add_to_new_trip" is true, dives that are not + * assigned to a trip will be added to a newly generated trip. */ void process_imported_dives(struct dive_table *import_table, struct trip_table *import_trip_table, - bool prefer_imported, bool downloaded, bool merge_all_trips, + bool prefer_imported, bool downloaded, bool merge_all_trips, bool add_to_new_trip, /* output parameters: */ struct dive_table *dives_to_add, struct dive_table *dives_to_remove, struct trip_table *trips_to_add) { int i, nr, start_renumbering_at = 0; - struct dive_trip *trip_import; + struct dive_trip *trip_import, *new_trip; int preexisting; bool sequence_changed = false; bool new_dive_has_number = false; @@ -1721,8 +1723,10 @@ void process_imported_dives(struct dive_table *import_table, struct trip_table * sort_dive_table(import_table); merge_imported_dives(import_table); - /* Autogroup dives if desired by user. */ - autogroup_dives(import_table, import_trip_table); + /* Autogroup tripless dives if desired by user. But don't autogroup + * if tripless dives should be added to a new trip. */ + if (!add_to_new_trip) + autogroup_dives(import_table, import_trip_table); preexisting = dive_table.nr; /* Remember old size for renumbering */ @@ -1756,10 +1760,27 @@ void process_imported_dives(struct dive_table *import_table, struct trip_table * } import_trip_table->nr = 0; /* All trips were consumed */ - /* The remaining dives in import_table are those that don't belong to - * a trip. Merge them into the global table. */ - sequence_changed |= merge_dive_tables(import_table, NULL, &dive_table, prefer_imported, NULL, - dives_to_add, dives_to_remove, &start_renumbering_at); + if (add_to_new_trip && import_table->nr > 0) { + /* Create a new trip for unassigned dives, if desired. */ + new_trip = create_trip_from_dive(import_table->dives[0]); + insert_trip(new_trip, trips_to_add); + + /* Add all remaining dives to this trip */ + for (i = 0; i < import_table->nr; i++) { + struct dive *d = import_table->dives[i]; + d->divetrip = new_trip; + insert_dive(dives_to_add, d); + sequence_changed |= !dive_is_after_last(d); + } + + import_table->nr = 0; /* All dives were consumed */ + } else if (import_table->nr > 0) { + /* The remaining dives in import_table are those that don't belong to + * a trip and the caller does not want them to be associated to a + * new trip. Merge them into the global table. */ + sequence_changed |= merge_dive_tables(import_table, NULL, &dive_table, prefer_imported, NULL, + dives_to_add, dives_to_remove, &start_renumbering_at); + } /* If new dives were only added at the end, renumber the added dives. * But only if |