Tidy up handling of content-modified checks when using the dcpomatic_cli.
[dcpomatic.git] / src / tools / dcpomatic.cc
index 73e215c045d8406e7b8e077f154df5e4a8f6705c..572a5be40adf0b20e74fa5c56502ae77f5275225 100644 (file)
@@ -40,6 +40,7 @@
 #include "wx/content_panel.h"
 #include "wx/report_problem_dialog.h"
 #include "wx/video_waveform_dialog.h"
+#include "wx/system_information_dialog.h"
 #include "wx/save_template_dialog.h"
 #include "wx/templates_dialog.h"
 #include "wx/nag_dialog.h"
@@ -234,6 +235,7 @@ enum {
        ID_tools_manage_templates,
        ID_tools_check_for_updates,
        ID_tools_send_translations,
+       ID_tools_system_information,
        ID_tools_restore_default_preferences,
        ID_help_report_a_problem,
        /* IDs for shortcuts (with no associated menu item) */
@@ -251,6 +253,7 @@ public:
        explicit DOMFrame (wxString const & title)
                : wxFrame (NULL, -1, title)
                , _video_waveform_dialog (0)
+               , _system_information_dialog (0)
                , _hints_dialog (0)
                , _servers_list_dialog (0)
                , _config_dialog (0)
@@ -324,6 +327,7 @@ public:
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_manage_templates, this),  ID_tools_manage_templates);
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::tools_check_for_updates, this), ID_tools_check_for_updates);
                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::help_about, this),              wxID_ABOUT);
                Bind (wxEVT_MENU, boost::bind (&DOMFrame::help_report_a_problem, this),   ID_help_report_a_problem);
@@ -753,7 +757,7 @@ private:
                           a long time, and crashes/power failures are moderately likely.
                        */
                        _film->write_metadata ();
-                       _film->make_dcp ();
+                       _film->make_dcp (true);
                } 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) {
@@ -909,7 +913,11 @@ private:
                        shared_ptr<TranscodeJob> job (new TranscodeJob (_film));
                        job->set_encoder (
                                shared_ptr<FFmpegEncoder> (
-                                       new FFmpegEncoder (_film, job, d->path(), d->format(), d->mixdown_to_stereo(), d->split_reels(), d->x264_crf())
+                                       new FFmpegEncoder (_film, job, d->path(), d->format(), d->mixdown_to_stereo(), d->split_reels(), d->x264_crf()
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+                                                          , optional<dcp::Key>(), optional<string>()
+#endif
+                                               )
                                        )
                                );
                        JobManager::instance()->add (job);
@@ -987,6 +995,15 @@ private:
                _video_waveform_dialog->Show ();
        }
 
+       void tools_system_information ()
+       {
+               if (!_system_information_dialog) {
+                       _system_information_dialog = new SystemInformationDialog (this, _film_viewer);
+               }
+
+               _system_information_dialog->Show ();
+       }
+
        void tools_hints ()
        {
                if (!_hints_dialog) {
@@ -1275,6 +1292,7 @@ private:
                add_item (tools, _("Manage templates..."), ID_tools_manage_templates, 0);
                add_item (tools, _("Check for updates"), ID_tools_check_for_updates, 0);
                add_item (tools, _("Send translations..."), ID_tools_send_translations, 0);
+               add_item (tools, _("System information..."), ID_tools_system_information, 0);
                tools->AppendSeparator ();
                add_item (tools, _("Restore default preferences"), ID_tools_restore_default_preferences, ALWAYS);
 
@@ -1422,6 +1440,7 @@ private:
        boost::shared_ptr<FilmViewer> _film_viewer;
        StandardControls* _controls;
        VideoWaveformDialog* _video_waveform_dialog;
+       SystemInformationDialog* _system_information_dialog;
        HintsDialog* _hints_dialog;
        ServersListDialog* _servers_list_dialog;
        wxPreferencesEditor* _config_dialog;
@@ -1506,6 +1525,10 @@ private:
                        */
                        Config::drop ();
 
+                       /* We only look out for bad configuration from here on, as before
+                          dcpomatic_setup() we haven't got OpenSSL ready so there will be
+                          incorrect certificate chain validity errors.
+                       */
                        Config::Bad.connect (boost::bind(&App::config_bad, this, _1));
 
                        _frame = new DOMFrame (_("DCP-o-matic"));
@@ -1520,6 +1543,13 @@ private:
                                Config::instance()->set_nagged(Config::NAG_INITIAL_SETUP, true);
                        }
 
+                       if (running_32_on_64 ()) {
+                               NagDialog::maybe_nag (
+                                       _frame, Config::NAG_32_ON_64,
+                                       _("You are running the 32-bit version of DCP-o-matic on a 64-bit version of Windows.  This will limit the memory available to DCP-o-matic and may cause errors.  You are strongly advised to install the 64-bit version of DCP-o-matic."),
+                                       false);
+                       }
+
                        _frame->Show ();
 
                        if (!_film_to_load.empty() && boost::filesystem::is_directory (_film_to_load)) {
@@ -1543,7 +1573,7 @@ private:
                        }
 
                        signal_manager = new wxSignalManager (this);
-                       Bind (wxEVT_IDLE, boost::bind (&App::idle, this));
+                       Bind (wxEVT_IDLE, boost::bind (&App::idle, this, _1));
 
                        Bind (wxEVT_TIMER, boost::bind (&App::check, this));
                        _timer.reset (new wxTimer (this));
@@ -1633,9 +1663,10 @@ private:
                report_exception ();
        }
 
-       void idle ()
+       void idle (wxIdleEvent& ev)
        {
                signal_manager->ui_idle ();
+               ev.Skip ();
        }
 
        void check ()