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

@ -1011,7 +1011,7 @@ void DiveLogImportDialog::on_buttonBox_accepted()
}
}
process_imported_dives(&table, &trips, false, false, true);
add_imported_dives(&table, &trips, false, false, true);
Command::clear();
MainWindow::instance()->refreshDisplay();
}