Merge branch 'v2.15.x' of ssh://git.carlh.net/home/carl/git/dcpomatic into v2.15.x
[dcpomatic.git] / src / lib / dcp_content.cc
index ac9f828996d286c20b15f849ff378dd5e5921035..dc1a463c5bcf907938c45b648417958e3e39ad4b 100644 (file)
@@ -55,6 +55,7 @@ using boost::optional;
 using boost::function;
 using boost::dynamic_pointer_cast;
 using dcp::raw_convert;
+using namespace dcpomatic;
 
 int const DCPContentProperty::NEEDS_ASSETS       = 600;
 int const DCPContentProperty::NEEDS_KDM          = 601;
@@ -150,16 +151,7 @@ DCPContent::DCPContent (cxml::ConstNodePtr node, int version)
 void
 DCPContent::read_directory (boost::filesystem::path p)
 {
-       LOG_GENERAL ("DCPContent::read_directory reads %1", p.string());
-       for (boost::filesystem::directory_iterator i(p); i != boost::filesystem::directory_iterator(); ++i) {
-               if (boost::filesystem::is_regular_file (i->path())) {
-                       LOG_GENERAL ("Inside there's regular file %1", i->path().string());
-                       add_path (i->path());
-               } else if (boost::filesystem::is_directory (i->path ())) {
-                       LOG_GENERAL ("Inside there's directory %1", i->path().string());
-                       read_directory (i->path());
-               }
-       }
+       read_sub_directory (p);
 
        bool have_assetmap = false;
        BOOST_FOREACH (boost::filesystem::path i, paths()) {
@@ -173,6 +165,21 @@ DCPContent::read_directory (boost::filesystem::path p)
        }
 }
 
+void
+DCPContent::read_sub_directory (boost::filesystem::path p)
+{
+       LOG_GENERAL ("DCPContent::read_sub_directory reads %1", p.string());
+       for (boost::filesystem::directory_iterator i(p); i != boost::filesystem::directory_iterator(); ++i) {
+               if (boost::filesystem::is_regular_file (i->path())) {
+                       LOG_GENERAL ("Inside there's regular file %1", i->path().string());
+                       add_path (i->path());
+               } else if (boost::filesystem::is_directory (i->path ())) {
+                       LOG_GENERAL ("Inside there's directory %1", i->path().string());
+                       read_sub_directory (i->path());
+               }
+       }
+}
+
 void
 DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
 {
@@ -185,7 +192,6 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
        ChangeSignaller<Content> cc_assets (this, DCPContentProperty::NEEDS_ASSETS);
        ChangeSignaller<Content> cc_kdm (this, DCPContentProperty::NEEDS_KDM);
        ChangeSignaller<Content> cc_name (this, DCPContentProperty::NAME);
-       ChangeSignaller<Content> cc_streams (this, AudioContentProperty::STREAMS);
 
        if (job) {
                job->set_progress_unknown ();
@@ -204,7 +210,6 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
        }
 
        if (examiner->has_audio()) {
-               ChangeSignaller<Content> cc (this, AudioContentProperty::STREAMS);
                {
                        boost::mutex::scoped_lock lm (_mutex);
                        audio.reset (new AudioContent (this));
@@ -221,7 +226,7 @@ DCPContent::examine (shared_ptr<const Film> film, shared_ptr<Job> job)
                boost::mutex::scoped_lock lm (_mutex);
                _name = examiner->name ();
                for (int i = 0; i < TEXT_COUNT; ++i) {
-                       if (examiner->has_text(static_cast<TextType>(i))) {
+                       for (int j = 0; j < examiner->text_count(static_cast<TextType>(i)); ++j) {
                                text.push_back (shared_ptr<TextContent>(new TextContent(this, static_cast<TextType>(i), static_cast<TextType>(i))));
                        }
                }
@@ -415,7 +420,7 @@ DCPContent::directories () const
 void
 DCPContent::add_properties (shared_ptr<const Film> film, list<UserProperty>& p) const
 {
-       Content::add_properties (p);
+       Content::add_properties (film, p);
        if (video) {
                video->add_properties (p);
        }
@@ -543,10 +548,10 @@ DCPContent::can_reference (shared_ptr<const Film> film, function<bool (shared_pt
        list<DCPTimePeriod> reel_list;
        try {
                reel_list = reels (film);
-       } catch (dcp::DCPReadError) {
+       } catch (dcp::DCPReadError &) {
                /* We couldn't read the DCP; it's probably missing */
                return false;
-       } catch (dcp::KDMDecryptionError) {
+       } catch (dcp::KDMDecryptionError &) {
                /* We have an incorrect KDM */
                return false;
        }
@@ -621,13 +626,13 @@ DCPContent::can_reference_audio (shared_ptr<const Film> film, string& why_not) c
        shared_ptr<DCPDecoder> decoder;
        try {
                decoder.reset (new DCPDecoder (film, shared_from_this(), false));
-       } catch (dcp::DCPReadError) {
+       } catch (dcp::DCPReadError &) {
                /* We couldn't read the DCP, so it's probably missing */
                return false;
-       } catch (DCPError) {
+       } catch (DCPError &) {
                /* We couldn't read the DCP, so it's probably missing */
                return false;
-       } catch (dcp::KDMDecryptionError) {
+       } catch (dcp::KDMDecryptionError &) {
                /* We have an incorrect KDM */
                return false;
        }
@@ -656,11 +661,10 @@ DCPContent::can_reference_text (shared_ptr<const Film> film, TextType type, stri
        shared_ptr<DCPDecoder> decoder;
        try {
                decoder.reset (new DCPDecoder (film, shared_from_this(), false));
-       } catch (dcp::DCPReadError) {
-
+       } catch (dcp::DCPReadError &) {
                /* We couldn't read the DCP, so it's probably missing */
                return false;
-       } catch (dcp::KDMDecryptionError) {
+       } catch (dcp::KDMDecryptionError &) {
                /* We have an incorrect KDM */
                return false;
        }