Use r+b not ab for fopen_boost so that we get the behaviour we wanted.
[dcpomatic.git] / src / lib / writer.cc
index 863b49959d750495ff8fb72688eb72ebfe72b95d..19030430036d439a3f772efc9af690118027d5ae 100644 (file)
@@ -45,7 +45,7 @@
 #include <dcp/reel_subtitle_asset.h>
 #include <dcp/dcp.h>
 #include <dcp/cpl.h>
-#include <dcp/signer.h>
+#include <dcp/certificate_chain.h>
 #include <dcp/interop_subtitle_asset.h>
 #include <dcp/smpte_subtitle_asset.h>
 #include <boost/foreach.hpp>
@@ -143,7 +143,7 @@ Writer::Writer (shared_ptr<const Film> film, weak_ptr<Job> j)
        }
 
        /* Check that the signer is OK if we need one */
-       if (_film->is_signed() && !Config::instance()->signer()->valid ()) {
+       if (_film->is_signed() && !Config::instance()->signer_chain()->valid ()) {
                throw InvalidSignerError ();
        }
 
@@ -294,7 +294,7 @@ Writer::have_sequenced_image_at_queue_head ()
 void
 Writer::write_frame_info (int frame, Eyes eyes, dcp::FrameInfo info) const
 {
-       FILE* file = fopen_boost (_film->info_file(), "ab");
+       FILE* file = fopen_boost (_film->info_file(), "r+b");
        if (!file) {
                throw OpenFileError (_film->info_file ());
        }
@@ -321,9 +321,9 @@ try
                        }
 
                        /* Nothing to do: wait until something happens which may indicate that we do */
-                       LOG_TIMING (N_("writer sleeps with a queue of %1"), _queue.size());
+                       LOG_TIMING (N_("writer-sleep queue=%1"), _queue.size());
                        _empty_condition.wait (lock);
-                       LOG_TIMING (N_("writer wakes with a queue of %1"), _queue.size());
+                       LOG_TIMING (N_("writer-wake queue=%1"), _queue.size());
                }
 
                if (_finish && _queue.empty()) {
@@ -593,13 +593,21 @@ Writer::finish ()
        }
 
        dcp::XMLMetadata meta;
+       meta.creator = Config::instance()->dcp_creator ();
+       if (meta.creator.empty ()) {
+               meta.creator = String::compose ("DCP-o-matic %1 %2", dcpomatic_version, dcpomatic_git_commit);
+       }
        meta.issuer = Config::instance()->dcp_issuer ();
-       meta.creator = String::compose ("DCP-o-matic %1 %2", dcpomatic_version, dcpomatic_git_commit);
+       if (meta.issuer.empty ()) {
+               meta.issuer = String::compose ("DCP-o-matic %1 %2", dcpomatic_version, dcpomatic_git_commit);
+       }
        meta.set_issue_date_now ();
 
-       shared_ptr<const dcp::Signer> signer;
+       cpl->set_metadata (meta);
+
+       shared_ptr<const dcp::CertificateChain> signer;
        if (_film->is_signed ()) {
-               signer = Config::instance()->signer ();
+               signer = Config::instance()->signer_chain ();
                /* We did check earlier, but check again here to be on the safe side */
                if (!signer->valid ()) {
                        throw InvalidSignerError ();
@@ -776,7 +784,6 @@ Writer::frame_info_position (int frame, Eyes eyes) const
                DCPOMATIC_ASSERT (false);
        }
 
-
        DCPOMATIC_ASSERT (false);
 }