wip: hacks
[dcpomatic.git] / src / lib / config.cc
index d9a39077e560048012f8b62ff3c761e29605be5b..81daff5b6bed8e2eee19ee743ec56391ab0f7489 100644 (file)
@@ -69,7 +69,7 @@ using dcp::raw_convert;
 
 Config* Config::_instance = 0;
 int const Config::_current_version = 3;
-boost::signals2::signal<void ()> Config::FailedToLoad;
+boost::signals2::signal<void (Config::LoadFailure)> Config::FailedToLoad;
 boost::signals2::signal<void (string)> Config::Warning;
 boost::signals2::signal<bool (Config::BadReason)> Config::Bad;
 
@@ -207,6 +207,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();
 }
 
@@ -604,21 +607,23 @@ try
        }
        _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");
 
        _export.read(f.optional_node_child("Export"));
 }
 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();
 }
 
 
@@ -626,9 +631,15 @@ void
 Config::read_cinemas()
 {
        if (boost::filesystem::exists (_cinemas_file)) {
-               cxml::Document f ("Cinemas");
-               f.read_file (_cinemas_file);
-               read_cinemas (f);
+               try {
+                       cxml::Document f("Cinemas");
+                       f.read_file(_cinemas_file);
+                       read_cinemas(f);
+               } catch (...) {
+                       backup();
+                       FailedToLoad(LoadFailure::CINEMAS);
+                       write_cinemas();
+               }
        }
 }
 
@@ -637,9 +648,15 @@ void
 Config::read_dkdm_recipients()
 {
        if (boost::filesystem::exists (_dkdm_recipients_file)) {
-               cxml::Document f ("DKDMRecipients");
-               f.read_file (_dkdm_recipients_file);
-               read_dkdm_recipients (f);
+               try {
+                       cxml::Document f("DKDMRecipients");
+                       f.read_file(_dkdm_recipients_file);
+                       read_dkdm_recipients(f);
+               } catch (...) {
+                       backup();
+                       FailedToLoad(LoadFailure::DKDM_RECIPIENTS);
+                       write_dkdm_recipients();
+               }
        }
 }
 
@@ -722,7 +739,7 @@ Config::write_config () const
                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 ());
@@ -1059,6 +1076,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<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));
+       }
 
        _export.write(root->add_child("Export"));
 
@@ -1223,7 +1246,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 ()
 {