summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-08-17 15:36:00 +0100
committerCarl Hetherington <cth@carlh.net>2016-08-17 15:36:00 +0100
commit96858c88f15ad9deb260da295b2af3847b9b8e15 (patch)
tree2f851a4092ba512da03f0dcc2965fc36875fbe6b /src/lib
parentec275952569ea47a414991e2ce2b019d8189b3f1 (diff)
Check for conflicing refer-to-DCP settings.
This adds a general fix_conflicting_settings() to Film which should fix the problem and give a message to tell the user why the "fix" is being carried out. Should help with #929.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/film.cc36
-rw-r--r--src/lib/film.h2
2 files changed, 38 insertions, 0 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index 7d183d032..edb911217 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -1451,3 +1451,39 @@ Film::content_summary (DCPTimePeriod period) const
{
return _playlist->content_summary (period);
}
+
+list<string>
+Film::fix_conflicting_settings ()
+{
+ list<string> notes;
+
+ list<boost::filesystem::path> was_referencing;
+ BOOST_FOREACH (shared_ptr<Content> i, content()) {
+ shared_ptr<DCPContent> d = dynamic_pointer_cast<DCPContent> (i);
+ if (d) {
+ list<string> reasons;
+ bool was = false;
+ if (!d->can_reference_video(reasons) && d->reference_video()) {
+ d->set_reference_video (false);
+ was = true;
+ }
+ if (!d->can_reference_audio(reasons) && d->reference_audio()) {
+ d->set_reference_audio (false);
+ was = true;
+ }
+ if (!d->can_reference_subtitle(reasons) && d->reference_subtitle()) {
+ d->set_reference_subtitle (false);
+ was = true;
+ }
+ if (was) {
+ was_referencing.push_back (d->path(0).parent_path().filename());
+ }
+ }
+ }
+
+ BOOST_FOREACH (boost::filesystem::path d, was_referencing) {
+ notes.push_back (String::compose (_("The DCP %1 was being referred to by this film. This not now possible because the reel sizes in the film no longer agree with those in the imported DCP.\n\nSetting the 'Reel type' to 'split by video content' will probably help.\n\nAfter doing that you would need to re-tick the appropriate 'refer to existing DCP' checkboxes."), d.string()));
+ }
+
+ return notes;
+}
diff --git a/src/lib/film.h b/src/lib/film.h
index d63065f8d..82d1f78c0 100644
--- a/src/lib/film.h
+++ b/src/lib/film.h
@@ -164,6 +164,8 @@ public:
*/
std::string content_summary (DCPTimePeriod period) const;
+ std::list<std::string> fix_conflicting_settings ();
+
/** Identifiers for the parts of our state;
used for signalling changes.
*/