aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/divelist.c7
-rw-r--r--core/divelist.h2
-rw-r--r--desktop-widgets/divelogimportdialog.cpp2
-rw-r--r--desktop-widgets/downloadfromdivecomputer.cpp2
-rw-r--r--desktop-widgets/mainwindow.cpp2
-rw-r--r--desktop-widgets/subsurfacewebservices.cpp2
-rw-r--r--mobile-widgets/qmlmanager.cpp5
-rw-r--r--qt-models/diveimportedmodel.cpp2
-rw-r--r--tests/testmerge.cpp8
-rw-r--r--tests/testrenumber.cpp4
10 files changed, 20 insertions, 16 deletions
diff --git a/core/divelist.c b/core/divelist.c
index 71556101c..916da4605 100644
--- a/core/divelist.c
+++ b/core/divelist.c
@@ -1339,10 +1339,13 @@ static bool try_to_merge_into(struct dive *dive_to_add, int idx, bool prefer_imp
* Add imported dive to global dive table. Overlapping dives will
* be merged if possible. If prefer_imported is true, data of the
* new dives are prioritized in such a case.
+ * 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.
* Note: the dives in import_table are consumed! On return import_table
* has size 0.
*/
-void process_imported_dives(struct dive_table *import_table, bool prefer_imported)
+void process_imported_dives(struct dive_table *import_table, bool prefer_imported, bool downloaded)
{
int i, j;
struct dive *old_dive, *merged;
@@ -1356,7 +1359,7 @@ void process_imported_dives(struct dive_table *import_table, bool prefer_importe
/* check if we need a nickname for the divecomputer for newly downloaded dives;
* since we know they all came from the same divecomputer we just check for the
* first one */
- if (import_table->dives[0]->downloaded)
+ if (downloaded)
set_dc_nickname(import_table->dives[0]);
else
/* they aren't downloaded, so record / check all new ones */
diff --git a/core/divelist.h b/core/divelist.h
index 885dbe67f..ac9435356 100644
--- a/core/divelist.h
+++ b/core/divelist.h
@@ -19,7 +19,7 @@ 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, bool prefer_imported);
+extern void process_imported_dives(struct dive_table *import_table, bool prefer_imported, bool downloaded);
extern char *get_dive_gas_string(struct dive *dive);
struct dive **grow_dive_table(struct dive_table *table);
diff --git a/desktop-widgets/divelogimportdialog.cpp b/desktop-widgets/divelogimportdialog.cpp
index 874c33adc..c72f179e4 100644
--- a/desktop-widgets/divelogimportdialog.cpp
+++ b/desktop-widgets/divelogimportdialog.cpp
@@ -1007,7 +1007,7 @@ void DiveLogImportDialog::on_buttonBox_accepted()
}
}
- process_imported_dives(&table, false);
+ process_imported_dives(&table, false, false);
MainWindow::instance()->refreshDisplay();
}
diff --git a/desktop-widgets/downloadfromdivecomputer.cpp b/desktop-widgets/downloadfromdivecomputer.cpp
index 46cb0418b..1e239c378 100644
--- a/desktop-widgets/downloadfromdivecomputer.cpp
+++ b/desktop-widgets/downloadfromdivecomputer.cpp
@@ -506,7 +506,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 = downloadTable.dives[downloadTable.nr - 1]->id;
- process_imported_dives(&downloadTable, preferDownloaded());
+ process_imported_dives(&downloadTable, preferDownloaded(), true);
// 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
MainWindow::instance()->recreateDiveList();
diff --git a/desktop-widgets/mainwindow.cpp b/desktop-widgets/mainwindow.cpp
index 9049b741b..a7e91732b 100644
--- a/desktop-widgets/mainwindow.cpp
+++ b/desktop-widgets/mainwindow.cpp
@@ -1739,7 +1739,7 @@ void MainWindow::importFiles(const QStringList fileNames)
fileNamePtr = QFile::encodeName(fileNames.at(i));
parse_file(fileNamePtr.data(), &table);
}
- process_imported_dives(&table, false);
+ process_imported_dives(&table, false, false);
refreshDisplay();
}
diff --git a/desktop-widgets/subsurfacewebservices.cpp b/desktop-widgets/subsurfacewebservices.cpp
index 693463bf1..db2fece76 100644
--- a/desktop-widgets/subsurfacewebservices.cpp
+++ b/desktop-widgets/subsurfacewebservices.cpp
@@ -769,7 +769,7 @@ void DivelogsDeWebServices::buttonClicked(QAbstractButton *button)
/* parse file and import dives */
struct dive_table table = { 0 };
parse_file(QFile::encodeName(zipFile.fileName()), &table);
- process_imported_dives(&table, false);
+ process_imported_dives(&table, false, false);
MainWindow::instance()->refreshDisplay();
/* store last entered user/pass in config */
diff --git a/mobile-widgets/qmlmanager.cpp b/mobile-widgets/qmlmanager.cpp
index 4927899de..3bd806034 100644
--- a/mobile-widgets/qmlmanager.cpp
+++ b/mobile-widgets/qmlmanager.cpp
@@ -325,8 +325,9 @@ void QMLManager::updateAllGlobalLists()
void QMLManager::mergeLocalRepo()
{
char *filename = NOCLOUD_LOCALSTORAGE;
- parse_file(filename, &dive_table);
- process_imported_dives(false);
+ struct dive_table table = { 0 };
+ parse_file(filename, &table);
+ process_imported_dives(&table, false, false);
}
void QMLManager::copyAppLogToClipboard()
diff --git a/qt-models/diveimportedmodel.cpp b/qt-models/diveimportedmodel.cpp
index ebe803244..6926981d5 100644
--- a/qt-models/diveimportedmodel.cpp
+++ b/qt-models/diveimportedmodel.cpp
@@ -173,7 +173,7 @@ void DiveImportedModel::recordDives()
delete_dive_from_table(&downloadTable, j);
}
- process_imported_dives(diveTable, true);
+ process_imported_dives(diveTable, true, true);
if (autogroup)
autogroup_dives();
}
diff --git a/tests/testmerge.cpp b/tests/testmerge.cpp
index a99fd65e7..4559ad9b9 100644
--- a/tests/testmerge.cpp
+++ b/tests/testmerge.cpp
@@ -23,9 +23,9 @@ void TestMerge::testMergeEmpty()
*/
struct dive_table table = { 0 };
QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test47.xml", &table), 0);
- process_imported_dives(&table, false);
+ process_imported_dives(&table, false, false);
QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test48.xml", &table), 0);
- process_imported_dives(&table, false);
+ process_imported_dives(&table, false, false);
QCOMPARE(save_dives("./testmerge47+48.ssrf"), 0);
QFile org(SUBSURFACE_TEST_DATA "/dives/test47+48.xml");
org.open(QFile::ReadOnly);
@@ -47,9 +47,9 @@ void TestMerge::testMergeBackwards()
*/
struct dive_table table = { 0 };
QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test48.xml", &table), 0);
- process_imported_dives(&table, false);
+ process_imported_dives(&table, false, false);
QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test47.xml", &table), 0);
- process_imported_dives(&table, false);
+ process_imported_dives(&table, false, false);
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 9c409c512..89ce1f8d0 100644
--- a/tests/testrenumber.cpp
+++ b/tests/testrenumber.cpp
@@ -15,7 +15,7 @@ void TestRenumber::testMerge()
{
struct dive_table table = { 0 };
QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test47b.xml", &table), 0);
- process_imported_dives(&table, false);
+ process_imported_dives(&table, false, false);
QCOMPARE(dive_table.nr, 1);
QCOMPARE(unsaved_changes(), 1);
mark_divelist_changed(false);
@@ -25,7 +25,7 @@ void TestRenumber::testMergeAndAppend()
{
struct dive_table table = { 0 };
QCOMPARE(parse_file(SUBSURFACE_TEST_DATA "/dives/test47c.xml", &table), 0);
- process_imported_dives(&table, false);
+ process_imported_dives(&table, false, false);
QCOMPARE(dive_table.nr, 2);
QCOMPARE(unsaved_changes(), 1);
struct dive *d = get_dive(1);