Fix error when trying to make DCP-o-matic DKDMs due to attempts to make
[dcpomatic.git] / src / tools / dcpomatic.cc
index 820289825057dc64ec7ee78fa75cdf66a8b3e8e8..a8930f81fed9566f00f10b208ab4e16fb0c62ec2 100644 (file)
@@ -83,6 +83,7 @@
 #include "lib/check_content_change_job.h"
 #include "lib/text_content.h"
 #include "lib/dcpomatic_log.h"
+#include "lib/subtitle_encoder.h"
 #include <dcp/exceptions.h>
 #include <dcp/raw_convert.h>
 #include <wx/generic/aboutdlgg.h>
@@ -509,7 +510,7 @@ private:
                        } catch (boost::filesystem::filesystem_error& e) {
 #ifdef DCPOMATIC_WINDOWS
                                string bad_chars = "<>:\"/|?*";
-                               string const filename = d->path().string();
+                               string const filename = d->path().filename().string();
                                string found_bad_chars;
                                for (size_t i = 0; i < bad_chars.length(); ++i) {
                                        if (filename.find(bad_chars[i]) != string::npos && found_bad_chars.find(bad_chars[i]) == string::npos) {
@@ -517,9 +518,11 @@ private:
                                        }
                                }
                                wxString message = _("Could not create folder to store film.");
+                               message += "  ";
                                if (!found_bad_chars.empty()) {
-                                       message += "  ";
                                        message += wxString::Format (_("Try removing the %s characters from your folder name."), std_to_wx(found_bad_chars).data());
+                               } else {
+                                       message += _("Please check that you do not have Windows controlled folder access enabled for DCP-o-matic.");
                                }
                                error_dialog (this, message, std_to_wx(e.what()));
 #else
@@ -757,7 +760,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) {
@@ -810,7 +813,7 @@ private:
                                start (wx_to_std (wxStandardPaths::Get().GetExecutablePath()));
                        }
 
-                       dcpomatic_sleep (1);
+                       dcpomatic_sleep_seconds (1);
                }
 
                return true;
@@ -872,14 +875,19 @@ private:
                                )
                        );
 
+
+               dcp::LocalTime from (Config::instance()->decryption_chain()->leaf().not_before());
+               from.add_months (1);
+               dcp::LocalTime to (Config::instance()->decryption_chain()->leaf().not_after());
+               to.add_months (-1);
+
                optional<dcp::EncryptedKDM> kdm;
                try {
                        kdm = _film->make_kdm (
                                Config::instance()->decryption_chain()->leaf(),
                                vector<string>(),
                                d->cpl (),
-                               dcp::LocalTime ("2012-01-01T01:00:00+00:00"),
-                               dcp::LocalTime ("2112-01-01T01:00:00+00:00"),
+                               from, to,
                                dcp::MODIFIED_TRANSITIONAL_1,
                                true,
                                0
@@ -908,14 +916,36 @@ private:
 
        void jobs_export ()
        {
-               ExportDialog* d = new ExportDialog (this);
+               ExportDialog* d = new ExportDialog (this, _film->isdcf_name(true));
                if (d->ShowModal() == wxID_OK) {
+                       if (boost::filesystem::exists(d->path())) {
+                               bool ok = confirm_dialog(
+                                               this,
+                                               wxString::Format (_("File %s already exists.  Do you want to overwrite it?"), std_to_wx(d->path().string()).data())
+                                               );
+
+                               if (!ok) {
+                                       d->Destroy ();
+                                       return;
+                               }
+                       }
+
                        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())
-                                       )
-                               );
+                       if (d->format() == EXPORT_FORMAT_SUBTITLES_DCP) {
+                               job->set_encoder (
+                                       shared_ptr<SubtitleEncoder>(new SubtitleEncoder(_film, job, d->path(), d->split_reels()))
+                                       );
+                       } else {
+                               job->set_encoder (
+                                       shared_ptr<FFmpegEncoder> (
+                                               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);
                }
                d->Destroy ();
@@ -1539,8 +1569,18 @@ 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 ();
 
+                       signal_manager = new wxSignalManager (this);
+                       Bind (wxEVT_IDLE, boost::bind (&App::idle, this, _1));
+
                        if (!_film_to_load.empty() && boost::filesystem::is_directory (_film_to_load)) {
                                try {
                                        _frame->load_film (_film_to_load);
@@ -1561,9 +1601,6 @@ private:
                                }
                        }
 
-                       signal_manager = new wxSignalManager (this);
-                       Bind (wxEVT_IDLE, boost::bind (&App::idle, this, _1));
-
                        Bind (wxEVT_TIMER, boost::bind (&App::check, this));
                        _timer.reset (new wxTimer (this));
                        _timer->Start (1000);