summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-12-20 16:18:24 +0000
committerCarl Hetherington <cth@carlh.net>2016-12-20 16:18:24 +0000
commit3476f2f8251d5800abdd968963cac57b0df8a657 (patch)
treedea2e82b66f7da44387023fe0c662253dfcec777 /src/lib
parentf8e6fdee828647bc5a6a1cc7627052a072a37dc6 (diff)
Allow content factory to return multiple content.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/content_factory.cc34
-rw-r--r--src/lib/content_factory.h2
2 files changed, 20 insertions, 16 deletions
diff --git a/src/lib/content_factory.cc b/src/lib/content_factory.cc
index d3905e4e7..9dd042037 100644
--- a/src/lib/content_factory.cc
+++ b/src/lib/content_factory.cc
@@ -100,22 +100,22 @@ content_factory (shared_ptr<const Film> film, cxml::NodePtr node, int version, l
return content;
}
-/** Create a Content object from a file or directory.
+/** Create some Content objects from a file or directory.
* @param film Film that the content will be in.
* @param path File or directory.
- * @return Content object.
+ * @return Content objects.
*/
-shared_ptr<Content>
+list<shared_ptr<Content> >
content_factory (shared_ptr<const Film> film, boost::filesystem::path path)
{
- shared_ptr<Content> content;
+ list<shared_ptr<Content> > content;
if (boost::filesystem::is_directory (path)) {
LOG_GENERAL ("Look in directory %1", path);
if (boost::filesystem::is_empty (path)) {
- return shared_ptr<Content> ();
+ return content;
}
/* Guess if this is a DCP or a set of images: read the first ten filenames and if they
@@ -152,33 +152,37 @@ content_factory (shared_ptr<const Film> film, boost::filesystem::path path)
}
if (is_dcp) {
- content.reset (new DCPContent (film, path));
+ content.push_back (shared_ptr<Content> (new DCPContent (film, path)));
} else {
- content.reset (new ImageContent (film, path));
+ content.push_back (shared_ptr<Content> (new ImageContent (film, path)));
}
} else {
+ shared_ptr<Content> single;
+
string ext = path.extension().string ();
transform (ext.begin(), ext.end(), ext.begin(), ::tolower);
if (valid_image_file (path)) {
- content.reset (new ImageContent (film, path));
+ single.reset (new ImageContent (film, path));
} else if (ext == ".srt" || ext == ".ssa" || ext == ".ass") {
- content.reset (new TextSubtitleContent (film, path));
+ single.reset (new TextSubtitleContent (film, path));
} else if (ext == ".xml") {
- content.reset (new DCPSubtitleContent (film, path));
+ single.reset (new DCPSubtitleContent (film, path));
} else if (ext == ".mxf" && dcp::SMPTESubtitleAsset::valid_mxf (path)) {
- content.reset (new DCPSubtitleContent (film, path));
+ single.reset (new DCPSubtitleContent (film, path));
} else if (ext == ".mxf" && VideoMXFContent::valid_mxf (path)) {
- content.reset (new VideoMXFContent (film, path));
+ single.reset (new VideoMXFContent (film, path));
} else if (ext == ".mxf" && AtmosMXFContent::valid_mxf (path)) {
- content.reset (new AtmosMXFContent (film, path));
+ single.reset (new AtmosMXFContent (film, path));
}
- if (!content) {
- content.reset (new FFmpegContent (film, path));
+ if (!single) {
+ single.reset (new FFmpegContent (film, path));
}
+
+ content.push_back (single);
}
return content;
diff --git a/src/lib/content_factory.h b/src/lib/content_factory.h
index b319febfc..9c090c690 100644
--- a/src/lib/content_factory.h
+++ b/src/lib/content_factory.h
@@ -29,4 +29,4 @@ class Film;
class Content;
extern boost::shared_ptr<Content> content_factory (boost::shared_ptr<const Film>, cxml::NodePtr, int, std::list<std::string> &);
-extern boost::shared_ptr<Content> content_factory (boost::shared_ptr<const Film>, boost::filesystem::path);
+extern std::list<boost::shared_ptr<Content> > content_factory (boost::shared_ptr<const Film>, boost::filesystem::path);