#include "colour_conversion.h"
#include "compose.hpp"
#include "config.h"
+#include "constants.h"
#include "cross.h"
#include "crypto.h"
#include "dcp_content_type.h"
#include "filter.h"
#include "log.h"
#include "ratio.h"
-#include "types.h"
-#include "util.h"
#include "zipper.h"
#include <dcp/certificate_chain.h>
#include <dcp/name_format.h>
_servers.clear ();
_only_servers_encode = false;
_tms_protocol = FileTransferProtocol::SCP;
+ _tms_passive = true;
_tms_ip = "";
_tms_path = ".";
_tms_user = "";
_show_experimental_audio_processors = false;
_language = optional<string> ();
_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;
_dkdm_recipients_file = read_path ("dkdm_recipients.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");
- _dkdm_filename_format = dcp::NameFormat ("DKDM %f %c %s");
+ _kdm_container_name_format = dcp::NameFormat("KDM_%f_%c");
+ _kdm_filename_format = dcp::NameFormat("KDM_%f_%c_%s");
+ _dkdm_filename_format = dcp::NameFormat("DKDM_%f_%c_%s");
_dcp_metadata_filename_format = dcp::NameFormat ("%t");
_dcp_asset_filename_format = dcp::NameFormat ("%t");
_jump_to_selected = true;
_sound_output = optional<string> ();
_last_kdm_write_type = KDM_WRITE_FLAT;
_last_dkdm_write_type = DKDM_WRITE_INTERNAL;
+ _default_add_file_location = DefaultAddFileLocation::SAME_AS_LAST_TIME;
/* I think the scaling factor here should be the ratio of the longest frame
encode time to the shortest; if the thread count is T, longest time is L
_player_kdm_directory = boost::none;
_audio_mapping = boost::none;
_custom_languages.clear ();
- _add_files_path = boost::none;
+ _initial_paths.clear();
+ _initial_paths["AddFilesPath"] = boost::none;
+ _initial_paths["AddDKDMPath"] = boost::none;
+ _initial_paths["SelectCertificatePath"] = boost::none;
+ _initial_paths["AddCombinerInputPath"] = boost::none;
_use_isdcf_name_by_default = true;
_write_kdms_to_disk = true;
_email_kdms = false;
_default_kdm_duration = RoughDuration(1, RoughDuration::Unit::WEEKS);
_auto_crop_threshold = 0.1;
_last_release_notes_version = boost::none;
+ _allow_smpte_bv20 = false;
_allowed_dcp_frame_rates.clear ();
_allowed_dcp_frame_rates.push_back (24);
set_notification_email_to_default ();
set_cover_sheet_to_default ();
+ _main_divider_sash_position = {};
+ _main_content_divider_sash_position = {};
+
_export.set_defaults();
}
_only_servers_encode = f.optional_bool_child ("OnlyServersEncode").get_value_or (false);
_tms_protocol = static_cast<FileTransferProtocol>(f.optional_number_child<int>("TMSProtocol").get_value_or(static_cast<int>(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");
_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<int>("DefaultDCPAudioChannels").get_value_or (6);
_default_audio_delay = f.optional_number_child<int>("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();
}
} catch (std::runtime_error& e) {}
}
- _add_files_path = f.optional_string_child("AddFilesPath");
+ for (auto& initial: _initial_paths) {
+ initial.second = f.optional_string_child(initial.first);
+ }
_use_isdcf_name_by_default = f.optional_bool_child("UseISDCFNameByDefault").get_value_or(true);
_write_kdms_to_disk = f.optional_bool_child("WriteKDMsToDisk").get_value_or(true);
_email_kdms = f.optional_bool_child("EmailKDMs").get_value_or(false);
}
_auto_crop_threshold = f.optional_number_child<double>("AutoCropThreshold").get_value_or(0.1);
_last_release_notes_version = f.optional_string_child("LastReleaseNotesVersion");
+ _main_divider_sash_position = f.optional_number_child<int>("MainDividerSashPosition");
+ _main_content_divider_sash_position = f.optional_number_child<int>("MainContentDividerSashPosition");
+
+ if (auto loc = f.optional_string_child("DefaultAddFileLocation")) {
+ if (*loc == "last") {
+ _default_add_file_location = DefaultAddFileLocation::SAME_AS_LAST_TIME;
+ } else if (*loc == "project") {
+ _default_add_file_location = DefaultAddFileLocation::SAME_AS_PROJECT;
+ }
+ }
+
+ _allow_smpte_bv20 = f.optional_bool_child("AllowSMPTEBv20").get_value_or(false);
_export.read(f.optional_node_child("Export"));
}
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<string> (static_cast<int> (_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. */
/* [XML:opt] Language Language to use in the GUI e.g. <code>fr_FR</code>. */
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 (<code>185</code>,<code>239</code> or
- <code>190</code>).
- */
- 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 (<code>FTR</code>, <code>SHR</code>,
+ /* [XML:opt] DefaultDCPContentType Default content type to use when creating new films (<code>FTR</code>, <code>SHR</code>,
<code>TLR</code>, <code>TST</code>, <code>XSN</code>, <code>RTG</code>, <code>TSR</code>, <code>POL</code>,
<code>PSA</code> or <code>ADV</code>). */
root->add_child("DefaultDCPContentType")->add_child_text (_default_dcp_content_type->isdcf_name ());
root->add_child("DefaultAudioDelay")->add_child_text (raw_convert<string> (_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);
for (auto const& i: _custom_languages) {
root->add_child("CustomLanguage")->add_child_text(i.to_string());
}
- if (_add_files_path) {
- /* [XML] AddFilesPath The default path that will be offered in the picker when adding files to a film. */
- root->add_child("AddFilesPath")->add_child_text(_add_files_path->string());
+ for (auto const& initial: _initial_paths) {
+ if (initial.second) {
+ root->add_child(initial.first)->add_child_text(initial.second->string());
+ }
}
root->add_child("UseISDCFNameByDefault")->add_child_text(_use_isdcf_name_by_default ? "1" : "0");
root->add_child("WriteKDMsToDisk")->add_child_text(_write_kdms_to_disk ? "1" : "0");
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<string>(*_main_divider_sash_position));
+ }
+ if (_main_content_divider_sash_position) {
+ root->add_child("MainContentDividerSashPosition")->add_child_text(raw_convert<string>(*_main_content_divider_sash_position));
+ }
+
+ root->add_child("DefaultAddFileLocation")->add_child_text(
+ _default_add_file_location == DefaultAddFileLocation::SAME_AS_LAST_TIME ? "last" : "project"
+ );
+
+ /* [XML] AllowSMPTEBv20 1 to allow the user to choose SMPTE (Bv2.0 only) as a standard, otherwise 0 */
+ root->add_child("AllowSMPTEBv20")->add_child_text(_allow_smpte_bv20 ? "1" : "0");
_export.write(root->add_child("Export"));
add_to_history_internal (_history, p);
}
-/** Remove non-existant items from the history */
+/** Remove non-existent items from the history */
void
Config::clean_history ()
{
add_to_history_internal (_player_history, p);
}
-/** Remove non-existant items from the player history */
+/** Remove non-existent items from the player history */
void
Config::clean_player_history ()
{
zipper.close ();
}
+
+void
+Config::set_initial_path(string id, boost::filesystem::path path)
+{
+ auto iter = _initial_paths.find(id);
+ DCPOMATIC_ASSERT(iter != _initial_paths.end());
+ iter->second = path;
+ changed();
+}
+
+
+optional<boost::filesystem::path>
+Config::initial_path(string id) const
+{
+ auto iter = _initial_paths.find(id);
+ DCPOMATIC_ASSERT(iter != _initial_paths.end());
+ return iter->second;
+}
+