swaroop: only allow playback if configured lock file is present.
[dcpomatic.git] / src / tools / dcpomatic_player.cc
index ff30ee68b5349472c9c2abadbe3fb3f53ca697b4..473cc6d8bd7f17e696c5e89d30afd2e070863041 100644 (file)
@@ -48,6 +48,8 @@
 #include "lib/dcpomatic_socket.h"
 #include "lib/scoped_temporary.h"
 #include "lib/monitor_checker.h"
+#include "lib/lock_file_checker.h"
+#include "lib/ffmpeg_content.h"
 #include <dcp/dcp.h>
 #include <dcp/raw_convert.h>
 #include <dcp/exceptions.h>
@@ -205,6 +207,8 @@ public:
 #ifdef DCPOMATIC_VARIANT_SWAROOP
                MonitorChecker::instance()->StateChanged.connect(boost::bind(&DOMFrame::monitor_checker_state_changed, this));
                MonitorChecker::instance()->run ();
+               LockFileChecker::instance()->StateChanged.connect(boost::bind(&DOMFrame::lock_checker_state_changed, this));
+               LockFileChecker::instance()->run ();
 #endif
                setup_screen ();
 
@@ -247,8 +251,16 @@ public:
        void monitor_checker_state_changed ()
        {
                if (!MonitorChecker::instance()->ok()) {
+                       _viewer->stop ();
                        error_dialog (this, _("The required display devices are not connected correctly."));
+               }
+       }
+
+       void lock_checker_state_changed ()
+       {
+               if (!LockFileChecker::instance()->ok()) {
                        _viewer->stop ();
+                       error_dialog (this, _("The lock file is not present."));
                }
        }
 #endif
@@ -272,6 +284,10 @@ public:
                        error_dialog (this, _("The required display devices are not connected correctly."));
                        return false;
                }
+               if (!LockFileChecker::instance()->ok()) {
+                       error_dialog (this, _("The lock file is not present."));
+                       return false;
+               }
 #endif
                if (!_film || !Config::instance()->respect_kdm_validity_periods()) {
                        return true;
@@ -299,26 +315,42 @@ public:
                        return;
                }
 
-               shared_ptr<DCPContent> dcp = boost::dynamic_pointer_cast<DCPContent>(_film->content().front());
-               DCPOMATIC_ASSERT (dcp);
-               DCPExaminer ex (dcp);
-               shared_ptr<dcp::CPL> playing_cpl;
-               BOOST_FOREACH (shared_ptr<dcp::CPL> i, ex.cpls()) {
-                       if (!dcp->cpl() || i->id() == *dcp->cpl()) {
-                               playing_cpl = i;
+               FILE* f = fopen_boost(*log, "a");
+
+               /* XXX: this only logs the first piece of content; probably should be each piece? */
+
+               shared_ptr<DCPContent> dcp = dynamic_pointer_cast<DCPContent>(_film->content().front());
+               if (dcp) {
+                       DCPExaminer ex (dcp);
+                       shared_ptr<dcp::CPL> playing_cpl;
+                       BOOST_FOREACH (shared_ptr<dcp::CPL> i, ex.cpls()) {
+                               if (!dcp->cpl() || i->id() == *dcp->cpl()) {
+                                       playing_cpl = i;
+                               }
                        }
+                       DCPOMATIC_ASSERT (playing_cpl);
+
+                       fprintf (
+                               f,
+                               "%s playback-started %s %s %s\n",
+                               dcp::LocalTime().as_string().c_str(),
+                               time.timecode(_film->video_frame_rate()).c_str(),
+                               dcp->directories().front().string().c_str(),
+                               playing_cpl->annotation_text().c_str()
+                               );
+               }
+
+               shared_ptr<FFmpegContent> ffmpeg = dynamic_pointer_cast<FFmpegContent>(_film->content().front());
+               if (ffmpeg) {
+                       fprintf (
+                               f,
+                               "%s playback-started %s %s\n",
+                               dcp::LocalTime().as_string().c_str(),
+                               time.timecode(_film->video_frame_rate()).c_str(),
+                               ffmpeg->path(0).string().c_str()
+                               );
                }
-               DCPOMATIC_ASSERT (playing_cpl)
 
-               FILE* f = fopen_boost(*log, "a");
-               fprintf (
-                       f,
-                       "%s playback-started %s %s %s\n",
-                       dcp::LocalTime().as_string().c_str(),
-                       time.timecode(_film->video_frame_rate()).c_str(),
-                       dcp->directories().front().string().c_str(),
-                       playing_cpl->annotation_text().c_str()
-                       );
                fclose (f);
        }
 
@@ -452,7 +484,7 @@ public:
                                kdm = get_kdm_from_url (dcp);
 #endif
                                if (!kdm) {
-                                       get_kdm_from_directory (dcp);
+                                       kdm = get_kdm_from_directory (dcp);
                                }
 
                                if (kdm) {