Improve error reporting, in particular from dcpomatic_create.
[dcpomatic.git] / src / lib / film.cc
index 5310ef71fcf8d37e0b27c6771f3747d6187178bf..5e7bab0b7d7ee7af846ed387b37f813a6f078dde 100644 (file)
@@ -27,7 +27,7 @@
 #include "util.h"
 #include "job_manager.h"
 #include "transcode_job.h"
-#include "scp_dcp_job.h"
+#include "upload_job.h"
 #include "log.h"
 #include "exceptions.h"
 #include "examine_content_job.h"
@@ -45,7 +45,7 @@
 #include "md5_digester.h"
 #include <libcxml/cxml.h>
 #include <dcp/cpl.h>
-#include <dcp/signer.h>
+#include <dcp/certificate_chain.h>
 #include <dcp/util.h>
 #include <dcp/local_time.h>
 #include <dcp/decrypted_kdm.h>
@@ -87,7 +87,7 @@ using boost::starts_with;
 using boost::optional;
 using boost::is_any_of;
 using dcp::Size;
-using dcp::Signer;
+using dcp::CertificateChain;
 
 #define LOG_GENERAL(...) log()->log (String::compose (__VA_ARGS__), Log::TYPE_GENERAL);
 #define LOG_GENERAL_NC(...) log()->log (__VA_ARGS__, Log::TYPE_GENERAL);
@@ -241,7 +241,15 @@ Film::audio_analysis_path (shared_ptr<const Playlist> playlist) const
 
                digester.add (ac->digest ());
                digester.add (ac->audio_mapping().digest ());
-               digester.add (ac->audio_gain ());
+               if (playlist->content().size() != 1) {
+                       /* Analyses should be considered equal regardless of gain
+                          if they were made from just one piece of content.  This
+                          is because we can fake any gain change in a single-content
+                          analysis at the plotting stage rather than having to
+                          recompute it.
+                       */
+                       digester.add (ac->audio_gain ());
+               }
        }
 
        if (audio_processor ()) {
@@ -294,7 +302,7 @@ Film::make_dcp ()
 void
 Film::send_dcp_to_tms ()
 {
-       shared_ptr<Job> j (new SCPDCPJob (shared_from_this()));
+       shared_ptr<Job> j (new UploadJob (shared_from_this()));
        JobManager::instance()->add (j);
 }
 
@@ -465,7 +473,7 @@ Film::isdcf_name (bool if_created_now) const
 
        /* Split the raw name up into words */
        vector<string> words;
-       split (words, raw_name, is_any_of (" "));
+       split (words, raw_name, is_any_of (" _-"));
 
        string fixed_name;
 
@@ -583,7 +591,9 @@ Film::isdcf_name (bool if_created_now) const
 
        if (!dm.territory.empty ()) {
                d << "_" << dm.territory;
-               if (!dm.rating.empty ()) {
+               if (dm.rating.empty ()) {
+                       d << "-NR";
+               } else {
                        d << "-" << dm.rating;
                }
        }
@@ -771,6 +781,11 @@ Film::set_three_d (bool t)
 {
        _three_d = t;
        signal_changed (THREE_D);
+
+       if (_three_d && _isdcf_metadata.two_d_version_of_three_d) {
+               _isdcf_metadata.two_d_version_of_three_d = false;
+               signal_changed (ISDCF_METADATA);
+       }
 }
 
 void
@@ -911,7 +926,7 @@ Film::examine_content (shared_ptr<Content> c)
 void
 Film::examine_and_add_content (shared_ptr<Content> c)
 {
-       if (dynamic_pointer_cast<FFmpegContent> (c)) {
+       if (dynamic_pointer_cast<FFmpegContent> (c) && !_directory.empty ()) {
                run_ffprobe (c->path(0), file ("ffprobe.log"), _log);
        }
 
@@ -988,6 +1003,8 @@ Film::active_frame_rate_change (DCPTime t) const
 void
 Film::playlist_content_changed (boost::weak_ptr<Content> c, int p, bool frequent)
 {
+       _dirty = true;
+
        if (p == VideoContentProperty::VIDEO_FRAME_RATE) {
                set_video_frame_rate (_playlist->best_dcp_frame_rate ());
        } else if (p == AudioContentProperty::AUDIO_STREAMS) {
@@ -1051,7 +1068,7 @@ Film::make_kdm (
        ) const
 {
        shared_ptr<const dcp::CPL> cpl (new dcp::CPL (cpl_file));
-       shared_ptr<const dcp::Signer> signer = Config::instance()->signer();
+       shared_ptr<const dcp::CertificateChain> signer = Config::instance()->signer_chain ();
        if (!signer->valid ()) {
                throw InvalidSignerError ();
        }