diff options
| author | Carl Hetherington <cth@carlh.net> | 2013-02-11 23:56:33 +0000 |
|---|---|---|
| committer | Carl Hetherington <cth@carlh.net> | 2013-02-11 23:56:33 +0000 |
| commit | 106c8fb2d471cb0b01da3b6b09e743304a869f4b (patch) | |
| tree | e7a4eec376005777b298017af911a9502f0822f4 /src/lib | |
| parent | e650b7b674d2739b932b3429415e5d785e5f0246 (diff) | |
Check for a DCP before offering to copy it to a TMS.
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/film.cc | 36 | ||||
| -rw-r--r-- | src/lib/film.h | 12 |
2 files changed, 37 insertions, 11 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc index ff4d3b8f5..36ebe7199 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -63,7 +63,6 @@ using std::ofstream; using std::setfill; using std::min; using std::make_pair; -using std::cout; using boost::shared_ptr; using boost::lexical_cast; using boost::to_upper_copy; @@ -104,6 +103,8 @@ Film::Film (string d, bool must_exist) , _frames_per_second (0) , _dirty (false) { + set_dci_date_today (); + /* Make state.directory a complete path without ..s (where possible) (Code swiped from Adam Bowen on stackoverflow) */ @@ -139,7 +140,6 @@ Film::Film (string d, bool must_exist) } _log = new FileLog (file ("log")); - set_dci_date_today (); } Film::Film (Film const & o) @@ -171,6 +171,7 @@ Film::Film (Film const & o) , _colour_lut (o._colour_lut) , _j2k_bandwidth (o._j2k_bandwidth) , _dci_metadata (o._dci_metadata) + , _dci_date (o._dci_date) , _size (o._size) , _length (o._length) , _dcp_intrinsic_duration (o._dcp_intrinsic_duration) @@ -409,6 +410,7 @@ Film::write_metadata () const f << "colour_lut " << _colour_lut << "\n"; f << "j2k_bandwidth " << _j2k_bandwidth << "\n"; _dci_metadata.write (f); + f << "dci_date " << boost::gregorian::to_iso_string (_dci_date) << "\n"; f << "width " << _size.width << "\n"; f << "height " << _size.height << "\n"; f << "length " << _length.get_value_or(0) << "\n"; @@ -535,6 +537,8 @@ Film::read_metadata () _colour_lut = atoi (v.c_str ()); } else if (k == "j2k_bandwidth") { _j2k_bandwidth = atoi (v.c_str ()); + } else if (k == "dci_date") { + _dci_date = boost::gregorian::from_undelimited_string (v); } _dci_metadata.read (k, v); @@ -696,7 +700,7 @@ Film::still_duration_in_frames () const /** @return a DCI-compliant name for a DCP of this film */ string -Film::dci_name () const +Film::dci_name (bool if_created_now) const { stringstream d; @@ -764,7 +768,11 @@ Film::dci_name () const d << dm.studio << "_"; } - d << boost::gregorian::to_iso_string (_dci_date) << "_"; + if (if_created_now) { + d << boost::gregorian::to_iso_string (boost::gregorian::day_clock::local_day ()) << "_"; + } else { + d << boost::gregorian::to_iso_string (_dci_date) << "_"; + } if (!dm.facility.empty ()) { d << dm.facility << "_"; @@ -779,10 +787,10 @@ Film::dci_name () const /** @return name to give the DCP */ string -Film::dcp_name () const +Film::dcp_name (bool if_created_now) const { if (use_dci_name()) { - return dci_name (); + return dci_name (if_created_now); } return name(); @@ -1355,4 +1363,20 @@ Film::j2c_path (int f, bool t) const return file (p.string ()); } +/** Make an educated guess as to whether we have a complete DCP + * or not. + * @return true if we do. + */ +bool +Film::have_dcp () const +{ + try { + libdcp::DCP dcp (dir (dcp_name())); + dcp.read (); + } catch (...) { + return false; + } + + return true; +} diff --git a/src/lib/film.h b/src/lib/film.h index 5b65a099d..cc77460db 100644 --- a/src/lib/film.h +++ b/src/lib/film.h @@ -92,8 +92,8 @@ public: void read_metadata (); libdcp::Size cropped_size (libdcp::Size) const; - std::string dci_name () const; - std::string dcp_name () const; + std::string dci_name (bool if_created_now) const; + std::string dcp_name (bool if_created_now = false) const; boost::optional<int> dcp_intrinsic_duration () const { return _dcp_intrinsic_duration; @@ -108,6 +108,8 @@ public: void set_dci_date_today (); + bool have_dcp () const; + /** Identifiers for the parts of our state; used for signalling changes. */ @@ -373,9 +375,6 @@ private: /** Any running ExamineContentJob, or 0 */ boost::shared_ptr<ExamineContentJob> _examine_content_job; - /** The date that we should use in a DCI name */ - boost::gregorian::date _dci_date; - void signal_changed (Property); void examine_content_finished (); std::string video_state_identifier () const; @@ -452,6 +451,8 @@ private: /** DCI naming stuff */ DCIMetadata _dci_metadata; + /** The date that we should use in a DCI name */ + boost::gregorian::date _dci_date; /* Data which are cached to speed things up */ @@ -478,6 +479,7 @@ private: mutable boost::mutex _state_mutex; friend class paths_test; + friend class film_metadata_test; }; #endif |
