Fix some comment typos.
[dcpomatic.git] / src / tools / dcpomatic.cc
index 0b7f632e1ef409613c11263ba8cc78e89c06b7e4..4d494bb632291d1d80b0d30e87f5dd350c7e00c9 100644 (file)
@@ -256,6 +256,7 @@ enum {
        ID_tools_send_translations,
        ID_tools_system_information,
        ID_tools_restore_default_preferences,
+       ID_tools_export_preferences,
        ID_help_report_a_problem,
        /* IDs for shortcuts (with no associated menu item) */
        ID_add_file,
@@ -338,6 +339,7 @@ public:
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_send_translations, this), ID_tools_send_translations);
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_system_information, this),ID_tools_system_information);
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_restore_default_preferences, this), ID_tools_restore_default_preferences);
+               Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_export_preferences, this), ID_tools_export_preferences);
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::help_about, this),              wxID_ABOUT);
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::help_report_a_problem, this),   ID_help_report_a_problem);
 
@@ -747,6 +749,21 @@ private:
                }
        }
 
+       void tools_export_preferences ()
+       {
+               auto dialog = new wxFileDialog (
+                       this, _("Specify ZIP file"), wxEmptyString, wxT("dcpomatic_config.zip"), wxT("ZIP files (*.zip)|*.zip"),
+                       wxFD_SAVE | wxFD_OVERWRITE_PROMPT
+                       );
+
+               int const r = dialog->ShowModal ();
+               dialog->Destroy ();
+
+               if (r == wxID_OK) {
+                       save_all_config_as_zip (wx_to_std(dialog->GetPath()));
+               }
+       }
+
        void jobs_make_dcp ()
        {
                double required;
@@ -799,7 +816,7 @@ private:
                           a long time, and crashes/power failures are moderately likely.
                        */
                        _film->write_metadata ();
-                       _film->make_dcp (true);
+                       _film->make_dcp (TranscodeJob::ChangedBehaviour::EXAMINE_THEN_STOP);
                } catch (BadSettingError& e) {
                        error_dialog (this, wxString::Format (_("Bad setting for %s."), std_to_wx(e.setting()).data()), std_to_wx(e.what()));
                } catch (std::exception& e) {
@@ -993,7 +1010,7 @@ private:
                                }
                        }
 
-                       auto job = make_shared<TranscodeJob>(_film);
+                       auto job = make_shared<TranscodeJob>(_film, TranscodeJob::ChangedBehaviour::EXAMINE_THEN_STOP);
                        job->set_encoder (
                                make_shared<FFmpegEncoder> (
                                        _film, job, d->path(), d->format(), d->mixdown_to_stereo(), d->split_reels(), d->split_streams(), d->x264_crf())
@@ -1008,7 +1025,7 @@ private:
        {
                auto d = new ExportSubtitlesDialog (this, _film->reels().size(), _film->interop());
                if (d->ShowModal() == wxID_OK) {
-                       auto job = make_shared<TranscodeJob>(_film);
+                       auto job = make_shared<TranscodeJob>(_film, TranscodeJob::ChangedBehaviour::EXAMINE_THEN_STOP);
                        job->set_encoder (
                                make_shared<SubtitleEncoder>(_film, job, d->path(), _film->isdcf_name(true), d->split_reels(), d->include_font())
                                );
@@ -1101,8 +1118,17 @@ private:
                                body += i.first + "\n" + i.second + "\n\n";
                        }
                        list<string> to = { "carl@dcpomatic.com" };
-                       Emailer emailer (d->email(), to, "DCP-o-matic translations", body);
-                       emailer.send ("main.carlh.net", 2525, EmailProtocol::STARTTLS);
+                       if (d->email().find("@") == string::npos) {
+                               error_dialog (this, _("You must enter a valid email address when sending translations, "
+                                                     "otherwise the DCP-o-matic maintainers cannot credit you or contact you with questions."));
+                       } else {
+                               Emailer emailer (d->email(), to, "DCP-o-matic translations", body);
+                               try {
+                                       emailer.send ("main.carlh.net", 2525, EmailProtocol::STARTTLS);
+                               } catch (NetworkError& e) {
+                                       error_dialog (this, _("Could not send translations"), std_to_wx(e.what()));
+                               }
+                       }
                }
 
                d->Destroy ();
@@ -1366,6 +1392,8 @@ private:
                add_item (tools, _("System information..."), ID_tools_system_information, 0);
                tools->AppendSeparator ();
                add_item (tools, _("Restore default preferences"), ID_tools_restore_default_preferences, ALWAYS);
+               tools->AppendSeparator ();
+               add_item (tools, _("Export preferences..."), ID_tools_export_preferences, ALWAYS);
 
                wxMenu* help = new wxMenu;
 #ifdef __WXOSX__
@@ -1424,7 +1452,7 @@ private:
 
                int pos = _history_position;
 
-               /* Clear out non-existant history items before we re-build the menu */
+               /* Clear out non-existent history items before we re-build the menu */
                Config::instance()->clean_history ();
                auto history = Config::instance()->history();
 
@@ -1798,7 +1826,7 @@ private:
                switch (reason) {
                case Config::BAD_SIGNER_UTF8_STRINGS:
                {
-                       if (config->nagged(Config::NAG_BAD_SIGNER_CHAIN)) {
+                       if (config->nagged(Config::NAG_BAD_SIGNER_CHAIN_UTF8)) {
                                return false;
                        }
                        auto d = new RecreateChainDialog (
@@ -1807,7 +1835,24 @@ private:
                                  "which will prevent DCPs from being validated correctly on some systems.  Do you want to re-create\n"
                                  "the certificate chain for signing DCPs and KDMs?"),
                                _("Do nothing"),
-                               Config::NAG_BAD_SIGNER_CHAIN
+                               Config::NAG_BAD_SIGNER_CHAIN_UTF8
+                               );
+                       int const r = d->ShowModal ();
+                       d->Destroy ();
+                       return r == wxID_OK;
+               }
+               case Config::BAD_SIGNER_VALIDITY_TOO_LONG:
+               {
+                       if (config->nagged(Config::NAG_BAD_SIGNER_CHAIN_VALIDITY)) {
+                               return false;
+                       }
+                       auto d = new RecreateChainDialog (
+                               _frame, _("Recreate signing certificates"),
+                               _("The certificate chain that DCP-o-matic uses for signing DCPs and KDMs has a validity period\n"
+                                 "that is too long.  This will cause problems playing back DCPs on some systems.\n"
+                                 "Do you want to re-create the certificate chain for signing DCPs and KDMs?"),
+                               _("Do nothing"),
+                               Config::NAG_BAD_SIGNER_CHAIN_VALIDITY
                                );
                        int const r = d->ShowModal ();
                        d->Destroy ();