aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--device.h2
-rw-r--r--divecomputer.cpp28
-rw-r--r--save-git.c2
-rw-r--r--save-xml.c2
4 files changed, 28 insertions, 6 deletions
diff --git a/device.h b/device.h
index 9f6ebdcee..9ff2ce23a 100644
--- a/device.h
+++ b/device.h
@@ -9,7 +9,7 @@ extern "C" {
extern struct divecomputer *fake_dc(struct divecomputer *dc);
extern void create_device_node(const char *model, uint32_t deviceid, const char *serial, const char *firmware, const char *nickname);
extern void call_for_each_dc(void *f, void (*callback)(void *, const char *, uint32_t,
- const char *, const char *, const char *));
+ const char *, const char *, const char *), bool select_only);
#ifdef __cplusplus
}
diff --git a/divecomputer.cpp b/divecomputer.cpp
index daea390c2..ac43bd00b 100644
--- a/divecomputer.cpp
+++ b/divecomputer.cpp
@@ -90,14 +90,36 @@ extern "C" bool compareDC(const DiveComputerNode &a, const DiveComputerNode &b)
}
extern "C" void call_for_each_dc (void *f, void (*callback)(void *, const char *, uint32_t,
- const char *, const char *, const char *))
+ const char *, const char *, const char *),
+ bool select_only)
{
QList<DiveComputerNode> values = dcList.dcMap.values();
qSort(values.begin(), values.end(), compareDC);
for (int i = 0; i < values.size(); i++) {
const DiveComputerNode *node = &values.at(i);
- callback(f, node->model.toUtf8().data(), node->deviceId, node->nickName.toUtf8().data(),
- node->serialNumber.toUtf8().data(), node->firmware.toUtf8().data());
+ bool found = false;
+ if (select_only) {
+ int j;
+ struct dive *d;
+ for_each_dive (j, d) {
+ struct divecomputer *dc;
+ if (!d->selected)
+ continue;
+ for_each_dc(d, dc) {
+ if (dc->deviceid == node->deviceId) {
+ found = true;
+ break;
+ }
+ }
+ if (found)
+ break;
+ }
+ } else {
+ found = true;
+ }
+ if (found)
+ callback(f, node->model.toUtf8().data(), node->deviceId, node->nickName.toUtf8().data(),
+ node->serialNumber.toUtf8().data(), node->firmware.toUtf8().data());
}
}
diff --git a/save-git.c b/save-git.c
index 6461366f1..16db95f6c 100644
--- a/save-git.c
+++ b/save-git.c
@@ -821,7 +821,7 @@ static void save_settings(git_repository *repo, struct dir *tree)
put_format(&b, "version %d\n", VERSION);
save_userid(&b);
- call_for_each_dc(&b, save_one_device);
+ call_for_each_dc(&b, save_one_device, false);
cond_put_format(autogroup, &b, "autogroup\n");
blob_insert(repo, tree, &b, "00-Subsurface");
diff --git a/save-xml.c b/save-xml.c
index 58f274722..6fd089f7c 100644
--- a/save-xml.c
+++ b/save-xml.c
@@ -501,7 +501,7 @@ void save_dives_buffer(struct membuffer *b, const bool select_only)
put_format(b, " <userid>%30s</userid>\n", prefs.userid);
/* save the dive computer nicknames, if any */
- call_for_each_dc(b, save_one_device);
+ call_for_each_dc(b, save_one_device, select_only);
if (autogroup)
put_format(b, " <autogroup state='1' />\n");
put_format(b, "</settings>\n");