X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fconfig.cc;h=a7a45708193133d5a12bf887eeacdb89f2dcfa2c;hb=e6c828cbd577239e7c8e4c532161084a33843a0f;hp=b742756b7eb55197205a85fe6a69acbbdb0cf2ce;hpb=86bbc0981a60ad9ba7b7bdbf28a34f197f83f6cb;p=dcpomatic.git diff --git a/src/lib/config.cc b/src/lib/config.cc index b742756b7..a7a457081 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -24,7 +24,6 @@ #include "types.h" #include "log.h" #include "dcp_content_type.h" -#include "cinema_sound_processor.h" #include "colour_conversion.h" #include "cinema.h" #include "util.h" @@ -69,8 +68,7 @@ Config* Config::_instance = 0; int const Config::_current_version = 3; boost::signals2::signal Config::FailedToLoad; boost::signals2::signal Config::Warning; -boost::signals2::signal Config::BadSignerChain; -boost::optional Config::override_path; +boost::signals2::signal Config::Bad; /** Construct default configuration */ Config::Config () @@ -89,12 +87,11 @@ Config::set_defaults () _use_any_servers = true; _servers.clear (); _only_servers_encode = false; - _tms_protocol = PROTOCOL_SCP; + _tms_protocol = FILE_TRANSFER_PROTOCOL_SCP; _tms_ip = ""; _tms_path = "."; _tms_user = ""; _tms_password = ""; - _cinema_sound_processor = CinemaSoundProcessor::from_id (N_("dolby_cp750")); _allow_any_dcp_frame_rate = false; _allow_any_container = false; _language = optional (); @@ -103,12 +100,13 @@ Config::set_defaults () _default_scale_to = 0; _default_dcp_content_type = DCPContentType::from_isdcf_name ("FTR"); _default_dcp_audio_channels = 6; - _default_j2k_bandwidth = 100000000; + _default_j2k_bandwidth = 150000000; _default_audio_delay = 0; _default_interop = true; _default_upload_after_make_dcp = false; _mail_server = ""; _mail_port = 25; + _mail_protocol = EMAIL_PROTOCOL_AUTO; _mail_user = ""; _mail_password = ""; _kdm_from = ""; @@ -167,6 +165,7 @@ Config::set_defaults () _interface_complexity = INTERFACE_SIMPLE; _player_mode = PLAYER_MODE_WINDOW; _image_display = 0; + _video_view_type = VIDEO_VIEW_SIMPLE; _respect_kdm_validity_periods = true; _player_activity_log_file = boost::none; _player_debug_log_file = boost::none; @@ -286,25 +285,15 @@ try } _only_servers_encode = f.optional_bool_child ("OnlyServersEncode").get_value_or (false); - _tms_protocol = static_cast (f.optional_number_child ("TMSProtocol").get_value_or (static_cast (PROTOCOL_SCP))); + _tms_protocol = static_cast(f.optional_number_child("TMSProtocol").get_value_or(static_cast(FILE_TRANSFER_PROTOCOL_SCP))); _tms_ip = f.string_child ("TMSIP"); _tms_path = f.string_child ("TMSPath"); _tms_user = f.string_child ("TMSUser"); _tms_password = f.string_child ("TMSPassword"); - optional c; - c = f.optional_string_child ("SoundProcessor"); - if (c) { - _cinema_sound_processor = CinemaSoundProcessor::from_id (c.get ()); - } - c = f.optional_string_child ("CinemaSoundProcessor"); - if (c) { - _cinema_sound_processor = CinemaSoundProcessor::from_id (c.get ()); - } - _language = f.optional_string_child ("Language"); - c = f.optional_string_child ("DefaultContainer"); + optional c = f.optional_string_child ("DefaultContainer"); if (c) { _default_container = Ratio::from_id (c.get ()); } @@ -348,6 +337,21 @@ try _mail_server = f.string_child ("MailServer"); _mail_port = f.optional_number_child ("MailPort").get_value_or (25); + + { + /* Make sure this matches the code in write_config */ + string const protocol = f.optional_string_child("MailProtocol").get_value_or("Auto"); + if (protocol == "Auto") { + _mail_protocol = EMAIL_PROTOCOL_AUTO; + } else if (protocol == "Plain") { + _mail_protocol = EMAIL_PROTOCOL_PLAIN; + } else if (protocol == "STARTTLS") { + _mail_protocol = EMAIL_PROTOCOL_STARTTLS; + } else if (protocol == "SSL") { + _mail_protocol = EMAIL_PROTOCOL_SSL; + } + } + _mail_user = f.optional_string_child("MailUser").get_value_or (""); _mail_password = f.optional_string_child("MailPassword").get_value_or (""); @@ -426,30 +430,6 @@ try } #endif - /* These must be done before we call BadSignerChain as that might set one - of the nags. - */ - BOOST_FOREACH (cxml::NodePtr i, f.node_children("Nagged")) { - int const id = i->number_attribute("Id"); - if (id >= 0 && id < NAG_COUNT) { - _nagged[id] = raw_convert(i->content()); - } - } - - bool bad_signer_chain = false; - BOOST_FOREACH (dcp::Certificate const & i, _signer_chain->unordered()) { - if (i.has_utf8_strings()) { - bad_signer_chain = true; - } - } - - if (bad_signer_chain) { - optional const remake = BadSignerChain(); - if (remake && *remake) { - _signer_chain = create_certificate_chain (); - } - } - cxml::NodePtr decryption = f.optional_node_child ("Decryption"); #ifdef DCPOMATIC_VARIANT_SWAROOP if (decryption && decryption->node_children().size() == 1) { @@ -477,6 +457,48 @@ try _decryption_chain = create_certificate_chain (); } #endif + + /* These must be done before we call Bad as that might set one + of the nags. + */ + BOOST_FOREACH (cxml::NodePtr i, f.node_children("Nagged")) { + int const id = i->number_attribute("Id"); + if (id >= 0 && id < NAG_COUNT) { + _nagged[id] = raw_convert(i->content()); + } + } + + optional bad; + + BOOST_FOREACH (dcp::Certificate const & i, _signer_chain->unordered()) { + if (i.has_utf8_strings()) { + bad = BAD_SIGNER_UTF8_STRINGS; + } + } + + if (!_signer_chain->chain_valid() || !_signer_chain->private_key_valid()) { + bad = BAD_SIGNER_INCONSISTENT; + } + + if (!_decryption_chain->chain_valid() || !_decryption_chain->private_key_valid()) { + bad = BAD_DECRYPTION_INCONSISTENT; + } + + if (bad) { + optional const remake = Bad(*bad); + if (remake && *remake) { + switch (*bad) { + case BAD_SIGNER_UTF8_STRINGS: + case BAD_SIGNER_INCONSISTENT: + _signer_chain = create_certificate_chain (); + break; + case BAD_DECRYPTION_INCONSISTENT: + _decryption_chain = create_certificate_chain (); + break; + } + } + } + if (f.optional_node_child("DKDMGroup")) { /* New-style: all DKDMs in a group */ _dkdms = dynamic_pointer_cast (DKDMBase::read (f.node_child("DKDMGroup"))); @@ -550,6 +572,12 @@ try } _image_display = f.optional_number_child("ImageDisplay").get_value_or(0); + optional vc = f.optional_string_child("VideoViewType"); + if (vc && *vc == "opengl") { + _video_view_type = VIDEO_VIEW_OPENGL; + } else if (vc && *vc == "simple") { + _video_view_type = VIDEO_VIEW_SIMPLE; + } _respect_kdm_validity_periods = f.optional_bool_child("RespectKDMValidityPeriods").get_value_or(true); /* PlayerLogFile is old name */ _player_activity_log_file = f.optional_string_child("PlayerLogFile"); @@ -593,33 +621,6 @@ catch (...) { write (); } -/** @return Filename to write configuration to */ -boost::filesystem::path -Config::path (string file, bool create_directories) -{ - boost::filesystem::path p; - if (override_path) { - p = *override_path; - } else { -#ifdef DCPOMATIC_OSX - p /= g_get_home_dir (); - p /= "Library"; - p /= "Preferences"; - p /= "com.dcpomatic"; - p /= "2"; -#else - p /= g_get_user_config_dir (); - p /= "dcpomatic2"; -#endif - } - boost::system::error_code ec; - if (create_directories) { - boost::filesystem::create_directories (p, ec); - } - p /= file; - return p; -} - /** @return Singleton instance */ Config * Config::instance () @@ -647,7 +648,7 @@ Config::write_config () const xmlpp::Element* root = doc.create_root_node ("Config"); /* [XML] Version The version number of the configuration file format. */ - root->add_child("Version")->add_child_text (String::compose ("%1", _current_version)); + root->add_child("Version")->add_child_text (raw_convert(_current_version)); /* [XML] MasterEncodingThreads Number of encoding threads to use when running as master. */ root->add_child("MasterEncodingThreads")->add_child_text (raw_convert (_master_encoding_threads)); /* [XML] ServerEncodingThreads Number of encoding threads to use when running as server. */ @@ -685,12 +686,6 @@ Config::write_config () const root->add_child("TMSUser")->add_child_text (_tms_user); /* [XML] TMSPassword Password to log into the TMS with. */ root->add_child("TMSPassword")->add_child_text (_tms_password); - if (_cinema_sound_processor) { - /* [XML:opt] CinemaSoundProcessor Identifier of the type of cinema sound processor to use when calculating - gain changes from fader positions. Currently can only be dolby_cp750. - */ - root->add_child("CinemaSoundProcessor")->add_child_text (_cinema_sound_processor->id ()); - } if (_language) { /* [XML:opt] Language Language to use in the GUI e.g. fr_FR. */ root->add_child("Language")->add_child_text (_language.get()); @@ -747,6 +742,21 @@ Config::write_config () const root->add_child("MailServer")->add_child_text (_mail_server); /* [XML] MailPort Port number to use on SMTP server. */ root->add_child("MailPort")->add_child_text (raw_convert (_mail_port)); + /* [XML] MailProtocol Protocol to use on SMTP server (Auto, Plain, STARTTLS or SSL) */ + switch (_mail_protocol) { + case EMAIL_PROTOCOL_AUTO: + root->add_child("MailProtocol")->add_child_text("Auto"); + break; + case EMAIL_PROTOCOL_PLAIN: + root->add_child("MailProtocol")->add_child_text("Plain"); + break; + case EMAIL_PROTOCOL_STARTTLS: + root->add_child("MailProtocol")->add_child_text("STARTTLS"); + break; + case EMAIL_PROTOCOL_SSL: + root->add_child("MailProtocol")->add_child_text("SSL"); + break; + } /* [XML] MailUser Username to use on SMTP server. */ root->add_child("MailUser")->add_child_text (_mail_user); /* [XML] MailPassword Password to use on SMTP server. */ @@ -993,6 +1003,14 @@ Config::write_config () const /* [XML] ImageDisplay Screen number to put image on in dual-screen player mode. */ root->add_child("ImageDisplay")->add_child_text(raw_convert(_image_display)); + switch (_video_view_type) { + case VIDEO_VIEW_SIMPLE: + root->add_child("VideoViewType")->add_child_text("simple"); + break; + case VIDEO_VIEW_OPENGL: + root->add_child("VideoViewType")->add_child_text("opengl"); + break; + } /* [XML] RespectKDMValidityPeriods 1 to refuse to use KDMs that are out of date, 0 to ignore KDM dates. */ root->add_child("RespectKDMValidityPeriods")->add_child_text(_respect_kdm_validity_periods ? "1" : "0"); if (_player_activity_log_file) {