summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-12-21 10:18:56 +0000
committerCarl Hetherington <cth@carlh.net>2016-12-21 10:18:56 +0000
commit85bca8926d7d6e7f01f0e1f0dd08471053874bd2 (patch)
treeedaf73ef8bb29aa3af2debad9729e55235d7026d /src/lib
parentb2a2de40b0fbba16da9f863512ed227d4a9237ad (diff)
Make "Add folder..." to accept a directory of WAV files (#942).
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/content_factory.cc22
-rw-r--r--src/lib/util.cc12
-rw-r--r--src/lib/util.h1
3 files changed, 31 insertions, 4 deletions
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<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 {
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
@@ -558,6 +558,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)
{
string ext = f.extension().string();
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 ();