X-Git-Url: https://git.carlh.net/gitweb/?p=dcpomatic.git;a=blobdiff_plain;f=src%2Flib%2Fconfig.cc;h=a19a60f55aa06d5d16072f2cacea23f5bdd4ced6;hp=b099cbc85c00531bebaf6f0f31c6fea5e2e45584;hb=89ae13638097f259f3e50b4b61068dd23451107d;hpb=ad0c51a63b40922c900ccc03c3b6417874a8c981 diff --git a/src/lib/config.cc b/src/lib/config.cc index b099cbc85..a19a60f55 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -72,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 (); @@ -116,7 +117,11 @@ Config::set_defaults () _dcp_metadata_filename_format = dcp::NameFormat ("%t"); _dcp_asset_filename_format = dcp::NameFormat ("%t"); _jump_to_selected = true; - _sound_output = optional (); + for (int i = 0; i < NAG_COUNT; ++i) { + _nagged[i] = false; + } + _preview_sound = false; + _preview_sound_output = optional (); _allowed_dcp_frame_rates.clear (); _allowed_dcp_frame_rates.push_back (24); @@ -127,6 +132,7 @@ Config::set_defaults () _allowed_dcp_frame_rates.push_back (60); set_kdm_email_to_default (); + set_cover_sheet_to_default (); } void @@ -161,7 +167,13 @@ try optional version = f.optional_number_child ("Version"); - _num_local_encoding_threads = f.number_child ("NumLocalEncodingThreads"); + 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" */ @@ -310,7 +322,17 @@ try _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); - _sound_output = f.optional_string_child("SoundOutput"); + 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()); + } + } + _preview_sound = f.optional_bool_child("PreviewSound").get_value_or (false); + _preview_sound_output = f.optional_string_child("PreviewSoundOutput"); + if (f.optional_string_child("CoverSheet")) { + _cover_sheet = f.optional_string_child("CoverSheet").get(); + } /* Replace any cinemas from config.xml with those from the configured file */ if (boost::filesystem::exists (_cinemas_file)) { @@ -321,6 +343,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 (); } @@ -383,7 +412,8 @@ Config::write_config () const 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("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 ()); } @@ -479,9 +509,16 @@ Config::write_config () const 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"); - if (_sound_output) { - root->add_child("SoundOutput")->add_child_text (_sound_output.get()); + for (int i = 0; i < NAG_COUNT; ++i) { + xmlpp::Element* e = root->add_child ("Nagged"); + e->set_attribute ("Id", raw_convert(i)); + e->add_child_text (_nagged[i] ? "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()); + } + root->add_child("CoverSheet")->add_child_text (_cover_sheet); try { doc.write_to_file_formatted (path("config.xml").string ()); @@ -575,6 +612,18 @@ Config::reset_kdm_email () changed (); } +void +Config::set_cover_sheet_to_default () +{ + _cover_sheet = _( + "$CPL_NAME\n\n" + "Type: $TYPE\n" + "Format: $CONTAINER\n" + "Audio: $AUDIO\n" + "Length: $LENGTH\n" + ); +} + void Config::add_to_history (boost::filesystem::path p) { @@ -668,3 +717,17 @@ Config::delete_template (string name) const { boost::filesystem::remove (template_path (name)); } + +/** @return Path to the config.xml, for telling the user what it is */ +boost::filesystem::path +Config::config_path () +{ + return path("config.xml", false); +} + +void +Config::reset_cover_sheet () +{ + set_cover_sheet_to_default (); + changed (); +}