summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-02-11 23:56:33 +0000
committerCarl Hetherington <cth@carlh.net>2013-02-11 23:56:33 +0000
commit106c8fb2d471cb0b01da3b6b09e743304a869f4b (patch)
treee7a4eec376005777b298017af911a9502f0822f4 /src/lib
parente650b7b674d2739b932b3429415e5d785e5f0246 (diff)
Check for a DCP before offering to copy it to a TMS.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/film.cc36
-rw-r--r--src/lib/film.h12
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