From e2ebf847ce9d6e74a1b9d768475b8ae552cfba82 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 21 Aug 2018 14:27:00 +0100 Subject: [PATCH] Make Content::_paths private. --- src/lib/content.cc | 23 +++++++++++++++++------ src/lib/content.h | 6 ++++-- src/lib/dcp_content.cc | 2 +- src/lib/image_content.cc | 15 +++++++++------ 4 files changed, 31 insertions(+), 15 deletions(-) diff --git a/src/lib/content.cc b/src/lib/content.cc index ee394d8e5..9e7beee33 100644 --- a/src/lib/content.cc +++ b/src/lib/content.cc @@ -87,7 +87,7 @@ Content::Content (shared_ptr film, boost::filesystem::path p) , _trim_end (0) , _change_signals_frequent (false) { - _paths.push_back (p); + add_path (p); } Content::Content (shared_ptr film, cxml::ConstNodePtr node) @@ -145,8 +145,8 @@ Content::as_xml (xmlpp::Node* node, bool with_paths) const boost::mutex::scoped_lock lm (_mutex); if (with_paths) { - for (vector::const_iterator i = _paths.begin(); i != _paths.end(); ++i) { - node->add_child("Path")->add_child_text (i->string ()); + BOOST_FOREACH (boost::filesystem::path i, _paths) { + node->add_child("Path")->add_child_text (i.string()); } } node->add_child("Digest")->add_child_text (_digest); @@ -299,8 +299,8 @@ Content::identifier () const bool Content::paths_valid () const { - for (vector::const_iterator i = _paths.begin(); i != _paths.end(); ++i) { - if (!boost::filesystem::exists (*i)) { + BOOST_FOREACH (boost::filesystem::path i, _paths) { + if (!boost::filesystem::exists (i)) { return false; } } @@ -312,7 +312,11 @@ void Content::set_paths (vector paths) { ChangeSignaller cc (this, ContentProperty::PATH); - _paths = paths; + + { + boost::mutex::scoped_lock lm (_mutex); + _paths = paths; + } } string @@ -474,3 +478,10 @@ Content::text_of_original_type (TextType type) const return shared_ptr (); } + +void +Content::add_path (boost::filesystem::path p) +{ + boost::mutex::scoped_lock lm (_mutex); + _paths.push_back (p); +} diff --git a/src/lib/content.h b/src/lib/content.h index f09097ccf..f72007f04 100644 --- a/src/lib/content.h +++ b/src/lib/content.h @@ -199,8 +199,7 @@ protected: */ mutable boost::mutex _mutex; - /** Paths of our data files */ - std::vector _paths; + void add_path (boost::filesystem::path p); private: friend struct ffmpeg_pts_offset_test; @@ -211,6 +210,9 @@ private: void signal_change (ChangeType, int); + /** Paths of our data files */ + std::vector _paths; + std::string _digest; DCPTime _position; ContentTime _trim_start; diff --git a/src/lib/dcp_content.cc b/src/lib/dcp_content.cc index 0514ca6f7..2d375cf03 100644 --- a/src/lib/dcp_content.cc +++ b/src/lib/dcp_content.cc @@ -144,7 +144,7 @@ DCPContent::read_directory (boost::filesystem::path p) { for (boost::filesystem::directory_iterator i(p); i != boost::filesystem::directory_iterator(); ++i) { if (boost::filesystem::is_regular_file (i->path())) { - _paths.push_back (i->path()); + add_path (i->path()); } else if (boost::filesystem::is_directory (i->path ())) { read_directory (i->path()); } diff --git a/src/lib/image_content.cc b/src/lib/image_content.cc index 5262064af..53f0aa8c2 100644 --- a/src/lib/image_content.cc +++ b/src/lib/image_content.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2013-2016 Carl Hetherington + Copyright (C) 2013-2018 Carl Hetherington This file is part of DCP-o-matic. @@ -37,6 +37,7 @@ using std::string; using std::cout; using std::list; +using std::vector; using boost::shared_ptr; ImageContent::ImageContent (shared_ptr film, boost::filesystem::path p) @@ -45,7 +46,7 @@ ImageContent::ImageContent (shared_ptr film, boost::filesystem::path video.reset (new VideoContent (this)); if (boost::filesystem::is_regular_file (p) && valid_image_file (p)) { - _paths.push_back (p); + add_path (p); } else { _path_to_scan = p; } @@ -105,10 +106,11 @@ ImageContent::examine (shared_ptr job) { if (_path_to_scan) { job->sub (_("Scanning image files")); + vector paths; int n = 0; for (boost::filesystem::directory_iterator i(*_path_to_scan); i != boost::filesystem::directory_iterator(); ++i) { if (boost::filesystem::is_regular_file (i->path()) && valid_image_file (i->path())) { - _paths.push_back (i->path ()); + add_path (i->path()); } ++n; if ((n % 1000) == 0) { @@ -116,11 +118,12 @@ ImageContent::examine (shared_ptr job) } } - if (_paths.empty()) { + if (paths.empty()) { throw FileError (_("No valid image files were found in the folder."), *_path_to_scan); } - sort (_paths.begin(), _paths.end(), ImageFilenameSorter ()); + sort (paths.begin(), paths.end(), ImageFilenameSorter()); + set_paths (paths); } Content::examine (job); @@ -159,7 +162,7 @@ ImageContent::still () const void ImageContent::set_default_colour_conversion () { - BOOST_FOREACH (boost::filesystem::path i, _paths) { + BOOST_FOREACH (boost::filesystem::path i, paths()) { if (valid_j2k_file (i)) { /* We default to no colour conversion if we have JPEG2000 files */ video->unset_colour_conversion (); -- 2.30.2