summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2022-09-11 00:10:22 +0200
committerCarl Hetherington <cth@carlh.net>2022-10-19 14:44:01 +0200
commitfaf01b72ef48a364bad1234692c7780d00b47b7f (patch)
tree3fb64beb6308080c4027b45841f8bdf6a5de215a
parentea5c2ebe5db07d01669d89cbd213754c85db36ef (diff)
Normalise XML attribute names to be camelCase (#2241).
-rw-r--r--src/lib/audio_analysis.cc9
-rw-r--r--src/lib/audio_mapping.cc8
-rw-r--r--src/lib/config.cc8
-rw-r--r--src/lib/dkdm_wrapper.cc8
-rw-r--r--src/lib/film.cc8
-rw-r--r--src/lib/text_content.cc9
-rw-r--r--src/lib/util.h12
-rw-r--r--test/config_test.cc7
m---------test/data0
9 files changed, 47 insertions, 22 deletions
diff --git a/src/lib/audio_analysis.cc b/src/lib/audio_analysis.cc
index 721ffed07..1fa084de4 100644
--- a/src/lib/audio_analysis.cc
+++ b/src/lib/audio_analysis.cc
@@ -84,11 +84,8 @@ AudioAnalysis::AudioAnalysis (boost::filesystem::path filename)
}
for (auto i: f.node_children ("SamplePeak")) {
- _sample_peak.push_back (
- PeakTime(
- dcp::raw_convert<float>(i->content()), DCPTime(i->number_attribute<Frame>("Time"))
- )
- );
+ auto const time = number_attribute<Frame>(i, "Time", "time");
+ _sample_peak.push_back(PeakTime(dcp::raw_convert<float>(i->content()), DCPTime(time)));
}
for (auto i: f.node_children("TruePeak")) {
@@ -155,7 +152,7 @@ AudioAnalysis::write (boost::filesystem::path filename)
for (size_t i = 0; i < _sample_peak.size(); ++i) {
auto n = root->add_child("SamplePeak");
n->add_child_text (raw_convert<string> (_sample_peak[i].peak));
- n->set_attribute ("Time", raw_convert<string> (_sample_peak[i].time.get()));
+ n->set_attribute("time", raw_convert<string> (_sample_peak[i].time.get()));
}
for (auto i: _true_peak) {
diff --git a/src/lib/audio_mapping.cc b/src/lib/audio_mapping.cc
index 5e8bf4d04..3a1809ae8 100644
--- a/src/lib/audio_mapping.cc
+++ b/src/lib/audio_mapping.cc
@@ -169,8 +169,8 @@ AudioMapping::AudioMapping (cxml::ConstNodePtr node, int state_version)
);
} else {
set (
- i->number_attribute<int>("Input"),
- i->number_attribute<int>("Output"),
+ number_attribute<int>(i, "Input", "input"),
+ number_attribute<int>(i, "Output", "output"),
raw_convert<float>(i->content())
);
}
@@ -227,8 +227,8 @@ AudioMapping::as_xml (xmlpp::Node* node) const
for (int c = 0; c < _input_channels; ++c) {
for (int d = 0; d < _output_channels; ++d) {
auto t = node->add_child ("Gain");
- t->set_attribute ("Input", raw_convert<string> (c));
- t->set_attribute ("Output", raw_convert<string> (d));
+ t->set_attribute("input", raw_convert<string>(c));
+ t->set_attribute("output", raw_convert<string>(d));
t->add_child_text (raw_convert<string> (get (c, d)));
}
}
diff --git a/src/lib/config.cc b/src/lib/config.cc
index 81daff5b6..a5303f5de 100644
--- a/src/lib/config.cc
+++ b/src/lib/config.cc
@@ -476,7 +476,7 @@ try
of the nags.
*/
for (auto i: f.node_children("Nagged")) {
- auto const id = i->number_attribute<int>("Id");
+ auto const id = number_attribute<int>(i, "Id", "id");
if (id >= 0 && id < NAG_COUNT) {
_nagged[id] = raw_convert<int>(i->content());
}
@@ -547,7 +547,7 @@ try
_default_notify = f.optional_bool_child("DefaultNotify").get_value_or(false);
for (auto i: f.node_children("Notification")) {
- int const id = i->number_attribute<int>("Id");
+ int const id = number_attribute<int>(i, "Id", "id");
if (id >= 0 && id < NOTIFICATION_COUNT) {
_notification[id] = raw_convert<int>(i->content());
}
@@ -929,7 +929,7 @@ Config::write_config () const
/* [XML] Nagged 1 if a particular nag screen has been shown and should not be shown again, otherwise 0. */
for (int i = 0; i < NAG_COUNT; ++i) {
xmlpp::Element* e = root->add_child ("Nagged");
- e->set_attribute ("Id", raw_convert<string>(i));
+ e->set_attribute("id", raw_convert<string>(i));
e->add_child_text (_nagged[i] ? "1" : "0");
}
/* [XML] PreviewSound 1 to use sound in the GUI preview and player, otherwise 0. */
@@ -984,7 +984,7 @@ Config::write_config () const
/* [XML] Notification 1 if a notification type is enabled, otherwise 0. */
for (int i = 0; i < NOTIFICATION_COUNT; ++i) {
xmlpp::Element* e = root->add_child ("Notification");
- e->set_attribute ("Id", raw_convert<string>(i));
+ e->set_attribute("id", raw_convert<string>(i));
e->add_child_text (_notification[i] ? "1" : "0");
}
diff --git a/src/lib/dkdm_wrapper.cc b/src/lib/dkdm_wrapper.cc
index 532bbb314..5e423eb5f 100644
--- a/src/lib/dkdm_wrapper.cc
+++ b/src/lib/dkdm_wrapper.cc
@@ -41,7 +41,11 @@ DKDMBase::read (cxml::ConstNodePtr node)
if (node->name() == "DKDM") {
return make_shared<DKDM>(dcp::EncryptedKDM(node->content()));
} else if (node->name() == "DKDMGroup") {
- auto group = make_shared<DKDMGroup>(node->string_attribute("Name"));
+ auto name = node->optional_string_attribute("Name");
+ if (!name) {
+ name = node->string_attribute("name");
+ }
+ auto group = make_shared<DKDMGroup>(*name);
for (auto i: node->node_children()) {
if (auto c = read(i)) {
group->add (c);
@@ -72,7 +76,7 @@ void
DKDMGroup::as_xml (xmlpp::Element* node) const
{
auto f = node->add_child("DKDMGroup");
- f->set_attribute ("Name", _name);
+ f->set_attribute("name", _name);
for (auto i: _children) {
i->as_xml (f);
}
diff --git a/src/lib/film.cc b/src/lib/film.cc
index d5597b5a1..6f19418b5 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -425,7 +425,7 @@ Film::metadata (bool with_content_paths) const
root->add_child("UserExplicitVideoFrameRate")->add_child_text(_user_explicit_video_frame_rate ? "1" : "0");
for (map<dcp::Marker, DCPTime>::const_iterator i = _markers.begin(); i != _markers.end(); ++i) {
auto m = root->add_child("Marker");
- m->set_attribute("Type", dcp::marker_to_string(i->first));
+ m->set_attribute("type", dcp::marker_to_string(i->first));
m->add_child_text(raw_convert<string>(i->second.get()));
}
for (auto i: _ratings) {
@@ -605,7 +605,11 @@ Film::read_metadata (optional<boost::filesystem::path> path)
_user_explicit_video_frame_rate = f.optional_bool_child("UserExplicitVideoFrameRate").get_value_or(false);
for (auto i: f.node_children("Marker")) {
- _markers[dcp::marker_from_string(i->string_attribute("Type"))] = DCPTime(dcp::raw_convert<DCPTime::Type>(i->content()));
+ auto type = i->optional_string_attribute("Type");
+ if (!type) {
+ type = i->string_attribute("type");
+ }
+ _markers[dcp::marker_from_string(*type)] = DCPTime(dcp::raw_convert<DCPTime::Type>(i->content()));
}
for (auto i: f.node_children("Rating")) {
diff --git a/src/lib/text_content.cc b/src/lib/text_content.cc
index a85b271a8..d4468f7e5 100644
--- a/src/lib/text_content.cc
+++ b/src/lib/text_content.cc
@@ -236,8 +236,11 @@ TextContent::TextContent (Content* parent, cxml::ConstNodePtr node, int version,
if (lang) {
try {
_language = dcp::LanguageTag(lang->content());
- auto add = lang->optional_bool_attribute("Additional");
- _language_is_additional = add && *add;
+ auto additional = lang->optional_bool_attribute("Additional");
+ if (!additional) {
+ additional = lang->optional_bool_attribute("additional");
+ }
+ _language_is_additional = additional.get_value_or(false);
} catch (dcp::LanguageTagError&) {
/* The language tag can be empty or invalid if it was loaded from a
* 2.14.x metadata file; we'll just ignore it in that case.
@@ -410,7 +413,7 @@ TextContent::as_xml (xmlpp::Node* root) const
if (_language) {
auto lang = text->add_child("Language");
lang->add_child_text (_language->to_string());
- lang->set_attribute ("Additional", _language_is_additional ? "1" : "0");
+ lang->set_attribute("additional", _language_is_additional ? "1" : "0");
}
}
diff --git a/src/lib/util.h b/src/lib/util.h
index acdc861ae..cf03423c7 100644
--- a/src/lib/util.h
+++ b/src/lib/util.h
@@ -32,6 +32,7 @@
#include "dcpomatic_time.h"
#include "pixel_quanta.h"
#include "types.h"
+#include <libcxml/cxml.h>
#include <dcp/atmos_asset.h>
#include <dcp/decrypted_kdm.h>
#include <dcp/util.h>
@@ -151,4 +152,15 @@ list_to_vector (std::list<T> v)
return l;
}
+template <class T>
+T
+number_attribute(cxml::ConstNodePtr node, std::string name1, std::string name2)
+{
+ auto value = node->optional_number_attribute<T>(name1);
+ if (!value) {
+ value = node->number_attribute<T>(name2);
+ }
+ return *value;
+}
+
#endif
diff --git a/test/config_test.cc b/test/config_test.cc
index 062c1849a..884f3cb08 100644
--- a/test/config_test.cc
+++ b/test/config_test.cc
@@ -208,7 +208,11 @@ BOOST_AUTO_TEST_CASE (config_upgrade_test2)
boost::filesystem::remove_all (dir);
boost::filesystem::create_directories (dir);
+#ifdef DCPOMATIC_WINDOWS
+ boost::filesystem::copy_file("test/data/2.16.config.windows.xml", dir / "config.xml");
+#else
boost::filesystem::copy_file("test/data/2.16.config.xml", dir / "config.xml");
+#endif
boost::filesystem::copy_file("test/data/2.14.cinemas.xml", dir / "cinemas.xml");
Config::instance();
try {
@@ -216,13 +220,14 @@ BOOST_AUTO_TEST_CASE (config_upgrade_test2)
Config::instance()->write();
} catch (...) {}
- check_xml(dir / "config.xml", "test/data/2.16.config.xml", {});
check_xml(dir / "cinemas.xml", "test/data/2.14.cinemas.xml", {});
#ifdef DCPOMATIC_WINDOWS
/* This file has the windows path for dkdm_recipients.xml (with backslashes) */
check_xml(dir / "2.18" / "config.xml", "test/data/2.18.config.windows.xml", {});
+ check_xml(dir / "config.xml", "test/data/2.16.config.windows.xml", {});
#else
check_xml(dir / "2.18" / "config.xml", "test/data/2.18.config.xml", {});
+ check_xml(dir / "config.xml", "test/data/2.16.config.xml", {});
#endif
/* cinemas.xml is not copied into 2.18 as its format has not changed */
BOOST_REQUIRE (!boost::filesystem::exists(dir / "2.18" / "cinemas.xml"));
diff --git a/test/data b/test/data
-Subproject de17df3f7bd06e08abd557d8f92a144d66303d7
+Subproject e9b91e12e1a951632f6b5fcb8909ba5203131e1