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>
This commit is contained in:
Berthold Stoeger 2019-01-13 08:12:47 +02:00 committed by Dirk Hohndel
parent 31eb86c733
commit 1cd0863cca
14 changed files with 58 additions and 36 deletions

View file

@ -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

View file

@ -19,9 +19,9 @@ extern int init_decompression(struct deco_state *ds, struct dive *dive);
/* divelist core logic functions */
extern void process_loaded_dives();
extern 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);
extern 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,
struct dive_table *dives_to_add, struct dive_table *dives_to_remove,
struct trip_table *trips_to_add);
extern char *get_dive_gas_string(const struct dive *dive);