X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fconfig.cc;h=e3be484e242542fbdd5f5d3107f306d6ceb479f9;hb=0185ba27b0e9c52a173147c1380ec5f345109afc;hp=cb2ec8885569daf56736690c70b52b6f5b725905;hpb=f706bbb9afd10472e81a051cd5db601d6404377c;p=dcpomatic.git diff --git a/src/lib/config.cc b/src/lib/config.cc index cb2ec8885..e3be484e2 100644 --- a/src/lib/config.cc +++ b/src/lib/config.cc @@ -23,6 +23,7 @@ #include "colour_conversion.h" #include "compose.hpp" #include "config.h" +#include "constants.h" #include "cross.h" #include "crypto.h" #include "dcp_content_type.h" @@ -32,8 +33,6 @@ #include "filter.h" #include "log.h" #include "ratio.h" -#include "types.h" -#include "util.h" #include "zipper.h" #include #include @@ -69,7 +68,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; @@ -94,6 +93,7 @@ Config::set_defaults () _servers.clear (); _only_servers_encode = false; _tms_protocol = FileTransferProtocol::SCP; + _tms_passive = true; _tms_ip = ""; _tms_path = "."; _tms_user = ""; @@ -105,7 +105,6 @@ Config::set_defaults () _show_experimental_audio_processors = false; _language = optional (); _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 = 150000000; @@ -207,6 +206,9 @@ Config::set_defaults () set_notification_email_to_default (); set_cover_sheet_to_default (); + _main_divider_sash_position = {}; + _main_content_divider_sash_position = {}; + _export.set_defaults(); } @@ -270,6 +272,15 @@ Config::backup () void Config::read () +{ + read_config(); + read_cinemas(); + read_dkdm_recipients(); +} + + +void +Config::read_config() try { cxml::Document f ("Config"); @@ -313,6 +324,7 @@ 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(FileTransferProtocol::SCP))); + _tms_passive = f.optional_bool_child("TMSPassive").get_value_or(true); _tms_ip = f.string_child ("TMSIP"); _tms_path = f.string_child ("TMSPath"); _tms_user = f.string_child ("TMSUser"); @@ -320,16 +332,6 @@ try _language = f.optional_string_child ("Language"); - auto c = f.optional_string_child ("DefaultContainer"); - if (c) { - _default_container = Ratio::from_id (c.get ()); - } - - if (_default_container && !_default_container->used_for_container()) { - Warning (_("Your default container is not valid and has been changed to Flat (1.85:1)")); - _default_container = Ratio::from_id ("185"); - } - _default_dcp_content_type = DCPContentType::from_isdcf_name(f.optional_string_child("DefaultDCPContentType").get_value_or("FTR")); _default_dcp_audio_channels = f.optional_number_child("DefaultDCPAudioChannels").get_value_or (6); @@ -355,6 +357,20 @@ try _default_audio_delay = f.optional_number_child("DefaultAudioDelay").get_value_or (0); _default_interop = f.optional_bool_child("DefaultInterop").get_value_or (false); + try { + auto al = f.optional_string_child("DefaultAudioLanguage"); + if (al) { + _default_audio_language = dcp::LanguageTag(*al); + } + } catch (std::runtime_error&) {} + + try { + auto te = f.optional_string_child("DefaultTerritory"); + if (te) { + _default_territory = dcp::LanguageTag::RegionSubtag(*te); + } + } catch (std::runtime_error&) {} + for (auto const& i: f.node_children("DefaultMetadata")) { _default_metadata[i->string_attribute("key")] = i->content(); } @@ -595,35 +611,60 @@ try } _auto_crop_threshold = f.optional_number_child("AutoCropThreshold").get_value_or(0.1); _last_release_notes_version = f.optional_string_child("LastReleaseNotesVersion"); + _main_divider_sash_position = f.optional_number_child("MainDividerSashPosition"); + _main_content_divider_sash_position = f.optional_number_child("MainContentDividerSashPosition"); _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 () @@ -682,6 +723,8 @@ Config::write_config () const root->add_child("OnlyServersEncode")->add_child_text (_only_servers_encode ? "1" : "0"); /* [XML] TMSProtocol Protocol to use to copy files to a TMS; 0 to use SCP, 1 for FTP. */ root->add_child("TMSProtocol")->add_child_text (raw_convert (static_cast (_tms_protocol))); + /* [XML] TMSPassive True to use PASV mode with TMS FTP connections. */ + root->add_child("TMSPassive")->add_child_text(_tms_passive ? "1" : "0"); /* [XML] TMSIP IP address of TMS. */ root->add_child("TMSIP")->add_child_text (_tms_ip); /* [XML] TMSPath Path on the TMS to copy files to. */ @@ -694,15 +737,8 @@ Config::write_config () const /* [XML:opt] Language Language to use in the GUI e.g. fr_FR. */ root->add_child("Language")->add_child_text (_language.get()); } - if (_default_container) { - /* [XML:opt] DefaultContainer ID of default container - to use when creating new films (185,239 or - 190). - */ - 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 ()); @@ -732,6 +768,14 @@ Config::write_config () const root->add_child("DefaultAudioDelay")->add_child_text (raw_convert (_default_audio_delay)); /* [XML] DefaultInterop 1 to default new films to Interop, 0 for SMPTE. */ root->add_child("DefaultInterop")->add_child_text (_default_interop ? "1" : "0"); + if (_default_audio_language) { + /* [XML] DefaultAudioLanguage Default audio language to use for new films */ + root->add_child("DefaultAudioLanguage")->add_child_text(_default_audio_language->to_string()); + } + if (_default_territory) { + /* [XML] DefaultTerritory Default territory to use for new films */ + root->add_child("DefaultTerritory")->add_child_text(_default_territory->subtag()); + } for (auto const& i: _default_metadata) { auto c = root->add_child("DefaultMetadata"); c->set_attribute("key", i.first); @@ -1039,6 +1083,12 @@ Config::write_config () const if (_last_release_notes_version) { root->add_child("LastReleaseNotesVersion")->add_child_text(*_last_release_notes_version); } + if (_main_divider_sash_position) { + root->add_child("MainDividerSashPosition")->add_child_text(raw_convert(*_main_divider_sash_position)); + } + if (_main_content_divider_sash_position) { + root->add_child("MainContentDividerSashPosition")->add_child_text(raw_convert(*_main_content_divider_sash_position)); + } _export.write(root->add_child("Export")); @@ -1203,7 +1253,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 () { @@ -1291,6 +1341,7 @@ Config::set_cinemas_file (boost::filesystem::path file) read_cinemas (f); } + changed (CINEMAS); changed (OTHER); }