X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fconfig.cc;h=eeb009594a0d1db48b905d78cb9331cdaa3aafd7;hb=ff639b3cf30afcc097bfd21d39c8d15f466cadd6;hp=caea995be50c96cb1879aeb647235ee219672078;hpb=fcba100f0dfd1d4214291abb76f22ebd696c24d4;p=dcpomatic.git diff --git a/src/lib/config.cc b/src/lib/config.cc index caea995be..eeb009594 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -69,7 +69,7 @@ using dcp::raw_convert; Config* Config::_instance = 0; int const Config::_current_version = 3; -boost::signals2::signal Config::FailedToLoad; +boost::signals2::signal Config::FailedToLoad; boost::signals2::signal Config::Warning; boost::signals2::signal Config::Bad; @@ -101,6 +101,7 @@ Config::set_defaults () _allow_any_dcp_frame_rate = false; _allow_any_container = false; _allow_96khz_audio = false; + _use_all_audio_channels = false; _show_experimental_audio_processors = false; _language = optional (); _default_still_length = 10; @@ -192,6 +193,7 @@ Config::set_defaults () _default_kdm_type = dcp::Formulation::MODIFIED_TRANSITIONAL_1; _default_kdm_duration = RoughDuration(1, RoughDuration::Unit::WEEKS); _auto_crop_threshold = 0.1; + _last_release_notes_version = boost::none; _allowed_dcp_frame_rates.clear (); _allowed_dcp_frame_rates.push_back (24); @@ -268,6 +270,15 @@ Config::backup () void Config::read () +{ + read_config(); + read_cinemas(); + read_dkdm_recipients(); +} + + +void +Config::read_config() try { cxml::Document f ("Config"); @@ -414,6 +425,7 @@ try _allow_any_dcp_frame_rate = f.optional_bool_child ("AllowAnyDCPFrameRate").get_value_or (false); _allow_any_container = f.optional_bool_child ("AllowAnyContainer").get_value_or (false); _allow_96khz_audio = f.optional_bool_child("Allow96kHzAudio").get_value_or(false); + _use_all_audio_channels = f.optional_bool_child("UseAllAudioChannels").get_value_or(false); _show_experimental_audio_processors = f.optional_bool_child ("ShowExperimentalAudioProcessors").get_value_or (false); _log_types = f.optional_number_child ("LogTypes").get_value_or (LogEntry::TYPE_GENERAL | LogEntry::TYPE_WARNING | LogEntry::TYPE_ERROR); @@ -591,35 +603,59 @@ try _default_kdm_duration = RoughDuration(1, RoughDuration::Unit::WEEKS); } _auto_crop_threshold = f.optional_number_child("AutoCropThreshold").get_value_or(0.1); + _last_release_notes_version = f.optional_string_child("LastReleaseNotesVersion"); _export.read(f.optional_node_child("Export")); - - if (boost::filesystem::exists (_cinemas_file)) { - cxml::Document f ("Cinemas"); - f.read_file (_cinemas_file); - read_cinemas (f); - } - - if (boost::filesystem::exists (_dkdm_recipients_file)) { - cxml::Document f ("DKDMRecipients"); - f.read_file (_dkdm_recipients_file); - read_dkdm_recipients (f); - } } catch (...) { - if (have_existing("config.xml") || have_existing("cinemas.xml") || have_existing("dkdm_recipients.xml")) { + if (have_existing("config.xml")) { backup (); /* We have a config file but it didn't load */ - FailedToLoad (); + FailedToLoad(LoadFailure::CONFIG); } 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 (); + write_config(); } + +void +Config::read_cinemas() +{ + if (boost::filesystem::exists (_cinemas_file)) { + try { + cxml::Document f("Cinemas"); + f.read_file(_cinemas_file); + read_cinemas(f); + } catch (...) { + backup(); + FailedToLoad(LoadFailure::CINEMAS); + write_cinemas(); + } + } +} + + +void +Config::read_dkdm_recipients() +{ + if (boost::filesystem::exists (_dkdm_recipients_file)) { + try { + cxml::Document f("DKDMRecipients"); + f.read_file(_dkdm_recipients_file); + read_dkdm_recipients(f); + } catch (...) { + backup(); + FailedToLoad(LoadFailure::DKDM_RECIPIENTS); + write_dkdm_recipients(); + } + } +} + + /** @return Singleton instance */ Config * Config::instance () @@ -698,7 +734,7 @@ Config::write_config () const root->add_child("DefaultContainer")->add_child_text (_default_container->id ()); } if (_default_dcp_content_type) { - /* [XML:opt] DefaultDCPContentType Default content type ot use when creating new films (FTR, SHR, + /* [XML:opt] DefaultDCPContentType Default content type to use when creating new films (FTR, SHR, TLR, TST, XSN, RTG, TSR, POL, PSA or ADV). */ root->add_child("DefaultDCPContentType")->add_child_text (_default_dcp_content_type->isdcf_name ()); @@ -803,6 +839,8 @@ Config::write_config () const root->add_child("AllowAnyContainer")->add_child_text (_allow_any_container ? "1" : "0"); /* [XML] Allow96kHzAudio 1 to allow users to make DCPs with 96kHz audio, 0 to always make 48kHz DCPs */ root->add_child("Allow96kHzAudio")->add_child_text(_allow_96khz_audio ? "1" : "0"); + /* [XML] UseAllAudioChannels 1 to allow users to map audio to all 16 DCP channels, 0 to limit to the channels used in standard DCPs */ + root->add_child("UseAllAudioChannels")->add_child_text(_use_all_audio_channels ? "1" : "0"); /* [XML] ShowExperimentalAudioProcessors 1 to offer users the (experimental) audio upmixer processors, 0 to hide them */ root->add_child("ShowExperimentalAudioProcessors")->add_child_text (_show_experimental_audio_processors ? "1" : "0"); /* [XML] LogTypes Types of logging to write; a bitfield where 1 is general notes, 2 warnings, 4 errors, 8 debug information related @@ -1030,6 +1068,9 @@ Config::write_config () const root->add_child("EmailKDMs")->add_child_text(_email_kdms ? "1" : "0"); root->add_child("DefaultKDMType")->add_child_text(dcp::formulation_to_string(_default_kdm_type)); root->add_child("AutoCropThreshold")->add_child_text(raw_convert(_auto_crop_threshold)); + if (_last_release_notes_version) { + root->add_child("LastReleaseNotesVersion")->add_child_text(*_last_release_notes_version); + } _export.write(root->add_child("Export")); @@ -1194,7 +1235,7 @@ Config::add_to_history (boost::filesystem::path p) add_to_history_internal (_history, p); } -/** Remove non-existant items from the history */ +/** Remove non-existent items from the history */ void Config::clean_history () { @@ -1282,6 +1323,7 @@ Config::set_cinemas_file (boost::filesystem::path file) read_cinemas (f); } + changed (CINEMAS); changed (OTHER); }