Import: split process_imported_dives() function

Split the process_imported_dives() function in two:
1) process_imported_dives() processes the dives and generates
   a list of dives and trips to be added and removed.
2) add_imported_dives() calls process_imported_dives() and
   does the actual removal / addition of dives and trips.

The goal is to split preparation and actual work, to
make dive import undo-able.

The code adds extra checks to never merge into the same
dive twice, as this would lead to a double-free() bug.
This should in principle never happen, as dives that
compare equal according to is_same_dive() are merged
in the imported-dives list, but perhaps in some pathologival
corner-cases is_same_dive() turns out to be non-transitive.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2018-12-23 22:08:00 +01:00 committed by Dirk Hohndel
parent fd196f143a
commit 0249e12589
11 changed files with 215 additions and 200 deletions

View file

@ -157,7 +157,7 @@ void DiveImportedModel::recordDives()
delete_dive_from_table(diveTable, j);
}
process_imported_dives(diveTable, tripTable, true, true, false);
add_imported_dives(diveTable, tripTable, true, true, false);
}
QHash<int, QByteArray> DiveImportedModel::roleNames() const {