diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2018-12-23 16:30:19 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-01-09 20:58:04 -0800 |
commit | 0dfc59f38cf3d75d9c86af51d17bb578b8655f7b (patch) | |
tree | 9a85f8a49856b4f720b7a0bafddd0a00878e1232 | |
parent | 1593f2ebad25244fefabe606b32ee505d4d6087d (diff) | |
download | subsurface-0dfc59f38cf3d75d9c86af51d17bb578b8655f7b.tar.gz |
Import: add merge_all_trips parameter to process_imported_dives()
When importing log-files we generally want to merge trips. But
when downloading and the user chose "generate new trip", that
new trip should not be merged into existing trips.
Therefore, add a "merge_all_trips" parameter to process_imported_dives().
If false only autogenerated trips [via autogroup] will be merged.
In the future we might want to let the user choose if trips
should be merged when importing log-files.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r-- | core/divelist.c | 9 | ||||
-rw-r--r-- | core/divelist.h | 3 | ||||
-rw-r--r-- | desktop-widgets/divelogimportdialog.cpp | 2 | ||||
-rw-r--r-- | desktop-widgets/downloadfromdivecomputer.cpp | 2 | ||||
-rw-r--r-- | desktop-widgets/mainwindow.cpp | 2 | ||||
-rw-r--r-- | desktop-widgets/subsurfacewebservices.cpp | 2 | ||||
-rw-r--r-- | mobile-widgets/qmlmanager.cpp | 2 | ||||
-rw-r--r-- | qt-models/diveimportedmodel.cpp | 2 | ||||
-rw-r--r-- | tests/testmerge.cpp | 8 | ||||
-rw-r--r-- | tests/testrenumber.cpp | 4 |
10 files changed, 22 insertions, 14 deletions
diff --git a/core/divelist.c b/core/divelist.c index 84694da60..f691cd7f1 100644 --- a/core/divelist.c +++ b/core/divelist.c @@ -1655,11 +1655,16 @@ static bool add_trip_to_table(struct dive_trip *trip, struct dive_table *dives_f * 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. + * If merge_all_trips is true, all trips are merged. This is used + * when merging log files. If it is false, only autogenerated trips + * are merged. This is used for download-from-dc. There, if the user + * explicitly asked for a new trip, we don't want to merge into old + * trips. * Note: the dives in import_table and the trips in import_trip_table * are consumed. On return both tables have size 0. */ void process_imported_dives(struct dive_table *import_table, struct trip_table *import_trip_table, - bool prefer_imported, bool downloaded) + bool prefer_imported, bool downloaded, bool merge_all_trips) { int i, j; struct dive_trip *trip_import, *trip_old; @@ -1695,6 +1700,8 @@ void process_imported_dives(struct dive_table *import_table, struct trip_table * */ for (i = 0; i < import_trip_table->nr; i++) { trip_import = import_trip_table->trips[i]; + if (!merge_all_trips && !trip_import->autogen) + continue; for (j = 0; j < trip_table.nr; j++) { trip_old = trip_table.trips[j]; if (trips_overlap(trip_import, trip_old)) { diff --git a/core/divelist.h b/core/divelist.h index 5676b33b6..26bd1b3db 100644 --- a/core/divelist.h +++ b/core/divelist.h @@ -18,7 +18,8 @@ extern int init_decompression(struct deco_state *ds, struct dive *dive); /* divelist core logic functions */ extern void process_loaded_dives(); -extern void process_imported_dives(struct dive_table *import_table, struct trip_table *import_trip_table, bool prefer_imported, bool downloaded); +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); extern char *get_dive_gas_string(const struct dive *dive); extern struct dive **grow_dive_table(struct dive_table *table); diff --git a/desktop-widgets/divelogimportdialog.cpp b/desktop-widgets/divelogimportdialog.cpp index 251f87587..a280a73ee 100644 --- a/desktop-widgets/divelogimportdialog.cpp +++ b/desktop-widgets/divelogimportdialog.cpp @@ -1011,7 +1011,7 @@ void DiveLogImportDialog::on_buttonBox_accepted() } } - process_imported_dives(&table, &trips, false, false); + process_imported_dives(&table, &trips, false, false, true); Command::clear(); MainWindow::instance()->refreshDisplay(); } diff --git a/desktop-widgets/downloadfromdivecomputer.cpp b/desktop-widgets/downloadfromdivecomputer.cpp index 601c0d0d4..50cbe223c 100644 --- a/desktop-widgets/downloadfromdivecomputer.cpp +++ b/desktop-widgets/downloadfromdivecomputer.cpp @@ -525,7 +525,7 @@ void DownloadFromDCWidget::on_ok_clicked() // remember the last downloaded dive (on most dive computers this will be the chronologically // first new dive) and select it again after processing all the dives int uniqId = table->dives[table->nr - 1]->id; - process_imported_dives(table, trips, preferDownloaded(), true); + process_imported_dives(table, trips, preferDownloaded(), true, false); Command::clear(); // after process_imported_dives does any merging or resorting needed, we need // to recreate the model for the dive list so we can select the newest dive diff --git a/desktop-widgets/mainwindow.cpp b/desktop-widgets/mainwindow.cpp index 107590de4..f18c8af7a 100644 --- a/desktop-widgets/mainwindow.cpp +++ b/desktop-widgets/mainwindow.cpp @@ -1714,7 +1714,7 @@ void MainWindow::importFiles(const QStringList fileNames) fileNamePtr = QFile::encodeName(fileNames.at(i)); parse_file(fileNamePtr.data(), &table, &trips); } - process_imported_dives(&table, &trips, false, false); + process_imported_dives(&table, &trips, false, false, true); Command::clear(); refreshDisplay(); } diff --git a/desktop-widgets/subsurfacewebservices.cpp b/desktop-widgets/subsurfacewebservices.cpp index 3e366db58..3a0dfb1e3 100644 --- a/desktop-widgets/subsurfacewebservices.cpp +++ b/desktop-widgets/subsurfacewebservices.cpp @@ -771,7 +771,7 @@ void DivelogsDeWebServices::buttonClicked(QAbstractButton *button) struct dive_table table = { 0 }; struct trip_table trips = { 0 }; parse_file(QFile::encodeName(zipFile.fileName()), &table, &trips); - process_imported_dives(&table, &trips, false, false); + process_imported_dives(&table, &trips, false, false, true); MainWindow::instance()->refreshDisplay(); /* store last entered user/pass in config */ diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp index aadb413cc..337a5f49f 100644 --- a/mobile-widgets/qmlmanager.cpp +++ b/mobile-widgets/qmlmanager.cpp @@ -341,7 +341,7 @@ void QMLManager::mergeLocalRepo() struct dive_table table = { 0 }; struct trip_table trips = { 0 }; parse_file(filename, &table, &trips); - process_imported_dives(&table, &trips, false, false); + process_imported_dives(&table, &trips, false, false, true); } void QMLManager::copyAppLogToClipboard() diff --git a/qt-models/diveimportedmodel.cpp b/qt-models/diveimportedmodel.cpp index d2dca2c9d..3b792ee80 100644 --- a/qt-models/diveimportedmodel.cpp +++ b/qt-models/diveimportedmodel.cpp @@ -157,7 +157,7 @@ void DiveImportedModel::recordDives() delete_dive_from_table(diveTable, j); } - process_imported_dives(diveTable, tripTable, true, true); + process_imported_dives(diveTable, tripTable, true, true, false); } QHash<int, QByteArray> DiveImportedModel::roleNames() const { diff --git a/tests/testmerge.cpp b/tests/testmerge.cpp index 73856804d..7e32ba32e 100644 --- a/tests/testmerge.cpp +++ b/tests/testmerge.cpp @@ -24,9 +24,9 @@ void TestMerge::testMergeEmpty() struct dive_table table = { 0 }; struct trip_table trips = { 0 }; QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test47.xml", &table, &trips), 0); - process_imported_dives(&table, &trips, false, false); + process_imported_dives(&table, &trips, false, false, true); QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test48.xml", &table, &trips), 0); - process_imported_dives(&table, &trips, false, false); + process_imported_dives(&table, &trips, false, false, true); QCOMPARE(save_dives("./testmerge47+48.ssrf"), 0); QFile org(SUBSURFACE_TEST_DATA "/dives/test47+48.xml"); org.open(QFile::ReadOnly); @@ -49,9 +49,9 @@ void TestMerge::testMergeBackwards() struct dive_table table = { 0 }; struct trip_table trips = { 0 }; QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test48.xml", &table, &trips), 0); - process_imported_dives(&table, &trips, false, false); + process_imported_dives(&table, &trips, false, false, true); QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test47.xml", &table, &trips), 0); - process_imported_dives(&table, &trips, false, false); + process_imported_dives(&table, &trips, false, false, true); QCOMPARE(save_dives("./testmerge47+48.ssrf"), 0); QFile org(SUBSURFACE_TEST_DATA "/dives/test47+48.xml"); org.open(QFile::ReadOnly); diff --git a/tests/testrenumber.cpp b/tests/testrenumber.cpp index e69a276ca..e6e802676 100644 --- a/tests/testrenumber.cpp +++ b/tests/testrenumber.cpp @@ -16,7 +16,7 @@ void TestRenumber::testMerge() struct dive_table table = { 0 }; struct trip_table trips = { 0 }; QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test47b.xml", &table, &trip_table), 0); - process_imported_dives(&table, &trips, false, false); + process_imported_dives(&table, &trips, false, false, true); QCOMPARE(dive_table.nr, 1); QCOMPARE(unsaved_changes(), 1); mark_divelist_changed(false); @@ -27,7 +27,7 @@ void TestRenumber::testMergeAndAppend() struct dive_table table = { 0 }; struct trip_table trips = { 0 }; QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test47c.xml", &table, &trip_table), 0); - process_imported_dives(&table, &trips, false, false); + process_imported_dives(&table, &trips, false, false, true); QCOMPARE(dive_table.nr, 2); QCOMPARE(unsaved_changes(), 1); struct dive *d = get_dive(1); |