From 85bca8926d7d6e7f01f0e1f0dd08471053874bd2 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 21 Dec 2016 10:18:56 +0000 Subject: [PATCH] Make "Add folder..." to accept a directory of WAV files (#942). --- ChangeLog | 4 ++++ src/lib/content_factory.cc | 22 ++++++++++++++++++---- src/lib/util.cc | 12 ++++++++++++ src/lib/util.h | 1 + 4 files changed, 35 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index d11b85f2e..6c132817e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2016-12-21 Carl Hetherington + + * Make "Add folder..." to accept a directory of WAV files (#942). + 2016-12-19 Carl Hetherington * Updated zh_CN translation from Rov (若文). diff --git a/src/lib/content_factory.cc b/src/lib/content_factory.cc index 9dd042037..70a3dc774 100644 --- a/src/lib/content_factory.cc +++ b/src/lib/content_factory.cc @@ -118,11 +118,13 @@ content_factory (shared_ptr 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 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 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 (new DCPContent (film, path))); - } else { + } else if (image_files > 0) { content.push_back (shared_ptr (new ImageContent (film, path))); + } else { + for (boost::filesystem::directory_iterator i(path); i != boost::filesystem::directory_iterator(); ++i) { + content.push_back (shared_ptr (new FFmpegContent (film, i->path()))); + } } } else { diff --git a/src/lib/util.cc b/src/lib/util.cc index 4eba58e05..3f0c34a15 100644 --- a/src/lib/util.cc +++ b/src/lib/util.cc @@ -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) { diff --git a/src/lib/util.h b/src/lib/util.h index e163e1a8f..a93ca53ac 100644 --- a/src/lib/util.h +++ b/src/lib/util.h @@ -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 (); -- 2.30.2