Improve formatting of FAILED_READ errors.
[dcpomatic.git] / src / lib / content.cc
index 9969213ac62eb260aa217a727233f3c42afdecde..6324050ec69a22f056cc3bedb4c1c7ae2ff002f0 100644 (file)
@@ -93,7 +93,7 @@ Content::Content (cxml::ConstNodePtr node)
                        _last_write_times.push_back (*mod);
                } else {
                        boost::system::error_code ec;
-                       auto last_write = boost::filesystem::last_write_time(i->content(), ec);
+                       auto last_write = dcp::filesystem::last_write_time(i->content(), ec);
                        _last_write_times.push_back (ec ? 0 : last_write);
                }
        }
@@ -187,7 +187,7 @@ Content::examine (shared_ptr<const Film>, shared_ptr<Job> job)
        _last_write_times.clear ();
        for (auto i: _paths) {
                boost::system::error_code ec;
-               auto last_write = boost::filesystem::last_write_time(i, ec);
+               auto last_write = dcp::filesystem::last_write_time(i, ec);
                _last_write_times.push_back (ec ? 0 : last_write);
        }
 }
@@ -242,7 +242,7 @@ Content::set_position (shared_ptr<const Film> film, DCPTime p, bool force_emit)
 
 
 void
-Content::set_trim_start (ContentTime t)
+Content::set_trim_start(shared_ptr<const Film> film, ContentTime t)
 {
        DCPOMATIC_ASSERT (t.get() >= 0);
 
@@ -254,14 +254,18 @@ Content::set_trim_start (ContentTime t)
 
        /* See note in ::set_position */
        if (!video && audio) {
-               audio->modify_trim_start (t);
+               audio->modify_trim_start(film, t);
        }
 
        ContentChangeSignaller cc (this, ContentProperty::TRIM_START);
 
        {
                boost::mutex::scoped_lock lm (_mutex);
-               _trim_start = t;
+               if (_trim_start == t) {
+                       cc.abort();
+               } else {
+                       _trim_start = t;
+               }
        }
 }
 
@@ -335,7 +339,7 @@ bool
 Content::paths_valid () const
 {
        for (auto i: _paths) {
-               if (!boost::filesystem::exists (i)) {
+               if (!dcp::filesystem::exists(i)) {
                        return false;
                }
        }
@@ -355,7 +359,7 @@ Content::set_paths (vector<boost::filesystem::path> paths)
                _last_write_times.clear ();
                for (auto i: _paths) {
                        boost::system::error_code ec;
-                       auto last_write = boost::filesystem::last_write_time(i, ec);
+                       auto last_write = dcp::filesystem::last_write_time(i, ec);
                        _last_write_times.push_back (ec ? 0 : last_write);
                }
        }
@@ -402,7 +406,7 @@ Content::reel_split_points (shared_ptr<const Film>) const
 
 
 void
-Content::set_video_frame_rate (double r)
+Content::set_video_frame_rate(shared_ptr<const Film> film, double r)
 {
        ContentChangeSignaller cc (this, ContentProperty::VIDEO_FRAME_RATE);
 
@@ -416,7 +420,7 @@ Content::set_video_frame_rate (double r)
 
        /* Make sure trim is still on a frame boundary */
        if (video) {
-               set_trim_start (trim_start());
+               set_trim_start(film, trim_start());
        }
 }
 
@@ -548,7 +552,7 @@ Content::add_path (boost::filesystem::path p)
        boost::mutex::scoped_lock lm (_mutex);
        _paths.push_back (p);
        boost::system::error_code ec;
-       auto last_write = boost::filesystem::last_write_time(p, ec);
+       auto last_write = dcp::filesystem::last_write_time(p, ec);
        _last_write_times.push_back (ec ? 0 : last_write);
 }
 
@@ -558,7 +562,7 @@ Content::changed () const
 {
        bool write_time_changed = false;
        for (auto i = 0U; i < _paths.size(); ++i) {
-               if (boost::filesystem::last_write_time(_paths[i]) != last_write_time(i)) {
+               if (dcp::filesystem::last_write_time(_paths[i]) != last_write_time(i)) {
                        write_time_changed = true;
                        break;
                }