Rename _last_video* to _next_video* as it seems to make more sense that way.
[dcpomatic.git] / src / lib / config.cc
index fdab2bb16bd3afa5f5b0088bc3d58cdf3c1c5bdb..f8639692fe0b97013c4beb4c0e8b90fbf46da064 100644 (file)
 
 */
 
+
+#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() */
@@ -179,6 +184,7 @@ Config::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);
@@ -487,7 +493,7 @@ try
                _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));
                }
@@ -579,6 +585,7 @@ try
        }
 
        _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");
@@ -1010,6 +1017,7 @@ Config::write_config () const
                /* [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();
 
@@ -1269,7 +1277,7 @@ Config::read_dkdm_recipients (cxml::Document const & f)
 {
        _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));
        }
 }
 
@@ -1470,3 +1478,21 @@ Config::add_custom_language (dcp::LanguageTag tag)
        }
 }
 
+
+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 ();
+}
+