mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
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>
This commit is contained in:
parent
1593f2ebad
commit
0dfc59f38c
10 changed files with 22 additions and 14 deletions
|
@ -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)) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue