Make "Add folder..." to accept a directory of WAV files (#942).
authorCarl Hetherington <cth@carlh.net>
Wed, 21 Dec 2016 10:18:56 +0000 (10:18 +0000)
committerCarl Hetherington <cth@carlh.net>
Wed, 21 Dec 2016 10:18:56 +0000 (10:18 +0000)
ChangeLog
src/lib/content_factory.cc
src/lib/util.cc
src/lib/util.h

index d11b85f2ea013306e03d11cc0d7681e8336354f1..6c132817e25cf54c0093e80d0537d85477eaafbb 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2016-12-21  Carl Hetherington  <cth@carlh.net>
+
+       * Make "Add folder..." to accept a directory of WAV files (#942).
+
 2016-12-19  Carl Hetherington  <cth@carlh.net>
 
        * Updated zh_CN translation from Rov (若文).
index 9dd04203790e5d3abf8b03cd4780e9001ab287f6..70a3dc7749b58197d1e5ac8d70b1d5a3383be047 100644 (file)
@@ -118,11 +118,13 @@ content_factory (shared_ptr<const Film> film, boost::filesystem::path path)
                        return content;
                }
 
-               /* Guess if this is a DCP or a set of images: read the first ten filenames and if they
-                  are all valid image files we assume it is a set of images.
+               /* Guess if this is a DCP, a set of images or a set of sound files: read the first ten filenames
+                  and if they are all valid image/sound files we assume it is not a DCP.
                */
 
                bool is_dcp = false;
+               int image_files = 0;
+               int sound_files = 0;
                int read = 0;
                for (boost::filesystem::directory_iterator i(path); i != boost::filesystem::directory_iterator() && read < 10; ++i) {
 
@@ -140,7 +142,7 @@ content_factory (shared_ptr<const Film> film, boost::filesystem::path path)
                                continue;
                        }
 
-                       if (!valid_image_file (i->path())) {
+                       if (!valid_image_file (i->path()) && !valid_sound_file (i->path())) {
                                /* We have a normal file which isn't an image; assume we are looking
                                   at a DCP.
                                */
@@ -148,13 +150,25 @@ content_factory (shared_ptr<const Film> film, boost::filesystem::path path)
                                is_dcp = true;
                        }
 
+                       if (valid_image_file (i->path ())) {
+                               ++image_files;
+                       }
+
+                       if (valid_sound_file (i->path ())) {
+                               ++sound_files;
+                       }
+
                        ++read;
                }
 
                if (is_dcp) {
                        content.push_back (shared_ptr<Content> (new DCPContent (film, path)));
-               } else {
+               } else if (image_files > 0) {
                        content.push_back (shared_ptr<Content> (new ImageContent (film, path)));
+               } else {
+                       for (boost::filesystem::directory_iterator i(path); i != boost::filesystem::directory_iterator(); ++i) {
+                               content.push_back (shared_ptr<FFmpegContent> (new FFmpegContent (film, i->path())));
+                       }
                }
 
        } else {
index 4eba58e0583cd82f7b20c15dd6bed74f3b52b79b..3f0c34a15004a9da88806366bee51967278700d5 100644 (file)
@@ -557,6 +557,18 @@ valid_image_file (boost::filesystem::path f)
                );
 }
 
+bool
+valid_sound_file (boost::filesystem::path f)
+{
+       if (boost::starts_with (f.leaf().string(), "._")) {
+               return false;
+       }
+
+       string ext = f.extension().string();
+       transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
+       return (ext == ".wav" || ext == ".mp3" || ext == ".aif" || ext == ".aiff");
+}
+
 bool
 valid_j2k_file (boost::filesystem::path f)
 {
index e163e1a8f2feebcc4fed9e883967426bff890e95..a93ca53ac50ce66460b9770bfb19524c01c5e586 100644 (file)
@@ -68,6 +68,7 @@ extern void ensure_ui_thread ();
 extern std::string audio_channel_name (int);
 extern std::string short_audio_channel_name (int);
 extern bool valid_image_file (boost::filesystem::path);
+extern bool valid_sound_file (boost::filesystem::path);
 extern bool valid_j2k_file (boost::filesystem::path);
 #ifdef DCPOMATIC_WINDOWS
 extern boost::filesystem::path mo_path ();