X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;ds=inline;f=src%2Ftools%2Fdcpomatic_disk.cc;h=b23f09d85ac9223f27e390987888c4ac7ea8b9fa;hb=36ce958a516567d8481163692c028a88c6ce0df7;hp=1d8fac83a1c78834af27c94243bf93f69726183f;hpb=6b0a17aa9e87e914666e696b251555b934cfb811;p=dcpomatic.git diff --git a/src/tools/dcpomatic_disk.cc b/src/tools/dcpomatic_disk.cc index 1d8fac83a..b23f09d85 100644 --- a/src/tools/dcpomatic_disk.cc +++ b/src/tools/dcpomatic_disk.cc @@ -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 #include #ifdef DCPOMATIC_WINDOWS @@ -41,6 +42,7 @@ #endif #ifdef DCPOMATIC_OSX #include +#include #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);