summaryrefslogtreecommitdiffstats
path: root/save-xml.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2013-01-24 11:42:20 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-01-24 12:59:31 -0800
commit52050fdc921bc6404ae637eee6169b684f62c244 (patch)
tree7c75c55c5cd897a5ad544e110844c5ec30a133e9 /save-xml.c
parent9acb52b9ee01e4f10bfab1462f2cf65505f9e054 (diff)
downloadsubsurface-52050fdc921bc6404ae637eee6169b684f62c244.tar.gz
Save all dive computer nicknames - whether used or not
We used to save dive computer information only if that dive computer was actually used in any of the dives we saved. But we can simplify the code if we just always save any dive computers we know about. And it does allow for some usage cases where you have nicknames for other peoples computers that you may not actively use, but you want to see if you end up loading multiple XML files in one go. So there's just no compelling reason to not just save all the info we have. And this will make it less painful to remove the "use system config for dive computer nicknames", because you can also use this to continue to gather dive computer info in a separate XML file if you want to. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'save-xml.c')
-rw-r--r--save-xml.c33
1 files changed, 15 insertions, 18 deletions
diff --git a/save-xml.c b/save-xml.c
index 690a92777..afee34da5 100644
--- a/save-xml.c
+++ b/save-xml.c
@@ -486,20 +486,14 @@ static void save_trip(FILE *f, dive_trip_t *trip)
fprintf(f, "</trip>\n");
}
-static void save_dc_if_needed(FILE *f, struct divecomputer *dc)
+static void save_one_device(FILE *f, struct device_info *info)
{
- struct device_info *info = get_device_info(dc->model, dc->deviceid);
const char *nickname, *serial_nr, *firmware;
- /* we have no dc or no model or no deviceid information... nothing to do here */
- if (!info || info->saved)
- return;
- info->saved = 1;
-
/* Nicknames that are empty or the same as the device model are not interesting */
nickname = info->nickname;
if (nickname) {
- if (!*nickname || !strcmp(dc->model, nickname))
+ if (!*nickname || !strcmp(info->model, nickname))
nickname = NULL;
}
@@ -517,7 +511,7 @@ static void save_dc_if_needed(FILE *f, struct divecomputer *dc)
if (!serial_nr && !nickname && !firmware)
return;
- fprintf(f, "<divecomputerid model='%s' deviceid='%08x'", dc->model, dc->deviceid);
+ fprintf(f, "<divecomputerid model='%s' deviceid='%08x'", info->model, info->deviceid);
if (serial_nr)
show_utf8(f, serial_nr, " serial='", "'", 1);
if (firmware)
@@ -525,7 +519,17 @@ static void save_dc_if_needed(FILE *f, struct divecomputer *dc)
if (nickname)
show_utf8(f, nickname, " nickname='", "'", 1);
fprintf(f, "/>\n");
- return;
+}
+
+static void save_device_info(FILE *f)
+{
+ struct device_info *info;
+
+ info = head_of_device_info_list();
+ while (info) {
+ save_one_device(f, info);
+ info = info->next;
+ }
}
#define VERSION 2
@@ -547,14 +551,7 @@ void save_dives(const char *filename)
fprintf(f, "<divelog program='subsurface' version='%d'>\n<settings>\n", VERSION);
/* save the dive computer nicknames, if any */
- clear_device_saved_status();
- for_each_dive(i, dive) {
- struct divecomputer *dc = &dive->dc;
- while (dc) {
- save_dc_if_needed(f, dc);
- dc = dc->next;
- }
- }
+ save_device_info(f);
if (autogroup)
fprintf(f, "<autogroup state='1' />\n");
fprintf(f, "</settings>\n<dives>\n");