X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fconfig.cc;h=a5a42436b24355c9f4e1605b277a49f53fcc700d;hb=736b3a068ba5a402b541d32f270669e6e1a4e5c4;hp=ba285fd2ce3e9fe1129bd05a667f95396f314587;hpb=ca045c71b2e76f86fef1ca99d7e7703a41dfcf33;p=dcpomatic.git diff --git a/src/lib/config.cc b/src/lib/config.cc index ba285fd2c..a5a42436b 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -1,19 +1,20 @@ /* Copyright (C) 2012-2016 Carl Hetherington - This program is free software; you can redistribute it and/or modify + This file is part of DCP-o-matic. + + DCP-o-matic is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + DCP-o-matic is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + along with DCP-o-matic. If not, see . */ @@ -29,6 +30,7 @@ #include "util.h" #include "cross.h" #include "raw_convert.h" +#include "kdm_name_format.h" #include #include #include @@ -58,6 +60,7 @@ using boost::optional; using boost::algorithm::trim; Config* Config::_instance = 0; +boost::signals2::signal Config::FailedToLoad; /** Construct default configuration */ Config::Config () @@ -84,6 +87,7 @@ Config::set_defaults () _default_still_length = 10; _default_container = Ratio::from_id ("185"); _default_dcp_content_type = DCPContentType::from_isdcf_name ("FTR"); + _default_dcp_audio_channels = 6; _default_j2k_bandwidth = 100000000; _default_audio_delay = 0; _default_interop = false; @@ -104,6 +108,8 @@ Config::set_defaults () _win32_console = false; #endif _cinemas_file = path ("cinemas.xml"); + _show_hints_before_make_dcp = true; + _kdm_filename_format = KDMNameFormat ("KDM %f %c %s"); _allowed_dcp_frame_rates.clear (); _allowed_dcp_frame_rates.push_back (24); @@ -140,16 +146,8 @@ Config::create_certificate_chain () void Config::read () +try { - if (!have_existing ("config.xml")) { - /* Make a new set of signing certificates and key */ - _signer_chain = create_certificate_chain (); - /* And similar for decryption of KDMs */ - _decryption_chain = create_certificate_chain (); - write (); - return; - } - cxml::Document f ("Config"); f.read_file (path ("config.xml")); optional c; @@ -205,6 +203,8 @@ Config::read () _default_dcp_content_type = DCPContentType::from_isdcf_name (c.get ()); } + _default_dcp_audio_channels = f.optional_number_child("DefaultDCPAudioChannels").get_value_or (6); + if (f.optional_string_child ("DCPMetadataIssuer")) { _dcp_issuer = f.string_child ("DCPMetadataIssuer"); } else if (f.optional_string_child ("DCPIssuer")) { @@ -291,6 +291,8 @@ Config::read () } _cinemas_file = f.optional_string_child("CinemasFile").get_value_or (path ("cinemas.xml").string ()); + _show_hints_before_make_dcp = f.optional_bool_child("ShowHintsBeforeMakeDCP").get_value_or (true); + _kdm_filename_format = KDMNameFormat (f.optional_string_child("KDMFilenameFormat").get_value_or ("KDM %f %c %s")); /* Replace any cinemas from config.xml with those from the configured file */ if (boost::filesystem::exists (_cinemas_file)) { @@ -299,6 +301,19 @@ Config::read () read_cinemas (f); } } +catch (...) { + if (have_existing ("config.xml")) { + /* We have a config file but it didn't load */ + FailedToLoad (); + } + set_defaults (); + /* Make a new set of signing certificates and key */ + _signer_chain = create_certificate_chain (); + /* And similar for decryption of KDMs */ + _decryption_chain = create_certificate_chain (); + write (); +} + /** @return Filename to write configuration to */ boost::filesystem::path @@ -329,16 +344,7 @@ Config::instance () { if (_instance == 0) { _instance = new Config; - try { - _instance->read (); - } catch (exception& e) { - /* configuration load failed; never mind, just - stick with the default. - */ - cerr << "dcpomatic: warning: configuration did not load (" << e.what() << "); using defaults\n"; - } catch (...) { - cerr << "dcpomatic: warning: configuration did not load; using defaults\n"; - } + _instance->read (); } return _instance; @@ -386,6 +392,7 @@ Config::write_config_xml () const if (_default_dcp_content_type) { root->add_child("DefaultDCPContentType")->add_child_text (_default_dcp_content_type->isdcf_name ()); } + root->add_child("DefaultDCPAudioChannels")->add_child_text (raw_convert (_default_dcp_audio_channels)); root->add_child("DCPIssuer")->add_child_text (_dcp_issuer); root->add_child("DCPCreator")->add_child_text (_dcp_creator); @@ -442,6 +449,8 @@ Config::write_config_xml () const } 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 ()); try { doc.write_to_file_formatted (path("config.xml").string ());