X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fcontent.cc;h=ed0e9af6db855da97f095d134679dc8c421fd192;hb=ff639b3cf30afcc097bfd21d39c8d15f466cadd6;hp=49ab944be54c79c3d478469ad09762a9555768fe;hpb=33e13c4053138930f4b2f59349e441c76111059d;p=dcpomatic.git diff --git a/src/lib/content.cc b/src/lib/content.cc index 49ab944be..ed0e9af6d 100644 --- a/src/lib/content.cc +++ b/src/lib/content.cc @@ -24,17 +24,17 @@ */ -#include "content.h" +#include "audio_content.h" #include "change_signaller.h" -#include "util.h" +#include "compose.hpp" +#include "content.h" #include "content_factory.h" -#include "video_content.h" -#include "audio_content.h" -#include "text_content.h" #include "exceptions.h" #include "film.h" #include "job.h" -#include "compose.hpp" +#include "text_content.h" +#include "util.h" +#include "video_content.h" #include #include #include @@ -48,8 +48,6 @@ using std::cout; using std::list; using std::make_shared; -using std::max; -using std::pair; using std::shared_ptr; using std::string; using std::vector; @@ -171,15 +169,11 @@ Content::as_xml (xmlpp::Node* node, bool with_paths) const string Content::calculate_digest () const { - boost::mutex::scoped_lock lm (_mutex); - auto p = _paths; - lm.unlock (); - /* Some content files are very big, so we use a poor man's digest here: a digest of the first and last 1e6 bytes with the size of the first file tacked on the end as a string. */ - return digest_head_tail(p, 1000000) + raw_convert(boost::filesystem::file_size(p.front())); + return simple_digest (paths()); } @@ -255,6 +249,8 @@ Content::set_position (shared_ptr film, DCPTime p, bool force_emit) void Content::set_trim_start (ContentTime t) { + DCPOMATIC_ASSERT (t.get() >= 0); + /* video and audio content can modify its start trim */ if (video) { @@ -278,6 +274,8 @@ Content::set_trim_start (ContentTime t) void Content::set_trim_end (ContentTime t) { + DCPOMATIC_ASSERT (t.get() >= 0); + ContentChangeSignaller cc (this, ContentProperty::TRIM_END); { @@ -461,7 +459,24 @@ Content::active_video_frame_rate (shared_ptr film) const void Content::add_properties (shared_ptr, list& p) const { - p.push_back (UserProperty (UserProperty::GENERAL, _("Filename"), path(0).string ())); + auto paths_to_show = std::min(number_of_paths(), size_t{8}); + string paths = ""; + for (auto i = size_t{0}; i < paths_to_show; ++i) { + paths += path(i).string(); + if (i < (paths_to_show - 1)) { + paths += "\n"; + } + } + if (paths_to_show < number_of_paths()) { + paths += String::compose("... and %1 more", number_of_paths() - paths_to_show); + } + p.push_back ( + UserProperty( + UserProperty::GENERAL, + paths_to_show > 1 ? _("Filenames") : _("Filename"), + paths + ) + ); if (_video_frame_rate) { if (video) { @@ -541,3 +556,18 @@ Content::add_path (boost::filesystem::path p) auto last_write = boost::filesystem::last_write_time(p, ec); _last_write_times.push_back (ec ? 0 : last_write); } + + +bool +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)) { + write_time_changed = true; + break; + } + } + + return (write_time_changed || calculate_digest() != digest()); +}