summaryrefslogtreecommitdiffstats
path: root/parse-xml.c
diff options
context:
space:
mode:
Diffstat (limited to 'parse-xml.c')
-rw-r--r--parse-xml.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/parse-xml.c b/parse-xml.c
index e7cb1a182..6de518d02 100644
--- a/parse-xml.c
+++ b/parse-xml.c
@@ -14,6 +14,7 @@
#include <glib/gi18n.h>
#include "dive.h"
+#include "device.h"
int verbose;
@@ -148,7 +149,7 @@ static struct {
struct {
const char *model;
uint32_t deviceid;
- const char *nickname;
+ const char *nickname, *serial_nr, *firmware;
} dc;
} cur_settings;
static gboolean in_settings = FALSE;
@@ -619,6 +620,10 @@ static void try_to_fill_dc_settings(const char *name, char *buf)
return;
if (MATCH("divecomputerid.nickname", utf8_string, &cur_settings.dc.nickname))
return;
+ if (MATCH("divecomputerid.serial", utf8_string, &cur_settings.dc.serial_nr))
+ return;
+ if (MATCH("divecomputerid.firmware", utf8_string, &cur_settings.dc.firmware))
+ return;
nonmatch("divecomputerid", name, buf);
}
@@ -1061,8 +1066,12 @@ static void reset_dc_settings(void)
{
free((void *)cur_settings.dc.model);
free((void *)cur_settings.dc.nickname);
+ free((void *)cur_settings.dc.serial_nr);
+ free((void *)cur_settings.dc.firmware);
cur_settings.dc.model = NULL;
cur_settings.dc.nickname = NULL;
+ cur_settings.dc.serial_nr = NULL;
+ cur_settings.dc.firmware = NULL;
cur_settings.dc.deviceid = 0;
}
@@ -1083,8 +1092,20 @@ static void dc_settings_start(void)
static void dc_settings_end(void)
{
+ struct device_info *info;
+
if (cur_settings.dc.model)
remember_dc(cur_settings.dc.model, cur_settings.dc.deviceid, cur_settings.dc.nickname, TRUE);
+
+ info = create_device_info(cur_settings.dc.model, cur_settings.dc.deviceid);
+ if (info) {
+ if (!info->serial_nr && cur_settings.dc.serial_nr)
+ info->serial_nr = strdup(cur_settings.dc.serial_nr);
+ if (!info->firmware && cur_settings.dc.firmware)
+ info->firmware = strdup(cur_settings.dc.firmware);
+ if (!info->nickname && cur_settings.dc.nickname)
+ info->nickname = strdup(cur_settings.dc.nickname);
+ }
reset_dc_settings();
}