X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fconfig.cc;h=9fdf572070b79eee467d7b0613f46b4e8fe224e6;hb=1f7f758273eb3c98356438da897b7709f8cb87f0;hp=a009edda8bc6277172335a507f6e426967f0e69b;hpb=cb2546eaf5e2f109ca5309f3dc04e6c17b8037e5;p=dcpomatic.git diff --git a/src/lib/config.cc b/src/lib/config.cc index a009edda8..9fdf57207 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012-2016 Carl Hetherington + Copyright (C) 2012-2017 Carl Hetherington This file is part of DCP-o-matic. @@ -32,7 +32,6 @@ #include "film.h" #include #include -#include #include #include #include @@ -73,7 +72,8 @@ Config::Config () void Config::set_defaults () { - _num_local_encoding_threads = max (2U, boost::thread::hardware_concurrency ()); + _master_encoding_threads = max (2U, boost::thread::hardware_concurrency ()); + _server_encoding_threads = max (2U, boost::thread::hardware_concurrency ()); _server_port_base = 6192; _use_any_servers = true; _servers.clear (); @@ -92,7 +92,7 @@ Config::set_defaults () _default_dcp_audio_channels = 6; _default_j2k_bandwidth = 100000000; _default_audio_delay = 0; - _default_interop = false; + _default_interop = true; _mail_server = ""; _mail_port = 25; _mail_user = ""; @@ -112,9 +112,13 @@ Config::set_defaults () _cinemas_file = path ("cinemas.xml"); _show_hints_before_make_dcp = true; _confirm_kdm_email = true; + _kdm_container_name_format = dcp::NameFormat ("KDM %f %c"); _kdm_filename_format = dcp::NameFormat ("KDM %f %c %s"); _dcp_metadata_filename_format = dcp::NameFormat ("%t"); _dcp_asset_filename_format = dcp::NameFormat ("%t"); + _jump_to_selected = true; + _preview_sound = false; + _preview_sound_output = optional (); _allowed_dcp_frame_rates.clear (); _allowed_dcp_frame_rates.push_back (24); @@ -159,8 +163,18 @@ try optional version = f.optional_number_child ("Version"); - _num_local_encoding_threads = f.number_child ("NumLocalEncodingThreads"); - _default_directory = f.string_child ("DefaultDirectory"); + if (f.optional_number_child("NumLocalEncodingThreads")) { + _master_encoding_threads = _server_encoding_threads = f.optional_number_child("NumLocalEncodingThreads").get(); + } else { + _master_encoding_threads = f.number_child("MasterEncodingThreads"); + _server_encoding_threads = f.number_child("ServerEncodingThreads"); + } + + _default_directory = f.optional_string_child ("DefaultDirectory"); + if (_default_directory && _default_directory->empty ()) { + /* We used to store an empty value for this to mean "none set" */ + _default_directory = boost::optional (); + } boost::optional b = f.optional_number_child ("ServerPort"); if (!b) { @@ -228,6 +242,7 @@ try _default_j2k_bandwidth = f.optional_number_child("DefaultJ2KBandwidth").get_value_or (200000000); _default_audio_delay = f.optional_number_child("DefaultAudioDelay").get_value_or (0); _default_interop = f.optional_bool_child("DefaultInterop").get_value_or (false); + _default_kdm_directory = f.optional_string_child("DefaultKDMDirectory"); /* Load any cinemas from config.xml */ read_cinemas (f); @@ -298,9 +313,13 @@ try _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); _confirm_kdm_email = f.optional_bool_child("ConfirmKDMEmail").get_value_or (true); + _kdm_container_name_format = dcp::NameFormat (f.optional_string_child("KDMContainerNameFormat").get_value_or ("KDM %f %c")); _kdm_filename_format = dcp::NameFormat (f.optional_string_child("KDMFilenameFormat").get_value_or ("KDM %f %c %s")); _dcp_metadata_filename_format = dcp::NameFormat (f.optional_string_child("DCPMetadataFilenameFormat").get_value_or ("%t")); _dcp_asset_filename_format = dcp::NameFormat (f.optional_string_child("DCPAssetFilenameFormat").get_value_or ("%t")); + _jump_to_selected = f.optional_bool_child("JumpToSelected").get_value_or (true); + _preview_sound = f.optional_bool_child("PreviewSound").get_value_or (false); + _preview_sound_output = f.optional_string_child("PreviewSoundOutput"); /* Replace any cinemas from config.xml with those from the configured file */ if (boost::filesystem::exists (_cinemas_file)) { @@ -311,6 +330,13 @@ try } catch (...) { if (have_existing ("config.xml")) { + + /* Make a copy of the configuration */ + try { + boost::filesystem::copy_file (path ("config.xml", false), path ("config.xml.backup", false)); + boost::filesystem::copy_file (path ("cinemas.xml", false), path ("cinemas.xml.backup", false)); + } catch (...) {} + /* We have a config file but it didn't load */ FailedToLoad (); } @@ -362,19 +388,22 @@ Config::instance () void Config::write () const { - write_config_xml (); - write_cinemas_xml (); + write_config (); + write_cinemas (); } void -Config::write_config_xml () const +Config::write_config () const { xmlpp::Document doc; xmlpp::Element* root = doc.create_root_node ("Config"); root->add_child("Version")->add_child_text ("2"); - root->add_child("NumLocalEncodingThreads")->add_child_text (raw_convert (_num_local_encoding_threads)); - root->add_child("DefaultDirectory")->add_child_text (_default_directory.string ()); + root->add_child("MasterEncodingThreads")->add_child_text (raw_convert (_master_encoding_threads)); + root->add_child("ServerEncodingThreads")->add_child_text (raw_convert (_server_encoding_threads)); + if (_default_directory) { + root->add_child("DefaultDirectory")->add_child_text (_default_directory->string ()); + } root->add_child("ServerPortBase")->add_child_text (raw_convert (_server_port_base)); root->add_child("UseAnyServers")->add_child_text (_use_any_servers ? "1" : "0"); @@ -410,6 +439,9 @@ Config::write_config_xml () const root->add_child("DefaultJ2KBandwidth")->add_child_text (raw_convert (_default_j2k_bandwidth)); root->add_child("DefaultAudioDelay")->add_child_text (raw_convert (_default_audio_delay)); root->add_child("DefaultInterop")->add_child_text (_default_interop ? "1" : "0"); + if (_default_kdm_directory) { + root->add_child("DefaultKDMDirectory")->add_child_text (_default_kdm_directory->string ()); + } root->add_child("MailServer")->add_child_text (_mail_server); root->add_child("MailPort")->add_child_text (raw_convert (_mail_port)); root->add_child("MailUser")->add_child_text (_mail_user); @@ -460,8 +492,14 @@ Config::write_config_xml () const root->add_child("ShowHintsBeforeMakeDCP")->add_child_text (_show_hints_before_make_dcp ? "1" : "0"); root->add_child("ConfirmKDMEmail")->add_child_text (_confirm_kdm_email ? "1" : "0"); root->add_child("KDMFilenameFormat")->add_child_text (_kdm_filename_format.specification ()); + root->add_child("KDMContainerNameFormat")->add_child_text (_kdm_container_name_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 ()); + root->add_child("JumpToSelected")->add_child_text (_jump_to_selected ? "1" : "0"); + root->add_child("PreviewSound")->add_child_text (_preview_sound ? "1" : "0"); + if (_preview_sound_output) { + root->add_child("PreviewSoundOutput")->add_child_text (_preview_sound_output.get()); + } try { doc.write_to_file_formatted (path("config.xml").string ()); @@ -473,7 +511,7 @@ Config::write_config_xml () const } void -Config::write_cinemas_xml () const +Config::write_cinemas () const { xmlpp::Document doc; xmlpp::Element* root = doc.create_root_node ("Cinemas"); @@ -495,17 +533,29 @@ Config::write_cinemas_xml () const boost::filesystem::path Config::default_directory_or (boost::filesystem::path a) const { - if (_default_directory.empty()) { + return directory_or (_default_directory, a); +} + +boost::filesystem::path +Config::default_kdm_directory_or (boost::filesystem::path a) const +{ + return directory_or (_default_kdm_directory, a); +} + +boost::filesystem::path +Config::directory_or (optional dir, boost::filesystem::path a) const +{ + if (!dir) { return a; } boost::system::error_code ec; - bool const e = boost::filesystem::exists (_default_directory, ec); + bool const e = boost::filesystem::exists (*dir, ec); if (ec || !e) { return a; } - return _default_directory; + return *dir; } void