Move Film::make_kdms to the call sites.
[dcpomatic.git] / src / tools / dcpomatic_disk.cc
index 1d8fac83a1c78834af27c94243bf93f69726183f..b23f09d85ac9223f27e390987888c4ac7ea8b9fa 100644 (file)
@@ -34,6 +34,7 @@
 #include "lib/copy_to_drive_job.h"
 #include "lib/job_manager.h"
 #include "lib/disk_writer_messages.h"
+#include "lib/version.h"
 #include <wx/wx.h>
 #include <boost/process.hpp>
 #ifdef DCPOMATIC_WINDOWS
@@ -41,6 +42,7 @@
 #endif
 #ifdef DCPOMATIC_OSX
 #include <ApplicationServices/ApplicationServices.h>
+#include <notify.h>
 #endif
 
 using std::string;
@@ -112,11 +114,12 @@ public:
                 */
                dcpomatic_log.reset(new FileLog(config_path() / "disk.log"));
                dcpomatic_log->set_types (dcpomatic_log->types() | LogEntry::TYPE_DISK);
-               LOG_DISK_NC("dcpomatic_disk started");
+               LOG_DISK("dcpomatic_disk %1 started", dcpomatic_git_commit);
 
                drive_refresh ();
 
-               Bind (wxEVT_SIZE, boost::bind (&DOMFrame::sized, this, _1));
+               Bind (wxEVT_SIZE, boost::bind(&DOMFrame::sized, this, _1));
+               Bind (wxEVT_CLOSE_WINDOW, boost::bind(&DOMFrame::close, this, _1));
 
                JobManager::instance()->ActiveJobsChanged.connect(boost::bind(&DOMFrame::setup_sensitivity, this));
 
@@ -131,7 +134,10 @@ public:
                _writer = new boost::process::child (disk_writer_path());
 #endif
 
-               /* _writer is always running on macOS at the moment */
+#ifdef DCPOMATIC_OSX
+               LOG_DISK_NC("Sending notification to writer daemon");
+               notify_post ("com.dcpomatic.disk.writer.start");
+#endif
        }
 
        ~DOMFrame ()
@@ -146,6 +152,37 @@ private:
                ev.Skip ();
        }
 
+
+       bool should_close ()
+       {
+               if (!JobManager::instance()->work_to_do()) {
+                       return true;
+               }
+
+               wxMessageDialog* d = new wxMessageDialog (
+                       0,
+                       _("There are unfinished jobs; are you sure you want to quit?"),
+                       _("Unfinished jobs"),
+                       wxYES_NO | wxYES_DEFAULT | wxICON_QUESTION
+                       );
+
+               bool const r = d->ShowModal() == wxID_YES;
+               d->Destroy ();
+               return r;
+       }
+
+
+       void close (wxCloseEvent& ev)
+       {
+               if (!should_close()) {
+                       ev.Veto ();
+                       return;
+               }
+
+               ev.Skip ();
+       }
+
+
        void open ()
        {
                wxDirDialog* d = new wxDirDialog (this, _("Choose a DCP folder"), wxT(""), wxDD_DIR_MUST_EXIST);
@@ -176,6 +213,7 @@ private:
                                return;
                        }
 
+                       LOG_DISK("Sending unmount request to disk writer for %1", drive.as_xml());
                        if (!_nanomsg.send(DISK_WRITER_UNMOUNT "\n", 2000)) {
                                throw CommunicationFailedError ();
                        }
@@ -306,6 +344,7 @@ public:
                        if (!warning->confirmed()) {
                                return false;
                        }
+                       warning->Destroy ();
 
                        _frame = new DOMFrame (_("DCP-o-matic Disk Writer"));
                        SetTopWindow (_frame);