*/
+
+#include "cinema.h"
+#include "colour_conversion.h"
+#include "compose.hpp"
#include "config.h"
+#include "cross.h"
+#include "crypto.h"
+#include "dcp_content_type.h"
+#include "dkdm_recipient.h"
+#include "dkdm_wrapper.h"
+#include "film.h"
#include "filter.h"
+#include "log.h"
#include "ratio.h"
#include "types.h"
-#include "log.h"
-#include "dcp_content_type.h"
-#include "colour_conversion.h"
-#include "cinema.h"
#include "util.h"
-#include "cross.h"
-#include "film.h"
-#include "dkdm_wrapper.h"
-#include "compose.hpp"
-#include "crypto.h"
-#include "dkdm_recipient.h"
-#include <dcp/raw_convert.h>
-#include <dcp/name_format.h>
+#include "zipper.h"
#include <dcp/certificate_chain.h>
+#include <dcp/name_format.h>
+#include <dcp/raw_convert.h>
#include <libcxml/cxml.h>
#include <glib.h>
#include <libxml++/libxml++.h>
#include "i18n.h"
-using std::vector;
+
using std::cout;
+using std::dynamic_pointer_cast;
using std::ifstream;
-using std::string;
using std::list;
-using std::min;
+using std::make_shared;
using std::max;
+using std::min;
using std::remove;
using std::shared_ptr;
-using std::make_shared;
-using boost::optional;
-using std::dynamic_pointer_cast;
+using std::string;
+using std::vector;
using boost::algorithm::trim;
+using boost::optional;
using dcp::raw_convert;
+
Config* Config::_instance = 0;
int const Config::_current_version = 3;
boost::signals2::signal<void ()> Config::FailedToLoad;
boost::signals2::signal<void (string)> Config::Warning;
boost::signals2::signal<bool (Config::BadReason)> Config::Bad;
+
/** Construct default configuration */
Config::Config ()
/* DKDMs are not considered a thing to reset on set_defaults() */
_audio_mapping = boost::none;
_custom_languages.clear ();
_add_files_path = boost::none;
+ _auto_crop_threshold = 0.1;
_allowed_dcp_frame_rates.clear ();
_allowed_dcp_frame_rates.push_back (24);
_dkdms = dynamic_pointer_cast<DKDMGroup> (DKDMBase::read (f.node_child("DKDMGroup")));
} else {
/* Old-style: one or more DKDM nodes */
- _dkdms.reset (new DKDMGroup ("root"));
+ _dkdms = make_shared<DKDMGroup>("root");
for (auto i: f.node_children("DKDM")) {
_dkdms->add (DKDMBase::read (i));
}
}
_add_files_path = f.optional_string_child("AddFilesPath");
+ _auto_crop_threshold = f.optional_number_child<double>("AutoCropThreshold").get_value_or(0.1);
if (boost::filesystem::exists (_cinemas_file)) {
cxml::Document f ("Cinemas");
/* [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());
}
+ root->add_child("AutoCropThreshold")->add_child_text(raw_convert<string>(_auto_crop_threshold));
auto target = config_write_file();
{
_dkdm_recipients.clear ();
for (auto i: f.node_children("DKDMRecipient")) {
- _dkdm_recipients.push_back (shared_ptr<DKDMRecipient>(new DKDMRecipient(i)));
+ _dkdm_recipients.push_back (make_shared<DKDMRecipient>(i));
}
}
}
}
+
+void
+save_all_config_as_zip (boost::filesystem::path zip_file)
+{
+ Zipper zipper (zip_file);
+
+ auto config = Config::instance();
+ zipper.add ("config.xml", dcp::file_to_string(config->config_read_file()));
+ if (boost::filesystem::exists(config->cinemas_file())) {
+ zipper.add ("cinemas.xml", dcp::file_to_string(config->cinemas_file()));
+ }
+ if (boost::filesystem::exists(config->dkdm_recipients_file())) {
+ zipper.add ("dkdm_recipients.xml", dcp::file_to_string(config->dkdm_recipients_file()));
+ }
+
+ zipper.close ();
+}
+