diff options
| author | Carl Hetherington <cth@carlh.net> | 2022-09-11 00:10:22 +0200 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2022-10-19 14:44:01 +0200 |
| commit | faf01b72ef48a364bad1234692c7780d00b47b7f (patch) | |
| tree | 3fb64beb6308080c4027b45841f8bdf6a5de215a | |
| parent | ea5c2ebe5db07d01669d89cbd213754c85db36ef (diff) | |
Normalise XML attribute names to be camelCase (#2241).
| -rw-r--r-- | src/lib/audio_analysis.cc | 9 | ||||
| -rw-r--r-- | src/lib/audio_mapping.cc | 8 | ||||
| -rw-r--r-- | src/lib/config.cc | 8 | ||||
| -rw-r--r-- | src/lib/dkdm_wrapper.cc | 8 | ||||
| -rw-r--r-- | src/lib/film.cc | 8 | ||||
| -rw-r--r-- | src/lib/text_content.cc | 9 | ||||
| -rw-r--r-- | src/lib/util.h | 12 | ||||
| -rw-r--r-- | test/config_test.cc | 7 | ||||
| m--------- | test/data | 0 |
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 |
