+ root->add_child("AnalyseEBUR128")->add_child_text (_analyse_ebur128 ? "1" : "0");
+ root->add_child("AutomaticAudioAnalysis")->add_child_text (_automatic_audio_analysis ? "1" : "0");
+#ifdef DCPOMATIC_WINDOWS
+ root->add_child("Win32Console")->add_child_text (_win32_console ? "1" : "0");
+#endif
+
+ xmlpp::Element* signer = root->add_child ("Signer");
+ DCPOMATIC_ASSERT (_signer_chain);
+ BOOST_FOREACH (dcp::Certificate const & i, _signer_chain->root_to_leaf ()) {
+ signer->add_child("Certificate")->add_child_text (i.certificate (true));
+ }
+ signer->add_child("PrivateKey")->add_child_text (_signer_chain->key().get ());
+
+ xmlpp::Element* decryption = root->add_child ("Decryption");
+ DCPOMATIC_ASSERT (_decryption_chain);
+ BOOST_FOREACH (dcp::Certificate const & i, _decryption_chain->root_to_leaf ()) {
+ decryption->add_child("Certificate")->add_child_text (i.certificate (true));
+ }
+ decryption->add_child("PrivateKey")->add_child_text (_decryption_chain->key().get ());
+
+ for (vector<boost::filesystem::path>::const_iterator i = _history.begin(); i != _history.end(); ++i) {
+ root->add_child("History")->add_child_text (i->string ());
+ }
+
+ BOOST_FOREACH (dcp::EncryptedKDM i, _dkdms) {
+ root->add_child("DKDM")->add_child_text (i.as_xml ());
+ }
+
+ root->add_child("CinemasFile")->add_child_text (_cinemas_file.string());
+ root->add_child("ShowHintsBeforeMakeDCP")->add_child_text (_show_hints_before_make_dcp ? "1" : "0");
+ root->add_child("KDMFilenameFormat")->add_child_text (_kdm_filename_format.specification ());
+ root->add_child("DCPMetadataFilenameFormat")->add_child_text (_dcp_metadata_filename_format.specification ());
+ root->add_child("DCPAssetFilenameFormat")->add_child_text (_dcp_asset_filename_format.specification ());
+
+ try {
+ doc.write_to_file_formatted (path("config.xml").string ());
+ } catch (xmlpp::exception& e) {
+ string s = e.what ();
+ trim (s);
+ throw FileError (s, path("config.xml"));
+ }
+}
+
+void
+Config::write_cinemas_xml () const
+{
+ xmlpp::Document doc;
+ xmlpp::Element* root = doc.create_root_node ("Cinemas");
+ root->add_child("Version")->add_child_text ("1");
+
+ for (list<shared_ptr<Cinema> >::const_iterator i = _cinemas.begin(); i != _cinemas.end(); ++i) {
+ (*i)->as_xml (root->add_child ("Cinema"));
+ }
+
+ try {
+ doc.write_to_file_formatted (_cinemas_file.string ());
+ } catch (xmlpp::exception& e) {
+ string s = e.what ();
+ trim (s);
+ throw FileError (s, _cinemas_file);
+ }